Network Layer 记录
网络层主要是两个部分:一个是路由器;另一个是各种协议。
路由器
路由器两个过程:建表+查表(Routing Table + Forwarding Table)
路由器第一个过程:建表
路由器建表:Routing Table,有两种方法:Distance Vector Protocol 和 Link State Protocol
Distance Vector Protocol: 每个节点和邻居进行交换
- 流程:test04.flv
每隔一段时间进行交换(这个时间值是人为定的)
-
评价
-
好消息传的快,坏消息传的慢,具体优缺点自己查吧
- 好消息指的是如果网络更新了,可以很快让其他节点更新为新的路径
-
坏消息指的是如果网络断掉了,其他节点可能会比较慢才会知道到不了某个节点
-
问题:test07.mp4
-
解决措施
- 设置上限,一般设为16
- split horizon,(A,B)邻居,如果
B->C更新,下一跳是从A走的,那么就不把这个消息告诉A。 - split horizon with poison reverse,之前是不告诉A,现在改成告诉A,不过值设置为无限大,就是告诉A,不要从我这里走,我B和C没有路可走
Link State Protocol: 每个节点向网络发包
每个节点发送 LSP 封包,因此也会收到其他所有节点的 LSP 封包,从而可以构建整个网络图。
两个方法的比较
Distance Vector 是把自己的路由表告诉邻居,LinkState 恰好相反,把自己邻居告诉所有人
路由器第二个过程:查表
路由器查表:Forwarding Table
具体收发
通过两张表去理解:
1. 表一例子:IP(Z) -- Router(A) -> 来的 IP 下一跳在哪;IP(Z) 指任何的 IP 设备
2. 表二例子:IP(A) -- MAC(A) -> 传给下一跳还要知道 MAC 地址;IP(A) 指和这个路由器相连的那些主机
一个很好的例子:test01.mp4,特别注意目的MAC:如果在同一网络,那么就知道目的MAC,但是不在同一网络,就不知道目的MAC,因此只能传给router的MAC。与此同时,IP的源头和目的一直保持不变
查表算法
建表有了整个网络拓扑图,查表本质是最短路径。然后如何找最短路径就是不同协议的事情了。
OSPF 使用 Dijkstra's Algortihm 寻找最短路径
如何提高速度
查表是真的慢(表很大),解决方法:有专门的硬件来实现,好的硬件比优化算法之类的提升更明显(非常有力大砖飞的工程魅力)
其他特性
- 会过滤掉 broadcast 和 multicast,因此这些分包就只能在自己的那些网络(以太网)上传递,不会通过路由器传递其他的网络上
- ACL: 就是利用路由器,把那些黑名单上的 IP 记录下来,路由器就会不会传这些包
- 配置容易,但是配置好很难,要考虑许多因素
- 和交换机的比较:test03.mp4
IP 协议
IP 头部
具体自行查阅资料,这里面太细节了。
封包切割
一个封包大小有上限,所以需要切割:
- Identification 相同就是同一个大封包
- Fragment Offset 可以看出顺序
- Flag 可以判断是否 结束
有视频讲了切割的例子:test02.mp4
TTL
Time to live: 防止封包循环就一直传一直传
Flag
- DF 有可能设置不能被切割,这个时候路由器就会尽量找一个不被切割的线路,如果没有,那就丢掉
- MF 如果是1表示后面还有小封包,一直到最后一个小封包为0,然后就可以组合了
IP 地址
SomeThing
- 组播地址:
[224.0,240.0) - 直接广播地址:主机都为1,例如192.168.24.59/30(主机号一共两位,均为1)
- 网络本身:主机都为0,例如192.46.10.0
- 环路自检地址:127.0.0.1
- 受限广播地址:255.255.255.255
- A,B,C类地址主机号位数分别是24,16,8
IPv6
- 地址为128bit
- 没有提供校验和字段
- 首部长度不可变
- 不允许分片(太大则丢弃)
子网问题
IP过来 → 和每一项MASK进行AND → 如果某一项和表里的IP相等:OK,传到NextHop(原则:最长前缀匹配原则)
为什么每台电脑都要设置子网掩码?
用于区分下一跳发给谁。要发给某个IP → 子网掩码AND → 判断:
- 若与自己同一网段,直接发送,即目的IP就是那个IP,和网关没啥事
- 若不是,那么发给网关(默认路由器)处理,即目的IP就是网关IP
CIDR: 更加灵活的网络划分
以前的子网是强制按照 A、B、C 进行划分的,所以就会有很多浪费。后来 CIDR 协议就出来了,也即是现在的这种 192.168.0.0/23 这种表现方法。
其他协议
ARP → (IP, MAC)
- 流程:如果表中没有某个IP,发送一个广播请求封包。对方收到后就会回答。其中封包的目的 MAC 为
FF-FF-FF-FF-FF-FF - 注意:这个 IP 的主机/路由器是和我们自己的路由器直接相连的,不然也没有意义,因为传包,肯定只能传给相邻的人,所以只要知道邻居的MAC就行
- 注意:源主机发送数据报时,也有可能会通过ARP寻找路由器的MAC地址
DHCP ---> 分配IP
-
流程:有一个专门的 DHCP Server,一个主机开机,会广播 DHCP 请求,有一个DHCP relay检查到,就会把这个包发给DHCP Server,然后这个服务器就会返回正确的IP。
-
注意点
- 分配的IP是有有效期的,比如这个只能用3天等
- DHCP请求封包,因为是广播嘛,所以目的IP地址是255.255.255.255
ICMP → 扩展 IP 的功能
- ICMP 报文本身出错不再处理
- ICMP 报文是IP协议,封装在IP数据报中
- 可以在封包丢掉时告诉发送者为什么会丢掉,哪些原因封包会丢掉?目的没开机或者断线、某些小封包丢了、TTL 变为0(Time To Live)、CheckSum 出错....
- ICMP-Redirect:路由器检测到有更好路线,会告诉 source host 有更好的路径了
NAT
NAT 是工作在网络层的,所以就放在网络层这个文件夹中。我之前一直放在应用层去了。
- NAT 四种模式,NAT 穿透以及虚拟机的 NAT