Skip to content

Network Layer 记录

复制本地路径 | 在线编辑

网络层主要是两个部分:一个是路由器;另一个是各种协议。

路由器

路由器两个过程:建表+查表(Routing Table + Forwarding Table)

路由器第一个过程:建表

路由器建表:Routing Table,有两种方法:Distance Vector Protocol 和 Link State Protocol

Distance Vector Protocol: 每个节点和邻居进行交换

  1. 流程:test04.flv

每隔一段时间进行交换(这个时间值是人为定的)

  1. 评价

  2. 好消息传的快,坏消息传的慢,具体优缺点自己查吧

  3. 好消息指的是如果网络更新了,可以很快让其他节点更新为新的路径
  4. 坏消息指的是如果网络断掉了,其他节点可能会比较慢才会知道到不了某个节点

  5. 问题:test07.mp4

  6. 解决措施

  7. 设置上限,一般设为16
  8. split horizon,(A,B)邻居,如果B->C更新,下一跳是从A走的,那么就不把这个消息告诉A。
  9. split horizon with poison reverse,之前是不告诉A,现在改成告诉A,不过值设置为无限大,就是告诉A,不要从我这里走,我B和C没有路可走

每个节点发送 LSP 封包,因此也会收到其他所有节点的 LSP 封包,从而可以构建整个网络图。

  1. 流程
    每个人发布和邻居的信息

  2. 封包构成

  3. 谁发布的
  4. Seq视频说明
  5. Age视频说明
  6. 具体情况(即和各个邻居之间的距离)

两个方法的比较

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

  1. https://www.zhihu.com/question/263438014
  2. https://zhidao.baidu.com/question/1960295755438724700.html

CIDR: 更加灵活的网络划分

以前的子网是强制按照 A、B、C 进行划分的,所以就会有很多浪费。后来 CIDR 协议就出来了,也即是现在的这种 192.168.0.0/23 这种表现方法。

其他协议

ARP → (IP, MAC)

  1. 流程:如果表中没有某个IP,发送一个广播请求封包。对方收到后就会回答。其中封包的目的 MAC 为 FF-FF-FF-FF-FF-FF
  2. 注意:这个 IP 的主机/路由器是和我们自己的路由器直接相连的,不然也没有意义,因为传包,肯定只能传给相邻的人,所以只要知道邻居的MAC就行
  3. 注意:源主机发送数据报时,也有可能会通过ARP寻找路由器的MAC地址

DHCP ---> 分配IP

  1. 流程:有一个专门的 DHCP Server,一个主机开机,会广播 DHCP 请求,有一个DHCP relay检查到,就会把这个包发给DHCP Server,然后这个服务器就会返回正确的IP。

  2. 注意点

  3. 分配的IP是有有效期的,比如这个只能用3天等
  4. 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

Comments