5 The Network Layer¶
说明
本文档正在更新中……
说明
本文档仅涉及部分内容,仅可用于复习重点知识
1 Overview of Network Layer¶
- 网络层:负责将数据包从发送方(源主机)跨越多个网络路由到接收方(目的主机)。它关注的是端到端的通信,可能跨越多个不同的物理网络。IP 协议是这一层的核心
- 数据链路层:负责在同一个本地网络内(例如,同一个以太网、同一个 Wi-Fi 网络内),将帧从一个设备(节点)传送到另一个直接相连的设备。它关注的是单跳通信,即在单一网段或物理链路上的数据传输。可以理解为负责最后一公里(或第一公里)的传输,确保数据在相邻设备间可靠传递
网络层的两个核心功能:
- forwarding(转发):是路由器在收到一个数据包后所执行的即时动作。它查看数据包的目的地址,查询内部的转发表,然后决定该数据包应该从哪个具体的端口发送出去
- routing(路由):是决定数据包从源到目的地的整条路径的过程。它通过运行路由协议(如 OSPF, BGP)来收集网络信息,计算最佳路径,并最终生成和更新每个路由器里的转发表
路由过程负责生成和更新转发表;而转发过程则使用这张转发表来实际运送每个数据包。简单来说,路由是决策,转发是执行
网络层设计的两个基本出发点:
- 对传输层的服务:网络层作为传输层的下层,需要为其提供服务。这里的关键设计抉择是提供面向连接的、可靠的虚电路服务(类似于电话系统),还是提供无连接的、尽最大努力交付的数据报服务(类似于邮政系统)。这个选择直接影响上层应用的开发
- 网络的内部设计:这关乎如何在网络内部实现数据包的传输。是使用虚电路方式(在通信前先建立一条逻辑路径),还是使用数据报方式(每个数据包独立路由)。这个内部设计可以与提供给上层的服务相互独立
store-and-forward packet switching(存储转发式分组交换):这是网络层(也是早期计算机网络)实现数据转发的基础性机制。其工作流程可以分解为以下步骤:
- 接收与存储:当路由器从一条输入链路开始接收一个数据包时,它不会立即将正在接收的比特转发出去
- 完整接收:路由器会等待,直到整个数据包的所有比特都到达,并将其临时存储(缓存) 在内存中
- 处理与转发:在确认整个数据包已完整无误地到达后(例如,通过 CRC 校验),路由器才会查询其转发表,决定从哪条输出链路发送,然后开始将整个数据包转发到下一个节点
网络层服务的三个基本原则,其核心思想是简化上层并保持通用性:
- 独立性:网络层的服务不应该依赖于底层使用的特定路由器品牌或技术。这保证了上层应用能在各种硬件上运行
- 透明性(屏蔽复杂性):传输层(以及更上层的应用程序)不应该关心网络底层到底有多少路由器、它们是什么型号、或者它们是如何连接(拓扑)的。网络层负责处理所有这些复杂性,为上层提供一个清晰的抽象接口
- 寻址一致性:整个网络应该使用一套统一的地址方案(如 IP 地址),这样任何主机都能用同样的方式寻址任何其他主机,无论它们位于网络的哪个位置
面向连接与无连接服务
- connection-oriented service:在发送数据之前,必须先通过信令建立一条确定的路径(虚电路)。所有数据包都按顺序沿着这条路径传输,传输结束后拆除连接。优点在于能提供有保证的服务质量
- connectionless service:每个数据包(数据报)都独立携带完整的目的地址,每个路由器根据当前网络状况为每个包独立选择路径。数据包可能走不同的路径,也可能不按顺序到达。优点是更健壮、更简单、无需建立连接的开销
在无连接服务中,网络层从传输层接收到数据后,会将其封装成独立的 datagram(数据报)。每个数据报都包含完整的目的地址。在发送数据之前,不需要像打电话一样先建立一条端到端的路径。每个数据报在网络中都是独立的个体。路由器会为每一个经过的数据报单独进行路由决策,即使它们属于同一个通信流。由于网络状况实时变化,同一源和目的地的不同数据报可能会通过不同的路径传输,从而导致乱序到达
forwarding table(转发表)是路由器进行转发决策的路线图。索引键是数据包的目的地址;对应值是为了到达该目的地,应该使用的输出接口或线路
在面向连接服务中,在通信开始之前,会先建立一条穿越网络的虚电路。这是一条预定义的路径,不同于物理电路,它是逻辑上的。每个数据包不再需要携带完整的目的地地址。取而代之的是,它只携带一个简短的连接标识符(例如,一个虚拟电路号或标签)。这个标识符在每段链路上是局部的,只在两个相邻路由器之间有意义。路由器根据数据包到达的输入接口和包内的标识符,结合其转发表,决定将其从哪个输出接口转发出去,并通常会将标识符替换为下一段链路使用的新的标识符
MPLS(多协议标签交换)
MPLS 是一种高性能的隧道技术,在 IP 网络之上提供面向连接的转发
路由器 A 为不同的连接分配不同的标识符,即使这些连接可能使用同一条虚电路。路由器可以根据这些标识符对数据进行不同的优先级处理或路由
| 数据报网络(无连接) | 虚电路网络(面向连接) | |
|---|---|---|
| 电路建立 | 不需要 | 必需 |
| 寻址 | 每个数据包都包含完整的源地址和目的地址 | 每个数据包包含一个简短的虚电路(VC)号 |
| 状态信息 | 路由器不保存连接的状态信息 | 每条虚电路都需要在路由器中占用每连接的表项空间 |
| 路由 | 每个数据包被独立路由 | 在虚电路建立时选择路由;所有数据包都遵循此路由 |
| 路由器故障的影响 | 没有影响,除了在故障期间丢失的数据包 | 所有经过故障路由器的虚电路都将被中断 |
| 服务质量 | 困难 | 如果能为每条虚电路预先分配足够的资源,则很容易实现 |
| 拥塞控制 | 困难 | 如果能为每条虚电路预先分配足够的资源,则很容易实现 |
2 Routing Algorithms¶
3 The Network Layer in The Internet¶
3.1 The IPv4 Datagram¶
报头结构:
- 固定部分:长度为 20 字节,包含 IP 数据报必须的基本字段
- 可选部分:长度可变,用于存放额外的控制信息
采用大端序网络字节顺序。数据比特的传输方向:先从左到右,再从上到下。这种顺序确保了不同系统间数据解释的一致性
Version
- 4 bit
- 功能:标识 IP 协议版本(IPv4 为 4,IPv6 为 6)
- 意义:允许网络在长期内平滑过渡到新版本协议,实现向后兼容
IHL
Internet Header Length
- 4 bit
- 计量单位:以 32 位字(4 字节)为单位计算首部长度
- 计算方式:实际字节数 = IHL 值 × 4 字节
- 取值范围:最小 5(20 字节),最大 15(60 字节)
- 实际应用:由于选项字段很少使用,绝大多数 IP 数据报的 IHL 值为 5,即标准的 20 字节首部
Different Service
Type of Service
- 8 bit
- 高 6 位:定义数据包的服务质量等级,允许网络设备根据应用需求提供不同的处理优先级
- 低 2 位:用于网络拥塞时的显式拥塞通知
- 应用示例:实时流量(IP 电话),非实时流量(FTP)
Total Length
- 16 bit
- 功能:定义整个 IP 数据报(首部 + 数据)的总长度
- 数值范围:0-65535 字节
- 实际上常见值 ≤ 1500字节,因为数据报大小通常受限于以太网的 MTU(最大传输单元)1500 字节,以避免在链路层进行分片,提高传输效率
Identification
- 16 bit
- 功能:唯一标识一个数据报的所有分片,同一个原始数据报的所有分片共享相同的标识值
DF and MF
DF(Don't Fragment):设置为 1 时,指示路由器不要对该数据报进行分片,如果数据报超过路径 MTU 且 DF 位被设置,路由器将丢弃该数据报并返回错误信息。用于路径 MTU 发现机制
MF(More Fragment):设置为 1 时,表示后面还有更多分片,最后一个分片的 MF 位设置为 0,表示分片结束
Fragment Offset
- 13 bit
- 功能:指示当前分片在原始数据报中的位置(以 8 字节为单位)
- 计算:实际字节偏移量 = 偏移值 × 8
- 限制:最大 8192 个分片(由于 13 位字段最大值为 8191)
Time to Live
TTL
- 功能:防止数据报在网络中无限循环
- 工作机制:初始由源主机设置一个值(通常为 64、128 等),每经过一个路由器,值减 1,当 TTL 值为 0 时,路由器丢弃数据包并发送 ICMP 超时消息给源主机
- 实际意义:虽然名为生存时间,但实际上是通过跳数限制来控制数据包的生命周期
Protocol
- 8 bit
- 核心功能:指定传输层协议类型,实现网络层到传输层的多路复用
- 常见协议编号:6:TCP(传输控制协议),面向连接的可靠传输;17:UDP(用户数据报协议),无连接的不可靠传输
- 协议号:连接网络层和传输层,确保数据被正确传递给相应的传输层协议
- 端口号:连接传输层和应用层,确保数据被正确传递给目标应用程序
Header Checksum
- 功能:检测 IP 首部在传输过程中是否发生错误
- 计算方法:将整个 IP 首部按 16 位(2 字节)分段,使用反码运算对所有 16 位字段进行求和,结果取反得到校验和值
- 验证过程:接收方将收到的首部(包括校验和字段)按同样方法计算,如果结果不为零,说明首部在传输中出错
- 逐跳更新:由于 TTL 字段每经过路由器都会减 1,选项字段也可能改变,因此每个路由器都必须重新计算校验和
- 仅保护首部:不保护数据部分,数据完整性由更高层协议(如 TCP)负责
Source Address and Destination Address
- 各 32 bit(4 字节)
- 源地址:标识发送数据报的主机
- 目的地址:标识接收数据报的目标主机
- 重要性:这两个字段是 IP 路由的基础,决定了数据报从源到目的地的传输路径
Options
这是 IP 首部的可变长度部分,用于提供额外的控制功能:
- 安全选项:定义数据报的安全等级和保密要求(实际中很少使用)
- 严格源路由:由发送方指定数据报必须经过的精确路径(每个路由器地址)
- 松散源路由:只指定必须经过的某些关键路由器,其余路径由网络决定
- 记录路由:每个处理数据报的路由器都会在选项中添加自己的 IP 地址,用于路径跟踪
- 时间戳:路由器不仅记录地址,还记录处理时间,用于网络性能分析
特点:
- 选项字段长度可变,最大 40 字节
- 实际网络中选项使用较少,因为会增加路由器处理负担
- 许多防火墙会拒绝带选项的数据报
Data
payload,有效负荷
包含实际要传输的高层协议数据(如 TCP 段、UDP 数据报、ICMP 消息等)。长度可变,受限于 IP 数据报总长度(最大 65535 字节)和 MTU 限制。是 IP 协议真正要传送的有用信息
3.2 Packet Fragmentation¶
不同网络技术的最大有效负荷:
- 以太网:1500 字节(最常见的 MTU 值)
- 802.11 无线网络:2304 字节(加密前的最大帧大小)
- IP 协议理论最大值:65515字节(总长度 65,355 减去 20 字节 IP 首部)
解决 MTU 不匹配的两种方案:
- 避免分片:使用路径 MTU 发现机制,源主机探测到目的地的整条路径上最小的 MTU,然后发送不超过该大小的数据包
-
接受分片:在需要时进行分片传输。存在两种重组策略
- transparent fragmentation:在分片发生后,由网络中的路由器负责重组,对端主机不可见
- nontransparent fragmentation:分片一直保持到目的主机,由最终接收方负责重组
Transparent Fragmentation
分片在网络内部(路由器)进行,重组也在网络内部(出口路由器)完成,最终主机看到的是完整的数据包,对分片过程无感知
存在的问题:
-
分片完整性识别问题:出口路由器需要确知是否已收到全部分片
- 解决方案:需要一个计数字段(记录总分片数量)或者一个结束标志位(如 IP 协议的 MF 位,当 MF = 0 时,说明是最后一个分片)
-
路由路径限制问题:所有分片必须经过同一个出口路由器。这违反了网络层的无状态设计原则,限制了负载均衡能力,降低了网络路由的灵活性,如果某个分片选择不同路径,重组将失败
Nontransparent Fragmentation
在需要分片的网络节点(路由器)进行分片,仅在最终目的主机进行重组,路由器只负责转发分片,不进行重组操作
优势:
- 降低路由器负担:路由器无需维护分片状态信息
- 提高网络灵活性:不同分片可以经过不同的网络路径
IPv4 实现这种策略:同一数据报的所有分片共享相同标识值,Fragment Offset 字段指示分片在原始数据报中的位置,MF 字段标记是否为最后一个分片。通过这些字段的组合,目的主机能够正确重组原始数据报
Path MTU Discovery
路径 MTU 发现机制
路径 MTU 是指从源到目的地整条路径上能够传输的最大数据包大小,这是路径上所有链路 MTU 的最小值
工作原理:源主机首先发送一个较大的数据包(通常设置 DF 不分片标志),如果中间路由器的 MTU 小于数据包大小,会丢弃数据包并返回 ICMP 需要分片错误消息,源主机根据返回的 MTU 信息减小数据包大小,重复此过程直到找到合适的路径 MTU
优势:避免分片(源端发送合适大小的数据包,避免中间节点分片)、动态适应(能够适应网络拓扑和 MTU 的变化)、提高效率
劣势:增加启动延迟(需要多次尝试-错误过程才能确定最佳 MTU)
3.3 IPv4 Addressing¶
IPv4 地址结构:
- 总长度:32 位二进制数,通常表示为点分十进制(如 192.168.1.1)
- 分层设计:包含网络部分和主机部分,与平坦的 MAC 地址形成鲜明对比
IP 地址标识的是网络接口,而非整台计算机,多宿主主机(连接多个网络)需要多个 IP 地址,路由器作为网络互联设备,必然拥有多个 IP 地址
IPv4 地址表示方法:
- dotted decimal notation:将 32 位地址分成 4 个 8 位组,每组转换为十进制数。每个数字范围 0-255(对应 8 位二进制)
- 十六进制表示:将 32 位地址直接转换为 8 位十六进制数
prefix:共享相同高位比特的连续地址块。通常写作网络地址/前缀长度(如 192.168.1.0/24)
3.3.1 Subnets¶
传统 IP 编址中,一个网络号对应一个物理网络。但当组织规模扩大时,单个大型网络会面临广播风暴,管理困难等问题
解决方案是进行子网划分:将一个大的 IP 地址块在内部逻辑上划分为多个子网络,每个子网有自己的子网标识,对外部网络仍显示为统一的网络地址
在划分子网的网络中,主路由器需要确定将入境数据包转发到哪个具体的子网
- 基于主机的路由表:维护一个庞大的路由表,为网络内每个主机地址单独指定出口线路。缺点是路由表规模庞大,占用大量内存
- 基于子网掩码的智能路由(实际采用方案):使用按位与运算进行子网匹配,找到匹配的子网并转发
Classful Addressing
分类寻址是在 CIDR 技术出现之前的,将 IP 地址预先划分为几个固定类别
B 类网络对大多数组织来说太大,C 类又太小
Allocating Public IP Addresses
- 顶层机构:ICANN(互联网名称与数字地址分配机构),非营利组织,负责全球互联网标识符的协调管理,核心职责:IP 地址分配 + DNS 根服务器管理
- 区域性互联网注册机构(RIRs):ARIN 北美地区,RIPE NCC 欧洲、中东和中亚地区,APNIC 亚太地区,LACNIC 拉丁美洲和加勒比地区,AfriNIC 非洲地区
- 本地组织:互联网服务提供商、大型企业等
- 终端用户:通过 DHCP 协议动态获取或静态配置 IP 地址
Classless InterDomain Routing
CIDR:无类别域间路由
随着互联网快速增长,核心路由器需要维护的路由表条目数量急剧增加,严重影响网络性能
解决方案:
- subnetting(子网划分):将大的 IP 地址块划分为更小的子网
- route aggregation(路由聚合):将多个连续的小地址块合并为一个大的地址前缀
前缀重叠:不同的路由条目可能匹配同一个目标 IP 地址。决策规则:选择匹配的所有路由中前缀长度最长的那条
假设目标 IP 为 192.168.1.5,路由表中有:192.168.0.0/16、192.168.1.0/24、192.168.1.0/28。路由器将选择 192.168.1.0/28,因为它的前缀最长,路由最具体
Subnetting vs. Aggregation
两者都能减少路由表规模,提高网络效率,优化 IP 地址空间利用率
子网划分:
- 企业内部网络分段
- 部门间网络隔离
- 提高地址利用效率
聚合:
- ISP 向上游路由通告
- 减少核心路由表条目
- 提高路由收敛速度
特殊 IP 地址:
-
0.0.0.0:默认地址- 使用场景:系统启动过程中或网络配置时
- 作为源地址:表示本主机
- 作为目标地址:表示本网络中的所有主机
- 实际应用:DHCP 客户端在获取 IP 前使用该地址
-
255.255.255.255:有限广播地址- 功能:本地网络广播
- 范围:仅在发送主机所在的物理网络段内有效
- 用途:网络发现协议,DHCP 客户端寻找服务器,本地网络管理
-
127.0.0.1:环回地址- 地址范围:127.0.0.0/8(127.0.0.1 - 127.255.255.254)
- 功能:本地环回测试
- 特性:数据包不进入物理网络,直接返回给发送主机,用于测试网络协议栈是否正常工作
- 常见用途:开发和测试网络应用程序