第四章 网络层 (太重要啦)
4.1 网络层的几个重要概念
4.1.1 网络层提供的两种服务
- 核心争论:网络层应向运输层提供面向连接还是无连接的服务?可靠交付应由网络还是端系统负责?
- 两种观点:
- 面向连接的可靠交付:通信前建立虚电路(Virtual Circuit),保证通信资源,使用可靠传输协议实现无差错、按序交付。
- 无连接的数据报服务:互联网设计思路,网络层简单灵活,仅提供尽最大努力交付,不保证服务质量(可能出错、丢失、重复、失序),可靠通信由运输层负责。

4.1.2 网络层的两个层面
不同网路中的主机通信,要经过若干个路由器的协同转发分组;因此,在路由器中转发的数据有两类:数据;路由信息(为数据传送服务)

- 数据层面:路由器根据转发表快速转发分组,独立工作,硬件实现。
- 控制层面:路由器协同计算路由表,软件实现,速度较慢。
- 软件定义网络(SDN):分离数据层面与控制层面,提升网络可编程性。路由器只负责转发

4.2 网际协议 IP
4.2.1 虚拟互连网络
- 问题:异构网络互连需解决寻址、分组长度、路由等技术差异。
- 解决方案:使用
路由器(非转发器或网桥)其实是中间设备 实现网络互连,形成统一的虚拟网络(IP网)。 - 意义:屏蔽底层异构细节,主机通信如同在同一网络。
- 
**使用转发器或者网桥的不算网络互连:**比如某公司拥有20层办公楼,每层都有数十台电脑需要联网。转发器,网桥或交换机仅仅把一个网络扩大了,仍然是一个网络
所以,当互联网上的主机进行通信时,虽然不在同一个网络中,但是好像在同一个网络中,看不到任何网络异构的细节,这样的IP网的上层如果再使用TCP协议,就是现在的互联网

4.2.2 IP地址
1. IP地址表示方法
- 32位二进制,点分十进制记法(如
192.168.1.1),由ICANN全局分配。 - 二级结构:
IP地址 = {<网络号>, <主机号>}。
2. 分类的IP地址

多播地址:用于一对多通信的IP地址
- A类:网络号8位(首位0),主机号24位,指派范围1.0.0.0 ~ 126.255.255.255
- 网络号保留0(本机网络),127(本地环回测试)
- B类:网络号16位(前两位10),主机号16位,指派范围128.1.0.0 ~ 191.255.255.255
- 网络号保留128.0,采用CIDR时可以指派
- C类:网络号24位(前三位110),主机号8位,范围192.0.1.0 ~ 223.255.255.255
- 网络号保留192.0.0,采用CIDR可以指派
- 指派主机号的时候,要扣除全0和全1
- 全0:网络192.168.1.0/24中,192.168.1.0代表整个网络
- 全1:向特定网络内的所有主机发送广播数据包
- 特殊地址:
- 网络号0(本网络)、127(环回测试,如127.0.0.1)。
- 私网地址:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。
- 169.254.0.0(自动分配地址)。
- 缺点:地址分配不灵活,浪费严重。
3. 无分类编址CIDR
- 核心:消除ABC类划分,支持可变长子网掩码。
- CIDR记法:
IP地址/前缀长度(如128.14.35.7/20)。 - 不能指派:主机号全0(网络号)全1(广播地址)不能指派
- 地址块:相同前缀的连续IP地址集合,大小由前缀位数决定(如/20块含2^12地址)。
- 地址掩码(子网掩码):计算机读不了斜线前缀长度;所以提出这么一个东西是给计算机看的,32位,连续1表示前缀长度(如/20掩码255.255.240.0)。
- 网络地址计算:
IP地址 AND 地址掩码。
- 网络地址计算:
- 路由聚合:合并多个小地址块为一大块,减少路由表项(如16个C类聚合成一个/20块)。
- 超网构造:CIDR块包含多个C类地址,支持灵活划分。
三个特殊的CIDR地址块

举个例子,看一下CIDR地址聚合的魅力🤩:

会发现,如果安装传统分类,这个ISP有64个c类地址,需要在路由表中维护64项,而经过CIDR的聚合之后,只需要根据几行维护即可
4. IP地址特点
- 每个IP地址都由网络前缀和主机号两部分组成
- 通过路由聚合,减小了转发表所占的存储空间,记忆查找转发表的时间
- IP地址是标志一台主机和一条链路的接口
- 主机如果连接了两个网路,就有两个IP
- 路由器一定有至少两个IP
- 转发器或交换机连接起来的若干个局域网仍然为一个网络
- 无需多言,有相同的网络前缀,只是主机号不同。不同网络号的主机连接的时候一定会用到路由器
- 所有网络前缀在网络层平等对待
4.2.3 IP地址与MAC地址
- IP地址:逻辑地址,网络层使用,放在IP数据报首部。
- MAC地址:物理地址,数据链路层使用,固化在网卡,放在MAC帧首部。主机的MAC地址实际上就是网络适配器(网卡)的MAC地址

- 通信路径示例:H1→R1→R2→H2,IP地址始终不变,MAC地址逐跳改变。

路由器R1由于连接到两个局域网上,因此他有两个MAC地址(两个网卡)
4.2.4 地址解析协议ARP
其实还有一个旧的协议:逆地址解析协议(RARP),但是如今已经被DHCP包含在内了
- 作用:根据IP地址查询对应MAC地址。
- ARP高速缓存:本局域网内的主机和路由器的IP-MAC映射表,动态更新。
- 工作流程:当主机A想向本局域网上的额某个主机B发送IP数据报时并且ARP高速缓存中没有B的IP地址:
- 主机A在本局域网广播ARP请求(含目标IP地址)。
- 目标主机B单播响应ARP分组(含自身MAC地址)。
- A更新ARP缓存,后续通信直接使用。

- 跨网络通信:如果所要找的主机和源主机不在同一个局域网中,就要通过ARP找到一个位于本局域网上的某个路由器的MAC的地址,然后把分组发送给这个路由器,让这个路由器把分组发给下一个网络
- 四种典型情况:
- 同网络主机通信:ARP解析目的主机MAC。
- 跨网络主机通信:ARP解析默认路由器MAC。
- 路由器转发至同网络主机:ARP解析目的主机MAC。
- 路由器转发至跨网络主机:ARP解析下一跳路由器MAC。
4.2.5 IP数据报格式
网络层
描述首部格式的宽度是32位,从下图能看出,IP数据报由首部和数据两部分组成,首部的前一部分是固定的20自己,这是每个IP数据报必须具有的

- 版本:双方使用的版本必须一致。IPV4/IPV6
- 首部长度:单位是4字节,故最小为5,最大为15。如果最后的首部不是32的整数倍,要进行填充
- 总长度:首部和数据之和的length,总长度不能超过MTU——最大传送单元
- 标识:其实就是一个计数器,IP数据报的标识,经过分片之后标识一样
- 标志:占三位,只有后两位有意义。最低位MF(more fragment)(1:后面还有分片,0最后一个分片);DF(don’t fragment):用来探测MTU
- 片偏移:片相对于总长度的偏移;以字节为单位:偏移量/8

数据报的数据部分不超过1400字节是一个工程上的约定,并没有原因;数据报片长度不超过1420
- 生存时间:防止无法交付的数据报一直在互联网中兜圈子;TTL是跳数,不是秒数
- 协议:这个数据报使用何种协议
- 首部检验和:只检验首部,不检验数据。将所有16位的字进行二进制反码求和,有多余的位加到最低位上,结果取反码放在首部检验和中;接收方也这么计算,0则保留
- 两个地址:32位地址IP
- 可变部分:不用
4.3
4.3.1 基于终点的转发
基于分组首部终点目的地址传送和转发
分组每到达一个路由器,路由器就根据分组中的终点查找转发表,然后就得知下一跳应该去哪个路由器
但是直接把直接用目的主机地址查找转发表,庞大且慢。所以方法变通一下,直接查找网络(就是前缀匹配 ),找到网路之后再交付目的主机
- 转发表中最重要的信息是<目的主机的网络号,下一跳的地址>
4.3.2 最长前缀匹配
CIDR中选择能匹配的最长前缀
网络前缀越长,地址越具体,越好找
可以按照前缀的长度排列转发表,以便加快查表(二叉线索)

eg.书上的例子:
一个目标地址为128.1.24.1的分组经过路由器R1转发,R1的转发表如下:
- 128.1.24.0/22 -> 接口0
- 128.1.24.0/24 -> 接口1
现在公司A有一个子网128.1.24.0/24对一个接口1;公司B有三个子网128.1.25.0/24, 128.1.26.0/24, 128.1.27.0/24对应接口0
其实如果直接看这几个子网就知道这个目标地址是属于公司A的,但是转发的时候唯一能参照的是转发表,公司B由于聚合最后两个接口的前缀都是128.1.24.0,这一定是都与目标地址匹配的,在这种情况下,最长前缀匹配就显得尤为重要
- 转发表中有两种特殊的路由
- 主机路由:又称特定主机路由,/32,虽然CIDR里没意义,但是可以用于转发表
- 默认路由:0.0.0.0/0,超人

整个转发的过程:

如果过去使用分类地址的时候,不会出现最长匹配这回事(😭生错了时代
4.3.3 使用二叉线索查找转发表
每走一层,就是看目的 IP 的下一位是 0 还是 1;
有的节点上挂有一条“路由项”(某个前缀的下一跳);
查找时,从根开始按 IP 比特往下走,一路上记住最近一次遇到的“有路由项的节点”;
走到不能再走或走完 32 位,就用你记住的那条作为结果。
所以二叉线索一定符合最长前缀匹配原则
4.4 网际控制报文协议ICMP
网际层和网络层是一回事

从图里面可以看出,ICMP报文放在IP数据报的数据部分,看起来好像是一个高层协议,实际上ICMP就是网络层的协议
ICMP允许主机或者路由器报告差错情况和提供有关异常情况的报告
- ICMP的检验和检测的是整个报文
- IP数据报的检验和检测的是首部,没必要检验数据部分
4.4.1 ICMP报文的种类
ICMP差错报告报文
- 终点不可达:当路由器或者主机不能交付数据报时就向源点发送终点不可达报文
- 时间超过:当路由器收到生存时间为0的数据报,丢弃之后还要向源点发送时间超过报文
- 参数问题:当路由器或者目的主机收到的数据报的首部中有的字段的值不正确时,丢弃之后要发松参数问题报文
- 改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(也就是说,找到了更好的路由)

8字节放在TCP/UDP讲,有关进程信息
不应该发送ICMP差错报文的几种情况
- 对于ICMP差错报告报文,不再发送ICMP差错报告报文
- 对第一个分片的数据报片的所有后续数据报片都不发送 ICMP 差错报告报文
- 一个大 IP 数据报被分成多个片:第一个分片:带完整的 IP 头 + 上层协议头(TCP/UDP 头、ICMP 头等)+ 一部分数据;后续分片:只有 IP 头 + 纯数据,没有上层协议头
- 对具有多播地址的数据报都不发送 ICMP 差错报告报文
- 多播包可能被送达几十、上百个主机;如果这些主机中很多都觉得“这个包对我来说有问题”然后各自回 ICMP → 源主机瞬间被 ICMP 洪水淹没。
- 对具有特殊地址(如 127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP 差错报告报文
ICMP询问报文
- 回送请求或回送回答:ICMP回送请求报文时由主机或路由器向一个特定的目的地址发出回送请求,收到此报文的的主机必须给源主机或路由器发送ICMP回送回答报文。用来测试目的站是否可达以及了解有关状态
- 时间戳请求或时间戳回答:来回发时间戳。容易计算出当前网路的往返时延
4.4.2 ICMP的应用举例
- PING
- 测试两台主机之间的连通性
- 使用回送请求或回送回答报文
- 应用层直接应用网络层的例子,没有通过运输层的TCP或UDP
4.5 IPV6
ipv6把地址从32位扩展到128位,解决ipv4地址耗尽问题
- 地址空间大:128位地址,2^128个地址
- 扩展的地址层次结构
- 灵活的首部格式,和ipv4不兼容:ipv4中的扩展首部放在首部里,ipv6的扩展首部放在数据里
- ipv6允许数据报中包含有选项的控制信息
- ipv6首部改为8字节对齐,原来的ipv4是4字节对齐

- 版本:该协议的版本,ipv6的该字段为6
- 通信量类:有点像ipv4的区分服务字段
- 流标号:用于标识属于同一流的数据报
- 有效载荷长度:不包括ipv6首部的数据报长度
- 下一个首部:指明紧跟在ipv6首部后的第一个扩展首部的类型
- 跳数限制:类似ipv4的生存时间TTL
- 源地址:128位源地址
- 目的地址:128位目的地址
ipv6的地址
目的地址一般有三种类型:
- 单播
- 多播
- 任播:ipv6新增的一种类型。任播的终点是一组计算机,但是数据报只交付给其中的一个计算机
点分十进制记法 -> 冒号十六进制记法,并且允许零压缩,一连串连续的零可以为一对冒号取代(一个地址中只能用一次零压缩)
ipv6地址的分类

划分方法

4.5.4 ICMPv6
ICMPv6包含了IPv4中的ICMP和ARP协议
4.6 互联网的路由选择协议
控制层面最核心的部分
4.6.1 几个基本概念
自治系统:单一技术管理下的许多网络,IP地址和路由器,自治系统内部用的一致的路由选择策略
- 理想的路由算法
- 正确的和完整的:沿着算法指引的路能够到达目的网络和目的主机
- 计算上应该简单,不能增加过多额外的开销
- 算法能够适应通信量和网络拓扑的变化
- 档通信量和网络拓扑稳定的时候,应该收敛于一个可接受的解,而不是不停的变换
- 最佳
- 分层次的路由选择协议
- 内部网关协议,在一个自治系统内部使用的路由选择协议,域内路由选择
- 外部网关协议,自治系统之间使用的路由选择协议,域间路由选择

- 简答题:考区别
- who? what? when?
- 计算题:考RIP
| 特性维度 | RIP (路由信息协议) | OSPF (开放式最短路径优先) | BGP (边界网关协议) |
|---|---|---|---|
| 协议类型 | 距离矢量路由协议 | 链路状态路由协议 | 路径矢量路由协议 |
| 工作范围 | 内部网关协议(IGP),用于自治系统(AS)内部 | 内部网关协议(IGP),用于自治系统(AS)内部 | 外部网关协议(EGP),用于不同自治系统(AS)之间 |
| 度量标准 | 跳数 (最大15跳) | 成本 (通常基于链路带宽) | 路径属性(如AS_PATH、LOCAL_PREF等),基于策略 |
| 适用规模 | 小型网络 | 中大型网络 | 超大规模网络(如互联网) |
| 收敛速度 | 慢(依赖定时更新,易产生环路) | 快(触发更新,无环路) | 路径矢量(通过AS_PATH属性避免环路) |
| 配置与复杂度 | 简单 | 复杂(需区域划分) | 非常复杂(需手动配置对等体和策略) |
| 传输层协议 | UDP,端口520 | IP协议号89 | TCP,端口179 |
4.6.2 内部网关协议RIP-Routing Information Protocol
一种分布式的基于距离向量的路由选择协议。
要求每个网络中的每一个路由器都要维护从它自己到每一个目的网络的距离记录

三个特点(简答题):
- 和谁交换信息:相邻路由器(什么是相邻?补充一下😭)
- 交换整个路由表,当前本路由器知道的全部信息
- 按照固定的时间间隔来交换路由信息;当网络拓扑发生变换的时候,也要及时通信
路由表记录(目的地址,最短距离,吓一跳的地址)
距离向量算法:bellman-ford,必考‼️‼️
dis(a, b)=min(dis(a, x) + dis(x, b))

举个例子:R6现在有一个a表,接受到了R4的b表

RIP2的报文用UDP传送,应用层的协议???

- 地址族标识符稳定是2
RIP协议的优缺点
- 优点:块,简单
- 缺点:网络规模有限;收发完整路由表;坏消息传播的慢,收敛时间长;只考虑跳数
4.6.3 内部网关协议OSPF(开放最短路径优先)
- 原理简单,实现复杂
- 使用dijkstra(RIP是看跳数,OSPF是看开销)
- 采分布式的链路状态协议
- 现在使用的OSPFv2
三个主要特点(www):
- who?采用洪泛法,想本自治系统所有路由器发送信息
- what? 域本路由器相邻的所有路由器的链路状态,只是路由器所知道的部分信息
- 链路状态:说明本路由器都和那些路由器相邻,以及该链路的度量(距离,时延,带宽,费用,政治因素等等)
- when? 变化/固定间隔
链路状态数据库
- 全网的拓扑结构图
- 全网范围内是一只的
- 每个路由器都能使用数据库中的结构构建自己的路由表
OSPF讲自治系统划分为两种不同的区域:猪肝区域(0.0.0.0)和区域。主干区域用来联通其他下层区域

主干路由器;区域边界路由器;自治系统边界路由器(R6)
划域优缺点:减少通信量和维护的信息;但是交换信息的种类增多了,OSPF更复杂了
OSPF是基于IP协议,和RIP不同

OSPF采用可靠的洪泛法发送更新分组:依次转发,接受到了就向上游发送确认信息。采用这种方法,会传递大量的报文 $N\times (N-1)$,所以多点介入的局域网采用了指定路由器DR减少信息数量
4.6.4 外部网关协议 BGP
找到一个比较好的即可,并不是要最好的路由。
- 互联网的规模太大啦,不同自治系统所选用的度量不同,比较合理的做法就是交换“可达性”,能到就行
- 自治系统之间要考虑一些政治,安全等有关策略
- 采用路径向量路由选择协议
- 传输协议采用TCP协议(可靠传输)
三个主要的特点(www):
- 相邻AS的BGP发言人
- 交换可达信息(一开始的时候全部信息,往后更新增量信息)
- 变化的时候更新


eBGP & iBGP
- 同一个协议
- 通报前缀时采用的规则不同,路由传递行为:
EBGP会将从EBGP对等体学到的路由通告给所有BGP邻居(包括EBGP和IBGP),而IBGP不会将从IBGP邻居学到的路由再次通告给其他IBGP邻居,这是为了防止路由环路
BGP路由信息BGP=[前缀, BGP属性] = [前缀, AS-PATH, NEXT-HOP]

三种不同的自治系统
补充❓
怎么避免兜圈子?
在属性AS-PATH中,不允许出现相同的AS号
BGP的路由选择(依次往下)
- 本地偏好值最高
- 如果AS1到达X有两条路,优先选择LOCAL-PREF最大的路径
- 热土豆路由选择算法
- 在一个AS内部选择跳数最少的来转发(这个跳数由RIP或OSPF来决定的)
四种报文
- OPEN,与另一个BGP发言者建立关系,通信初始化
- UPDATE,通告某一路由信息,以及列出要撤销的多条路由
- KEEPALIVE,周期性正式邻站的连通性
- NOTIFICATION,通知检查出来的差错

通用的意思是iBGP和eBGP是一样的
4.6.5 路由器的构成
路由器的结构:控制层面和数据层面

转发和路由选择的区别
- 转发
- 根据转发表直接转发,只设计到一个路由器
- 转发表需要包含转发功能素有必须啊的所有信息
- 路由选择
- 按照路由选择算法,构造整个路由表
- 涉及很多路由器
- 包含吓一跳的路由器
![]() |
|---|
