计算机网络-自顶向下—第四章网络层重点复习笔记
全部章节都有哦,具体看此博客
计算机网络-自顶向下期末复习一篇就够了——重点复习笔记整理-CSDN博客
未出现的一般考点较少,这里的复习笔记一般可以满足考试需求 o.O
目录
4.1网络层的服务
4.2虚电路以及数据报电路
4.4 IP:互联网协议
4.6互联网中的路由
4.1网络层的服务
转发以及路由
- 转发(Forwarding):将数据包从路由器的输入端口移动到合适的输出端口。(选择路口)这是数据包在每个路由器“跳跃”过程中执行的动作。(根据转发表)
- 路由选择(Routing):决定数据包从源到目的地所采取的路径(决定路线)。这个过程由路由算法来完成,构建所谓的“转发表(forwarding table)”。(构建转发表)
用一个比喻来说:
- 路由选择类似于规划一次长途旅行的路线;
- 转发则像是在某个高速公路枢纽中,指引车辆正确驶入下一个出口。
在整个互联网结构中,每个主机和路由器都运行网络层协议。例如IP协议。网络层的任务包括:
- 在发送端,将运输层的“段(segment)”封装成“数据报(datagram)”;
- 在接收端,从数据报中提取段并交付给运输层;
- 在中间的路由器上,检查IP数据报的首部字段,并据此做出转发决策。
这一过程要求网络层协议在每个主机与路由器中都要运行。
4.2虚电路以及数据报电路
网络层可以为运输层提供两种基本服务模型:
- 数据报网络(Datagram Network):提供无连接服务。
- 虚电路网络(Virtual Circuit Network):提供面向连接服务。
这与运输层的 TCP(面向连接)与 UDP(无连接)相似,但有所不同:
- 运输层的服务是应用进程到应用进程(端到端)的;
- 而网络层的服务是主机之间的逻辑连接,而非应用进程之间;
- 网络层中的服务类型由网络核心决定,主机端通常没有选择权;
- 服务的实现是在网络核心中完成的,而不是端系统。
🎇网络层服务模型与运输层协议的联系与区别
对比项目 | 网络层服务模型 | 运输层协议 |
无连接方式 | 数据报网络(Datagram) | UDP |
面向连接方式 | 虚电路网络(Virtual Circuit) | TCP |
服务对象 | 主机到主机 | 应用进程到应用进程(端到端) |
是否由用户选择 | 用户无法选择网络层服务类型 | 应用层可选择使用TCP或UDP |
状态信息位置 | 状态信息由网络核心设备维护 | 状态信息由端系统维护 |
路由控制位置 | 网络层控制在“路径中” | 运输层控制在“端点上” |
- 网络层为运输层提供传输管道;
- 运输层在此基础上提供更复杂的可靠性、顺序性、复用等功能。
👉 举例说明:
我们每天使用的TCP连接(如网页访问、SSH、邮件收发),实际上都是运行在 IP 数据报网络(Datagram Network)之上的。
- IP(网络层)是一个无连接、无状态的服务,代表的是“尽力而为”的交付(Best-effort Delivery);
(RDT中不可靠的通信信道指的就是数据报网络)
- TCP(运输层)则构建了一个面向连接、可靠、有序的通信通道;
- TCP 完全由端系统(发送端/接收端主机)控制,而中间的网络(IP层)并不知道也不关心连接是否存在。
虚电路(Virtual Circuits, VC)
特征:
- 在数据传输开始之前,需要进行连接的建立(call setup)和拆除(teardown);
- 每个分组(packet)携带一个 虚电路标识符(VC identifier),而非目的主机地址;
- 在源主机到目的主机之间的每个路由器上都维护该虚电路的“连接状态信息”;
- 链路资源与路由器资源(如带宽、缓存)可以专门分配给该VC连接,以实现可预测的服务质量。
简言之:从源到目的主机的路径表现得类似于电话网络中的物理电路。
虚电路的实现结构(VC Implementation)
一个虚电路包含:
- 从源到目的的路径;
- 路径上每个链路对应的VC编号(VC numbers);
每个分组携带虚电路标识符(VC identifier)
每条链路对应VC编号(VC numbers)
- 路径上每个路由器中的转发表(Forwarding Table)项。
VC分组转发机制:
- 属于VC的数据包携带的是VC编号,而非IP地址;
- 每跳的VC编号可以不同,由路由器内部转发表来映射;
- 每个路由器维护一张如下所示的表格:
输入端口 | 输入VC编号 | 输出端口 | 输出VC编号 |
1 | 12 | 3 | 22 |
2 | 63 | 1 | 18 |
3 | 7 | 2 | 17 |
1 | 97 | 3 | 87 |
路由器维护连接的状态信息!
总结:每个路由器根据入端口和VC编号查表后,将分组发送至相应出端口,并替换新的VC编号。
虚电路的信令协议(Signaling Protocols)
虚电路网络使用信令协议来:
- 建立连接;
- 维持连接;
- 拆除连接。
常见协议包括 ATM、Frame Relay、X.25。
当前互联网中不使用虚电路模型,而是基于无连接的数据报模型。
数据报网络
特征:
- 网络层无需建立连接即可发送数据;
- 路由器不保存连接状态信息,因此没有“端到端连接”的概念;
- 每个分组独立传输,根据其携带的目的IP地址进行转发;
- 同一源-目的对之间的分组可能走不同路径到达终点。
数据报网络的转发表(Datagram Forwarding Table)
在数据报网络中,路由器根据目的IP地址进行匹配转发:
地址匹配方式:
- 由于IPv4有40亿地址,不能为每个地址建一项;
- 所以,转发表通常以地址范围(address range)形式列出,如下:
目的地址范围 | 输出端口 |
范围1 | 3 |
范围2 | 2 |
范围3 | 2 |
范围4 | 1 |
最长前缀匹配(Longest Prefix Matching)
数据报网络采用“最长前缀匹配”规则来决定转发表项:
- 对于每一个入站IP地址,查找匹配的最长位数前缀;
- 选择匹配成功并最长的前缀项作为转发依据;
- 比如:
- 输入IP地址:11001000 00010111 00011000 10101010 匹配前缀项: 11001000 00010111 00010*** 11001000 00010111 00011000 *****
最长匹配前缀是存储在路由器中的规则,拿到数据去匹配找到最长位数的前缀就可以了!
Datagram network
弹性服务,没有强制时延要求
终端系统很聪明。(TCP)
网络核心简单,网络边缘复杂。
VC network
需要严格的时序控制和可靠性。
终端系统很傻。
网络核心复杂,网络边缘简单。
4.3路由器内部结构
1.路由器的两个关键功能
- 运行路由算法与协议(如 RIP、OSPF、BGP)
- 将接收到的数据报从输入链路转发到输出链路
这些功能可对应为两类平面:
- 控制平面(control plane):软件层,负责路由协议、路径选择,管理转发表的构建;
- 转发平面(forwarding plane):硬件层,处理数据报的实际转发。
2.路由器的输入端口以及输出端口构造(排队机制,丢包原理)
路由器的架构概览
路由器由以下部分组成:
- 输入端口(input ports)
- 交换结构(switching fabric)
- 输出端口(output ports)
- 路由处理器(routing processor)
这些部件协同工作以实现高效的数据转发。
输入端口的功能
- 物理层功能(Physical Layer):
-
- 进行比特级接收,完成信号到数据的转换。
- 链路层协议处理(Data Link Layer):
-
- 如以太网处理,用于帧的识别与提取。
- 查找与转发(Lookup & Forwarding):
-
- 通过查阅本地的转发表,确定数据报的输出端口;
- 所谓的“匹配+操作(match plus action)”。
- 排队机制(Queuing)【自己太快怕下一层处理不过来】:
-
- 如果数据报到达速度快于交换结构的处理能力,数据将被临时排队等待处理。
目标:在线路速率(line speed)下完成输入端口处理任务。
交换结构(Switching Fabric)
交换结构用于将数据报从输入缓冲区传送到合适的输出缓冲区。
关键参数:
- 交换速率(Switching Rate):衡量从输入到输出的数据处理能力;
- 衡量指标:常用“输入/输出链路速率的倍数”来表示;
- N个输入口时,理想交换速率(Switching Rate)为N倍线路速率(line speed)。
常见的三种结构:
- 内存交换(Memory-Based Switching)
- 总线交换(Bus-Based Switching)
- 交叉开关(Crossbar Switching)
输出端口的功能
输出端口也承担多个职责:
- 排队缓冲(Buffering)【上一层太快怕自己处理不过来】:
-
- 当交换结构传输过快,而输出链路发送较慢时,需进行缓冲;
- 超过缓冲容量时,可能引起丢包(Packet Loss)。
- 调度机制(Scheduling):
-
- 当有多个待发数据包时,需要调度器决定下一个发出哪个包;
- 可实现基于优先级、带宽、公平性等多种调度策略。
输入端口的排队和输出端口的排队机制都是在考虑交换结构的处理能力。都是怕下一层处理不过来。
输入端口怕后面的交换结构处理不过来;
输出端口怕后面的链路处理不过来。
输出端口排队(Output Port Queuing)
发生条件:
- 数据报从交换结构到达输出端口的速率超过链路传输速率时。
后果:
- 缓冲延迟;
- 若缓冲满,将导致丢包(buffer overflow)。
图示说明:
- t时刻,多个数据报被发送到输出;
- t+1时刻,若仍未转发完成,会发生延迟或丢弃。
我们需要之一的是,丢包会发生在输入端口以及输出端口两种
1. 输入队列溢出导致丢包
- 原因:当输入端口接收数据包的速率超过路由器内部处理能力(如 CPU 处理路由表查询、交换结构转发速度)时,输入队列(Input Queue)会堆积数据包,队列满后新到达的包会被丢弃(尾丢弃)。
- 示例:
输入端口每秒接收 2Gbps 数据,但路由器交换结构仅支持 1.5Gbps 转发,输入队列持续积压直至溢出,后续包被丢弃。
2. 输入端口的主动丢包策略
- 如RED(随机早期检测) 等算法会在输入队列接近满时主动丢弃少量数据包,以提前通知发送方降低速率,避免拥塞恶化。
3. 输出队列溢出导致丢包
- 原因:输出端口的发送速率受限于链路带宽(如 1Gbps 接口),当多个输入端口的数据包同时发往同一输出端口时,输出队列(Output Queue)会排队等待发送,队列满后新到达的包被丢弃。
- 示例:
三个输入端口各向同一输出端口转发 500Mbps 数据,总速率 1.5Gbps 超过输出端口 1Gbps 的带宽,输出队列堆积后丢包。
3.队首阻塞
输入端口排队(Input Port Queuing)
当多个输入端口试图将数据报传送到同一输出端口,但交换结构处理能力不足时,会在输入端口形成排队。
引申问题:行首阻塞HOL blocking(Head-of-the-Line Blocking):
- 某个排队队列最前方的数据报等待一个繁忙的输出端口;
- 后续数据报即使可以发往其他空闲端口,也会被前面数据报阻塞。
这种现象可能显著降低吞吐率。
4.4 IP:互联网协议
1.IPv4数据报头部以及各个域的作用
一个 IP 数据报由首部(header)和数据部分组成。下表是 IPv4 数据报格式的字段说明(32位对齐):
1 Byte=8 Bits
1字节=8比特
字段名称 | 描述说明 |
Version | 4位,指定IP协议版本,当前为IPv4(即4) |
Header Length | 首部长度,以4字节为单位,一般为5(即20字节)【在图中表示为五行】 |
Type of Service | 服务类型字段(已被DSCP取代) |
Total Length | 数据报总长度(字节),包括首部与数据 |
Identification | 标识符,用于分片时唯一标识一条数据流 |
Flags | 3位,用于控制分片(如:禁止分片DF(1的时候代表禁止分片)、更多分片MF(1的时候标识不是最后一个分片)) |
Fragment Offset | 标识当前分片在原始数据报中的偏移量 |
Time To Live (TTL) | 数据包生存时间,每过一个路由器减1,防止环路 |
Protocol | 表示承载的上层协议,如TCP(6)或UDP(17) |
Header Checksum | 检验IP头部错误 |
Source Address | 源IP地址(32位) |
Destination Address | 目的IP地址(32位) |
Options(可选) | 一些额外控制信息,如时间戳、路由记录等 |
Data | 数据部分(如TCP或UDP段) |
总开销举例:
- TCP首部20字节 + IP首部20字节 = 40字节开销(不含数据本体)
2 IP分片与重组(IP Fragmentation & Reassembly)
网络中不同链路对最大传输单元(MTU max transfer unit)的限制不同。当一个数据报超过当前链路的MTU时,就需要分片(fragmentation)。
- 分片规则:
-
- 每个分片保留原IP头部(适当修改);
- 使用
Identification
字段将多个分片关联为一个完整报文; Fragment Offset
字段指明分片在原始报文中的位置;- 仅在目的主机处进行重组(中间路由器不做重组);
- 示例:
-
- 原始数据报长度:4000字节;
- 链路MTU:1500字节;
- 实际每个分片最大数据为1480字节(考虑20字节头部);
- 分为3个分片,offset 分别为 0, 185, 370(单位为8字节);
MF
(More Fragments)位为1表示还有后续分片,0为最后一片。
3.IP地址(IPv4 addressing)
1.子网以及主机
每个主机或路由器的每个接口都拥有一个32位IP地址。
- 接口(Interface):
-
- 指设备连接到物理链路的连接点;
- 一台主机通常只有一个接口;
- 路由器通常有多个接口。
- 地址结构:
-
- 高位部分为子网号(subnet);
- 低位部分为主机号(host)
IP地址 223.1.1.1 = 11011111 00000001 00000001 00000001
,B,C,D,E类地址
10000000 128
11000000 192
2.为什么要用子网,其对应的好处?
子网定义为具有相同子网前缀的接口集合:
- 接口之间可以不经过路由器直接通信;
- 一个IP网络可以被划分为多个子网。
如何确定子网?
- 断开每个主机与路由器的接口;
- 所形成的每个独立岛屿即为一个子网;
- 每个子网通常以
子网掩码(subnet mask)
标识,如/24
表示前24位为子网前缀。
3.好处
子网划分(Subnetting)
- 目的与优势
-
- 提高 IP 地址利用率:将大网络拆分为小子网,避免地址浪费(如 C 类网络划分为多个子网,适配不同规模部门)。
- 隔离网络流量:子网间需通过路由器通信,缩小广播域范围(如 ARP 广播仅在子网内传播)。
- 增强网络管理灵活性:按部门、功能分组(如财务子网、研发子网),便于配置防火墙策略。
4.路由聚合原因?
路由聚合route aggregation:
路由聚合route aggregation,又叫做CIDR聚合(Classless Inter-Domain Routing Aggregation),是通过将一组相邻的IP地址用一个前缀表示,从而减少路由器的转发表项数量,提升网络性能。
层次化的IP地址结构Hierarchical addressing实现高效的路由信息汇总(route aggregation)
最终,整个互联网只需记住:
- 200.23.16.0/20 发给 Fly-By-Night-ISP;
- 199.31.0.0/16 发给 ISPs-R-Us;
- 而不需要记住成千上万个子网!
其实原理就是将子网取公共前缀就完事了
5.CIDR的目的,以及其好处(无类别域间路由)
CIDR 使地址分配更灵活:
- IP地址格式:
a.b.c.d/x
,x
为子网位数; - 可替代传统的A/B/C类地址结构;
- 例:
200.23.16.0/23
,表示前23位为子网前缀。
6.CIDR地址的计算
- 网络地址怎么计算(Network Address)
-
- 就是子网中的第一个地址,用于标识网段(主机位全部都是0)
- 计算方法:IP地址和子网按位与
- 例子:
-
-
- IP:
192.168.1.100
(二进制11000000.10101000.00000001.01100100
) - 掩码:
255.255.255.0
(二进制11111111.11111111.11111111.00000000
) - 网络地址:
192.168.1.0
(二进制按位与结果)。
- IP:
-
- 广播地址怎么计算
-
- 就是子网中最后一个地址,用于向子网内的所有设备发送消息(主机位全部都是1)
- 计算方法就是主机位全部设置为1
- 示例
-
-
- 网络地址:
192.168.1.0/24
→ 广播地址:192.168.1.255
。
- 网络地址:
-
- 可用的IP地址数
-
- 其实就是一个子网内有多少个ip可以分配
- 计算公式
-
-
- 假设主机位有8位,那么可分配的ip数=2^8-2(排除网络地址以及广播地址)
-
- 子网的数量(num of subnets)
-
- 方法就是将2^(新的网络前缀-旧的网络前缀)
- 例子
-
-
- 子网数量:
2^(26-24)=4
个(192.168.1.0/26
、192.168.1.64/26
等)。
- 子网数量:
-
- 子网划分(Subnet Partitioning)
-
- 两种方式计算,第一种是按照需要的子网数量计算(假设每个子网需要的ip数量一致)
-
-
- 那么子网需要的多的网络地址=2^n-2>=子网数量,n+24就是新的子网号
-
-
- 第二种就是从每个子网需要的主机计算(每个子网需要的ip不一样)
-
-
- 那么每个子网的主机号位数n:2^n-2>=每个子网需要的ip数量,随后32-n就是新的子网号位数
-
- 路由聚合(Route Aggregation)
-
- 定义:将多个连续子网合并为一条路由,减少路由表条目。
- 条件:子网的二进制前缀必须相同。
- 示例:
-
-
- 子网 1:
192.168.1.0/24
(二进制11000000.10101000.00000001.00000000
) - 子网 2:
192.168.2.0/24
(二进制11000000.10101000.00000010.00000000
) - 子网 3:
192.168.3.0/24
(二进制11000000.10101000.00000011.00000000
) - 聚合路由:
192.168.0.0/22
(前 22 位相同,覆盖 4 个 C 类网络)。
- 子网 1:
-
4.NAT的作用以及NAT的工作流程(网络地址转换)
背景:IPv4地址不足
- 典型应用:家庭路由器、企业防火墙。(都是NAT router)
NAT的作用:
- 内部多个主机共享一个公网IP;
- 将内部私有地址(如10.0.0.x)映射为一个公网IP;
- 使用不同端口号区分不同内部主机会话;
- 提高安全性,外部无法直接访问内部地址。
优势:
本地网络对外界来说只使用一个IP地址。这带来了以下好处:
- 不需要从ISP获取大量IP地址: 所有设备只共享一个公网IP地址即可;
- 可以在不通知外部世界的情况下更改本地设备的IP地址: 也就是说,内网地址变化不会影响外部通信;
- 可以更换ISP而不需要更改本地网络中设备的地址: 因为内部地址是私有的,与ISP无关;
- 本地网络中的设备不会被外部世界直接寻址,具备安全性优势: 外部设备无法直接访问内网设备,提高了网络的隐私性与安全性。
工作流程(NAT router的作用)
- 出站数据报处理(outgoing datagrams)
(源IP地址, 源端口号) → (NAT公网IP地址, 新端口号)
- 记录映射(remember in NAT translation table)
(源IP地址, 源端口号) ↔ (NAT公网IP地址, 新端口号)
- 入站数据报处理(incoming datagrams)
(NAT公网IP地址, 新端口号)→(源IP地址, 源端口号)
ICMP(网络层协议)Traceroute(路由跟踪)与 ICMP
ICMP用于主机与路由器之间传递网络层控制消息。
典型用途:
- 报告错误(如目标不可达);
- 回应
ping
的“回显请求/应答”; - 路由器通告/发现;
- TTL过期提示;
- IP首部格式错误。
ICMP报文结构:
- 包括类型(type)、代码(code)和触发错误的原始数据报前8个字节。
常见类型:
Traceroute (路由跟踪程序)与 ICMP
traceroute
路由跟踪程序用于检测从源主机到目的主机路径上的每个路由器。
工作原理:
- 首次发送 TTL=1 的UDP包,第一跳路由器丢弃并返回ICMP超时报文 (type 11, code 0);
- 然后发送TTL=2的包,依此类推 (type 3, code 3);
- 当到达目的主机时,返回“目标端口不可达”信息;
- 根据返回时间,可计算各跳延迟RTT。
5.IPv6
IPv6 数据报格式(头部长度) 及与 IPv4 的区别
IPv6 地址(128 位,分为 8 组,每组 16 位,以四位十六进制数表示;全零组可用 “::” 表示)
- 位数:128位二进制,分为 8个16位块。
- 表示法:每组16位转换为十六进制(0-FFFF),用冒号
:
分隔。
例如:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
缩写规则:
-
- 前导零可省略(如
0db8
→db8
)。 - 连续全零块可压缩为
::
(仅一次)。
缩写后:2001:db8:85a3::8a2e:370:7334
- 前导零可省略(如
- 地址总数:约3.4×1038个,几乎无限。
IPv6 与 IPv4 的区别及 IPv6 采用仍不完全的原因
对比项 | IPv4 | IPv6 |
地址长度 | 32位(约42亿个地址) | 128位(约3.4×1038个地址) |
地址表示法 | 点分十进制(如 ) | 冒号分隔十六进制(如 ) |
地址类型 | 单播、广播、多播 | 单播、任播(Anycast)、多播(无广播) |
头部结构 | 复杂(20字节+可选字段) | 简化(固定40字节,无校验和) |
NAT(网络地址转换) | 广泛使用(缓解地址短缺) | 理论上不需要(地址充足) |
安全性 | 可选支持(IPsec) | 原生支持(IPsec 内置) |
自动配置 | 依赖 DHCP | 支持 SLAAC(无状态地址自动配置) |
QoS(服务质量) | 有限支持(TOS 字段) | 流标签(Flow Label)提供更好支持 |
采用不完全的原因
1. 兼容性问题
2. NAT 缓解了 IPv4 短缺
4.6互联网中的路由
前置知识两种路由算法
链路状态路由算法(Link-State Routing Algorithm)
基本思想:每个路由器将网络拓扑与链路代价信息广播给网络中所有其他路由器,然后每个路由器独立运行Dijkstra算法,计算出到所有节点的最短路径树。
链路状态算法的步骤
第1步:发现邻居
- 向每个邻居发送
HELLO
报文; - 接收方回复自己的身份,进行邻接确认。
第2步:测量链路代价
- 发送
ECHO
报文,测量往返时延(RTT); - 可重复测量取平均值;
- 可选择是否计入链路负载:
-
- 若计入,从队列开始计时;
- 若不计入,从报文到队头时计时。
第3步:构造链路状态包 Link State Packets(LSP)
- 每个LSP包含:
-
- 发送者身份;
- 序号与生存期(age);
- 邻居列表及链路代价;
- 在定期或链路变化时发送。
第4步:LSP泛洪广播(Flooding)
- 每个LSP通过泛洪发送到所有节点;
- 用序号判断新旧,避免冗余;
- 若重复或过期的LSP,将被丢弃。
第5步:计算最短路径
- 收到全部LSP后,构建网络图;
- 使用Dijkstra算法计算到所有目的地的最短路径;
- 构建本地转发表。
距离向量算法(Distance Vector Algorithm)
基本思想:每个路由器维护一张表,记录到所有目标的最短距离,并定期将该表与邻居交换,通过Bellman-Ford公式更新最短路径估计。
Bellman-Ford方程
令 Dₓ(y)
为节点x到目标y的最小代价,则有:
Dₓ(y) = min₍ᵥ₎ { c(x,v) + Dᵥ(y) }
其中v为x的邻居节点。
源节点到每一个兄弟节点的距离加此兄弟节点到目的节点的距离,取最小的一个。
DV内容:
节点通过广播 DV 告诉邻居:“我能到达哪些目标节点,以及我的距离是多少”。
示例: 假设路由器 R1 的 DV 如下:
目标节点 | 最短距离 | 下一跳 |
R2 | 2 | R2 |
R3 | 5 | R2 |
R4 | ∞ | - |
表示:
- R1 到 R2 的直接距离为 2,下一跳是 R2。
- R1 到 R3 的当前最短路径需通过 R2,总距离为 5。
- R1 无法直接到达 R4(距离为无穷大)。
DV算法步骤
- 每个节点定期将自己的距离向量(DV)发送给邻居;
- 收到邻居的DV后,使用Bellman-Ford公式更新本地表;
- 若更新后有变动,继续通知邻居(触发式更新);
- 过程迭代,直到稳定。
异步与分布式特性
- 每个节点本地异步计算;
- 只在链路代价变化或接收到新DV时触发更新;
- 不需要网络全图;
- 协议自然容错,适合动态网络。
示例网络演进
假设三节点x, y, z组成网络:
- 初始时,节点只知道到邻居的代价;
- 随着DV信息的传播,节点逐步推导出完整路径信息;
- 最终构建出稳定的最小代价路径。
链路代价变化的影响
- 好消息传播快;
- 坏消息传播慢,即“计数到无穷(Count to Infinity)”问题:
-
- 两节点互相通告错误路径,形成环;
- 修复过程缓慢。
应对方法:
- 毒性逆转(Poisoned Reverse):
-
- 若节点x通过y到达z,则x向y声明“我到z的代价是∞”;
- 避免路由环路产生。
LS与DV区别
比较维度 | 链路状态算法(LS) | 距离向量算法(DV) |
每个节点维护的信息 | 到所有邻居的链路代价;整个网络拓扑结构(最终构建出图)(维护LSDB) | 自己的DV中下一跳改为跳数 |
发出的信息内容 | LSP链路状态包 | 向所有邻居广播自己的DV |
信息传播方式 | 全网泛洪(Flooding) | 邻居间逐跳传播(通过周期性或触发式广播) |
路径计算方式 | 使用 Dijkstra 算法,构建最短路径树 | 使用 Bellman-Ford 算法,逐步迭代更新最短距离 |
全局视图 | 是,每个节点最终都有网络的全图视图 | 否,每个节点只知道“我到谁”的代价,通过邻居逐跳学习网络 |
收敛速度 | 快,收敛迅速 | 慢,尤其在网络变化或故障时收敛慢,可能引发“计数到无穷”问题 |
是否易于形成环路 | 不易,路径由图算法生成 | 易形成路由环路,需特殊机制(如毒性逆转)防止 |
通信开销 | 初期开销大(所有链路状态都要泛洪广播),之后变化小 | 每次变化后广播整个表,通信代价随网络规模增长 |
计算复杂度 | 高,约 O(n²)(Dijkstra 算法) | 低,每轮更新仅需 O(n) |
典型协议代表 | OSPF、IS-IS | RIP、BGP(部分场景) |
概述
网络层中的路由算法用于确定数据包从源主机到目的主机的路径选择,是构建转发表(Forwarding Table)的基础。该节将介绍:
- 链路状态算法(Link-State, LS)
- 距离向量算法(Distance-Vector, DV)
- 分层路由(Hierarchical Routing)
1.互联网中的两层路由架构
互联网中的两层路由架构
- 自治系统(AS)内部路由(Intra-AS Routing)
- 自治系统间路由(Inter-AS Routing)
自治系统内部路由(Intra-AS Routing)
- 核心目标:优化路径性能(如带宽、延迟等成本指标)
- 关注重点:基于技术参数(而非策略)计算最短路径
自治系统间路由(Inter-AS Routing)
- 核心目标:遵循管理策略(如流量走向、安全限制)
- 关注重点:路由选择需符合运营商策略(如拒绝特定 AS 的流量)
自治系统内部路由
将网络划分为多个自治系统(Autonomous Systems, AS),每个AS内运行自己的路由协议。
- AS内部使用内部网关协议(IGP),如RIP、OSPF;
- AS之间使用外部网关协议(EGP),如BGP;
- 每个AS的路由器根据协议更新转发表:
区域 | 协议 |
Intra-AS | OSPF、RIP、IGRP |
Inter-AS | BGP |
转发表由域内路由算法和域间路由协议共同配置
- 域内目的地:IGP
- 域间目的地:EGP+IGP
2.内部网关协议(Interior Gateway Protocols):RIP,OSPF
RIP(Routing Information Protocol)
特点概述:
- 使用 距离向量算法(Distance Vector)
- 是早期UNIX BSD系统中的默认协议(1982年发布)
- 距离度量单位为“跳数(hop count)”,最大限制为15跳
- 每30秒通过UDP发送一次路由更新(Response Message)
RIP中的路由表项示例:
目的网络 | 下一跳路由器 | 跳数(num of hops) |
w | A | 2 |
y | B | 2 |
z | B | 7 |
x | —(直连) | 1 |
RIP广告机制:
- 每条RIP消息最多携带25个目的网络条目;
- 每个路由器定时(每30秒)将整个路由表发送给邻居;
- 若180秒内未收到邻居更新 → 判定邻居失联;
-
- 对应路由项无效,重新广播更新;
- 邻居收到后也更新并再次广播。
RIP实现细节:
- 运行在应用层的
routed
守护进程中; - 通过UDP发送/接收RIP数据包;
- 所有RIP消息封装在UDP中转发。
OSPF(Open Shortest Path First)
特点概述:
- 开放标准协议(非专有),被广泛采用;
- 使用链路状态算法(Link-State Algorithm);
-
- 每个路由器获取整个AS内的拓扑图;
- 使用Dijkstra算法构建最短路径树;
- 所有OSPF信息直接封装在IP包中(不使用UDP或TCP);
- 每个路由器通过“LSA链路状态通告”更新拓扑信息;
- 每个广告仅包含直接相邻邻居的信息。
OSPF优势特性:
- 安全性:
-
- 所有OSPF信息都可加密验证;
- 支持多个等代价路径(ECMP):
-
- RIP只允许一条;
- 支持单播与多播:
-
- 如 MOSPF 多播OSPF协议使用相同拓扑图;
- 层次结构(Hierarchical OSPF):
-
- 支持大型AS划分为区域(Area);
3.边界网关协议(Border Gateway Protocol,BGP)
基于路径矢量协议
BGP(Border Gateway Protocol)
BGP 概述
BGP是唯一被广泛采用的域间路由协议,被称为“维系互联网的胶水”。
核心作用:
- eBGP(external BGP):获取相邻AS的可达前缀信息;
- iBGP(internal BGP):在AS内部传播该信息;
- 基于策略(policy)选择“最佳路径”;
- 允许子网对外通告其“我在这里”的存在。
BGP基本机制:
- BGP对等体(peers)通过TCP建立BGP会话(session),交换路由信息;
- 使用路径向量协议(path vector protocol):
-
- 每条路由记录经过的AS路径(AS-PATH);
- 每条前缀(prefix)通告携带若干属性(attributes);
BGP属性:
属性类型 | 含义 |
AS-PATH | 路由经过的AS序列(防环、供参考) |
NEXT-HOP | 下一跳路由器的IP地址 |
LOCAL-PREF | 本地首选值(用于策略优先) |
MULTI-EXIT-DISCRIMINATOR (MED) | 建议从某一出口进入的度量信息 |
BGP路由选择过程:
当一个路由器接收到多个到某一前缀的路径时,选择路径顺序如下:
- 本地偏好值(LOCAL PREF) —— 本地策略(policy)优先;
- AS路径长度(AS-PATH) —— 路径越短越优;
- 下一跳距离(NEXT-HOP) —— 采用热土豆路由(hot potato routing)策略;
- 其他策略字段。
路由传播示例:
- AS3通过eBGP将前缀信息发送给AS1;
- AS1内部通过iBGP传播给所有本地路由器;
- AS1的其他路由器可再通过eBGP转发给AS2;
- 每次传播都更新本地转发表。
BGP报文类型:
报文类型 | 功能说明 |
OPEN | 建立TCP连接并认证身份 |
UPDATE | 广播新的路径信息或撤销原有路径 |
KEEPALIVE | 在无更新情况下保持连接 |
NOTIFICATION | 通知错误并可终止连接 |
BGP路由策略应用示例:
- 防止免费转发(No Transit for Free):
-
- 网络X连接到B和C;
- X拒绝将来自B的流量转发至C(避免B蹭免费路径);
- 商业策略控制路径:
-
- 若B通过A连接至W,则:
-
-
- A向B通告AW;
- B向X通告BAW;
- 但B不会向C通告BAW,因为C不是B的客户,不能从中获益。
-
RIP vs. OSPF vs. BGP 对比表
对比项 | RIP(Routing Information Protocol) | OSPF(Open Shortest Path First) | BGP(Border Gateway Protocol) |
协议类型 | 距离向量(DV) | 链路状态(LS) | 路径向量(Path Vector) |
工作层次 | 内部网关协议(IGP) | 内部网关协议(IGP) | 外部网关协议(EGP) |
适用网络规模 | 小型网络(≤15跳) | 中大型网络(企业、ISP) | 超大型网络(互联网AS间路由) |
算法基础 | Bellman-Ford(距离向量) | Dijkstra(最短路径树SPT) | 路径属性优选(如AS_PATH、LOCAL_PREF) |
路由度量标准 | 跳数(Hop Count) | 链路成本(带宽、延迟等,可自定义) | 路径属性(AS_PATH长度、策略等) |
最大跳数限制 | 15跳(16跳为不可达) | 无限制 | 无限制 |
更新方式 | 每30秒广播/组播完整路由表 | 触发更新(链路变化时洪泛LSA) | 增量更新(仅传播变化的路由) |
收敛速度 | 慢(依赖计时器,可能计数到无穷) | 快(秒级收敛) | 慢(策略复杂,依赖TCP会话) |
环路避免机制 | 水平分割、毒性逆转、最大跳数 | 无环路(基于全局拓扑计算) | AS_PATH防环、路由策略控制 |
邻居发现 | 无自动发现,需手动配置 | Hello协议自动发现邻居 | 手动配置对等体(Peer) |
协议报文 | RIP报文(UDP 520端口) | OSPF报文(IP协议号89,组播224.0.0.5/6) | BGP报文(TCP 179端口,单播) |