RETURN_TO_GRID
大学课程2025-11-15145 MIN READ

TCP-IP核心知识点

TCP-IP TCP/IP 协议、服务、套接字和端口是计算机网络通信的核心概念。下面逐一讲解:


1. TCP/IP 协议

TCP/IP(Transmission Control Protocol/Internet Protocol) 是一组用于计算机网络通信的协议集,是现代互联网的基础。

协议分层

TCP/IP 协议分为四层模型(简化版 OSI 七层模型):

  1. 应用层:提供特定的网络服务,例如 HTTP、FTP、SMTP、DNS 等。

    • 功能:为用户应用程序提供通信接口。
    • 例子:Web 浏览器使用 HTTP,电子邮件使用 SMTP。
  2. 传输层:负责端到端通信和数据传输。

    • 主要协议:
      • TCP(传输控制协议):可靠的面向连接的协议,保证数据顺序、完整性(如 HTTP)。
      • UDP(用户数据报协议):高效但不可靠的协议,用于实时通信(如视频流)。
    • 功能:数据分段、流量控制、错误检测。
  3. 网络层:负责路由和 IP 地址的管理。

    • 主要协议:
      • IP(Internet Protocol):分为 IPv4 和 IPv6,用于标识设备地址。
    • 功能:将数据分组路由到目标设备。
  4. 数据链路层:负责网络硬件的通信,例如以太网和 Wi-Fi。

工作流程

数据从应用层出发,逐层打包(加上头部信息),经过网络传输后,在目标设备按层解包还原。


2. 服务

网络服务指基于 TCP/IP 协议实现的功能和应用。

  • Web 服务:通过 HTTP 或 HTTPS 协议提供网页访问。
  • 文件传输服务:使用 FTP 协议上传和下载文件。
  • 域名解析服务:DNS 将域名(如 www.google.com)解析为 IP 地址。
  • 电子邮件服务:SMTP(发送)、POP3 或 IMAP(接收)。

这些服务运行在服务器上并监听特定的端口号。


3. 套接字(Socket)

套接字是网络通信的编程接口,用于实现通信双方的数据交换。

基本概念

  • 套接字(Socket) 是应用程序与网络通信的接口,抽象表示网络连接的两个端点。
  • 套接字由 IP 地址端口号 唯一标识。

类型

  1. 流式套接字(TCP):提供可靠的面向连接的通信。
  2. 数据报套接字(UDP):提供快速、无连接的通信。

套接字通信流程

  1. 服务端

    • 创建套接字;
    • 绑定到特定 IP 和端口;
    • 监听连接请求;
    • 接受客户端连接;
    • 发送/接收数据。
  2. 客户端

    • 创建套接字;
    • 连接到服务器 IP 和端口;
    • 发送/接收数据。

4. 端口

端口是计算机上通信程序的逻辑通道,用于区分不同的服务。

端口分类

  • 0-1023(知名端口):被常见服务保留,如:

    • 80:HTTP
    • 443:HTTPS
    • 22:SSH
    • 25:SMTP
  • 1024-49151(注册端口):分配给用户进程或应用程序。

  • 49152-65535(动态/私有端口):临时分配给客户端使用。

端口号作用

  • 服务监听:服务器通过特定端口提供服务。
  • 通信标识:客户端通过随机分配的端口与服务器建立连接。

综合实例:TCP 通信

  1. 客户端与服务器通过 IP 和端口建立 TCP 连接。

    • 服务器监听:192.168.1.10:8080
    • 客户端连接:随机分配端口,例如 192.168.1.5:60000
  2. 数据传输:

    • 客户端发送数据,服务器接收并处理。
    • 数据通过 TCP 分段 并保证顺序完整性。
  3. 连接释放: 双方通过 三次握手 建立连接,通过 四次挥手 释放连接。


总结

  • TCP/IP:互联网通信的基础协议,定义了分层通信机制。
  • 服务:通过特定协议和端口提供功能。
  • 套接字:编程接口,连接通信双方。
  • 端口:区分不同服务的逻辑编号。

IP 地址寻址是网络中数据包从源设备到目标设备的地址指引过程。简而言之,IP 地址是计算机网络中的“门牌号”,它通过确定设备在网络中的位置来确保数据正确到达目的地。IP 地址寻址涉及以下几个方面:


1. IP 地址的定义

IP 地址(Internet Protocol Address)是每个连接到网络的设备的唯一标识符,它由一串数字构成。IPv4 和 IPv6 是两种常见的 IP 地址协议。

IPv4 地址

  • IPv4 是最常用的 IP 地址格式,使用 32 位二进制数,通常以四个十进制数表示,每个十进制数之间用点分隔。
  • 格式:A.B.C.D,其中 A、B、C、D 是 0 到 255 之间的数字。
  • 例如:192.168.1.1

IPv6 地址

  • IPv6 采用 128 位地址,通常以 8 组 4 个十六进制数字表示,每组之间用冒号分隔。
  • 格式:2001:0db8:85a3:0000:0000:8a2e:0370:7334
  • 相比 IPv4,IPv6 解决了 IPv4 地址枯竭问题,提供更多的地址空间。

2. IP 地址分类与子网划分

IP 地址不仅用于设备唯一标识,还可以通过子网划分来定义网络结构。

IPv4 分类

根据网络的大小和用途,IPv4 地址被分为五类(A、B、C、D、E)。常用的三类为 A、B 和 C 类。

  • A 类(用于大型网络):
    • 地址范围:0.0.0.0127.255.255.255
    • 默认子网掩码:255.0.0.0(即前 8 位为网络地址)
    • 第一位:0
  • B 类(用于中型网络):
    • 地址范围:128.0.0.0191.255.255.255
    • 默认子网掩码:255.255.0.0(即前 16 位为网络地址)
    • 第一位:10
  • C 类(用于小型网络):
    • 地址范围:192.0.0.0223.255.255.255
    • 默认子网掩码:255.255.255.0(即前 24 位为网络地址)
    • 第一位:110
  • D 类(组播地址,用于广播):
    • 地址范围:224.0.0.0239.255.255.255
  • E 类(实验和保留地址):
    • 地址范围:240.0.0.0255.255.255.255

子网划分(Subnetting)

  • 子网掩码:用来区分网络地址和主机地址。通常使用 255.255.255.0、255.255.255.128 等形式。
  • 子网掩码与 IP 地址一起作用,指示网络中的哪一部分是网络地址,哪一部分是主机地址。
    • 例如:IP 地址 192.168.1.100,子网掩码 255.255.255.0,表示网络地址是 192.168.1.0,主机地址是 .100

3. IP 地址寻址过程

IP 地址寻址是通过查找源和目标设备的 IP 地址来进行数据传输的过程。具体包括以下几个步骤:

3.1 局部网络内寻址

在局域网(LAN)内部,设备通过 MAC 地址进行通信。使用 ARP(地址解析协议)来根据目标 IP 地址查找目标设备的 MAC 地址。

  • ARP:通过广播查询,源设备发送一个 ARP 请求,目标设备响应其 MAC 地址。

3.2 局部网络到广域网

当目标设备不在本地网络内时,数据包将通过路由器转发。

  • 默认网关:每个设备需要配置一个默认网关(通常是本地网络的路由器),当目标 IP 地址不在同一子网时,数据包会被发送到默认网关,网关再决定如何转发数据包。

3.3 路由选择

路由器根据目标 IP 地址进行路由选择,将数据包从源设备转发到目标设备。路由选择的过程中,数据包经过多个路由器,并可能会经过多个网络。

  • 路由表:每个路由器都有一个路由表,用于决定数据包的最佳转发路径。
  • 跳数(Hop Count):每经过一个路由器称为一次跳跃,路由器根据跳数来选择最佳路径。

3.4 数据包的分段与重组

如果数据包过大,超出了 MTU(最大传输单元),它会被分段。每个分段都会携带源和目标 IP 地址。到达目标设备后,数据包会被重新组装。 在使用 Wireshark 对数据包的 分段与重组 进行观察时,可以重点分析以下三个关键字段及其变化:TTL(生存时间)、分段偏移量(Fragment Offset)和标识字段(Identification)。下面分别进行讲解,并说明如何通过 Wireshark 观察这些变化。


1. 分段与重组的背景

分段是指当数据包的大小超过路径上的最大传输单元(MTU)时,IP 层会将数据包分割成多个小段。
重组是指在目的主机将这些小段重新组装成原始数据包的过程。

  • IPv4 分段:由源节点或中间路由器完成。
  • IPv6 分段:仅由源节点完成,中间路由器不分段。

2. Wireshark 中分段的关键字段
2.1 TTL(Time To Live)值
  • 定义:TTL 是 IP 数据包的生存时间,表示数据包在网络中最多能经过的路由器数。
  • 变化
    • TTL 值在每经过一个路由器时会减少 1。
    • 如果数据包分段后传输,所有分段的数据包的 TTL 值保持一致,但会随着路由器转发而减少。
  • 如何在 Wireshark 中查看
    • 打开 Wireshark 捕获的流量,找到 IPv4 数据包。
    • 在 IP 首部中,查看 Time to Live 字段。
    • 如果数据包经过多次路由,捕获点前后的 TTL 值会递减。
2.2 分段偏移量(Fragment Offset)
  • 定义:分段偏移量指示数据片段在原始数据包中的位置(以 8 字节为单位)。
  • 变化
    • 分段后的每个片段都会有不同的 Fragment Offset 值。
    • 第一个片段的偏移量为 0,第二个片段的偏移量为第一个片段的长度,以此类推。
  • 如何在 Wireshark 中查看
    1. 选择一个 IPv4 数据包。
    2. 展开 IP 首部,找到 FlagsFragment Offset 字段:
      • Fragment Offset 显示片段在原始数据包中的位置。
      • Wireshark 会显示 "Fragmented IP Protocol" 标签,表示该数据包是分段的一部分。
    3. 观察分段偏移量
      • 第一个片段的偏移量为 0。
      • 后续片段的偏移量按每片段的有效载荷字节数递增。
2.3 标识字段(Identification)
  • 定义:IPv4 数据包的标识字段用于标记属于同一原始数据包的所有片段。
  • 变化
    • 分段后的所有片段共享相同的 Identification 值,以便接收方识别并重组。
    • 每个新的原始数据包会使用不同的标识值。
  • 如何在 Wireshark 中查看
    1. 选择一个分段数据包。
    2. 展开 IP 首部,找到 Identification 字段。
      • 分段的所有片段会有相同的 Identification 值。

3. 使用 Wireshark 分析分段与重组
捕获 IPv4 分段
  1. 设置捕获过滤器:

    • 使用过滤表达式捕获 IPv4 分段数据包:

      text
      ip.flags.mf == 1 || ip.frag_offset > 0
      
      • ip.flags.mf == 1:捕获 More Fragments 标志位为 1 的数据包(表示后续还有分段)。
      • ip.frag_offset > 0:捕获分段偏移量大于 0 的数据包。
  2. 分析捕获的分段数据包:

    • 查看分段偏移量的变化: 每个数据包的 Fragment Offset 会递增。
    • 查看标识字段的相同值: 所有分段的标识字段一致,表示它们属于同一个原始数据包。
    • 确认 TTL 值: 检查分段的数据包 TTL 值是否随着路径转发递减。
捕获 IPv6 分段
  1. IPv6 分段使用 分段扩展头部(Fragment Extension Header),不像 IPv4 使用 IP 首部标志。

  2. 设置过滤器:

    text
    ipv6.nxt == 44
    
    • nxt == 44:表示扩展头部类型为分段。
  3. 分析 IPv6 数据包:

    • 展开 IPv6 首部并找到 Fragment Header
    • 查看片段标识符(类似于 IPv4 的标识字段)。
    • 检查分段偏移量字段。

4. Wireshark 分段与重组示例
示例 1:IPv4 分段

假设一个 3000 字节的数据包在以太网链路上传输(MTU 为 1500 字节):

  • 分段 1:偏移量为 0,标志 MF = 1,长度 1500 字节。
  • 分段 2:偏移量为 185(1500/8),标志 MF = 1,长度 1500 字节。
  • 分段 3:偏移量为 370(3000/8),标志 MF = 0,长度 520 字节。

在 Wireshark 中可以观察到:

  • Fragment Offset 字段依次为 0、185、370。
  • 所有片段的 Identification 字段值相同。

示例 2:IPv6 分段

一个 3000 字节的数据包在 MTU 为 1500 的链路上传输:

  • 分段 1:偏移量为 0,长度 1440(1500-IPv6 首部和扩展头部长度)。
  • 分段 2:偏移量为 1440,长度 1440。
  • 分段 3:偏移量为 2880,长度 120 字节。

在 Wireshark 中可以观察到:

  • IPv6 数据包包含 Fragment Header 扩展头部。
  • Fragment OffsetIdentification 均可见。

5. 注意事项
  • ICMP 分段不可达:如果分段后的数据包被中间路由器丢弃(如 MTU 太小),可能会看到 ICMP "Fragmentation Needed" 消息。
  • Wireshark 重组功能:Wireshark 支持对捕获的分段进行重组,显示完整的原始数据包。
    • 设置:Edit > Preferences > Protocols > IPv4 > Reassemble fragmented IP datagrams

通过以上步骤,你可以使用 Wireshark 深入理解数据包的分段与重组过程,以及 TTL、分段偏移量等字段的变化。


4. 私有 IP 地址与公网 IP 地址

IP 地址有公网和私有之分,主要用于区分是否直接连接互联网。

私有 IP 地址

私有 IP 地址是为局部网络保留的 IP 地址,不直接在互联网中使用。以下是私有 IP 地址的范围:

  • A 类:10.0.0.010.255.255.255
  • B 类:172.16.0.0172.31.255.255
  • C 类:192.168.0.0192.168.255.255

公网 IP 地址

公网 IP 地址由互联网服务提供商(ISP)分配,可以直接连接到互联网。每个连接到互联网的设备都需要一个唯一的公网 IP 地址。

NAT(网络地址转换)

由于公网 IP 地址有限,许多设备使用私有 IP 地址连接到互联网。路由器通过 NAT 将局部网络中的私有 IP 地址转换为一个或多个公网 IP 地址进行外部通信。


5. IP 地址的动态与静态分配

  • 静态 IP 地址:手动设置和配置的固定 IP 地址,通常用于服务器等需要稳定 IP 地址的设备。
  • 动态 IP 地址:由 DHCP(动态主机配置协议)自动分配的 IP 地址,适用于大多数客户端设备。

DHCP(动态主机配置协议)

  • DHCP 服务器根据配置的 IP 池动态分配 IP 地址,减少了手动配置的工作。
  • 客户端设备在连接网络时向 DHCP 服务器请求 IP 地址,并获得一个可用的 IP 地址。

6. 路由与寻址总结

IP 地址寻址是计算机网络通信的基础,涉及 IP 地址的分类、子网划分、路由器的选择以及数据包的分段与重组。理解 IP 地址和路由机制对于构建高效的网络架构至关重要。 广播(Broadcast)、单播(Unicast)以及其他类型的传输方式(如多播(Multicast)和任何播(Anycast))是网络通信中用于描述数据包传输目标的方式。它们的主要区别在于目标设备的数量和传输的范围。

1. 单播(Unicast)

  • 定义:单播是最常见的通信方式,指的是数据包从源设备发送到单个目标设备。每个数据包都只能传送给一个特定的目标。
  • 特点
    • 一对一通信。
    • 每个数据包都有源 IP 和目标 IP。
    • 网络上的其他设备不会接收到此数据包。
  • 用途
    • 适用于大多数应用,如 HTTP 请求、FTP 文件传输、电子邮件等。

例子

  • 客户端访问 Web 服务器:当你在浏览器中输入 URL 并访问网站时,客户端向服务器发送一个单播请求,服务器返回数据包。

2. 广播(Broadcast)

  • 定义:广播是指数据包从源设备发送到网络上所有设备。即,源设备向整个网络或子网内的所有设备广播一个数据包,每个设备都会接收到该数据包。
  • 特点
    • 一对多(但不是无限多,通常是子网内所有设备)。
    • 使用特殊的广播地址进行发送,常见的广播地址是 255.255.255.255(对于局部网络)或子网广播地址。
    • 在 IPv4 中,广播是支持的,但在 IPv6 中,已被移除。
  • 用途
    • 用于需要向所有设备发送相同信息的场景,例如 DHCP 服务、ARP 请求等。

例子

  • ARP 请求:当设备需要查找某个 IP 地址的 MAC 地址时,会发送一个广播包,所有在同一局域网内的设备都会接收到该请求,但只有目标设备会响应。

3. 多播(Multicast)

  • 定义:多播是指数据包从源设备发送到多个目标设备,但不是所有设备。多播通信使用特定的多播地址(例如,IPv4 中的 224.0.0.0233.255.255.255)来选择接收该数据包的设备。
  • 特点
    • 一对多通信。
    • 不是向所有设备广播,而是向订阅了该多播地址的设备发送数据包。
    • 使用多播协议(如 IGMP)来管理哪些设备订阅了某个多播组。
  • 用途
    • 常用于视频会议、实时视频流、广播电视信号等需要高效传输给多个设备的场景。

例子

  • IP 组播:当一个视频流平台向多个用户推送相同的视频流时,可以使用多播技术,减少每个用户单独接收数据的负担。

4. 任播(Anycast)

  • 定义:任播是指数据包从源设备发送到最近的一个目标设备(即网络中有多个设备设置相同的任播地址)。这种方式在某些网络中,数据包到达的目标设备可能是一个“任意”的设备,但一般是通过路由算法来确保到达最近的一个设备。
  • 特点
    • 一对最近的“一个”设备。
    • 使用特定的任播地址,目标地址相同,但路由器通过算法决定将数据包送达网络上最接近的一个设备。
    • 主要依赖于路由器的路径选择(通常是最短路径)。
  • 用途
    • 任播常用于负载均衡、DNS 解析等应用,尤其是需要选择最优路径或者最快响应的场景。

例子

  • DNS 任播:当你请求某个域名时,多个 DNS 服务器可能设置了相同的任播地址,客户端会连接到响应速度最快的 DNS 服务器。

总结:广播、单播、多播与任播的区别

DATA_TABLE
类型描述目标设备使用的地址类型应用场景
单播一对一通信,源到单个目标设备单个目标设备单个设备的 IP 地址HTTP 请求、FTP 文件传输等
广播一对所有设备的通信,发送到整个网络网络中所有设备特定广播地址(如 255.255.255.255)ARP 请求、DHCP 服务、局域网广播等
多播一对多通信,发送到多个订阅者多个订阅设备多播地址(如 224.0.0.0 到 233.255.255.255)实时视频流、视频会议、组播服务等
任播一对最近的目标设备通信最接近的目标设备任播地址DNS 服务器、负载均衡、CDN 等

选择何时使用哪种传输方式?

  • 单播:当你只需要和一个设备进行通信时,例如大部分互联网应用(Web、FTP)。
  • 广播:当你需要向同一子网中的所有设备发送信息时,例如局域网中的设备发现和配置。
  • 多播:当你需要向多个特定设备发送数据时,尤其是那些需要接收相同内容的设备,比如实时流媒体传输。
  • 任播:当你希望向多个可能的接收者发送数据,但实际上只希望数据到达最接近的一个设备时,例如负载均衡或最优响应的 DNS 服务器。

这些传输模式为网络中数据的高效传输提供了不同的解决方案,根据需求选择合适的方式可以提高网络性能和通信效率。

IPv4 和 IPv6 是两种不同版本的互联网协议(IP)。它们在多个方面存在显著差异,尤其是在地址空间、协议头格式、路由效率、安全性等方面。下面是它们的主要差异:

1. 地址长度与表示

  • IPv4

    • 地址长度:32 位(4 字节)。
    • 地址表示:使用点分十进制表示法,格式为 A.B.C.D,其中 A、B、C、D 是 0 到 255 之间的整数。
    • 例子192.168.1.1
    • 可用地址数:大约 43 亿个(2^32 个地址),已接近耗尽。
  • IPv6

    • 地址长度:128 位(16 字节)。
    • 地址表示:使用冒号分隔的十六进制表示法,格式为 xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
    • 例子2001:0db8:85a3:0000:0000:8a2e:0370:7334
    • 可用地址数:几乎是无限的(2^128 个地址),足以满足未来互联网设备的需求。

2. 地址类型

  • IPv4
    • 公共IP私有IP:IPv4 地址中有一部分是私有的(如 192.168.x.x),用于局域网内通信。公网地址有限。
    • 广播:IPv4 支持广播通信,数据可以发送到子网内所有设备。
  • IPv6
    • 无广播:IPv6 不支持广播通信,代之以多播和任播通信。
    • 更丰富的地址类型
      • 单播(Unicast):一个源设备到一个目标设备。
      • 多播(Multicast):一个源设备到多个目标设备(更高效)。
      • 任播(Anycast):一个源设备到最近的目标设备(通常是多个设备使用相同的地址)。

3. 配置与管理

  • IPv4

    • 静态配置:IPv4 地址通常需要手动配置,特别是在服务器或某些设备上。
    • 动态配置:使用 DHCP(动态主机配置协议)来动态分配地址,但仍然有一定的手动管理工作。
  • IPv6

    • 自动配置(SLAAC):IPv6 支持自动配置,通过链接本地地址或使用无状态自动地址配置(SLAAC)功能,设备可以自动获取地址,无需 DHCP。
    • 简化配置:无需 NAT(网络地址转换),每个设备都可以拥有唯一的全球可路由地址。

4. 头部格式

  • IPv4

    • IPv4 头部较复杂,包含多个字段,如版本、源 IP、目标 IP、标识符、标志、TTL(生存时间)等。
    • IPv4 头部长度可变,需要额外字段来处理选项。
  • IPv6

    • IPv6 头部简化,去除了许多不常用的字段,如校验和。主要包括版本、源 IP、目标 IP 和跳数(Hop Limit)等。
    • IPv6 头部长度固定,简化了路由器处理的工作。

5. 路由效率

  • IPv4

    • 由于地址空间有限,IPv4 地址需要通过 NAT(网络地址转换)来实现私有地址和公网地址之间的映射,这增加了路由表的复杂度和处理开销。
    • IPv4 路由的表项管理复杂,可能导致路由器处理速度变慢。
  • IPv6

    • IPv6 设计时就考虑到更大的地址空间,不再需要 NAT,可以实现设备间的直接通信(端到端地址)。
    • 路由表更加简洁,路由选择和转发更加高效。

6. 安全性

  • IPv4
    • IPv4 安全性较弱,安全功能(如 IPsec)是可选的,需要手动配置。
  • IPv6
    • IPv6 在设计时就考虑了安全性,IPsec(Internet Protocol Security)被内置为必选项。通过 IPsec 加密和认证,IPv6 可以提供更强的安全保护。
    • 更好的防火墙支持,因为每个设备都可以直接通过全球唯一地址与外部设备通信,避免了 NAT 障碍。

7. 迁移与兼容性

  • IPv4

    • 广泛使用:IPv4 是目前互联网上最常见的协议,几乎所有的设备和网络都支持。
    • IPv4 地址枯竭:由于 IPv4 地址的有限性,已经无法满足日益增加的设备需求,特别是在移动互联网和 IoT(物联网)时代。
  • IPv6

    • 过渡期:IPv6 和 IPv4 是兼容并行的,当前很多网络采用双栈(Dual Stack)技术,即同时支持 IPv4 和 IPv6。
    • IPv6 迁移:虽然 IPv6 提供了几乎无限的地址空间,但全球范围内的迁移过程较慢,主要是因为 IPv6 部署需要设备支持和网络基础设施的升级。

8. 性能

  • IPv4

    • 由于 NAT 和地址映射等机制,IPv4 网络在处理时可能会稍显复杂,尤其是跨网络通信时。
  • IPv6

    • IPv6 没有 NAT,因此能提供更直接、更简洁的连接路径。
    • 由于 IPv6 具有更简洁的头部格式和路由选择机制,在某些场景下可以提高传输效率。

9. 地址分配与效率

  • IPv4
    • 地址池有限,经过了多次划分,许多地址被预留或浪费,导致资源不够充足。
  • IPv6
    • IPv6 地址空间巨大,每个设备都有充足的地址资源,几乎不可能出现地址枯竭的情况。

总结:IPv4 和 IPv6 主要差异

DATA_TABLE
特性IPv4IPv6
地址长度32 位(4 字节)128 位(16 字节)
地址表示法十进制点分格式(如 192.168.1.1十六进制冒号分隔格式(如 2001:0db8:85a3::
可用地址数大约 43 亿几乎无限
地址类型单播、广播、私有地址、公共地址单播、多播、任播
头部格式复杂,可变长度简化,固定长度
自动配置支持 DHCP支持无状态自动配置(SLAAC)
路由效率需要 NAT,路由复杂不需要 NAT,路由简化
安全性可选 IPsec内建 IPsec 支持
广播支持支持广播不支持广播
性能由于 NAT 和复杂路由,可能较慢更简洁的路由和头部,传输更高效
迁移难度已广泛使用,但地址枯竭需要过渡,仍在部署中

总之,IPv6 解决了 IPv4 地址枯竭的问题,并提供了更高效的路由、简化的配置和更好的安全性。虽然 IPv6 提供了许多优点,但由于全球范围内的迁移仍在进行中,IPv4 仍然是当前互联网的主流协议。 IPv4 和 IPv6 数据包在结构和处理方式上有很多不同之处。以下是对两者数据包的详细比较,包括头部结构、字段以及它们如何影响数据的传输。

1. IPv4 数据包结构

IPv4 数据包由两部分组成:

  • IPv4 头部:包含数据包的控制信息和路由信息。
  • 数据部分:即实际传输的数据(比如网页、文件等内容)。

IPv4 头部格式

IPv4 头部的结构比较复杂,包含多个字段,长度最小为 20 字节,最多为 60 字节(如果有选项字段)。头部的各个字段的作用如下:

DATA_TABLE
字段长度描述
版本(Version)4 位表示 IP 协议的版本,IPv4 为 4
首部长度(IHL)4 位指示 IP 头部的长度,以 4 字节为单位。
服务类型(TOS)8 位控制服务质量(QoS)的字段,常用于区分不同类型的数据流。
总长度(Total Length)16 位包括头部和数据部分的总长度,单位为字节。
标识符(Identification)16 位唯一标识数据包,用于数据包分片和重组。
标志(Flags)3 位控制数据包的分片行为。
片偏移(Fragment Offset)13 位指示当前分片相对于原始数据包的偏移量。
生存时间(TTL)8 位表示数据包在网络中的最大传输跳数。
协议(Protocol)8 位指示数据部分的协议类型(如 TCP、UDP、ICMP 等)。
头部校验和(Header Checksum)16 位用于验证头部数据的完整性。
源 IP 地址(Source IP Address)32 位源设备的 IP 地址。
目的 IP 地址(Destination IP Address)32 位目标设备的 IP 地址。
选项(Options)可选可选字段,包含一些额外的信息,通常用于调试和特殊需求。
数据部分(Data)可变实际传输的数据,长度可以根据总长度和头部长度的差异来计算。

IPv4 数据包的处理

  • 分片与重组:IPv4 支持数据包分片,当数据包大小超过最大传输单元(MTU)时,它会被分片。每个分片会包含一个分片标识符,目标设备会根据这些信息将分片重新组装成完整的数据包。
  • 地址配置:IPv4 地址需要通过手动配置或使用 DHCP 来分配。
  • NAT:IPv4 中的私有地址和公网地址之间通常使用 NAT(网络地址转换)进行转换,以节省 IP 地址。

2. IPv6 数据包结构

IPv6 数据包相比 IPv4 简化了许多字段,使得数据包头部更加简洁且高效。IPv6 头部的长度固定为 40 字节,不存在可变长度的问题。

IPv6 头部格式

DATA_TABLE
字段长度描述
版本(Version)4 位表示 IP 协议的版本,IPv6 为 6
流量类别(Traffic Class)8 位类似于 IPv4 的 TOS,指示流量的优先级。
标签(Flow Label)20 位用于标识数据流,以便对特定的数据流提供更好的服务。
有效载荷长度(Payload Length)16 位数据部分的长度,不包括头部。
下一个头部(Next Header)8 位表示数据部分的协议类型(如 TCP、UDP、ICMPv6 等)。
跳数限制(Hop Limit)8 位路由器转发数据包时,每经过一个路由器,该值减 1。与 IPv4 的 TTL 类似。
源 IP 地址(Source IP Address)128 位源设备的 IPv6 地址。
目的 IP 地址(Destination IP Address)128 位目标设备的 IPv6 地址。

IPv6 数据包的处理

  • 简化的头部格式:IPv6 删除了 IPv4 中的许多不常用字段(如头部校验和和片偏移等),使得数据包头部更简洁,处理速度更快。
  • 不支持分片:IPv6 不支持由路由器进行分片,分片的工作转交给源设备。在发送数据时,源设备会根据目标网络的 MTU 来决定是否需要分片。
  • 没有广播:IPv6 不支持广播,而是通过多播(Multicast)和任播(Anycast)来实现类似的功能。
  • 自动配置:IPv6 支持无状态自动配置(SLAAC),设备可以通过广播一个请求,自动获取地址并与其他设备进行通信。
  • 地址分配:IPv6 地址的分配通常通过 SLAAC 或 DHCPv6 进行。

3. IPv4 与 IPv6 数据包的比较

DATA_TABLE
特性IPv4 数据包IPv6 数据包
头部长度20 到 60 字节(可变长度)40 字节(固定长度)
版本字段4(表示 IPv4)6(表示 IPv6)
协议字段8 位(如 TCP、UDP、ICMP)8 位(与 IPv4 类似,表示下一个头部协议类型)
源/目标 IP 地址32 位(IPv4 地址)128 位(IPv6 地址)
分片支持分片与重组,路由器进行分片不支持路由器分片,由源设备进行分片
地址配置通过 DHCP 或手动配置支持无状态自动地址配置(SLAAC)
NAT(网络地址转换)常见,用于连接私有网络与公网不需要 NAT,设备可以直接通信
地址类型单播、广播、私有地址、公共地址单播、多播、任播
头部校验和有,确保头部数据完整性无,简化了头部
路由效率相对较复杂,尤其在使用 NAT 和路由选择时路由选择和处理更加简洁高效,去除了 NAT 问题
安全性可选(需要 IPsec 配置)内建 IPsec 支持

总结

  • IPv4 数据包结构较为复杂,包含更多的字段和功能(如分片、广播等),且需要 NAT 来处理私有地址和公网地址之间的转换。
  • IPv6 数据包则简化了许多 IPv4 中复杂的字段,采用固定长度的头部格式,不再支持广播,而是通过多播和任播来实现类似功能。IPv6 还提供了更高效的路由、直接的端到端通信以及更大的地址空间。

随着 IPv6 的普及,越来越多的网络和设备将采用 IPv6,以便解决 IPv4 地址枯竭的问题,并且享受更高效、更安全的网络通信体验。 在 IPv6 中,扩展头部(Extension Headers)是为了提供灵活的、附加的功能而设计的,它们被附加在标准 IPv6 头部之后。IPv6 扩展头部按照一定的顺序和规则进行排列和处理,每个扩展头部提供了不同的功能。下面是关于 扩展头部顺序 和一些常见扩展头部类型的详细讲解。

IPv6 扩展头部的顺序

IPv6 数据包中的扩展头部是按照一定顺序排列的。每个扩展头部都有一个 Next Header 字段,这个字段指示下一个头部的类型或协议。扩展头部必须按照以下的顺序来排列:

  1. 跳数限制头部(Hop-by-Hop Options Header):如果存在,它必须出现在 IPv6 数据包的标准头部之后。
  2. 目的地选项头部(Destination Options Header):可以在路由头部之后(如果存在路由头部)。
  3. 路由头部(Routing Header):在目的地选项头部之后。
  4. 分段头部(Fragment Header):必须出现在所有其他扩展头部之后,但在数据部分之前。
  5. 认证头部(Authentication Header,AH)封装安全有效载荷(ESP)头部:用于提供数据包的安全性和认证,通常位于数据部分之前。
  6. 数据部分:实际传输的数据。

如果存在多个扩展头部,必须遵循这个顺序。

1. 逐跳选项拓展首部(Hop-by-Hop Options Header)

逐跳选项扩展头部(Hop-by-Hop Options Header)是专门为需要路由器逐跳处理的信息设计的。这些选项通常在数据包经过每个路由器时都会被处理。

  • 功能:这个扩展头部包含一些需要每个路由器都处理的信息,例如用于网络调试的选项或特定路由器的处理要求。
  • 处理顺序:它位于 IPv6 头部之后,必须由每一个中间路由器(即每一跳)处理,直到数据包到达目的地。

格式

  • Next Header:指示紧随其后的头部类型。
  • Header Extension Length:扩展头部的长度。
  • Options:实际的选项数据,可能包含不同的网络操作、性能监控等信息。

2. 目的地选项拓展首部(Destination Options Header)

目的地选项头部是仅在目的地设备上处理的扩展头部。这个头部用于传递目标设备需要知道的信息。

  • 功能:包含目标设备特定的选项,通常用于传输一些额外的路由信息、设备配置参数或协议选项。
  • 处理顺序:目的地选项头部位于路由头部后(如果存在),并且只在目标设备上处理。

格式

  • Next Header:指示紧随其后的头部类型。
  • Header Extension Length:扩展头部的长度。
  • Options:目标设备需要处理的选项数据。

3. 路由拓展首部(Routing Header)

路由扩展头部允许源设备指定一个或多个经过的中间路由器。IPv6 路由头部支持源路由,源设备可以指定路径。

  • 功能:指定数据包经过的路径。路由头部允许源设备向数据包添加路由信息,指示数据包应该经过哪些特定的路由器。
  • 处理顺序:路由头部位于目的地选项头部之后,并且它只在目标设备或指定的路由器上处理。

格式

  • Next Header:指示紧随其后的头部类型。
  • Routing Type:指定路由头的类型。
  • Route Data:包含中间路由器的地址列表。

4. 分段拓展首部(Fragment Header)

IPv6 不允许路由器分片,而是由源设备根据路径 MTU(最大传输单元)来进行分片。分段头部用于标识和重新组装这些分片数据。

  • 功能:当数据包需要分片时,源设备会生成一个分段头部,标识分片的顺序和其他重要信息。分片的各部分会通过该头部进行重组。
  • 处理顺序:分段头部必须位于所有其他扩展头部之后,但在数据部分之前。

格式

  • Next Header:指示紧随其后的头部类型。
  • Identification:一个唯一标识符,用于标识所有属于同一数据包的分片。
  • Fragment Offset:标识当前分片的偏移量。
  • More Fragments:如果数据包还有更多分片,则设置此标志。

5. 认证拓展首部(Authentication Header,AH)

认证头部提供数据包的完整性验证和认证,确保数据包在传输过程中没有被篡改。

  • 功能:通过认证头部,IPv6 数据包的接收方可以验证数据包在传输过程中是否被修改,确保数据包的完整性。
  • 处理顺序:认证头部通常位于数据部分之前,并且与 IPsec 安全协议一起使用。

格式

  • Next Header:指示紧随其后的头部类型。
  • SPI(Security Parameters Index):与加密密钥相关的索引。
  • Sequence Number:防止重放攻击的序列号。
  • Authentication Data:认证数据,用于验证数据包完整性。

6. 封装安全有效载荷拓展首部(Encapsulating Security Payload Header,ESP)

ESP 头部提供数据的加密、认证和完整性保护,确保数据包的保密性和完整性。

  • 功能:提供加密和认证保护,以确保数据包的机密性、完整性和身份验证。通常与 IPsec 一起使用,应用于数据包的加密和保护。
  • 处理顺序:ESP 位于认证头部之后,并在数据部分之前。

格式

  • Next Header:指示紧随其后的头部类型。
  • SPI:与安全相关的索引,用于标识安全关联。
  • Sequence Number:防止重放攻击的序列号。
  • Encrypted Data:加密数据部分。
  • Authentication Data:认证数据。

7. 超大包(Jumbo Payload Option)

超大包选项是一个特殊的扩展头部,用于支持传输非常大的数据包。它允许数据包的有效载荷大于通常的最大 65,535 字节限制。

  • 功能:扩展 IPv6 的有效载荷长度,允许传输更大的数据包。
  • 处理顺序:位于扩展头部之后,数据部分之前。

格式

  • Next Header:指示紧随其后的头部类型。
  • Jumbo Payload Length:指定有效载荷的长度。

8. 服务质量(Quality of Service,QoS)

服务质量(QoS)主要通过流量类(Traffic Class)字段来标识,允许区分不同的数据流,以便优先处理某些流量,如实时通信或高优先级数据。

  • 功能:IPv6 通过 流量类 字段(Traffic Class)和 流标签(Flow Label)字段提供对不同流量的优先级标识和处理。
  • 处理顺序:服务质量信息通常在 IPv6 头部中进行标识,作为整体的 QoS 策略的一部分。

格式

  • Traffic Class:用于区分不同的数据流。
  • Flow Label:标识数据流,帮助流量优化。

9. 路由警告语(Routing Alerts)

路由警告语用于在数据包经过路由器时传递特殊警告或信息。

  • 功能:允许数据包传递控制或警告信息,通常用于调试或网络控制。
  • 处理顺序:可以位于路由选项头部之后。

格式

  • 警告类型:警告信息的类型。
  • 警告数据:具体的警告数据内容。

总结

IPv6 的扩展头部通过不同的类型提供了多种功能,增强了协议的灵活性和扩展性。扩展头部的顺序和处理方式必须遵循特定的规则,确保每个头部能按需处理,且不影响其他头部的功能。通过这些扩展头部,IPv6 支持了更复杂的功能,如路由控制、分段、加密、认证和服务质量等。

IPv6 MTU(最大传输单元)和数据包处理

在网络中,最大传输单元(MTU) 指的是一个网络层(如 IPv6)所能传输的最大数据包大小。MTU 的大小对于网络性能和效率至关重要,过大的数据包可能导致碎片化和传输延迟,而过小的 MTU 则可能导致额外的协议开销。

IPv6 的 MTU 和数据包处理机制与 IPv4 有一些显著的差异,特别是在处理分片(fragmentation)方面。理解这些差异对优化网络性能、减少延迟以及避免不必要的分片非常重要。

IPv6 MTU 的定义与影响

  • IPv6 的默认 MTU:IPv6 默认规定了每个链路的最小 MTU 为 1280 字节。这意味着任何 IPv6 数据包都必须能够在网络中以至少 1280 字节的大小传输,这包括 IPv6 头部和数据部分。

  • 链路特定的 MTU:尽管默认的最小 MTU 为 1280 字节,但实际的 MTU 大小可能因链路类型(如以太网、Wi-Fi、光纤等)而有所不同。不同的物理链路可以有不同的 MTU 值(例如,常见的以太网 MTU 为 1500 字节)。

  • 影响:IPv6 网络中数据包的大小受到链路的 MTU 限制。如果数据包超出了链路的 MTU,则需要进行分片,或者发送失败(如果源节点或路由器不支持分片)。

IPv6 中的分片机制

在 IPv4 中,分片可以在路由器之间进行处理,路由器会根据链路的 MTU 将数据包分片;而在 IPv6 中,分片只由源节点(即发送数据包的设备)处理,中间路由器不进行分片操作

IPv6 分片的工作机制

  • 源节点分片:在发送数据包之前,源节点会检查路径上的链路 MTU,并根据路径 MTU 进行适当的分片。

  • 分片头部:如果源节点确定需要分片,它会将数据包分成多个片段,并在每个片段的开头添加一个 IPv6 分段头部(Fragment Header)。该分段头部包含:

    • Identification:一个唯一标识符,用于标识所有属于同一数据包的分片。
    • Fragment Offset:指示当前分片在原始数据包中的偏移位置。
    • More Fragments 标志:指示该分片后是否还有其他分片。
  • 中间路由器:IPv6 中的路由器不会对数据包进行分片。如果数据包过大,中间路由器会丢弃该数据包并向源节点返回一个 ICMPv6 "Packet Too Big"(数据包太大) 消息,告知源节点调整数据包的大小。

  • 目标节点重组分片:当数据包到达目标设备时,目标设备会根据每个分片的标识符和偏移量对分片进行重组,还原出完整的原始数据包。

IPv6 数据包的处理

IPv6 数据包的处理可以分为几个阶段,主要包括数据包的形成、传输、路由、分片(如有必要)和接收。

1. 数据包的形成

当源设备要发送数据包时,IPv6 会首先为数据包生成一个 IPv6 头部,头部包括以下内容:

  • 源地址:发送设备的 IPv6 地址。
  • 目标地址:接收设备的 IPv6 地址。
  • 流标签:用于标识同一流的数据包。
  • 有效载荷长度:数据部分的长度。
  • 下一个头部字段:指示数据包的后续部分(如扩展头部或传输层协议)的类型。

如果需要,源节点会根据链路的 MTU 进行数据包的分片,并添加适当的分段头部。

2. 数据包的路由

数据包被路由器转发至目标设备。每个路由器会检查数据包的目标地址,并根据路由表决定下一跳。路由器将 IPv6 数据包向目标设备转发,直到数据包到达目的地。

  • 如果数据包在路由器之间通过链路上的 MTU 限制而无法传输,路由器将丢弃数据包并返回 ICMPv6 "Packet Too Big" 消息,告知源设备调整数据包大小。

3. 分片处理

如果数据包需要分片,源设备会在发送数据包之前将其分割成多个小块,并为每个分片附加分片头部。分片头部允许接收方在接收到所有分片后重新组装完整的数据包。

  • 分片头部 会在每个数据包的开头添加,用于标识分片的序号、偏移量以及是否有更多的分片。

  • 接收方设备会根据分片头部的信息重新组装这些分片。如果任何一个分片丢失或损坏,整个数据包会被丢弃,直到所有的分片都被成功接收。

4. 目标节点的数据包接收

目标节点接收到完整的数据包后,会检查数据包的有效性和头部字段。如果存在扩展头部(如目标选项头部、路由头部等),则按照扩展头部的顺序进行处理。

  • 如果数据包没有分片,目标设备会直接传递有效载荷给上层协议(如 TCP、UDP 或 ICMPv6)。
  • 如果数据包包含多个分片,目标设备会根据分片头部的标识符和偏移量对分片进行重组,直到数据包的所有分片都接收完毕。

IPv6 中的 MTU 路径发现(Path MTU Discovery)

为了避免分片,IPv6 使用 路径 MTU 发现(Path MTU Discovery, PMTUD) 机制。路径 MTU 发现允许源节点探测从源到目的地的路径上的最小 MTU 值,从而确定可以发送的最大数据包大小。

  • 工作原理:源节点发送一个带有初始数据包的 ICMPv6 请求,目标节点返回的 ICMPv6 "Packet Too Big" 消息告诉源节点该数据包太大,需要减少数据包大小。
  • 减少数据包大小:源节点会根据返回的 ICMPv6 消息,减小数据包的大小,直到找到一个能够通过所有链路的最大数据包大小。

IPv6 和 MTU 的总结

  • IPv6 的默认 MTU 是 1280 字节,且每个链路的 MTU 大小可能不同。
  • IPv6 不允许路由器进行分片,而是将分片责任交给源设备。路由器仅在数据包超过链路 MTU 时返回 ICMPv6 错误消息。
  • 路径 MTU 发现(PMTUD)是用于确定最佳 MTU 大小的机制,源节点通过调整数据包大小来避免分片。
  • 分片头部 是在源设备分片时使用的,目标设备在接收到所有分片后将其重新组装成完整的数据包。

理解 IPv6 的 MTU 和分片处理机制是确保网络性能、避免不必要的延迟和分片、以及进行优化和故障排查的关键。 IPv6 和 IPv4 都是互联网协议簇中的网络层协议,用于为网络中的设备提供唯一的地址和路由能力。它们在许多方面有相似性,但由于 IPv6 是为了应对 IPv4 地址枯竭等问题而设计的,二者在头部结构上有显著的差异。下面是 IPv6IPv4 首部的比较,重点放在头部字段的变化上。

IPv4 和 IPv6 首部比较

1. 版本号(Version)

  • IPv4:4
  • IPv6:6

说明

  • 这是每个 IP 数据包的第一个字段,用于标识协议版本。IPv4 使用 4,而 IPv6 使用 6

2. 首部长度(Header Length)

  • IPv4:4 位,单位是 32 位字(4 字节)。
  • IPv6:IPv6 不需要此字段,因为它的首部长度是固定的。

说明

  • IPv4 中,首部长度字段指示 IPv4 头部的长度(通常为 20 字节,最大可达 60 字节)。而 IPv6 的头部长度是固定的 40 字节,因此不再需要类似的字段。

3. 服务类型(Type of Service, ToS)/流量类(Traffic Class)

  • IPv4:8 位。
  • IPv6:8 位。

说明

  • IPv4 的 ToS 字段用于表示服务质量(QoS)要求,但它现在已被 DSCP(Differentiated Services Code Point)ECN(Explicit Congestion Notification) 替代,主要用于流量优先级控制。
  • IPv6 中的 流量类(Traffic Class) 字段也用于服务质量(QoS)控制,类似于 IPv4 的 ToS。

4. 总长度(Total Length)

  • IPv4:16 位,表示整个 IP 数据包(包括头部和数据部分)的长度,单位为字节。
  • IPv6:没有此字段。

说明

  • 在 IPv4 中,总长度字段表示整个数据包的大小(头部和数据部分的总和)。在 IPv6 中,由于数据包的最大长度由 Payload Length 字段表示,因此没有总长度字段。

5. 标识符(Identification)

  • IPv4:16 位,用于唯一标识一个分片的数据包。
  • IPv6:没有此字段。

说明

  • IPv4 中,标识符字段用于标识数据包的分片,使接收方能够将同一数据包的不同片段组装起来。IPv6 不在头部中使用标识符字段,分片由源设备处理。

6. 标志(Flags)

  • IPv4:3 位(第 14 位到第 16 位),包括 更多分片标志(MF)和 分片偏移量
  • IPv6:没有此字段。

说明

  • IPv4 中的标志字段主要用于标识分片情况,尤其是更多分片(MF)标志,表示该数据包是否还会有更多的分片。IPv6 不使用此字段,分片功能由源节点负责。

7. 生存时间(Time to Live, TTL)

  • IPv4:8 位。
  • IPv6:8 位,称为 跳数限制(Hop Limit)

说明

  • 在 IPv4 中,TTL 字段用于防止数据包在网络中无限循环。每经过一个路由器,TTL 值减少 1,当 TTL 为 0 时,数据包被丢弃。
  • 在 IPv6 中,TTL 字段被重命名为 跳数限制(Hop Limit),功能相同。

8. 协议(Protocol)

  • IPv4:8 位,指定上层协议(如 TCP、UDP、ICMP 等)。
  • IPv6:8 位,称为 下一个头部(Next Header),也表示上层协议。

说明

  • IPv4 中的协议字段指示数据部分使用的上层协议类型(例如,6 表示 TCP,17 表示 UDP)。IPv6 中的下一个头部字段有相同的功能,指示下一个扩展头部或上层协议的类型。

9. 源地址(Source Address)

  • IPv4:32 位。
  • IPv6:128 位。

说明

  • IPv4 中,源地址是一个 32 位的 IPv4 地址,表示数据包的发送方地址。
  • IPv6 中,源地址是一个 128 位的 IPv6 地址,提供了更大的地址空间。

10. 目标地址(Destination Address)

  • IPv4:32 位。
  • IPv6:128 位。

说明

  • IPv4 中,目标地址是一个 32 位的 IPv4 地址,表示数据包的接收方地址。
  • IPv6 中,目标地址是一个 128 位的 IPv6 地址,允许支持更多的设备和更灵活的路由。

11. 扩展头部(Extension Headers)

  • IPv4:有选项字段(Options)用于支持额外的功能,如路由控制、时间戳等。
  • IPv6:扩展头部(如路由头部、分段头部等)提供更多灵活的功能,可以通过扩展头部支持各种选项(如路由、分段、认证、安全等)。

说明

  • IPv4 使用 选项 字段来提供扩展功能,但这些选项通常是在 IP 头部内嵌的,且位置不灵活。
  • IPv6 引入了 扩展头部,扩展头部按照链式结构附加在标准的 40 字节头部后面,并且每种扩展头部具有固定格式,允许更多灵活的功能扩展。

IPv4 和 IPv6 头部的对比表

DATA_TABLE
字段名称IPv4IPv6说明
版本(Version)46协议版本号
首部长度(Header Length)4 位(最大 60 字节)无(固定 40 字节)IPv6 固定头部长度
服务类型(ToS)8 位8 位(流量类 Traffic Class)服务质量
总长度(Total Length)16 位IPv6 使用 Payload Length
标识符(Identification)16 位IPv6 不需要标识符
标志(Flags)3 位IPv6 不需要标志字段
生存时间(TTL)8 位8 位(跳数限制 Hop Limit)防止数据包在网络中循环
协议(Protocol)8 位8 位(下一个头部 Next Header)标识上层协议
源地址(Source Address)32 位128 位源设备的 IP 地址
目标地址(Destination Address)32 位128 位目标设备的 IP 地址
选项(Options)可选字段扩展头部(Extension Headers)IPv6 提供更灵活的扩展头部

总结

  1. 地址长度:IPv4 使用 32 位地址,而 IPv6 使用 128 位地址,提供更大的地址空间。
  2. 头部大小:IPv6 头部固定为 40 字节,而 IPv4 头部最小为 20 字节,最大可以达到 60 字节(如果有选项)。
  3. 分片处理:IPv4 中的路由器可以进行分片,而 IPv6 仅由源节点进行分片,中间路由器不进行分片处理。
  4. 扩展性:IPv6 引入了扩展头部机制,使得协议更加灵活,支持更复杂的选项和功能。
  5. 流量控制和服务质量:虽然 IPv4 和 IPv6 都支持服务质量(QoS),但 IPv6 使用了流量类(Traffic Class)字段,并通过扩展头部实现更多的 QoS 管理功能。

总体来说,IPv6 在设计时考虑到了扩展性、效率、安全性等多个因素,比 IPv4 更加现代化和灵活。 以太网(Ethernet)是局域网(LAN)中最常见的通信协议,它定义了数据链路层(OSI 模型的第二层)的帧格式。以太网 2 帧(Ethernet II)是以太网的一种常见帧格式,广泛用于现代网络中。

Ethernet II 帧结构

Ethernet II 是以太网标准中的一种帧格式,使用 6 字节的源 MAC 地址、6 字节的目标 MAC 地址,以及一个 2 字节的类型字段。这个帧格式用于在局域网中传输数据,通常用于 TCP/IP 网络通信。Ethernet II 的帧结构如下所示:

text
+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+
| 目标 MAC 地址 (6B) | 源 MAC 地址 (6B)    | 类型字段 (2B)      | 数据字段 (46-1500B) | CRC 校验码 (4B)    |
+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+-------------------+

Ethernet II 帧字段解析

  1. 目标 MAC 地址(6 字节)

    • 目标 MAC 地址是数据帧的接收者的硬件地址(物理地址),由 6 字节(48 位)表示。
    • 每个以太网设备(如计算机、路由器等)都有一个唯一的 MAC 地址。
  2. 源 MAC 地址(6 字节)

    • 源 MAC 地址是数据帧的发送者的硬件地址,也由 6 字节(48 位)表示。
    • 数据帧的源设备的 MAC 地址与目标设备进行通信。
  3. 类型字段(2 字节)

    • 类型字段用于标识数据帧所承载的协议类型(如 IPv4、ARP 等)。类型字段的值用 2 字节表示。
    • 常见的类型值:
      • 0x0800:表示 IP 协议(IPv4)。
      • 0x0806:表示 ARP 协议。
      • 0x86DD:表示 IPv6 协议。
    • 这个字段的值与帧的协议类型相关,帮助接收端识别如何处理数据部分。
  4. 数据字段(46 - 1500 字节)

    • 数据字段包含要传输的实际数据。根据 Ethernet II 标准,数据字段的长度必须至少为 46 字节(最小帧大小),最大为 1500 字节(最大数据负载)。
    • 如果数据字段小于 46 字节,则会通过填充(Padding)字段补足至 46 字节。
  5. CRC 校验码(4 字节)

    • CRC 校验码是用于验证帧在传输过程中是否发生错误的字段。CRC(循环冗余校验)使用 32 位校验码。
    • 接收端会使用 CRC 校验码进行错误检测,确保数据没有在传输过程中损坏。如果发现错误,数据帧会被丢弃。

Ethernet II 帧的特点

  1. 最小帧大小

    • 最小帧大小为 64 字节(包括头部和数据部分)。如果数据部分小于 46 字节,数据帧会用填充字节(Padding)填充,以满足最小长度要求。
  2. 最大帧大小

    • Ethernet II 帧的最大长度为 1518 字节(包含头部、数据字段和 CRC 校验码)。这个大小是以太网标准定义的最大传输单元(MTU)。
  3. 无 VLAN 支持

    • Ethernet II 帧没有 VLAN(虚拟局域网)标签。如果需要支持 VLAN,必须使用 IEEE 802.1Q 标准(也称为 802.1Q 标记帧)。
  4. 协议类型字段

    • 以太网 II 帧的 类型字段 是其最大特点之一。它用于标识上层协议,而不是使用如 IEEE 802.3 帧的长度字段(以太网帧的另一种类型)。

Ethernet II 帧与 IEEE 802.3 帧的比较

Ethernet II 和 IEEE 802.3 是两种不同的以太网帧格式。尽管它们的基本结构相似,但在某些关键字段上有所不同。

DATA_TABLE
字段Ethernet IIIEEE 802.3
类型字段2 字节,指示上层协议(如 IPv4、ARP)3 字节,表示长度字段,表示数据长度
数据部分46 - 1500 字节(数据和填充)46 - 1500 字节(数据和填充)
帧校验4 字节的 CRC 校验码4 字节的 CRC 校验码
帧格式使用类型字段指示协议类型使用长度字段指示数据长度

在现代网络中,Ethernet II 帧格式已经成为最常见的标准,主要用于 IP 网络。IEEE 802.3 帧则更多用于传统的局域网协议,如较早的以太网协议,且它主要通过 长度字段 来区分数据和协议类型。

总结

Ethernet II 是现代以太网中广泛使用的帧格式。它通过简洁而有效的结构提供了用于数据传输的机制。其主要特点包括:

  • 目标/源 MAC 地址:确定帧的源和目的地址。
  • 类型字段:指示上层协议(如 IPv4、ARP 等)。
  • 数据字段:承载实际传输的数据。
  • CRC 校验码:用于数据完整性检查,确保数据没有在传输过程中损坏。

Ethernet II 的设计简洁且灵活,广泛支持 IP 网络通信,是现代局域网中最常用的帧结构。 分段与重组(Fragmentation and Reassembly)是网络通信中处理数据包大小和网络限制的重要机制。分段与重组通常发生在数据链路层和网络层之间,特别是在 IP 协议(IPv4 和 IPv6)中,确保即使是大数据包也能在网络中顺利传输。以下是关于分段和重组的详细讲解:

1. 分段(Fragmentation)

分段是将一个较大的数据包(通常称为 IP 数据包)拆分成多个较小的片段,这些片段可以在网络中按需传输。每个片段都是独立的,以便它们能够适应各个网络链路的 最大传输单元(MTU) 限制。

分段的工作机制

  • MTU 限制:每个网络链路都有一个最大传输单元(MTU),即链路上能够传输的最大数据包大小。如果数据包的大小超过了链路的 MTU,数据包就必须分段,以确保它能够在网络上传输。

  • 分段过程:分段是由源设备或中间路由器(IPv4)完成的。源设备或路由器会根据网络路径中的 MTU 信息,将数据包拆分成多个片段,并在每个片段的头部附加额外的信息,以便在接收方重新组合这些片段。

  • 分段头部(IPv4):在 IPv4 中,分段的额外信息存储在分段头部字段中,主要包括以下内容:

    • Identification:标识数据包的唯一值,所有属于同一数据包的分段将具有相同的标识符。
    • Flags:用于指示分段情况(如是否还有更多的分段)。
    • Fragment Offset:表示当前分段在原始数据包中的偏移量。
    • More Fragment Flag:指示是否还有更多的分段。

IPv4 中的分段

  • 在 IPv4 中,分段通常在发送数据包的源设备或者经过路由器时发生。如果某个路由器发现数据包大于链路的 MTU,它会分段数据包,并将分段后的片段传递到下一跳路由器。
  • IPv6:IPv6 协议不允许路由器进行分段。分段仅由源设备处理。如果目标网络链路的 MTU 小于数据包大小,源设备会根据路径 MTU 发现(PMTUD,Path MTU Discovery)机制进行分段,避免数据包在中间路由器处被丢弃。

分段的影响

  • 分段会导致网络延迟增加,因为每个片段都需要单独传输、路由和接收。
  • 分段增加了 头部开销,因为每个分段都有其自己的头部,且必须包含标识符、偏移量等信息。
  • 如果其中一个分段丢失,则整个数据包会被丢弃,需要重新发送。

2. 重组(Reassembly)

重组是将接收到的多个片段组合成一个完整的数据包的过程。这个过程通常发生在目标设备或最终接收设备上。

重组的工作机制

  • 分段的重组:当目标设备接收到所有分段时,会根据分段头部的信息(如标识符和偏移量)将所有分段按照正确的顺序重新组合成原始数据包。
  • 分段的顺序:每个分段都包含一个 Fragment Offset 字段,表示该片段在原始数据包中的位置。目标设备通过这些偏移量来正确地重组数据包。
  • 标识符:每个数据包在分段时会被赋予一个唯一的 Identification 值,所有来自同一源的数据包分段会带有相同的标识符。目标设备根据标识符来确定哪些片段属于同一个数据包。

重组的要求

  • 完整性检查:接收方必须确保所有的分段都按正确的顺序到达。如果某个分段丢失,接收方将无法完成数据包的重组。
  • 重组过程中的延迟:重组过程中可能存在延迟,尤其是在分段丢失时。由于必须等待所有分段到达才能开始重组,因此存在延迟。

重组过程中的问题

  • 丢包:如果数据包中的任何一个分段丢失,整个数据包都会被丢弃。接收方将无法重组完整的数据包,可能导致数据包的重传。
  • 分段的顺序问题:如果分段顺序错误,接收方可能无法正确地重组数据包,因此需要按偏移量字段对分段进行排序。

IPv4 与 IPv6 的分段与重组

  • IPv4
    • IPv4 支持在路由器间进行分段和重组。路由器根据链路的 MTU 限制进行分段,并将数据包按需分发给下一个路由器或最终目标。
    • 每个片段都有 Identification 字段,确保分段属于同一数据包。
  • IPv6
    • IPv6 协议不允许路由器对数据包进行分段。分段仅由源节点进行处理。中间的路由器如果发现数据包过大,会返回 ICMPv6 "Packet Too Big" 消息,告诉源节点调整数据包大小。
    • IPv6 中的 路径 MTU 发现(PMTUD) 机制让源节点知道整个路径的最小 MTU,从而避免了分段的发生。

3. 分段与重组的影响

优点

  • 灵活性:分段和重组机制使得 IP 数据包可以在不同的网络和链路中传输,无论这些链路的 MTU 是否一致。
  • 网络资源利用:即使路径上的某些链路 MTU 较小,分段机制也能够确保数据包能够在网络中传输。

缺点

  • 性能开销:分段和重组会引入额外的处理开销,增加延迟。每个分段都需要额外的头部信息,增加了开销。
  • 丢包影响:如果分段中的任何一个片段丢失,整个数据包都无法重组,导致需要重新传输所有分段,从而浪费带宽和增加延迟。
  • 不稳定的网络条件:在一些高延迟、不稳定的网络环境下,分段和重组可能导致性能进一步下降,尤其是在需要大量分段的情况下。

4. 路由器与源设备的角色

  • 路由器(IPv4):路由器负责根据链路的 MTU 将数据包分段。如果一个路由器遇到比其链路 MTU 更大的数据包,它会将数据包分成多个片段,并转发这些片段。路由器还会检查数据包的 Identification 字段和 Fragment Offset 字段,以确保每个片段能够正确地重新组合。

  • 源设备:源设备负责执行分段操作,尤其是在 IPv6 中。源设备根据路径上的 MTU 来决定是否需要分段。它还负责在数据包过大时执行路径 MTU 发现。

  • 接收设备:接收设备(目标设备)负责重组所有分段。它使用每个片段的 Fragment OffsetIdentification 字段来正确排序并重组数据包。

总结

  • 分段 是将过大的数据包拆分为适合传输的较小片段,通常由源设备或路由器执行。
  • 重组 是将接收到的多个片段重新组装成完整的数据包,通常由目标设备执行。
  • IPv4 中,路由器可以执行分段和重组,而 IPv6 只允许源设备进行分段,路由器不处理分段,目标设备负责重组。
  • 分段和重组虽然增加了灵活性,但也带来了性能损耗,尤其是在数据包丢失或顺序问题时,可能导致整个数据包的重传。

IPv4 的路由机制是指数据包在源节点和目标节点之间传输的路径选择过程。路由的核心目标是找到最佳路径,以便数据包能够高效、安全地传递到目的地。

以下是重点讲解 IPv4 路由机制中 路由选码水平分路(Split Horizon) 的概念和实现方式:


1. 路由选码(Routing Metrics)

什么是路由选码?

路由选码是路由协议用来评估一条路径好坏的依据,通常以数值形式表示。路由器根据路由选码选择最优路径,即具有最小选码的路径。

路由选码的种类

不同的路由协议使用不同的选码作为衡量标准。以下是常见的路由选码:

  1. 跳数(Hop Count)

    • 路由器跳数是路径上路由器的数量。
    • 使用协议:RIP(Routing Information Protocol)。
    • 优点:简单易实现。
    • 缺点:无法考虑带宽、延迟等其他因素,可能导致选择的路径不一定最优。
  2. 带宽(Bandwidth)

    • 表示路径上最小链路的可用带宽。
    • 使用协议:OSPF(Open Shortest Path First)。
    • 优点:可以选择传输能力更强的路径。
    • 缺点:计算开销较高。
  3. 延迟(Delay)

    • 表示路径上链路的总延迟时间。
    • 使用协议:EIGRP(Enhanced Interior Gateway Routing Protocol)。
    • 优点:适用于实时应用(如语音或视频)。
    • 缺点:延迟可能随网络拥塞动态变化。
  4. 开销(Cost)

    • 表示路径上链路的综合代价(带宽、延迟、跳数等综合考虑)。
    • 使用协议:OSPF。
    • 优点:灵活,适合多种网络场景。
    • 缺点:需要网络管理员手动配置权重,可能增加复杂性。
  5. 可靠性(Reliability)

    • 表示路径的稳定性,通常由历史故障率计算得出。
    • 使用协议:EIGRP。
    • 优点:提高路径的稳定性。
    • 缺点:需要较长的历史统计信息,反应速度较慢。
  6. 负载(Load)

    • 表示路径上当前的流量负载情况。
    • 使用协议:EIGRP。
    • 优点:适用于动态网络环境。
    • 缺点:实时计算负载可能增加处理开销。

路由选码的作用

  • 路由器基于路由选码值比较多条路径,选择选码值最小的路径作为数据包的传输路径。
  • 路由选码的配置对网络性能有很大影响,需要根据网络需求选择适合的路由协议和选码策略。

2. 水平分路(Split Horizon)

什么是水平分路?

水平分路是距离矢量路由协议(如 RIP)中避免路由环路的一种机制。它的核心规则是:

路由器不会将从某个接口学到的路由信息,再通过同一接口传播回去。

水平分路的工作原理

  • 当一个路由器从某个邻居路由器接收到一条路由更新时,它会记录该路由的信息。
  • 路由器在将路由更新发送到其他接口时,会避免将这条信息发回给原来的发送者。
  • 这样可以防止路由器之间的 "路由环路",避免无意义的路由信息循环传播。

水平分路的例子

假设有三个路由器:A、B 和 C,连接方式如下:

text
A ---- B ---- C
  • 如果路由器 B 通过路由器 A 学到了一个到达某个网络的路径(如网络 X),路由器 B 不会将到网络 X 的更新再发回给 A。
  • 同样地,如果 C 学到了从 B 传来的网络 X 的路由信息,它不会再将此信息回传给 B。

水平分路的变种

  1. Split Horizon with Poison Reverse(水平分路和反向毒化)
    • 在水平分路的基础上,当一个路由器将从某个接口学到的路由信息发送回去时,会将该路由标记为 "不可达"(即距离设为无穷大)。
    • 优点:更快地通知邻居某条路径已经不可用,收敛时间更短。
    • 缺点:增加了额外的控制报文开销。

水平分路的作用

  • 避免路由环路:水平分路机制有效防止了路由器之间的循环更新,减少了错误路由表的形成。
  • 提高路由稳定性:通过限制信息传播方向,水平分路减少了无意义的路由更新。

3. 路由机制中的选码与水平分路的结合

在实际网络中,路由协议通常同时结合路由选码和水平分路机制,以确保路径选择的高效性和网络的稳定性。例如:

  • RIP 使用 跳数 作为选码,同时通过 水平分路 避免路由环路。
  • OSPF 使用 开销(Cost) 作为选码,不需要水平分路,但会使用其他机制(如链路状态算法)避免环路。

总结

  1. 路由选码 是路由器选择最优路径的核心依据,常见选码包括跳数、带宽、延迟、负载等。不同路由协议使用的选码不同。
  2. 水平分路 是避免路由环路的重要机制,通过限制路由信息的传播方向来防止路由环路。其变种(如 Poison Reverse)可以进一步提高效率。
  3. 两者结合:在动态路由协议中,选码和水平分路通常共同作用,既优化路径选择,又确保网络的稳定性和高效性。

ICMP 是网络层的核心协议,其首部格式、消息类型、可变部分和功能在 ICMPv4ICMPv6 中既有相似之处也有显著差异。以下是对 ICMPv4ICMPv6 的详细讲解,涵盖首部结构、消息类型、可变部分以及功能。


1. ICMPv4

1.1 首部结构

ICMPv4 消息嵌套在 IPv4 数据包中,其首部结构如下:

DATA_TABLE
字段长度 (比特)说明
Type8消息类型,用于标识 ICMP 消息的类别(如错误或诊断)。
Code8对消息类型的细化,指定具体的错误或状态信息。
Checksum16用于验证 ICMP 消息的完整性。
Message Body可变包含与具体消息类型相关的数据。

1.2 常见消息类型

ICMPv4 的消息类型分为 错误消息信息消息 两类:

(1)错误消息

  1. Type 3:目的不可达(Destination Unreachable)

    • Code:
      • 0:网络不可达
      • 1:主机不可达
      • 3:端口不可达
    • 说明:通知源主机,数据包无法送达目标。
  2. Type 4:源抑制(Source Quench,已废弃)

    • 说明:请求源主机降低发送数据包的速率。
  3. Type 5:重定向(Redirect)

    • Code:
      • 0:重定向到网络
      • 1:重定向到主机
    • 说明:通知源主机,存在更优路径。
  4. Type 11:超时(Time Exceeded)

    • Code:
      • 0:TTL 超时
      • 1:分段重组超时
    • 说明:通知数据包在传输过程中超时。

(2)信息消息

  1. Type 8:回显请求(Echo Request,Ping)
    • 用于测试目标主机是否可达。
  2. Type 0:回显应答(Echo Reply)
    • 响应 Ping 请求。
  3. Type 13/14:时间戳请求和应答
    • 用于同步或记录通信的时间信息。

1.3 可变部分

ICMPv4 的消息可变部分包含与具体消息类型相关的信息,例如:

  • 回显请求/应答中包含标识符(Identifier)和序列号(Sequence Number)。
  • 错误消息中可能包含原始 IP 报文的部分内容(例如 IP 首部和前 8 字节的有效载荷)。

1.4 功能

  • 错误报告:提供网络传输中出现的问题通知功能。
  • 诊断功能:Ping 和 Traceroute 用于测试网络连接和路径。
  • 路由优化:通过重定向消息引导更优路由选择。

2. ICMPv6

2.1 首部结构

ICMPv6 是 IPv6 协议的重要组成部分,其首部结构如下:

DATA_TABLE
字段长度 (比特)说明
Type8消息类型,用于标识 ICMP 消息的类别。
Code8对消息类型的细化,指定具体的错误或状态信息。
Checksum16用于验证 ICMP 消息的完整性(包含伪首部计算)。
Message Body可变包含与具体消息类型相关的数据。

2.2 常见消息类型

ICMPv6 消息类型除了支持错误和诊断功能,还扩展了对 IPv6 的特殊支持:

(1)错误消息

  1. Type 1:目的不可达(Destination Unreachable)

    • Code:
      • 0:没有到目标的路由
      • 1:与目标通信被禁止
      • 4:端口不可达
    • 功能类似 ICMPv4 的 Type 3。
  2. Type 2:超大数据包(Packet Too Big)

    • 说明:通知源主机数据包超过路径 MTU(最大传输单元)。
  3. Type 3:超时(Time Exceeded)

    • Code:
      • 0:TTL 超时
      • 1:分段重组超时
  4. Type 4:参数问题(Parameter Problem)

    • Code:
      • 0:IPv6 首部字段有误
      • 1:扩展首部字段有误

(2)信息消息

  1. Type 128:回显请求(Echo Request,Ping)
    • 用于测试目标主机是否可达。
  2. Type 129:回显应答(Echo Reply)
    • 响应 Ping 请求。

(3)邻居发现(Neighbor Discovery Protocol, NDP)消息

  • ICMPv6 扩展了邻居发现功能,取代了 IPv4 的 ARP 和部分 DHCP 功能:
    1. Type 133:路由器请求(Router Solicitation)
      • 用于主机请求路由器广告消息。
    2. Type 134:路由器广告(Router Advertisement)
      • 路由器向主机提供地址前缀和其他配置信息。
    3. Type 135:邻居请求(Neighbor Solicitation)
      • 用于解析链路层地址(类似 IPv4 ARP 请求)。
    4. Type 136:邻居广告(Neighbor Advertisement)
      • 响应邻居请求。

2.3 可变部分

ICMPv6 的可变部分根据消息类型不同,可能包括:

  • 错误消息:包含导致错误的 IPv6 报文片段(首部和数据)。
  • 信息消息:包含邻居发现协议的特定信息,如源地址、目标地址等。

2.4 功能

ICMPv6 不仅继承了 ICMPv4 的功能,还扩展了新功能以适应 IPv6 的特性:

  1. 错误报告:类似于 ICMPv4,增加了对超大数据包的支持(Type 2)。
  2. 诊断功能:支持 Ping 和 Traceroute。
  3. 邻居发现
    • 用于替代 IPv4 的 ARP,支持地址解析和自动配置。
  4. 路径 MTU 发现
    • 自动检测网络路径的最大传输单元,避免数据包分段。

3. ICMPv4 和 ICMPv6 的对比

DATA_TABLE
特性ICMPv4ICMPv6
错误消息支持基本的错误类型支持更多错误类型(如超大数据包)
诊断功能Ping、TraceroutePing、Traceroute
地址解析使用 ARP 协议使用邻居发现协议(NDP)
路径 MTU 发现部分依赖上层协议内置支持(Packet Too Big 消息)
路由器发现功能使用专用协议或手动配置使用路由器广告消息

总结

  • ICMPv4 是 IPv4 的辅助协议,提供错误报告和诊断功能,结构简单但功能有限。
  • ICMPv6 是 IPv6 的核心部分,增加了邻居发现和路径 MTU 发现等功能,更适应现代网络需求。
  • ICMPv6 扩展功能强大,更复杂,能够支持无状态自动配置和更高效的错误处理。 在 ICMPv6 中,路由器公告路由器请求邻居请求邻居公告 是核心的消息类型,主要用于实现 邻居发现协议(NDP,Neighbor Discovery Protocol),这是 IPv6 中的关键协议,负责管理设备的地址解析、路由器发现、自动配置等功能。

以下是详细的讲解:


1. 路由器公告(Router Advertisement, RA)

功能

  • 路由器向链路上的所有节点广播自身信息,包括网络前缀、链路 MTU 和其他配置信息。
  • 帮助主机进行自动配置,例如获取 IPv6 地址和默认网关。

ICMPv6 类型

  • Type 134:路由器公告

消息结构

DATA_TABLE
字段长度 (比特)说明
Type8值为 134,标识为路由器公告消息。
Code8值为 0,未使用。
Checksum16验证消息完整性(包含 IPv6 伪首部)。
Cur Hop Limit8当前跳数限制,建议主机用作其 IPv6 数据包的 Hop Limit 值。
M 和 O 标志1+1M:管理地址配置标志,O:其他配置标志。
Router Lifetime16路由器作为默认路由器的有效时间(单位:秒)。
Reachable Time32主机认为邻居可达的时间间隔(单位:毫秒)。
Retrans Timer32主机重传邻居请求的时间间隔(单位:毫秒)。
可变选项可变包括源链路层地址、MTU、前缀信息等。

关键选项

  1. 源链路层地址(Source Link-Layer Address)
    • 路由器的链路层地址,用于主机的地址解析。
  2. MTU(Maximum Transmission Unit)
    • 链路的最大传输单元。
  3. 前缀信息(Prefix Information)
    • 包含网络前缀,用于地址自动配置和子网划分。

2. 路由器请求(Router Solicitation, RS)

功能

  • 主机启动时,向链路中的路由器发送路由器请求消息,主动请求路由器发送路由器公告。
  • 用于快速获取网络配置信息,而无需等待路由器定时发送的公告消息。

ICMPv6 类型

  • Type 133:路由器请求

消息结构

DATA_TABLE
字段长度 (比特)说明
Type8值为 133,标识为路由器请求消息。
Code8值为 0,未使用。
Checksum16验证消息完整性(包含 IPv6 伪首部)。
Reserved32保留字段,设置为 0。
可变选项可变可包含源链路层地址(可选)。

工作机制

  • 主机发送
    • 当主机需要快速获取路由器信息时,向多播地址 FF02::2(链路上所有路由器)发送 RS 消息。
  • 路由器响应
    • 路由器接收到 RS 后,快速发送 RA 消息。

3. 邻居请求(Neighbor Solicitation, NS)

功能

  • 类似于 IPv4 的 ARP 请求,用于解析邻居节点的链路层地址。
  • 检查邻居节点是否仍然可达(可达性确认)。
  • 实现地址冲突检测(DAD, Duplicate Address Detection)。

ICMPv6 类型

  • Type 135:邻居请求

消息结构

DATA_TABLE
字段长度 (比特)说明
Type8值为 135,标识为邻居请求消息。
Code8值为 0,未使用。
Checksum16验证消息完整性(包含 IPv6 伪首部)。
Reserved32保留字段,设置为 0。
Target Address128要解析或确认的目标节点的 IPv6 地址。
可变选项可变包含源链路层地址(如果发送方已知)。

工作机制

  1. 地址解析
    • 主机发送 NS 消息到目标地址的多播组,目标主机响应邻居公告消息。
  2. 可达性确认
    • 主机定期发送 NS 消息确认邻居是否在线。
  3. 地址冲突检测
    • 启动时,主机向自身地址发送 NS 消息,若收到响应,则说明地址已被占用。

4. 邻居公告(Neighbor Advertisement, NA)

功能

  • 类似于 IPv4 的 ARP 响应,用于回复邻居请求,提供自己的链路层地址。
  • 通知邻居自己的状态更新(例如更改链路层地址)。

ICMPv6 类型

  • Type 136:邻居公告

消息结构

DATA_TABLE
字段长度 (比特)说明
Type8值为 136,标识为邻居公告消息。
Code8值为 0,未使用。
Checksum16验证消息完整性(包含 IPv6 伪首部)。
Flags3(U/S/O)标志字段:
- U:目标地址为唯一地址。
- S:发送此消息是为了可达性确认。
- O:重写现有缓存条目。
Reserved29保留字段,设置为 0。
Target Address128目标主机的 IPv6 地址。
可变选项可变包含目标的链路层地址。

工作机制

  1. 回复邻居请求
    • 目标主机收到 NS 消息后,发送 NA 消息包含其链路层地址。
  2. 状态更新
    • 当主机的链路层地址发生变化时,主动向邻居广播 NA 消息。

路由器公告和邻居请求/公告的对比

DATA_TABLE
功能路由器公告(RA)邻居请求(NS)邻居公告(NA)
主要目标提供路由器和网络配置信息地址解析、可达性检查响应地址解析、状态更新
ICMP 类型Type 134Type 135Type 136
发送范围多播发送(FF02::1)多播(地址解析)或单播(确认)单播或多播
可变选项链路层地址、MTU、前缀信息链路层地址(可选)链路层地址

总结

  • 路由器公告(RA)和路由器请求(RS):用于主机与路由器之间的交互,完成网络前缀、默认路由等配置信息的获取。
  • 邻居请求(NS)和邻居公告(NA):用于主机之间的交互,实现地址解析、可达性确认和地址冲突检测。
  • 这些消息类型协作,构建了 IPv6 下无状态自动配置、高效的地址解析和动态网络管理机制。 IPv6 邻居发现(Neighbor Discovery, ND) 是替代 IPv4 中 ARP(地址解析协议)、ICMP 路由发现协议(RDP)和重定向功能的关键机制。它依赖 ICMPv6 消息,提供地址解析、邻居可达性确认、地址冲突检测、路由器发现等功能。以下详细讲解 IPv6 邻居发现的主要过程。

1. 邻居发现的关键功能

IPv6 邻居发现协议实现以下功能:

  • 地址解析(Address Resolution):将 IPv6 地址解析为链路层地址。
  • 邻居可达性确认(Neighbor Unreachability Detection, NUD):检测邻居节点是否可达。
  • 地址冲突检测(Duplicate Address Detection, DAD):防止同一链路上多个设备使用相同 IPv6 地址。
  • 路由器发现(Router Discovery):主机发现路由器及获取网络配置信息。
  • 重定向(Redirect):路由器通知主机更优的下一跳路由。

2. 邻居发现协议的关键消息类型

IPv6 邻居发现基于 ICMPv6 消息,主要使用以下类型:

  • 路由器请求(Router Solicitation, RS, 类型 133)
  • 路由器公告(Router Advertisement, RA, 类型 134)
  • 邻居请求(Neighbor Solicitation, NS, 类型 135)
  • 邻居公告(Neighbor Advertisement, NA, 类型 136)
  • 重定向消息(Redirect Message, 类型 137)

3. 邻居发现的主要过程

3.1 地址解析

地址解析用于将邻居设备的 IPv6 地址解析为链路层地址(例如 MAC 地址)。

过程描述

  1. 主机发送邻居请求(NS)

    • 主机向目标地址的多播组发送 NS 消息,请求目标设备的链路层地址。
    • NS 消息中包括目标设备的 IPv6 地址。
  2. 目标设备发送邻居公告(NA)

    • 目标设备收到 NS 消息后,向请求主机发送 NA 消息。
    • NA 消息中包含目标设备的链路层地址。

多播地址

  • 多播地址用于减少链路上的广播流量:
    • 目标多播组地址Solicited-Node Multicast Address,例如 FF02::1:FFxx:xxxx
    • 该地址由目标设备的 IPv6 地址的后 24 位生成。

3.2 邻居可达性确认(NUD)

邻居可达性确认用于检测已解析的邻居是否仍然可达。

过程描述

  1. 发送邻居请求(NS)

    • 主机向已知的邻居设备发送 NS 消息。
    • NS 消息以单播方式发送到目标设备。
  2. 接收邻居公告(NA)

    • 邻居设备收到 NS 后,发送 NA 消息确认自身在线。
    • 主机根据收到的 NA 消息,更新邻居的状态为 可达

超时处理

  • 如果主机未收到 NA 消息,邻居状态被标记为 不可达,并在必要时重新触发地址解析。

3.3 地址冲突检测(DAD)

地址冲突检测确保同一链路上的设备不会使用相同的 IPv6 地址。

过程描述

  1. 主机发送邻居请求(NS)

    • 主机在使用新地址前,向目标地址发送 NS 消息。
    • NS 消息的目标地址是待检测的 IPv6 地址。
  2. 检查响应

    • 如果主机收到邻居公告(NA),说明地址已被占用,主机应停止使用该地址。
    • 如果未收到 NA 消息,说明地址可用。

特点

  • DAD 通常在地址配置完成(例如 SLAAC)后立即进行。
  • 链路本地地址(FE80::/10)和全局地址均需进行 DAD。

3.4 路由器发现

路由器发现用于主机在启动时发现链路中的路由器,并获取网络配置信息。

过程描述

  1. 主机发送路由器请求(RS)

    • 主机向链路上的所有路由器多播组地址 FF02::2 发送 RS 消息。
    • RS 消息中可选包含主机的链路层地址。
  2. 路由器发送路由器公告(RA)

    • 路由器收到 RS 后,发送 RA 消息。
    • RA 消息中包含以下信息:
      • 网络前缀(用于自动配置主机的 IPv6 地址)。
      • 默认网关。
      • 链路的 MTU。
      • 其他选项,如 DNS 服务器地址(通过 RDNSS 选项)。
  3. 主机配置地址

    • 主机根据 RA 消息中的前缀信息,自动生成 IPv6 地址(无状态地址自动配置,SLAAC)。
    • 如果 RA 消息设置了 M 标志,主机可能需要通过 DHCPv6 获取地址。

3.5 重定向消息

重定向消息由路由器发送,用于通知主机使用更优的下一跳路由。

过程描述

  1. 主机发送数据包

    • 主机发送的数据包到达路由器,但路由器发现有更优的下一跳路由。
  2. 路由器发送重定向消息

    • 路由器向主机发送重定向消息(类型 137)。
    • 消息中包含:
      • 当前路由器的地址。
      • 更优下一跳路由的地址。
  3. 主机更新路由信息

    • 主机更新路由表,以便后续数据包通过更优路由转发。

4. 邻居发现协议的消息结构

4.1 邻居请求(NS)消息结构

DATA_TABLE
字段长度 (比特)描述
Type8值为 135,标识为邻居请求消息。
Code8值为 0。
Checksum16验证消息完整性。
Reserved32保留字段,设置为 0。
Target Address128要解析或检测的目标 IPv6 地址。
可变选项可变包括源链路层地址(可选)。

4.2 邻居公告(NA)消息结构

DATA_TABLE
字段长度 (比特)描述
Type8值为 136,标识为邻居公告消息。
Code8值为 0。
Checksum16验证消息完整性。
Flags3 (U/S/O)U: 唯一地址,S: 可达性确认,O: 覆盖。
Reserved29保留字段,设置为 0。
Target Address128目标节点的 IPv6 地址。
可变选项可变包括目标链路层地址。

总结

IPv6 邻居发现通过一系列 ICMPv6 消息实现无状态自动配置、动态地址解析和高效的网络管理机制。相比 IPv4 的 ARP 和 RDP,邻居发现更加灵活,减少了广播流量,提升了网络效率,并为无状态地址自动配置(SLAAC)和移动性管理提供了基础。

IPv6 的地址自动配置机制是网络配置的关键,包括无状态和有状态地址配置方式。以下是对 IPv6 地址自动配置及相关过程的详细讲解:


1. 地址自动配置概述

在 IPv6 中,地址自动配置可分为以下两种模式:

1.1 无状态地址自动配置(Stateless Address Autoconfiguration, SLAAC)

  • 特点
    • 基于 IPv6 路由器公告(RA)消息,无需中心化的 DHCPv6 服务器。
    • 设备根据接收到的网络前缀,自行生成 IPv6 地址。
  • 用途
    • 适合简单网络,快速实现自动地址分配。

1.2 有状态地址自动配置

  • 特点
    • 使用 DHCPv6 协议,由中心化服务器管理 IPv6 地址分配和其他配置信息。
    • 地址由 DHCPv6 服务器动态分配。
  • 用途
    • 适用于复杂网络环境,需要更严格的地址管理和分配。

2. DHCPv6 的 4 个过程

DHCPv6(Dynamic Host Configuration Protocol for IPv6)用于动态分配 IPv6 地址及其他网络配置参数,例如 DNS 服务器地址。

2.1 DHCPv6 工作原理

过程 1:Solicit(请求)

  • 目标:客户端寻找 DHCPv6 服务器。
  • 客户端发送 Solicit 消息 到所有 DHCPv6 服务器的多播地址 FF02::1:2
  • 消息中包括客户端的链路层地址和唯一标识(DUID)。

过程 2:Advertise(回应)

  • 目标:DHCPv6 服务器响应客户端。
  • 所有接收到 Solicit 消息的 DHCPv6 服务器,向客户端发送 Advertise 消息
  • 消息中包含可用的 IP 地址和其他配置选项。

过程 3:Request(请求分配)

  • 目标:客户端选择服务器,并请求特定的配置。
  • 客户端从多个 Advertise 响应中选择一个服务器,发送 Request 消息,明确请求分配 IP 地址。

过程 4:Reply(确认)

  • 目标:服务器向客户端确认分配。
  • 服务器发送 Reply 消息,包含分配的 IPv6 地址和其他配置信息。

3. 重地址检测(Duplicate Address Detection, DAD)

DAD 用于确保网络中没有其他设备正在使用相同的 IPv6 地址。

3.1 检测过程

  1. 发送邻居请求(NS)
    • 在设备分配或生成 IPv6 地址后,发送 NS 消息到目标地址的 Solicited-Node 多播组,检查是否有设备使用相同地址。
  2. 等待邻居公告(NA)
    • 如果收到 NA 消息,说明地址已被占用,设备必须停止使用该地址。
    • 如果未收到 NA 消息,则地址未被占用,可安全使用。

3.2 DAD 的触发条件

  • DAD 适用于:
    • 新生成的链路本地地址(FE80::/10)。
    • SLAAC 或 DHCPv6 配置的全局单播地址。

4. 无状态地址自动配置(SLAAC)

无状态地址自动配置通过 IPv6 路由器公告(RA)消息实现,以下是主要过程:

4.1 工作原理

  1. 接收 RA 消息

    • 主机在启动时向路由器发送路由器请求(RS)消息,或等待路由器定期发送 RA 消息。
    • RA 消息中包括网络前缀、MTU 等配置信息。
  2. 生成地址

    • 主机根据 RA 消息中的网络前缀和自身的接口标识符生成全局单播地址。
    • 接口标识符可以使用 EUI-64 格式,或随机生成。
  3. 配置地址

    • 主机配置生成的地址并启动 DAD 检测,确保地址唯一性。
    • 地址通过检测后即可使用。

4.2 RA 消息中的标志位

RA 消息中的标志位决定是否使用 SLAAC、DHCPv6 或两者的组合:

  • M 标志(Managed Address Configuration Flag)
    • 设置为 1:主机需要通过 DHCPv6 获取 IPv6 地址。
    • 设置为 0:主机可以使用 SLAAC。
  • O 标志(Other Configuration Flag)
    • 设置为 1:主机需要通过 DHCPv6 获取其他配置(如 DNS)。
    • 设置为 0:无需通过 DHCPv6 获取其他配置。

5. 有状态与无状态的对比

DATA_TABLE
功能无状态自动配置(SLAAC)有状态自动配置(DHCPv6)
地址分配主机根据 RA 消息中的前缀自动生成地址地址由 DHCPv6 服务器动态分配
地址管理无中心化管理,适合简单网络通过服务器集中管理,适合复杂网络
其他配置(如 DNS)依赖 RA 消息或手动配置通过 DHCPv6 服务器提供
唯一性检测依赖 DAD 检测服务器分配地址,避免冲突

6. 自动配置中的多种地址类型

IPv6 自动配置过程中,主机可能获得以下几种地址:

  • 链路本地地址(Link-Local Address)
    • 必须配置,每个接口至少有一个,前缀为 FE80::/10
    • 仅在本地链路内有效。
  • 全局单播地址(Global Unicast Address)
    • 可选,通过 SLAAC 或 DHCPv6 自动配置。
    • 用于链路外通信。
  • 临时地址(Temporary Address)
    • 防止隐私泄露,常在 SLAAC 中随机生成。
  • 唯一本地地址(ULA, Unique Local Address)
    • 私有地址,类似于 IPv4 的私有地址(10.0.0.0/8 等)。

7. 综合应用场景

  • 小型家庭网络:使用 SLAAC,快速配置无需管理。
  • 企业网络:结合 SLAAC 和 DHCPv6,自动分配地址,同时通过 DHCPv6 管理 DNS 配置等。
  • 移动设备:使用 SLAAC 和临时地址,提高隐私性。

IPv6 地址自动配置使网络管理更加灵活高效,同时满足多种应用需求。

1. IPv4 和 IPv6 的 TCP/UDP 协议

TCP(传输控制协议)和 UDP(用户数据报协议)是两个常见的传输层协议,它们负责端到端的数据传输。虽然它们在功能上有很多相似之处,但由于 IPv6 与 IPv4 在网络层的差异,TCP 和 UDP 的头部结构也有所不同。


2. TCP/UDP 首部结构对比

2.1 IPv4 中的 TCP 首部结构

IPv4 中的 TCP 首部由固定部分和可选部分(最大 40 字节)组成。下面是 TCP 首部的字段:

DATA_TABLE
字段长度(字节)描述
源端口2发送端的端口号
目标端口2接收端的端口号
序列号4表示发送的字节流的顺序号
确认号4确认接收方接收到的字节流的顺序号
数据偏移1TCP 首部的长度(单位为 4 字节)
保留3保留为将来使用,必须为 0
控制位9如 SYN、ACK、FIN 等标志位
窗口大小2用于流量控制,表示接收方的缓冲区大小
校验和2用于错误检测
紧急指针2指示紧急数据的结束位置
选项(可选)可变用于支持额外的功能,如最大报文段大小(MSS)
填充可变用于使首部长度为 32 位倍数

2.2 IPv6 中的 TCP 首部结构

IPv6 中的 TCP 首部基本与 IPv4 中的结构相同,但由于 IPv6 的地址长度为 128 位,因此需要做一些调整:

DATA_TABLE
字段长度(字节)描述
源端口2发送端的端口号
目标端口2接收端的端口号
序列号4表示发送的字节流的顺序号
确认号4确认接收方接收到的字节流的顺序号
数据偏移1TCP 首部的长度(单位为 4 字节)
保留3保留为将来使用,必须为 0
控制位9如 SYN、ACK、FIN 等标志位
窗口大小2用于流量控制,表示接收方的缓冲区大小
校验和2用于错误检测
紧急指针2指示紧急数据的结束位置
选项(可选)可变用于支持额外的功能,如最大报文段大小(MSS)
填充可变用于使首部长度为 32 位倍数

IPv6 和 IPv4 中的 TCP 首部结构大致相同,差异主要体现在地址长度上。

2.3 UDP 首部结构

UDP 的首部结构比 TCP 简单,因为它是一个无连接协议。UDP 的首部通常是 8 字节,结构如下:

DATA_TABLE
字段长度(字节)描述
源端口2发送端的端口号
目标端口2接收端的端口号
长度2包含 UDP 头和数据部分的总长度(字节)
校验和2用于错误检测

UDP 在 IPv4 和 IPv6 中的首部结构是一样的,因此其在两个协议中没有变化。


3. TCP 三次握手与四次挥手

3.1 TCP 三次握手(建立连接)

三次握手用于建立可靠的连接,确保双方的接收能力和序列号同步。

  1. 第一次握手(SYN)

    • 客户端发送一个 SYN 包(同步信号)到服务器,表示客户端希望建立连接。此时客户端进入 SYN_SEND 状态。
    • 包含客户端的初始序列号(Seq = x)。
  2. 第二次握手(SYN-ACK)

    • 服务器接收到 SYN 包后,发送一个 SYN-ACK 包,表示同意建立连接并确认客户端的序列号。服务器进入 SYN_RECEIVED 状态。
    • 包含服务器的初始序列号(Seq = y)和确认号(Ack = x + 1)。
  3. 第三次握手(ACK)

    • 客户端接收到 SYN-ACK 后,发送一个 ACK 包,表示确认连接建立成功。此时客户端和服务器都进入 ESTABLISHED 状态。
    • 包含确认号(Ack = y + 1)。

3.2 TCP 四次挥手(断开连接)

四次挥手用于断开已经建立的连接,每一方都需要分别关闭自己的连接。

  1. 第一次挥手(FIN)
    • 客户端发送 FIN 包,表示客户端没有数据要发送了,准备关闭连接。客户端进入 FIN_WAIT_1 状态。
  2. 第二次挥手(ACK)
    • 服务器接收到 FIN 包后,发送 ACK 包,表示接收到了客户端的关闭请求。服务器进入 CLOSE_WAIT 状态,客户端进入 FIN_WAIT_2 状态。
  3. 第三次挥手(FIN)
    • 服务器发送 FIN 包,表示服务器也没有数据要发送,准备关闭连接。服务器进入 LAST_ACK 状态。
  4. 第四次挥手(ACK)
    • 客户端接收到 FIN 包后,发送 ACK 包,表示确认关闭连接。客户端进入 TIME_WAIT 状态,等待足够的时间后完全关闭连接。服务器进入 CLOSED 状态。

4. 校验和

4.1 校验和(Checksum)概述

校验和用于验证数据传输过程中是否发生了错误。它通过计算数据的和并取反,检查接收方收到的数据是否与发送方的计算一致。

  • TCP/UDP 校验和
    • 计算:包括报文的头部、数据和一个伪头部(包含源地址、目标地址和协议类型等)。伪头部用于确保数据包在传输过程中未被篡改。
    • 伪头部
      • IPv4:包含源 IP 地址、目标 IP 地址、协议号(TCP/UDP)、数据长度。
      • IPv6:包含源 IP 地址、目标 IP 地址、跳数、协议号(TCP/UDP)、数据长度。
  • 步骤
    1. 计算数据包(包含头部和数据)的和。
    2. 将和取反,形成校验和。
    3. 接收方也按同样的方法计算校验和,如果计算结果为 0,则数据完整。

4.2 校验和计算在 TCP 和 UDP 中的区别

  • TCP 校验和:适用于连接管理、流量控制、错误检测等,要求更高的可靠性。
  • UDP 校验和:虽然 UDP 是无连接协议,但也采用校验和来保证数据完整性。

总结

  • IPv4 和 IPv6 的 TCP/UDP 协议
    • IPv6 的地址空间更大,但 TCP 和 UDP 的首部结构与 IPv4 差异较小,主要区别体现在地址长度上。
  • TCP 三次握手与四次挥手
    • TCP 使用三次握手建立连接,四次挥手断开连接,确保数据的可靠传输。
  • 校验和
    • TCP 和 UDP 都使用校验和来保证数据传输的完整性,并且计算过程中涉及伪头部,以确保数据在传输过程中没有被篡改。

IPv6 的 MTU(最大传输单元)发现过程

IPv6 协议支持路径 MTU(Path MTU,简称 PMTU)发现机制,用于确保数据包在传输路径上不会因大小超过链路 MTU 而被丢弃。这是 IPv6 的一个重要特性,因为 IPv6 不支持 IPv4 中的中间路由器分片功能。


1. 什么是 MTU?

  • MTU(Maximum Transmission Unit) 是网络接口一次能传输的最大数据帧大小,包括数据和协议头部的总长度。
  • 常见的链路 MTU:
    • 以太网:1500 字节
    • PPP 链路:576 字节
    • 某些高速链路:可达 9000 字节(巨型帧)

在 IPv6 中,数据包的大小必须小于等于路径上的最小 MTU。


2. IPv6 的 MTU 要求

IPv6 要求每个链路的 MTU 至少为 1280 字节,这是 IPv6 的最低 MTU限制。
当数据包超过路径上的最小 MTU 时,发送端需要将数据分片,而不是让中间路由器进行分片。


3. IPv6 的路径 MTU 发现机制

IPv6 使用 ICMPv6 的“分组太大”(Packet Too Big)消息 来实现路径 MTU 发现。这一机制允许发送端动态调整数据包的大小以适应网络路径的实际 MTU。

3.1 路径 MTU 发现的过程

  1. 发送大数据包

    • 源节点尝试发送一个不分片的数据包,大小等于或小于其初始 MTU(如 1500 字节)。
  2. 路由器检测 MTU 是否符合要求

    • 每个经过的路由器检查该数据包的大小是否小于其链路的 MTU。如果数据包太大且无法通过,则丢弃该包。
  3. 路由器发送 ICMPv6 消息

    • 丢弃数据包的路由器向源节点发送一个 ICMPv6 的“Packet Too Big”消息
    • Packet Too Big 消息的内容
      • 包括路由器链路的 MTU 值。
      • 包括数据包的前几个字节,以帮助源节点识别被丢弃的包。
  4. 源节点调整数据包大小

    • 源节点根据 ICMPv6 消息中报告的 MTU 值,调整后续发送的数据包大小。
  5. 重复检测

    • 源节点继续发送数据包,直到所有路径上的 MTU 值都满足要求。

3.2 示例

假设一个源节点的链路 MTU为 1500 字节,目标链路的 MTU为 1280 字节:

  • 步骤 1:源节点发送一个 1500 字节的数据包。
  • 步骤 2:路径上的路由器发现 MTU 限制为 1280 字节,丢弃该包并发送 ICMPv6 Packet Too Big 消息,MTU=1280。
  • 步骤 3:源节点接收到消息后,将数据包调整为不超过 1280 字节。
  • 步骤 4:调整后的数据包可以成功通过,完成传输。

4. MTU 发现中的关键问题

4.1 中间路由器无法生成 ICMPv6 消息

  • 某些网络可能阻止 ICMPv6 消息(例如防火墙或配置错误)。
  • 如果 ICMPv6 消息无法到达源节点,则 PMTU 发现机制会失败,导致数据传输问题。

4.2 过小的数据包

  • 如果链路 MTU 低于 IPv6 的最低值(1280 字节),则需要使用 链路层分片 来满足 IPv6 的最低 MTU 要求。

4.3 PMTU 黑洞

  • 某些网络会丢弃大于链路 MTU 的数据包,但不会发送 ICMPv6 消息。这种情况下源节点无法获知 MTU信息,可能导致数据丢失。
  • 解决方法:定期发送更小的数据包以测试网络路径的 MTU。

5. IPv6 MTU 的数据包处理

在 IPv6 中,数据包处理与路径 MTU 紧密相关:

  1. 超过链路 MTU的数据包

    • IPv6 禁止中间路由器对数据包进行分片。
    • 如果数据包大小超过链路 MTU,数据包会被丢弃并返回 ICMPv6 消息。
  2. 分片机制

    • IPv6 仅允许源节点进行分片,使用 分段扩展头部(Fragment Header)。
    • 源节点根据目标路径的 MTU 对数据包进行分片。
  3. 重组机制

    • 数据包的重组仅在目的节点完成,中间路由器不会进行重组操作。
    • 分片包的 IPv6 首部包含 标识符字段片偏移量字段,帮助接收方按顺序重组。

6. 有状态和无状态地址自动配置对 MTU 的影响

IPv6 支持有状态(通过 DHCPv6)和无状态(通过路由器通告)地址自动配置:

  • 无状态自动配置

    • 路由器通告(RA)消息中包含链路 MTU 信息。
    • 主机根据 RA 消息动态调整 MTU。
  • 有状态配置

    • 主机通过 DHCPv6 获取 MTU 等网络配置信息。

总结

  • IPv6 的 MTU 发现机制通过 ICMPv6 的“Packet Too Big”消息,确保数据包的大小符合路径上所有链路的 MTU。
  • 只有源节点可以分片,中间路由器不会分片。
  • IPv6 的最低 MTU 为 1280 字节,但路径 MTU 可能更小,链路层需要支持进一步的分片。
  • PMTU 的有效性依赖于 ICMPv6 消息的正常传输,网络配置需要避免“PMTU 黑洞”。
END_OF_FILESLUG: 大学课程/TCP-IP核心知识点
# COMMENTS