网络层-数据平面
1. 网络层功能
| 平面 | 数据平面 | 控制平面 |
|---|---|---|
| 功能 | 局部分组转发 | 全局路由决策 |
| 对象 | 从输入链路转发到输出链路 | 从源地址传输到目的地址 |
| 方式 | 硬件:转发表 | 软件:路由选择算法 |
| 时间尺度 | 纳秒 | 毫秒 |
网络服务模型:定义了网络层中分组在发送与接收主机之间的端到端传输特性
- 确保交付:确保分组将最终到达目的地
- 时延上限:确保规定时间内分组能够到达目的地
- 有序交付:确保分组以发送的顺序到达目的地
- 带宽下限:确保网络提供的带宽至少满足某个下限值
- 安全性:在源加密并在目的地解密
因特网的网络服务模型:尽力而为服务(best-effort),既不保证按序,也不保证交付,既不保证时延,也不保证带宽
符合端到端原则,使得网络造价大大降低,运行方式灵活,能够适应多种应用
2. 路由器
2.1 流程
- 端接:通过输入端口接收来自网络的数据包
- 拆封:校验数据包的完整性,并解析网络层的首部信息
- 路由:使用目标 IP 地址查找路由表,决定数据包的下一跳地址
- 检查:根据 ACL 协议检查数据包是否符合安全策略
- 转换:根据 NAT 协议进行网络地址转换
- 排队:根据流量类型、优先级和 QoS,将数据包放入适当的队列并进行调度
- 交换:将数据包从输入端口移动到输出端口
- 排队:根据流量类型、优先级和 QoS,将数据包放入适当的队列并进行调度
- 封装:根据下一跳地址和目标网络,重新封装数据包以便在下一段链路上传输
- 端接:通过输出端口将数据包发送到网络
查找方式
- 影子副本:指在每个输入端口上维护转发表的本地副本,使得每个端口可以独立地做出转发决策,而不需要实时依赖集中式路由处理器
- 最长前缀匹配规则:在该表中寻找与分组目的地址具有最长前缀匹配的链路接口进行转发
| 交换方式 | 操作 | 性质 |
|---|---|---|
| 经内存交换 | 分组首先被存储到内存中,由CPU完成发送到输出端口 | 依赖CPU和内存,速度非常慢 |
| 经总线交换 | 通过一个共享的总线在输入端口和输出端口之间传递 | 并发转发,一次只有一个分组能跨域总线,总线的带宽决定了交换速度 |
| 经互联网交换 | 利用纵横式交换机,通过控制交叉开关进行分组转发 | 并行转发,高吞吐量和低延迟 |
2.2 排队
输入/输出排队:分组缓存在输入/输出端口队列中等待交换/传输
- 流量突发:短时间内到达大量分组
- 网络拥塞:端口处理能力有限,无法同时处理多个分组
- 队列头部阻塞(Head-of-Line Blocking, HOL):排在前面的分组阻塞了后续分组的处理
缓存大小 = 平均往返时延 × 链路容量
- 缓存太小:丢包率太高,频繁重传导致性能下降
- 缓存太大:过大的缓存会让路由器从一个转发设备变成一个存储设备,分组到达路由器之后就一直留在缓存中排队,长时间内路由器既不会转发该分组,也不会告知发送方网络拥塞
缓存膨胀(bufferbloat):路由器的缓存只是用于辅助转发,用于处理一定程度的流量突发,如果流量大到完全超过路由器的处理能力,那么路由器应该丢包以告知发送方降低发送速率或改变路由路径,而不是缓存大量分组,给发送方造成一种路由器性能过剩的错觉
2.3 调度
2.3.1 先来先服务/先进先出
分组按照到达的顺序被调度离开
2.3.2 优先权排队
根据优先级将分组分配到不同的队列,调度器优先从队列非空的最高优先权中选择一个分组传输,同一优先级队列中选择FIFO方式
非抢占式(non-preemptive):一旦分组开始传输,就不能被打断
2.3.3 轮询调度
分组先被分到不同的类,调度器在这些类之间轮流提供传输服务
保持工作排队(work-conserving):有分组在排队的时候,不允许链路空闲,即如果当前类没有分组,会立即检查下一个类
2.3.4 加权公平排队
类似循环排队,但是每个类根据自身情况会被分配到一个权值,调度器根据权值决定传输的带宽份额
2.3.5 网络中立性
主张互联网服务提供商(ISP)应平等对待所有互联网流量,不得因内容、应用、服务、用户或来源的不同而区别对待,具有以下原则:
- 无阻塞:不得屏蔽合法的流程
- 无限流:不得损害或降低合法的流量
- 无付费优先:不能收费来使某些流量优于其他流量
3. IPv4
3.1 首部
| 字段 | 长度/比特 | 功能 |
|---|---|---|
| 版本 | 4 | 指定IP协议版本,IPv4的值为4 |
| 首部长度 | 4 | 指示IP首部的长度,以32位字为单位 |
| 服务类型 | 8 | 表示数据包所需的服务质量 |
| 数据包长度 | 16 | 指定整个IP数据包的长度,以8位字节为单位 |
| 标识 | 16 | 唯一标识每个IP数据包,用于分片的重新组装 |
| 标志 | 3 | 控制和标识数据包的分片 |
| 片偏移 | 13 | 指示分片在原始数据包中的位置,用于重新组装 |
| 生存时间 | 8 | 限制数据包在网络中的生存时间,防止无限循环 |
| 协议号 | 8 | 指示IP数据包所承载的运输层协议 |
| 首部检验和 | 16 | 用于检测IP首部在传输过程中是否发生错误 |
| 源IP地址 | 32 | 发送方的IP地址 |
| 目的IP地址 | 32 | 接收方的IP地址 |
| 选项 | 可变 | 提供附加功能和控制 |
| 有效载荷 | 可变 | 实际的传输数据 |
除去选项,IPv4首部大小为固定的20字节
协议号6表示交给TCP,17表示交给UDP
3.2 编址
3.2.1 格式
点分十进制计法:地址中的每个字节用它的十进制形式书写,各字节间以英文句点隔开
特殊ip地址:预留的,不允许被使用
0.0.0.0:本地地址或默认路由地址255.255.255.255:广播地址
子网(subnet):是较大网络中的一个分段区域,由一组IP地址构成
掩码(mask):用于确定IP地址中哪些部分是子网标识,哪些部分是主机标识,其中位为1表示必须匹配,位为0表示任意匹配
子网掩码是255.255.255.0表示ip地址的前24位用于标识子网,后8位用于表示主机
接口(interface):设备与物理链路之间的边界,一个IP地址与一个接口相关联
IP地址不是与整个设备相关联,而是与设备的网络接口相关联,也就是说一个设备只要有多个网络接口,它就可以有多个IP地址
3.2.2 编址方式
分类编址:IP地址的网络部分被限制为8位、16位和24位,分别被称为A、B和C类网络
- 地址浪费:例如,一个组织需要2000台主机,使用C类网络太小,而使用B类网络又会浪费大量地址
- 缺乏灵活性:固定的网络部分长度无法适应不同规模的网络需求
无类别域间路由选择(Classless Interdomain Routing,CIDR):使用IP地址/前缀长度即a.b.c.d/x的形式,前x位用于子网部分,其余位数用于主机部分
- 灵活度高:可以根据需要划分不同大小的子网。
- 地址聚合:支持将多个小的地址块合并为一个更大的地址块。
- 路由优化:简化路由表,提高路由效率。
4. DHCP
4.1 性质
动态主机配置协议(Dynamic Host Configuration Protocol,DHCP):用于主机自动分配得到IP地址及其他网络配置参数,如子网掩码,默认网关,DNS服务器
DHCP的性质
- 即插即用(plug-and-play)/零配置(zeroconf):DHCP支持主机每连接到一个新的网络后,都能够自动分配到对应的IP地址并实现网络配置,无需任何手动操作
- 客户-服务器模式:客户是新到达子网并申请ip地址的主机,服务器是子网中的DHCP服务器
- 基于UDP:DHCP报文本身较小,且交互是短暂的,没必要使用TCP
- 中继代理:如果当前子网没有DHCP服务器,可以通过路由器与其它子网的DHCP服务器通信,以此实现DHCP服务
IP地址池:是DHCP服务器管理的一组IP地址,其跟踪每个IP地址的状态用于动态分配
- 可用(Available):未被分配给任何客户端,处于可供分配的状态
- 分配(Allocated):已分配给客户端,正在使用中,租约期间内不能再分配给其他主机
- 保留(Reserved):保留给某些特定设备,确保这些设备每次连接获得相同IP地址
4.2 流程
| 报文类型 | 说明 |
|---|---|
| Discover | 客户端发送的广播请求,用于查找可用的DHCP服务器 |
| Offer | DHCP服务器响应客户端的Discover报文,提供IP地址和其他配置信息 |
| Request | 客户端请求Offer中的IP地址 |
| Decline | 客户端通知DHCP服务器,它收到的IP地址不可用 |
| ACK | DHCP服务器确认客户端的Request报文,分配指定的IP地址并提供其他配置 |
| NAK | DHCP服务器拒绝客户端的Request报文 |
| Release | 客户端通知DHCP服务器,它已经释放了之前分配的IP地址 |
| Inform | 客户端请求额外的配置信息,但不需要IP地址的分配 |
流程
- 客户端广播Discover报文,以寻找DHCP服务器
- 服务器收到Discover报文后,广播一个Offer报文
- 客户端从收到的多个Offer报文中选择一个,广播Request报文
- 服务器收到Request报文后,广播ACK报文
为什么都是广播?
- Discover:DHCP客户不知道DHCP服务器在哪儿
- Offer:DHCP服务器不知道DHCP客户在哪儿
- Request:DHCP客户需要通知所有DHCP服务器自己的选择,让其他DHCP服务器释放暂时分配给自己的地址
- ACK:DHCP服务器还是不知道DHCP客户在哪儿
68是DHCP客户监听的端口,67是DHCP服务器监听的端口
4.3 续约
- 客户端在租约时间剩余50%的时候,向DHCP服务器单播一个Request报文请求续租
- 客户端在租约时间剩余12.5%的时候,广播一个Request报文请求续租
- 服务器响应一个ACK报文,确认续租并重新约定一个租约时间
- 服务器响应一个NAK报文,拒绝续约
- 当客户端不再需要IP地址或者租约到期,会发送Release报文通知DHCP服务器释放IP地址
5. NAT
5.1 性质
网络地址转换(Network Address Translation, NAT):是一种部署在路由器的网络技术,用于将私有网络中的 IP 地址转换为公有 IP 地址
- 私有网络:指的是专用网和局域网,在互联网中不可路由,在不同私有网络中可以重复,有三个特定地址空间
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16(代表大中小三个规模) - 公有网络:指的是互联网和广域网,在互联网中是可路由的,具有全球唯一性
NAT的意义
- 解决 IPv4 地址短缺:NAT 允许在不同的私有网络中使用相同的私有 IP 地址,只需要为不同私有网络分配不同公有 IP 地址
- 提高网络安全性:NAT 隐藏内部网络的私有 IP 地址,外部网络只能看到 NAT 设备的公有 IP 地址
- 简化网络管理:多个私有 IP 地址可以映射到同一个公有 IP 地址,降低网络管理成本
5.2 流程
NAT 类型
- 静态 NAT:将一个私有 IP 地址永久映射到一个公有 IP 地址
- 动态 NAT:从公有 IP 地址池中动态分配一个 IP 地址给内部设备
- PAT:将多个私有 IP 地址映射到一个公有 IP 地址,并通过端口号区分不同的会话
NAT 流程
- 内部设备发送数据包到外部网络,会经过 NAT 设备
- NAT 设备根据不同的方式,选择一个公有 IP 地址,将数据包的源 IP 地址和端口号替换为公有 IP 地址和端口号,并将映射关系缓存在 NAT 转换表中
- NAT 设备将转换后的数据包转发到外部网络
- NAT 设备收到外部服务器的响应数据包
- NAT 设备根据 NAT 转换表,将目标 IP 地址和端口号转换回内部设备的私有 IP 地址和端口号
- NAT 设备将转换后的数据包转发到内部网络
- 内部设备收到数据包,完成通信
6. IPv6
6.1 首部
| 字段 | 长度/比特 | 含义 |
|---|---|---|
| 版本 | 4 | 指示IP协议版本,IPv6的值为6 |
| 流量类型 | 8 | 用于分类数据包 |
| 流量标签 | 20 | 用于标识数据流,支持流量的优先级处理 |
| 有效载荷长度 | 16 | 指示数据部分长度 |
| 下一首部 | 8 | 指示数据包要交付给哪个协议(TCPorUDP) |
| 跳限制 | 8 | 类似TTL,限制数据包路由次数 |
| 源地址 | 128 | 指示数据包发送者的地址 |
| 目的地址 | 128 | 指示数据包接收者的地址 |
| 有效载荷 | 变长 | 扩展首部+实际传输的数据 |
IPv6与IPv4的核心差别
- 使用128比特地址,扩大的地址容量
- 移除了校验和、分片、选项字段,提高了路由效率
- 引入了扩展头部,支持灵活的功能扩展
6.2 IPv6编址
表示方法:128比特,是用冒号分隔的8组4位16进制数
- 前导零可以省略,
2001:0db8:0000:0000:0000:0000:0000:0001可以简化为2001:db8:0:0:0:0:0:1 - 连续的零组可以用双冒号::代替,如
2001:0db8:0000:0042:0000:0000:0000:1234可以简化为2001:db8:0:42::1234
IPv6的目的地址类型
- 单播(Unicast):一对一通信,数据从单个发送方传输到单个接收方
- 多播(Multicast):一对多通信,数据从单个发送方传输到一组指定的接收方
- 任播(Anycast):一对最近的通信,数据从单个发送方传输到一组接收方中最近的一个
6.3 IPv6迁移
- 双栈技术:在网络设备上同时运行 IPv4 和 IPv6 协议栈
- 隧道技术:将 IPv6 数据包封装在 IPv4 数据包中传输
- 协议转换技术:通过协议转换设备将 IPv6 数据包转换为 IPv4 数据包
改变网络层协议是极其困难的,因为网络层协议是互联网架构中的最核心部分,向上要调整运输层,向下要调整链路层,以及大部分应用服务都基于网络层协议来设计,牵一发而动全身
6. 泛化转发
定义:能够根据多种条件(如流量类型、服务质量、安全策略等)动态决定数据包的转发路径,而不仅仅基于目标 IP 地址
流表(flow table):存储匹配+动作的映射关系
- 匹配:数据包的特定字段,如源 IP 地址、目标 IP 地址、协议类型、端口号等
- 动作:匹配后的处理动作,如转发、丢弃、修改、复制等
7. 中间盒
中间盒(middlebox):是位于网络路径中的设备或软件,不参与传统的数据包转发,而是对数据包进行深度处理
- 地址转换:网络地址转化(NAT)、协议转换器
- 安全防护:访问控制列表(ACL)、防火墙(Firewall)、入侵检测系统(IDS)、入侵防御系统(IPS)
- 网络监控:流量分析器、数据包捕获器
- 性能优化:负载均衡器、缓存服务器、压缩设备
8. 互联网架构原则
互联网架构原则:目标是连接,工具是因特网协议,智能是端到端而不是隐藏在网络中
- 为什么工具是IP协议:因为在物理层、链路层、运输层和应用层可能具有许多协议,但是在网络层只有一个网际协议IP,因此又称为“跨越层”,即实现了隐藏底层物理技术的实现,并为上层抽象技术提供了统一的服务接口
- 为什么智能是端到端:因为网络的核心作用只是作为数据的“运输通道”,其职责是将数据从源端传输到目标端,而不涉及对数据内容的处理,降低网络的复杂性,将复杂的网络功能由应用层来处理



















