Skip to content

Network Layer

主要功能:

  • 路由选择与分组转发
  • 异构网络互联(路由器)
  • 拥塞控制:开环控制(静态)、闭环控制(动态)

Screen Shot 2021-06-02 at 10.40.35 AM

1. IP Packet

1.1 格式

Screen Shot 2021-04-10 at 11.11.38 AM

  • 总长度: 16B 表示,单位 1B ;理论上能达到 65535 ,但是为了满足链路层的 MTU 现实中无法达到。
  • 协议:标识传输层协议
  • 首部检验和:只检验首部
  • 可选: 0 ~ 40B

1.2 分片

需要传输的数据报长度超过了链路的 MTU 。

Identification 字段用于唯一地标识一个报文的所有分片。

Flags 字段(3 bits)标识同一数据报分片:

  • Flags 共有 3 bits ,但只有后两位有意义
  • 中间位 DF (Don't Fragment) :1:禁止分片;0:允许分片
  • 最低位 MF (More Fragment) :1:后面还有分片;0:后面无

分片示例:

Screen Shot 2021-04-21 at 11.11.58 AM

Screen Shot 2021-06-02 at 11.15.19 AM

用「片偏移」字段表示某片在原分组中的相对位置,以 8B 为单位。

除了最后一个,每个分片的数据长度一定 是 8B 的整数倍。

1.3 IP 地址

1.3.1 IP 分类

Screen Shot 2021-06-02 at 11.21.33 AM

D类:是多播地址。该类IP地址的最前面为“1110”,所以地址的网络号取值于224~239之间。一般用于多路广播用户。

E类:是保留地址。该类IP地址的最前面为“1111”,所以地址的网络号取值于240~255之间。

特殊 IP 地址:

Screen Shot 2021-06-02 at 11.24.40 AM

A类IPv4地址 B类IPv4地址 C类IPv4地址 D类IPv4地址 E类IPv4地址
网络标志位 0 10 110 1110 11110
IP地址范围 1.0.0.0~127.255.255.255 128.0.0.0~191.255.255.255 192.0.0.0~223.255.255.255 224.0.0.0~239.255.255.255 240.0.0.0~247.255.255.255
可用IP地址范围 1.0.0.1~127.255.255.254 128.0.0.1~191.255.255.254 192.0.0.1~223.255.255.254
是否可以分配给主机使用
网络数量(个) 126 (\(2^7 - 2\)) 16384 (\(2^{14}\)) 2097152 (\(2^{21}\)) --- ---
每个网络中可容纳主机数(个) 16777214 (\(2^{24}-2\)) 65534 (\(2^{16}-2\)) 254 (\(2^8-2\)) --- ---
适用范围 大量主机的大型网络 中等规模主机数的网络 小型局域网 留给Internet体系结构委员会(IAB)使用【组播地址】 保留,仅作为搜索、Internet的实验和开发用

私有 IP 地址

Screen Shot 2021-06-02 at 11.28.06 AM

Screen Shot 2021-06-02 at 11.42.56 AM

1.3.2 Network Address Translation

路由器对目的地址是私有地址的数据报一律不转发。

软件层面根据 NAT 转换表进行目的地址、端口号的替换。

1.3.3 子网划分

分类的 IP 地址的弱点:利用率太低。

组织内部,对两级 IP 地址的主机号部分继续进行划分:子网号、主机号

Screen Shot 2021-06-02 at 11.52.23 AM

(主机号至少两位二进制。)

使用子网时的分组传送:

  • 提取目的 IP 地址 D
  • 判断是否为直接交付:检查路由器直连的网络,即用各子网的掩码与 D 逐位与;若结果与子网匹配,则直接交付(转发给相应的接口)给目的主机。
  • 间接交付)判断是否有特定主机路由:若有,则传给下一跳路由。
  • 间接交付)检查路由表的每一行,用各子网掩码与 D 逐位与,若与该行的目的网络地址匹配,则传给下一跳路由。
  • 若有默认路由 0.0.0.0 ,不属于上述情况的按默认路由走。否则报错。

1.3.4 无分类编址 CIDR

从定长子网掩码到变长子网掩码,进一步提高利用率。

  • 消除了传统的 A、B、C 类地址,以及子网划分的概念。
  • 记法: IP/前缀 。
  • 融合子网地址、子网掩码;网络前缀都相同的连续 IP 地址组成一个「CIDR」地址块。

主机 IP 没有前缀长度

需要注意的是,子网有「IP/前缀」一说,但是主机可没有。因此,不能出现这样两个子网:

A: 198.16.0.0/20
B: 198.16.0.0/21

因为如果这样的话, A 、 B 两个子网中的主机地址是可能重复的!比如都是 198.16.0.1 ;而主机 IP 并没有前缀长度一说!

1.3.5 构成超网

将多个子网聚合成一个较大的子网(aka. 路由聚合)。

方法:缩短网络前缀。

2. Address Resolve Protocol

从目的 IP 获取目的 MAC :

  • 查询 ARP 缓存;若无,则请求:
  • 判断目的 IP 是否在同一子网内;
    • 在,构建目的 IP 对应的 MAC 地址的 ARP 请求分组;
    • 不在,构建网关对应的 MAC 地址的 ARP 请求分组;
  • 广播 ARP 请求分组 (目的 MAC 全 F ) 。
  • 得到单播的 ARP 请求分组,更新 ARP 缓存。

3. Dynamic Host Configuration Protocol

基于 UDP ,应用层协议,C/S 模式,广播方式交互。

从服务器动态获取:IP、子网掩码、默认网关、DNS 服务器名称与IP地址

流程:

  • 主机广播 DHCP 发现报文:有没有 DHCP 服务器;

  • DHCP 服务器广播 DHCP 提供报文:拟分配一个 IP 和相关配置;

  • 主机广播 DHCP 请求报文(对上面收到的,先到先得):询问是否可以开始使用收到的配置;

(广播的意义在于让没有选用的 DHCP 服务器知道它可以收回未使用的资源。)

  • DHCP 服务器广播 DHCP 确认报文

4. Internet Control Message Protocol

为了更有效地转发 IP packet ,提高交付成功的机会。

  • 差错报告
  • 网络探寻

4.1 ICMP 报文格式

Screen Shot 2021-06-02 at 8.42.12 PM

4.2 ICMP 差错报告

4.2.1 种类

  • 终点不可达(无法交付时)
  • ~~源点抑制(拥塞丢数据时)~~(已废弃)
  • 时间超过:
    • TTL=0
    • 终点在规定时间内不能收到一个数据报的全部分片
  • 参数问题(首部中有的字段的值不正确)
  • 改变路由(重定向,告诉发送方应该走更好的路由)

注意不发送 ICMP 差错报告报文的情况:

  • 对 ICMP 差错报告报文不再发送
  • 对第一个分片的所有后续分片都不发送
  • 对组播的
  • 对特殊地址的(e.g. 127.0.0.10.0.0.0

4.2.2 数据

Screen Shot 2021-06-02 at 8.52.10 PM

4.3 ICMP 询问

  • Echo request and reply (回应请求和回复):测试可达性。
  • 时间戳请求和回复:请对方回答当前的日期和时间,用于时钟同步或测量时间?

4.4 应用

ping:利用 Echo request and reply ,测试连通性。

traceroute:利用 ICMP 时间超过型的差错报告报文,跟踪传输路径。

5. 路由选择协议

Screen Shot 2021-06-03 at 2.42.16 PM

5.1 Interior Gateway Protocol 内部网关协议

5.1.1 Routing Information Protocol

5.1.1.1 基础

分布式的基于距离向量的路由选择协议。 UDP 组播。

IP Header (e.g. 20Bytes)
  UDP Header (8 Bytes)
    RIP Packet

每个路由器维护:从自己到其它每一个目的网络的唯一最佳距离记录。

距离:从源端口到目的端口所经过的路由器的个数。

  • 到直连网络的距离为 1(相当于算上自身)
  • 最多 15 ; 16 表示网络不可达(这限制了 RIP 能够维护的网络大小)

通过交换信息维护路由表:

  • 仅和相邻路由器交换信息
  • 交换的是自身的路由表
  • 每 30s 交换一次
5.1.1.2 更新路由表
  • 修改收到的相邻路由器 X 发来的表项,“下一跳”改为 X ,距离都 +1 。
  • 对每一项:
    • 若路由表中无该项的目的网络,则加入(有胜于无)。
    • 若有:
      • 若下一跳是 X ,无条件更新(以新代旧;距离可能变远)。
      • 若下一跳不是 X ,若距离小于原有表项中的记录,则更新(以优代劣)。
  • 180s 没收到相信路由器 X 的更新路由表,则记 X 为不可达(距离 16 )。
5.1.1.3 RIP 报文

Screen Shot 2021-06-03 at 3.07.45 PM

5.1.1.4 特点

好消息传得快,坏消息传得慢:

当一个网段除了故障时, R1 和 R2 互相循环更新,一直到距离增长到 16 时二者才知道该网不可达。

5.1.2 Open Shortest Path First

OSPF ,开放最短路径优先协议。基于 IP 组播。

使用了 Dijkstra 提出的最短路算法 SPF 。

分布式的链路状态协议。

  • 洪泛:向相邻的发送,相邻的又向相邻的发送。最后自治系统内所有路由器都能收到。
  • 信息:与本路由器相邻的所有路由器的链路状态(和谁相邻,该链路的度量/代价——距离、时延、带宽……)。
  • 只有当链路状态变化时才洪泛。

特点:

  • 每 30min 更新 DB 中的链路状态。
  • 收敛速度快,无坏消息传得慢的问题。
  • 适用于大规模网络。
5.1.2.1 链路状态路由算法
  • HELLO 问候分组:发现邻居节点。
  • 设置到邻居的成本度量 metric 。
  • 构造「Database Description 数据库描述分组」,向邻站发送所有项的摘要。
  • 检查 DD 分组中的摘要:若都有,则忽略;若没有/需要更新,则发送「LSR 链路状态请求分组」,请求需要的信息。
  • 收到 LSR 分组,发送「LSU 链路状态更新分组」进行更新。
  • 更新完毕,邻站返回「LSAck 链路状态确认分组」进行确认。

只要一个路由器的链路状态变化:

  • 泛洪「LSU 分组」。
  • 更新完,返回「LSAck 分组」。
  • 根据数据库,使用 Dijkstra 构造到其他节点见的最短路径。
5.1.2.2 OSPF 区域

将自治系统再划分为区域,每个区域有 32bits 的区域标识符。

Screen Shot 2021-06-03 at 3.30.16 PM

目的:缩小LSDB规模,减少网络流量。

5.1.2.3 报文

Screen Shot 2021-06-03 at 3.33.19 PM

要交换的信息量大,应使报文长度尽量短,所以直接用 IP 。

5.2 Exterior Gateway Protocol 外部网关协议

Border Gateway Protocol

  • 基于 TCP
  • 路径向量协议
  • 每个 AS 一个 BGP 发言人
  • 与相邻 AS 的 BGP 发言人交换信息
  • 交换:网络可达性的信息;i.e. 到某网络要经过的一系列 AS
  • 发生变化时,更新有变化的部分

报文格式(基于 TCP ):

Screen Shot 2021-06-03 at 4.02.00 PM

由于网络环境复杂,需要保证可靠传输,所以用 TCP 。

报文类型:

  • OPEN 报文:建立关系,认证发送方。
  • UPDATE 报文:通告新路径或撤销原路径。
  • KEEPALIVE 报文:周期性证实邻站连通性,或作为 OPEN 的确认。
  • NOTIFICATION 报文:报告先前报文的差错,或关闭连接。

最后选择的是较好的路径。

6. Multicast 组播

目的:减少重复,提高效率;避免主干网的拥塞。

Screen Shot 2021-06-03 at 4.14.55 PM

组播分发树;到达离用户端尽可能近的节点时才开始复制、分发。

组播路由器:运行组播协议。

组播地址:D 类地址(并非全部);

特点:

  • 没有可靠交付,应用于 UDP 。
  • 不产生 ICMP 差错报文。
  • Internet 范围内组播 + 硬件组播(组播 MAC 地址)。

Screen Shot 2021-06-03 at 4.30.44 PM

6.1 Internet Group Management Protocol 网际组管理协议

IGMP 工作的两个阶段:

Round 1:

  • 某主机要加入组播组,向组播组的组播地址发 IGMP 报文,声明自己要加入。
  • 本地组播路由器收到,利用 IGMP 把这组成员关系发给 Internet 上的其它组播路由器。

Round 2:

  • 本地组播路由器周期性探测 LAN 上的主机,以知道它们是否还是组播组的成员。
  • 只有有一个主机响应,组播路由器就认为此组活跃;几次探寻都没响应,就认为没有,就不再把这组成员关系发给其它的组播路由器。

6.2 组播路由选择协议

找出以源主机为根节点的组播转发树

  • 不同多播组对应于不同的多播转发树🌲;
  • 同一多播组,对不同源点也会有不同的多播转发树

算法:

  • 基于链路状态的路由选择
  • 基于距离向量的路由选择
  • 协议无关的组播;稀疏(分散)/密集(在 LAN 内,离得近)

7. Mobile IP

以固定的 IP 地址,实现跨越不同网段的漫游功能。

Screen Shot 2021-06-03 at 5.30.01 PM

8. IPv6

8.1 数据报格式

Screen Shot 2021-06-03 at 1.57.49 PM

基本首部长度 40B 固定,路由器通常不处理拓展首部,提高首部处理效率。

Screen Shot 2021-06-03 at 2.03.15 PM

  • Flow Label :标识一组数据报(一段“流”)。
  • Payload Length :基本首部后面跟着的有效载荷的长度,以 8B 为单位。
  • Next Header :下一首部的类型。e.g. 跟着的是 TCP ;或者跟着的拓展首部的类型。(对应 IPv4 的协议字段。)

与 IPv4 对比的特点:

  • 16B 地址。
  • 移除 checksum ,减少处理时延。
  • 即插即用,自动配置,不需要 DHCP 。
  • 首部长度必须是 8B 的整数倍(IPv4 首部是 4B 的整数倍)。
  • IPv6 只能在主机处分片。如果路由器处发现其大于 MTU ,则返回 ICMPv6 分组过大。
  • (资源预分配)

8.2 地址形式

冒号 16 进制: 共 128 bits , 16B ;每 2 个字节用冒号分开(共8段),每段用 4 位 16 进制表示。

2402:f000:2:c001:ddc0:2401:b162:3190

零压缩:一连串连续的 0 可以被一对冒号取代。(只能省略一次。)

三种基本类型:

  • 单播:一对一通信
  • 多播:一对多通信(做目的地址)
  • 任播:任播地址被分配给两个以上的接口;前往任播地址的分组会被路由到最近(e.g. 路由器跳数最少)的接口。(做目的地址)

8.3 IPv6 到 IPv4 过渡

8.3.1 双栈

8.3.2 隧道

6 in 4 和 4 in 6 隧道

把一种协议的数据报放入另一种的载荷部分发送。

9. 设备:路由器

互联不同网络层协议的网段。

Screen Shot 2021-06-03 at 5.44.18 PM

Screen Shot 2021-06-03 at 5.32.58 PM

Screen Shot 2021-06-03 at 5.33.28 PM

路由表是根据路由选择算法得出的:

Screen Shot 2021-06-03 at 5.43.18 PM

转发表由路由表得来。(除了软件,也可以由硬件实现。)


Last update: June 28, 2021
Authors: Co1lin