第四章 网络层
type
status
date
slug
summary
tags
category
icon
password
4.1 网络层服务
从发送主机向接收主机传送数据段(segment)
- 发送主机:将数据段封装到数据报(datagram)中
- 接收主机:向传输层交付数据段(segment)
每个主机和路由器都运行网络层协议,路由器检验所有穿越它的IP数据报的头部域
网络层核心功能:转发与路由
- 转发(forwarding):将分组从路由器的输入端口转移到合适的输出端口
- 路由(routing):确定分组从源到目的经过的路径

网络层核心功能:连接建立
- 网络层连接:两个主机之间(路径上的路由器等网络设备参与其中),数据分组传输之前两端主机需要首先建立虚拟/逻辑连接,由网络核心实现
- 传输层连接:两个应用进程之间(对中间网络设备透明)
网络层服务模型
- 无连接服务(connection-less service):数据报网络(datagram network)
- 不事先为系列分组的传输确定传输路径
- 每个分组独立确定传输路径
- 不同分组可能传输路径不同
- 连接服务(connection service):虚电路网络(virtual-circuit network)
- 首先为系列分组的传输确定从源到目的经过的路径(建立连接)
- 然后沿该路径(连接)传输系列分组
- 系列分组传输路径相同
- 传输结束后拆除连接
拥塞控制
- 网络层(辅助)拥塞控制:路由器向发送方显式地反馈网络拥塞信息,指示发送方应该采取何种速率
- 传输层端到端拥塞控制:网络层不需要显式地提供支持,端系统通过观察loss、delay等网络行为判断是否发生拥塞,TCP
4.2 虚电路网络与数据报网络
数据报网络与虚电路网络是典型两类分组交换网络
数据报网络提供网络层无连接服务
虚电路网络提供网络层连接服务
类似于传输层的无连接服务(UDP)和面向连接服务(TCP),但是网络层服务是主机到主机服务,由网络核心实现
虚电路网络 VC(Virtual circuit)
虚电路:一条从源主机到目的主机,类似于电路的路径(逻辑连接)
- 分组交换,每个分组的传输利用链路的全部带宽
- 源到目的路径经过的网络层设备共同完成虚电路功能
- 通信过程:呼叫建立(call setup)→数据传输→拆除呼叫
- 每个分组携带虚电路标识(VC ID),而不是目的主机地址
- 同一条VC在每段链路上的VCID通常不同:路由器转发分组时依据转发表改写/替换虚电路号
- 虚电路经过的每个网络设备(如路由器)维护每条经过它的虚电路连接状态
- 链路、网络设备资源(如带宽、缓存等)可以面向VC进行预分配
每条虚电路包括:
- 从源主机到目的主机的一条路径
- 虚电路号(VCID), 沿路每段链路一个编号
- 沿路每个网络层设备(如路由器),利用转发表记录经过的每条虚电路
虚电路信令协议:用于VC的建立、维护与拆除,应用于虚电路网络(如ATM),目前的Internet不采用,简化“边缘”,复杂网络
数据报网络
网络层无连接,每个分组携带目的地址,路由器根据分组的目的地址转发分组
最长前缀匹配优先:在检索转发表时,优先选择与分组目的地址匹配前缀最长的入口
目前的Internet采用数据报网络,简化网络,复杂“边缘”
4.3 路由器体系结构(未讲,但要求掌握)
路由器的两个关键功能:
- 运行路由算法/协议(如 RIP、OSPF、BGP)
- 将数据报从输入链路转发到输出链路

输入端口

- “匹配 + 动作”:当收到一个数据报时,根据其目的地址(首部字段值)在输入端口的转发表内存中查找对应的输出端口。
- 基于目的地址的转发:仅依据目的IP地址来决定转发方向(这是传统路由器的方式)。
- 广义转发:可以根据任意首部字段的组合来决定转发行为(如源地址、端口号、协议类型等),这是SDN(软件定义网络)中的典型做法。
目标:使输入端口的处理速度能达到“线速”,也就是网络链路的速率,不造成延迟。
- 排队: 如果数据报到达的速度超过交换结构的转发速率,就会在输入端口形成队列。
- 产生排队时延
- 若输入缓冲区溢出,则会造成数据报丢失
- 队首阻塞(HOL blocking):当排在队首的数据报无法被转发(例如目的输出端口忙碌时),它会阻塞后续的数据报,即使后面的数据报本可以被立即转发。
交换结构
功能:将数据包从输入缓冲区传送到相应的输出缓冲区。
交换速率:指数据包能够从输入端传输到输出端的速率。
通常以输入/输出链路速率的倍数来衡量,若路由器有 N 个输入端口,理想情况下希望交换速率能达到 N 倍链路速率,这样所有输入端口都能同时无阻塞地转发数据。

通过内存交换

第一代路由器:交换功能由CPU直接控制完成,每个接收到的数据包都需要复制到系统内存中,数据转发速度受到内存带宽的限制,每个数据报需要经历两次总线传输
通过总线交换
数据报从输入端口内存通过一条共享总线传输到输出端口内存
总线竞争:交换速度受限于总线带宽
通过互连网络交换
互连网络最初是为多处理器系统设计的,用于连接多个CPU 与内存模块。常见的互连网络结构包括Banyan 网络、交叉开关(Crossbar)等,能克服总线带宽的限制。
高级设计:在一些高性能路由器中,会将一个数据报分片为固定长度的单元,然后通过交换结构传输这些单元。这种方式能提高并行度与效率,减少延迟。
输出端口

- 数据报丢失:当出现拥塞或缓冲区不足时,某些数据报可能会被丢弃。
当数据报从交换结构到达输出端口的速度快于输出链路的发送速率时,就需要在输出端口进行缓存,以防止数据丢失。
- 调度策略(或调度机制):从排队的数据报中选择要发送的数据报。
优先级调度:在调度算法中可以为不同类型的流量设置优先级
4.4 IP协议

IP分组格式

- 版本号字段占4位:IP协议的版本号(IPv4/IPv6)
- 首部长度字段占4位:IP分组首部长度 = 该字段 × 4字节
- 服务类型(TOS)字段占8位:指示期望获得哪种类型的服务,只有在网络提供区分服务(DiffServ)时使用,一般情况下不使用,通常IP分组的该字段(第2字节)的值为00H
- 总长度字段占16位:IP分组的总字节数(首部+数据)
最大IP分组的总长度:65535B
最小的IP分组首部(同时也是最小IP分组的总长度):20B
IP分组可以封装的最大数据:65535-20=65515B
(关联数据链路层)当 IP 数据包的大小 小于 46 时(以太网设备会读取 IP 的首部的长度字段以得知),以太网设备会自动在其末尾填充 0,使其大小为 46 字节。
- 生存时间(TTL)字段占8位:IP分组在网络中可以通过的路由器数(或跳步数)
路由器转发一次分组,TTL减1
如果TTL=0,路由器则丢弃该IP分组
- 协议字段占8位:指示IP分组封装的是哪个协议的数据包(6:TCP/17:UDP)
- 首部校验和字段占16位:实现对IP分组首部的差错检测,逐跳计算、逐跳校验
- 源IP地址、目的IP地址字段各占32位:分别标识发送分组的源主机/路由器(网络接口)和接收分组的目的主机/路由器(网络接口)的IP地址
- 选项字段占长度可变,范围在1~40B之间:携带安全、源选路径、时间戳和路由记录等内容,实际上很少被使用
- 填充字段长度可变,范围在0~3B之间:目的是补齐整个首部,符合32位对齐,即保证首部长度是4字节的倍数
最大传输单元(MTU):链路层数据帧可封装数据的上限
大IP分组向较小MTU链路转发时,可以被“分片”,IP分片到达目的主机后进行“重组”
IP首部的相关字段用于标识分片以及确定分片的相对顺序
- 标识字段占16位:标识一个IP分组
IP协议利用一个计数器,每产生IP分组计数器加1,作为该IP分组的标识
- 标志位字段占3位
DF = 1:禁止分片;DF = 0:允许分片
MF = 1:非最后一片;MF = 0:最后一片(或未分片)
- 片偏移字段占13位:一个IP分组分片封装原IP分组数据的相对偏移量,以8字节为单位
IP分片
假设原IP分组总长度为L,待转发链路的MTU为M,若L > M,且DF = 0,则可以/需要分片



IP编址
源地址/目的地址
接口不是端口!:主机(一个或两个接口)/路由器(多个接口)与物理链路的连接
IP地址:32比特(IPv4)编号标识主机、路由器的接口

IP子网:IP地址具有相同网络号的设备接口,不跨越路由器(第三及以上层网络设备)可以彼此物理连通的接口

特殊IP地址
NetID | HostID | 作为IP分组源地址 | 作为IP分组目的地址 | 用途 |
全0 | 全0 | 可以 | 不可以 | 在本网范围内表示本机;在路由表中用于表示默认路由(相当于表示整个Internet网络) |
全0 | 特定值 | 不可以 | 可以 | 表示本网内某个特定主机 |
全1 | 全1 | 不可以 | 可以 | 本网广播地址(路由器不转发) |
特定值 | 全0 | 不可以 | 不可以 | 网络地址,表示一个网络 |
特定值 | 全1 | 不可以 | 可以 | 直接广播地址,对特定网络上的所有主机进行广播 |
127 | 非全0或非全1的任何数 | 可以 | 可以 | 用于本地软件环回测试,称为环回地址 |
私有IP地址:只能在局域网(LAN)内部使用的IP地址,在互联网上不可直接访问。
地址范围 | 子网掩码 | 地址数量 | 常见用途 |
10.0.0.0 – 10.255.255.255 | /8 | 16,777,216 | 大型企业、数据中心 |
172.16.0.0 – 172.31.255.255 | /12 | 1,048,576 | 中型网络 |
192.168.0.0 – 192.168.255.255 | /16 | 65,536 | 家庭路由器、小型网络 |

子网掩码:网络号、子网号全取1,主机号全取0


无类域间路由CIDR:消除传统的 A 类、B 类和 C 类地址界限,融合子网地址与子网掩码,方便子网划分
子网201.2.3.64,255.255.255.192→201.2.3.64/26
路由聚合:层级编址、最长前缀匹配优先

课堂练习

IPv6
动机:32位IPv4地址空间已分配殆尽、改进首部格式
IPv6数据报格式:固定长度的40字节基本首部,不允许分片




IPv4向IPv6过渡:共存
隧道:IPv6数据报作为IPv4数据报的载荷进行封装,穿越IPv4网络

课堂练习

课堂练习


(1)202.118.1.0/25 202.118.1.128/25
(2)R1的路由表
目的网络IP地址 | 子网掩码 | 下一跳IP地址 | 接口 |
202.118.1.0 | 255.255.255.128 | - | E1 |
202.118.1.128 | 255.255.255.128 | - | E2 |
202.118.3.2 | 255.255.255.255 | 202.118.2.2 | L0 |
0.0.0.0 | 0.0.0.0 | 202.118.2.2 | L0 |
0.0.0.0/0→当找不到更具体的路由时,就使用这条路由。
(3)202.118.1.0 255.255.255.0 202.118.2.1 L0 看好谁到谁


可能的最小子网:划分出一个最小子网
101.200.0001XXXX.XXXX
101.200.00010XXX.XXXX 子网1
101.200.000110XX.XXXX 子网2
101.200.0001110X.XXXX 子网3
101.200.00011110.XXXX 子网4 最小子网
101.200.00011111.XXXX 子网5 最小子网
4.5 IP相关协议
互联网控制报文协议 ICMP
支持主机或路由器:差错(或异常)报告、网络探询
两类 ICMP 报文:
- 差错报告报文(5种)
- 目的不可达
- 源抑制(Source Quench)
- 超时/超期
- 参数问题
- 重定向 (Redirect)
- 网络探询报文(2组)
- 回声(Echo)请求与应答报文(Reply)
- 时间戳请求与应答报文

几种不发送 ICMP 差错报告报文的特殊情况:
- 对 ICMP 差错报告报文不再发送 ICMP 差错报告报文
- 除第1个IP数据报分片外,对所有后续分片均不发送 ICMP 差错报告报文
- 对所有多播IP数据报均不发送 ICMP 差错报告报文
- 对具有特殊地址(如127.0.0.0 或 0.0.0.0)的IP数据报不发送 ICMP 差错报告报文
几种 ICMP 报文已不再使用

ICMP的应用举例:Traceroute
用来显示数据包从你的主机到目标主机所经过的每一跳路由节点(路由器)
- 源主机向目的主机发送一系列UDP数据报,TTL=1、2、3…
- 当第n组数据报(TTL=n)到达第n个路由器时,路由器丢弃数据报并向源主机发送ICMP报文,报文携带路由器名称和IP地址信息
- 当ICMP报文返回到源主机时记录RTT
- UDP数据报最终到达目的主机,目的主机返回“目的端口不可达” ICMP报文,源主机停止
ICMP 无法确定、也不会决定网络通信使用 TCP 或 UDP。TCP/UDP 是应用层和传输层自己决定的,ICMP 只是 IP 层的错误报告机制。Traceroute 程序本身选择了 UDP。
课堂练习

动态主机配置协议 DHCP
一个主机如何获得IP地址?
- “硬编码”:静态配置
- DHCP
- 从服务器动态获取:IP地址、子网掩码、默认网关地址、DNS服务器名称与IP地址
- “即插即用”
- 允许地址重用
- 支持在用地址续租
- 支持移动用户加入网络


DHCP协议在应用层实现,DHCP报文封装到UDP数据报中,DHCP服务器构造ACK报文:包括分配给客户的IP地址、子网掩码、默认网关、DNS服务器地址
网络地址转换 NAT
题干中出现需要留意!看到192.168.x.x私有IP地址需要NAT!
动机:
- 只需/能从ISP申请一个IP地址,IPv4地址耗尽
- 本地网络设备IP地址的变更,无需通告外界网络
- 变更ISP时,无需修改内部网络设备IP地址
- 内部网络设备对外界网络不可见,即不可直接寻址(安全)

NAT主要争议:
- 路由器应该只处理第3层功能
- 违背端到端通信原则:应用开发者必须考虑到NAT的存在,例如P2P应用
- 地址短缺问题应该由IPv6来解决
NAT穿透问题
客户期望连接内网地址为10.0.0.1的服务器,客户不能直接利用地址10.0.0.1直接访问服务器,对外唯一可见的地址是NAT地址138.76.29.7 我想给国防科大校长黎湘写信,但我只知道国防科大的地址
解决方案1:静态配置NAT,在 NAT 路由器上将特定端口的连接请求转发给服务器
收发室:收到收件人是黎湘的信送到机关楼101
解决方案2:利用UPnP互联网网关设备协议IGD自动配置,自动请求 NAT 路由器创建端口映射
收发室:收件人黎湘?改成收件人国防科大1号信箱
解决方案3:中继,中继服务器桥接两个连接的分组
岗哨:我帮你把信转给黎校长,黎校长要是回信我再发给你
课堂练习

R2 203.10.2.2 80 192.168.1.2 80

H2 192.168.1.2 203.10.2.2
R3 203.10.2.6 203.10.2.2
R2 203.10.2.6 192.168.1.2
4.6 路由算法
网络抽象:图
寻找最小费用路径的算法
- 全局信息:所有路由器掌握完整的网络拓扑和链路费用信息,如链路状态(LS)路由算法
- 分散信息:路由器只掌握物理相连的邻居以及链路费用,邻居间信息交换、运算的迭代 过程,如距离向量(DV)路由算法
- 静态路由:手工配置,路由更新慢,优先级高
- 动态路由:路由更新快,定期更新,及时响应链路费用或网络拓扑变化
链路状态路由算法:Dijkstra算法
全局信息
计算从一个结点(“源”)到达所有其他结点的最短路径,获得该结点的转发表
迭代:k次迭代后,得到到达k个目的结点的最短路径


u到每个结点的最短路径这样看:从终点出发在每一列红圈递归着捋(y→z,v→y,w→v,u→w,u→w→v→y→z)
算法复杂性:O(n^2)
缺陷:震荡:在链路状态协议中,若链路代价或拓扑频繁变化,会导致 Dijkstra 算法频繁运行、路由路径来回变化,从而引发网络不稳定。
距离向量路由算法:Bellman-Ford方程(动态规划)


异步迭代:引发每次局部迭代的因素:局部链路费用改变/来自邻居的DV更新
分布式:每个结点只当DV变化时才通告给邻居,邻居在必要时(其DV更新后发生改变)再通告它们的邻居


无穷计数问题:好消息传得快,坏消息传得慢
节点以为绕路可以到达目标网络,而实际上目标已经彻底不可达了,但没有节点能知道这一事实。
- 好消息:例如新增一条链路时
- 好消息是正数
- 新距离比旧距离更短
- 一旦发现更短路径,节点立即更新
- 短路径会在下一轮更新快速传播整个网络
- 坏消息:例如某个目标消失或链路断开
- 节点设为不可达(∞)
- 但邻居可能仍认为自己可达
- 这种错误的“可达性”不能立即消除
- 邻居之间会反复把“错误的距离”传播给对方
- 每次加 1,慢慢上涨
- 直到达到上限(如 16),才认定不可达
- 解决办法
- 毒性逆转:如果一个结点到达某目的的最小费用路径是通过某个邻居,则通告给该邻居结点到达该目的的距离为无穷大
- 定义最大度量:定义一个最大的有效费用值,如15跳步为最大有效跳数,16跳步表示∞

层次路由
将任意规模网络抽象为一个图计算路由过于理想化,在实际网络(尤其是大规模网络)中不可行
- 网络规模:考虑数亿目的结点的网络
- 路由表几乎无法存储
- 路由计算过程的信息交换量巨大,会淹没链路
- 管理自治:每个网络的管理可能都期望自主控制其网内的路由
- 互联网:网络之网络
聚合路由器为一个区域:自治系统AS
同一AS内的路由器运行相同的路由协议(算法):自治系统内部路由协议
网关路由器:位于AS“边缘”,通过链路连接其他AS的网关路由器
转发表由AS内部路由算法与AS间路由算法共同配置
- AS内部路由算法设置AS内部目的网络路由入口
- AS内部路由算法与AS间路由算法共同设置AS外部目的网络路由入口
自治系统间路由任务


课堂练习


4.7 路由协议
Internet采用层次路由
AS内部路由协议也称为内部网关协议IGP
路由信息协议RIP(Routing Information Protocol)
距离向量路由算法
- 距离度量:跳步数(最大15跳),每条链路1个跳步
- 每隔30秒,邻居之间交换一次DV,称为通告
- 每次通告:最多25个目的子网(IP地址形式)
如果180秒没有收到通告→邻居/链路失效
- 经过该邻居的路由不可用,重新计算路由,向邻居发送新的通告,邻居再依次向外发送通告(如果转发表改变)
- 链路失效信息能否快速传播到全网?可能发生无穷计数问题
毒性逆转技术用于预防乒乓环路(另外:无穷大距离16跳)
RIP路由表是利用一个称作route-d (daemon)的应用层进程进行管理,通告报文周期性地通过UDP数据报发送
课堂练习

开放最短路径优先OSPF(Open Shortest Path First)
“开放”:公共可用
链路状态路由算法:LS分组扩散(通告)、每个路由器构造完整的网络(AS)拓扑图、利用Dijkstra算法计算路由
OSPF通告中每个入口对应一个邻居
OSPF通告在整个AS范围泛洪,OSPF报文直接封装到IP数据报中
与OSPF极其相似的一个路由协议:IS-IS路由协议
OSPF优点(RIP不具备)
- 安全:所有OSPF报文可以被认证(预防恶意入侵)
- 允许使用多条相同费用的路径(RIP只能选一条)
- 对于每条链路,可以针对不同的TOS设置多个不同的费用度量
- 集成单播路由与多播路由:多播OSPF协议(MOSPF)与OSPF利用相同的网络拓扑数据
- OSPF支持对大规模AS分层

边界网关协议BGP(Border Gateway Protocol)
事实上的标准域间路由协议,将Internet “粘合”为一个整体的关键
距离向量路由算法
eBGP:从邻居AS获取子网可达性信息
iBGP:向所有AS内部路由器传播子网可达性信息
BGP会话:两个BGP路由器交换BGP报文
BGP报文:通告去往不同目的前缀的路径(“路径向量”协议),报文交换基于半永久的TCP连接


网关路由器收到路由通告后,利用其输入策略决策接受/拒绝该路由

课堂练习










Loading...