Network Layer
主要功能:
- 路由选择与分组转发
- 异构网络互联(路由器)
- 拥塞控制:开环控制(静态)、闭环控制(动态)
1. IP Packet
1.1 格式
- 总长度: 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:后面无
分片示例:
用「片偏移」字段表示某片在原分组中的相对位置,以 8B 为单位。
除了最后一个,每个分片的数据长度一定 是 8B 的整数倍。
1.3 IP 地址
1.3.1 IP 分类
D类:是多播地址。该类IP地址的最前面为“1110”,所以地址的网络号取值于224~239之间。一般用于多路广播用户。
E类:是保留地址。该类IP地址的最前面为“1111”,所以地址的网络号取值于240~255之间。
特殊 IP 地址:
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 地址
1.3.2 Network Address Translation
路由器对目的地址是私有地址的数据报一律不转发。
软件层面根据 NAT 转换表进行目的地址、端口号的替换。
1.3.3 子网划分
分类的 IP 地址的弱点:利用率太低。
组织内部,对两级 IP 地址的主机号部分继续进行划分:子网号、主机号
(主机号至少两位二进制。)
使用子网时的分组传送:
- 提取目的 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 报文格式
4.2 ICMP 差错报告
4.2.1 种类
- 终点不可达(无法交付时)
- ~~源点抑制(拥塞丢数据时)~~(已废弃)
- 时间超过:
- TTL=0
- 终点在规定时间内不能收到一个数据报的全部分片
- 参数问题(首部中有的字段的值不正确)
- 改变路由(重定向,告诉发送方应该走更好的路由)
注意不发送 ICMP 差错报告报文的情况:
- 对 ICMP 差错报告报文不再发送
- 对第一个分片的所有后续分片都不发送
- 对组播的
- 对特殊地址的(e.g.
127.0.0.1
,0.0.0.0
)
4.2.2 数据
4.3 ICMP 询问
- Echo request and reply (回应请求和回复):测试可达性。
- 时间戳请求和回复:请对方回答当前的日期和时间,用于时钟同步或测量时间?
4.4 应用
ping:利用 Echo request and reply ,测试连通性。
traceroute:利用 ICMP 时间超过型的差错报告报文,跟踪传输路径。
5. 路由选择协议
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 报文
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 的区域标识符。
目的:缩小LSDB规模,减少网络流量。
5.1.2.3 报文
要交换的信息量大,应使报文长度尽量短,所以直接用 IP 。
5.2 Exterior Gateway Protocol 外部网关协议
Border Gateway Protocol
- 基于 TCP
- 路径向量协议
- 每个 AS 一个 BGP 发言人
- 与相邻 AS 的 BGP 发言人交换信息
- 交换:网络可达性的信息;i.e. 到某网络要经过的一系列 AS
- 发生变化时,更新有变化的部分
报文格式(基于 TCP ):
由于网络环境复杂,需要保证可靠传输,所以用 TCP 。
报文类型:
- OPEN 报文:建立关系,认证发送方。
- UPDATE 报文:通告新路径或撤销原路径。
- KEEPALIVE 报文:周期性证实邻站连通性,或作为 OPEN 的确认。
- NOTIFICATION 报文:报告先前报文的差错,或关闭连接。
最后选择的是较好的路径。
6. Multicast 组播
目的:减少重复,提高效率;避免主干网的拥塞。
组播分发树;到达离用户端尽可能近的节点时才开始复制、分发。
组播路由器:运行组播协议。
组播地址:D 类地址(并非全部);
特点:
- 没有可靠交付,应用于 UDP 。
- 不产生 ICMP 差错报文。
- Internet 范围内组播 + 硬件组播(组播 MAC 地址)。
6.1 Internet Group Management Protocol 网际组管理协议
IGMP 工作的两个阶段:
Round 1:
- 某主机要加入组播组,向组播组的组播地址发 IGMP 报文,声明自己要加入。
- 本地组播路由器收到,利用 IGMP 把这组成员关系发给 Internet 上的其它组播路由器。
Round 2:
- 本地组播路由器周期性探测 LAN 上的主机,以知道它们是否还是组播组的成员。
- 只有有一个主机响应,组播路由器就认为此组活跃;几次探寻都没响应,就认为没有,就不再把这组成员关系发给其它的组播路由器。
6.2 组播路由选择协议
找出以源主机为根节点的组播转发树。
- 不同多播组对应于不同的多播转发树🌲;
- 同一多播组,对不同源点也会有不同的多播转发树
算法:
- 基于链路状态的路由选择
- 基于距离向量的路由选择
- 协议无关的组播;稀疏(分散)/密集(在 LAN 内,离得近)
7. Mobile IP
以固定的 IP 地址,实现跨越不同网段的漫游功能。
8. IPv6
8.1 数据报格式
基本首部长度 40B 固定,路由器通常不处理拓展首部,提高首部处理效率。
- 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. 设备:路由器
互联不同网络层协议的网段。
路由表是根据路由选择算法得出的:
转发表由路由表得来。(除了软件,也可以由硬件实现。)