- 重温了一下网络,感觉大学时期等于白学(😂)
- 从头来记录一下我们是怎么上网的吧
PPPoE
- 家里办了宽带要上网,没有 ip 就没法上网,所以第一步就是 pppoe
- pppoe是拨号获得IP,并且每次拨号后你的IP都会发生变化
- 一般是运营商提供的光猫进行拨号
- 一般获得ip的方式有如下几种
- 拔号 :以账号和密码为依据,获得IP不固定
- 静态 :设置好ip
- 动态(DHCP):自动获取IP地址,只在局域网内才会用得到
DHCP
- 家里路由器好了之后,电脑网线插入路由器,发现本机上没有任何 IP 数据设定,就会通过 DHCP 协议获取一个ip
- 具体过程
ARP
- 地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址。
- 在网络通信中,主机和主机通信的数据包需要依据OSI模型从上到下进行数据封装,当数据封装完整后,再向外发出。所以在局域网的通信中,不仅需要源目IP地址的封装,也需要源目MAC的封装。
- 当上层协议需要IP对IP通信时,请求主机需要构造数据包.但在此之前,请求主机还需要发送一个ARP请求包,向同一广播域中的所有主机请求被请求主机的MAC地址.随后,请求主机将数据包构造完成后发送给此广播域的二层设备,由它根据MAC地址决定此数据包的去向
- 这个请求主机发送的ARP请求,基本上就是在问:”大家好,我的IP地址是XX.XX.XX.XX,MAC地址是XX.XX.XX.XX.XX.XX,我需要向IP地址为YY.YY.YY.YY的家伙发些东西,但我不知道它的硬件地址,你们谁有这个IP地址的,可否回复给我你的MAC地址?”
- 请求主机发送的ARP数据包将被广播给同一广播域的所有设备.不是这个IP地址的设备将简单地丢弃这个数据包,而拥有这个IP地址的设备将发送一个ARP响应.就像是说:”你好,我就是你所找的那个拥有IP地址为YY.YY.YY.YY的,我的MAC地址为YY.YY.YY.YY.YY.YY.”
- 这样就可以进行通信了
- 具体过程
route表
- 详情
- 访问某个ip时候,就会去查路由表,如果路由表中有匹配该ip的路由,则从对应条目后面标记的网卡出去。
- 如果没有匹配的项,则走网关(Flags 字段为 UG)
- 例如我们自己在家中局域网访问百度,这个ip在局域网内部肯定是没有的,则会将流量发送给关(路由器),路由器一般会有两个网卡,将我们的流量通过另外一张连接到公网的网卡发送出去。
- 路由器收到上述数据,会进行数据转发,这儿就需要提到一个liunx内核的一个参数
net.ipv4.ip_forward
- 出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。
- 这个参数指定了Linux系统当前对路由转发功能的支持情况;其值为0时表示禁止进行IP转发;如果是1,则说明IP转发功能已经打开。
- 路由器收到上述数据,会进行数据转发,这儿就需要提到一个liunx内核的一个参数
NAT
顺道讲一讲
iptables
iptables的原理主要是对数据包的控制,如下图:
- 一个数据包进入网卡时,它首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转发出去。
- 如果数据包就是进入本机的,它就会沿着图向下移动,到达INPUT链。数据包到了INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包会经 过OUTPUT链,然后到达POSTROUTING链输出。
- 如果数据包是要转发出去的,且内核允许转发,数据包就会如图所示向右移动,经过 FORWARD链,然后到达POSTROUTING链输出。
规则、表和链
规则(rules)
- 规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“如果数据包头符合这样的条件,就这样处理这个数据包”。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
链(chains)
- 链(chains)是数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。当一个数据包到达一个链时,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包。
表(tables)
- 表(tables)提供特定的功能,iptables内置了4个表,即raw表、filter表、nat表和mangle表,分别用于实现包过滤,网络地址转换和包重构的功能。
RAW表
- 只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表,在 某个链上,RAW表处理完后,将跳过NAT表和 ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了.
filter表
- 主要用于过滤数据包,该表根据系统管理员预定义的一组规则过滤符合条件的数据包。对于防火墙而言,主要利用在filter表中指定的规则来实现对数据包的过滤。Filter表是默认的表,如果没有指定哪个表,iptables 就默认使用filter表来执行所有命令,filter表包含了INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)在filter表中只能允许对数据包进行接受,丢弃的操作,而无法对数据包进行更改
nat表
- 主要用于网络地址转换NAT,该表可以实现一对一,一对多,多对多等NAT 工作,iptables就是使用该表实现共享上网的,NAT表包含了PREROUTING链(修改即将到来的数据包),POSTROUTING链(修改即将出去的数据包),OUTPUT链(修改路由之前本地生成的数据包)
mangle表
- 主要用于对指定数据包进行更改,在内核版本2.4.18 后的linux版本中该表包含的链为:INPUT链(处理进入的数据包),RORWARD链(处理转发的数据包),OUTPUT链(处理本地生成的数据包)POSTROUTING链(修改即将出去的数据包),PREROUTING链(修改即将到来的数据包)
规则表之间的优先顺序:
1
Raw——mangle——nat——filter
规则链之间的优先顺序(分三种情况):
第一种情况:入站数据流向
- 从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包 的目标主机是防火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其传给INPUT链进行处理(决定是否允许通 过等),通过以后再交给系统上层的应用程序(比如Apache服务器)进行响应。
第二冲情况:转发数据流向
- 来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网 关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地 址等)进行处理。
第三种情况:出站数据流向
- 防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否修改数据包的地址等)进行处理。