计算机网络——IPv4&IPv6

目录

[早期IP 地址分类](#早期IP 地址分类)

[公有 IP 和私有 IP 有什么区别?](#公有 IP 和私有 IP 有什么区别?)

IPv4数据报结构

解决IPv4地址耗尽的常见手段

特殊的IP地址

IP分片与重组

MTU的介绍

MSS的介绍

IP数据报会填满吗?

分片&重组的过程

为什么会遇到分片重组?

分片的机制

重组(Reassembly)

现代网络的优化方式

IPv4与IPv6的区别


早期IP 地址分类

IP 地址(Internet Protocol Address)是分配给网络中设备的一个唯一标识符,用于标识主机和网络。

在 IPv4 中,IP 地址是 32 位的二进制数,通常表示为四个十进制数(0~255),用点分十进制表示,

  • 核心要点:这是IPv4时代的重要概念,用于划分网络和主机。

  • 地址分类:分为A、B、C、D、E五类,根据地址的首位来区分,每类地址的网络位和主机位不同。

早期的 IPv4 地址分为 A、B、C、D、E 五类 ,主要依据 地址的前几位网络号/主机号的划分 来决定。

注意点:

  • 0.x.x.x 和 127.x.x.x 特殊保留:
  • 127.0.0.1 通常用于本地回环地址(localhost)。

A 类地址第 1 位固定是 0,B 类前 2 位是 10,C 类前 3 位是 110,D 类前 4 位是 1110,E 类前 5 位是 11110。

公有 IP 和私有 IP 有什么区别?

  • 核心要点:这是一个非常实用的概念,与 NAT(网络地址转换)相关联。

  • 公有 IP :全球唯一,可以在互联网上直接访问,由 ISP(互联网服务提供商)分配。

  • 私有 IP只能在局域网(LAN)内部使用,不能直接在互联网上路由。例如 192.168.x.x10.x.x.x172.16.x.x。私有 IP 通过 NAT 技术转换成公有 IP,才能访问互联网。

NAT是什么?

  • 核心要点:NAT 是解决 IPv4 地址短缺的重要技术。

  • 作用:它允许一个私有网络内的多台设备共享一个公有 IP 地址来访问互联网。

  • 解决了什么问题:最主要的是缓解了 IPv4 地址耗尽的危机,同时也提供了一定程度的安全保护,因为外部网络无法直接访问内部的私有 IP。

IPv4数据报结构

IPv4 数据报分为两部分:首部(Header)数据(Payload)

其中首部最小长度 20 字节 ,最大长度 60 字节(因为有可选字段)

字段解析

首部区(Header)

  1. Version (版本号)

长度:4 位

值:0100 表示 IPv4;0110 表示 IPv6。

  1. IHL (Internet Header Length)

长度:4 位

表示首部长度,以 4 字节(32 位) 为单位。

最小值 5(即 5×4=20 字节),最大值 15(即 60 字节)。

  1. Type of Service (服务类型 / DSCP+ECN)

长度:8 位

主要用于 QoS(服务质量),区分优先级、延迟、吞吐量等需求。

前 6 位:DSCP(Differentiated Services Code Point)

后 2 位:ECN(Explicit Congestion Notification)

  1. Total Length (总长度)

长度:16 位

表示 整个 IP 包(首部+数据)的长度,最大为 65,535 字节。

  1. Identification (标识符)

长度:16 位

用于分片时标识同一个数据报,接收端可依此重新组装。

  1. Flags (标志位)

长度:3 位

控制分片行为:

第 1 位:保留(0)

第 2 位 DF(Don't Fragment):=1 表示禁止分片

第 3 位 MF(More Fragments):=1 表示后面还有分片

  1. Fragment Offset (片偏移量)

长度:13 位

表示当前分片在原始数据报中的偏移位置,以 8 字节 为单位。

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

长度:8 位

每经过一个路由器,TTL 减 1,减到 0 时数据报丢弃。

防止数据报在网络中无限循环。

  1. Protocol (协议号)

长度:8 位

指明上层协议类型。常见取值:

1 → ICMP

6 → TCP

17 → UDP

  1. Header Checksum (首部校验和)

长度:16 位

只校验 首部部分,不包括数据

用于发现传输过程中首部错误。

  1. Source Address (源地址)

长度:32 位

发出数据报的设备 IPv4 地址。

  1. Destination Address (目的地址)

长度:32 位

接收数据报的设备 IPv4 地址。

  1. Options(可选字段)

可变长度(0~40 字节)。

用于测试、调试、安全等特殊功能。

  1. Padding(填充)

由于首部必须是 4 字节的整数倍,如果 Options 不是 4 字节倍数,就用 0 填充。

数据区(Payload)

位于首部之后,存放 上层协议数据(如 TCP 段、UDP 数据报、ICMP 报文等)。

大小 = Total Length - Header Length。

总结

IPv4 首部最小 20 字节,最大 60 字节。

关键字段:TTL(避免死循环)、分片(Identification+Flags+Offset)、Protocol(上层协议识别)、Checksum(首部错误校验检测)。

Payload 部分承载上层数据(TCP/UDP/ICMP 等)。

解决IPv4地址耗尽的常见手段

1.私有地址 + NAT

私有地址思路:局域网内部使用 RFC1918 定义的私有地址(如 192.168.x.x、10.x.x.x),避免占用宝贵的公网 IPv4。

优点:节省公网地址;灵活部署。

缺点:私有地址不能直接在公网通信,必须依赖 NAT。

NAT思路:在边界路由器上,把多个内网 IP 映射到少量公网 IP。

NAPT/端口复用(最常见):多个内网地址通过端口号复用同一个公网地址

优点:极大延缓 IPv4 地址耗尽;部署简单。

缺点:破坏端到端通信模型;对 P2P、VoIP 等应用不友好。

  1. DHCP + 动态分配
  • 思路:不是每个用户/设备都长期占用固定 IP,而是通过 DHCP 动态分配。用户下线后,IP 可以回收再用。

  • 优点:提高地址利用率。

  • 缺点:不解决总量不足的问题,只是"更精细化管理"。

  1. CIDR(无类域间路由)

思路:替代传统 A/B/C 分类,用 子网掩码 灵活划分网络,避免浪费。

例子:以前 B 类固定 65534 个主机,但很多机构用不了那么多;CIDR 可以按需分配,比如 /20 只给 4096 个地址。

优点:极大提高地址利用率。

  1. 过渡到 IPv6(根本解决方案)

IPv6 地址是 128 位,理论上数量几乎无限(2^128)。

  • 优点:彻底解决地址耗尽问题;恢复端到端通信模式。

  • 缺点:升级成本高;推广周期长。

特殊的IP地址

比如全0,全1,以及私有的,还有就是环回地址等,在这里浅浅总结一下

由于全0和全1不能用来标识主机,所以就是对于上面的那些A类,B类,C类地址来说,都实际可用的主机会-2。

IP分片与重组

MTU的介绍

定义 :MTU 是最大传输单元 ,它是在数据链路层 (如以太网)中,一个数据帧能承载的最大数据量

作用 :你可以想象一辆卡车,MTU 就是这辆卡车单次运输能装载的货物上限。在网络中,如果一个 IP 数据包的大小超过了路径上某个网络的 MTU,那么它就必须被分片(Fragmentation)。分片会增加网络设备的负担,降低传输效率,因此通常我们都希望尽量避免分片。

常见值 :对于以太网,标准的 MTU 值通常是 1500 字节

MSS的介绍

定义 :MSS 是最大报文段大小,它是在传输层 (主要是 TCP 协议)中,一个 TCP 报文段能承载的最大有效载荷(Payload)。简单来说,就是 TCP 数据包中,真正用来装载应用层数据的部分的最大值。

作用 :MSS 的存在是为了避免 IP 层分片, 在传输层就对数据包进行划分。在 TCP 连接建立时,通信双方会协商一个 MSS 值。这个值会根据路径上的 MTU 来计算。

MSS (最大报文段大小) 的设定直接取决于 MTU (最大传输单元)。

它们之间的关系可以概括为:

在 TCP 协议中,为了避免数据包在网络层被分片,发送方在建立连接时会根据路径上可用的 MTU ,计算出合适的 MSS 值,然后将这个值告诉对方。

MSS 的计算公式是:

MSS=MTU−IP 首部长度−TCP 首部长度

这个公式的目的是确保:当 TCP 报文段(数据部分)加上 IP 和 TCP 的头部之后,总长度不会超过网络链路的 MTU。这样,数据包就能以完整的形式通过网络,避免了分片带来的性能下降和可靠性问题。

简单来说,MTU 是物理链路的"硬性"限制,而 MSS 则是传输层为了遵守这个限制而做出的"主动"调整

IP数据报会填满吗?

虽然 IP 数据报的总长度最大可以达到 65,535 字节,但我们在实际传输中并不会刻意去填满它。IP数据报的长度通常由上层协议(如 TCP 或 UDP)决定,并且会受到网络中其他参数的限制。

MTU 的限制这是最重要的原因。

网络中的每一个链路都有自己的 MTU(最大传输单元) ,比如标准的以太网 MTU 是 1500 字节。如果 IP 数据报的总长度超过了链路的 MTU,它就会被分片。分片会带来许多问题:

  • 增加路由器负担:路由器需要花费额外的时间和资源来处理分片和重组。

  • 降低效率:任何一个分片丢失都可能导致整个数据包需要重新传输。

  • 增加丢包风险:分片越多,任何一个分片在传输过程中丢失的概率就越高。

因此,为了避免分片,上层协议(尤其是 TCP)会协商一个合适的 MSS(最大报文段大小),确保 TCP 报文段加上 IP 和 TCP 首部后,总长度不超过路径上的 MTU。

核心原则是:尽量让数据报的总长度不超过路径上最小的 MTU,以避免分片,从而提高传输效率和可靠性。因此,IP 数据报的长度通常是几百到一千多字节,远小于其理论最大值。

分片&重组的过程

为什么会遇到分片重组?

IPv4 数据报的 最大长度是 65,535 字节,但网络中不同的数据链路层(如以太网、Wi-Fi)的 MTU(最大传输单元) 往往比这个小。如果 IP 数据报长度 超过 MTU,就必须把它拆分成更小的片段(分片)进行传输。

分片的机制

分片发生在 发送端或中间路由器,由以下字段控制:

  1. Identification(标识符,16 位)

同一数据报的所有分片都具有相同的标识符。

接收端通过它来判断哪些分片属于同一个原始数据报。

  1. Flags(标志位,3 位)

DF (Don't Fragment):禁止分片。若为 1 且数据报超过 MTU,则丢弃并返回 ICMP 错误(常用于路径 MTU 发现)。

MF (More Fragments):是否还有后续分片。

  • 1 → 还有后续分片
  • 0 → 最后一片
  1. Fragment Offset(片偏移,13 位)

表示该分片在原始数据报中的相对位置。

以 8 字节(64 位)为单位,保证分片边界对齐。

举例📌

假设要发送一个 4000 字节的 IP 数据报,但链路的 MTU = 1500。

  • IP 首部 = 20 字节

  • 每个分片最大数据部分 = 1480 字节(1500 - 20)

于是分片结果:

  • 分片 1:1480 数据,Offset=0,MF=1

  • 分片 2:1480 数据,Offset=1480/8=185,MF=1

  • 分片 3:1040 数据,Offset=2960/8=370,MF=0

重组(Reassembly)

发生位置:只在 最终目的主机 进行,不在中间路由器重组

依据:

源地址、目的地址、协议号

Identification(标识符)

过程:

收到分片 → 按照 Offset 放入缓冲区 → 根据 MF 判断是否为最后一片

等到所有分片到齐 → 重新拼接成完整数据报

现代网络的优化方式

分片与重组的优缺点:

优点:允许在不同 MTU 的链路上传输大数据报,保证 IP 的"尽力而为"交付。

缺点:

  • 性能消耗:接收方必须维护缓冲区等待所有分片,增加处理开销。
  • 丢包风险:只要有一个分片丢失,整个数据报都无法重组(必须丢弃)。

由于分片的缺点,现代网络通常 尽量避免 IP 层分片

  • 路径 MTU 发现(PMTUD):通过设置 DF=1,若路由器发现超过 MTU,就返回 ICMP"需要分片但 DF 设置"消息,发送方据此调整报文大小。
  • 传输层分片:引入了MSS,TCP/UDP 通过MSS自行控制分段,保证 IP 层不再分片。

IPv4与IPv6的区别

IP 地址是网络上设备的唯一标识。上面我们说了解决IPv4地址耗尽问题,最根本的解决方式是IPv6代替IPv4。

地址空间&地址表示形式

  • IPv4:32位地址,通常用点分十进制表示(如 192.168.1.1)。地址空间有限,大约43亿个(实际上更少,因为有保留地址),已基本用完。
  • IPv6:128位地址,通常用冒号十六进制表示(如 2001:0db8:85a3:0000:0000:8a2e:0370:7334)。地址空间巨大,解决了IPv4地址耗尽的问题,几乎取之不尽。

首部结构

  • IPv4 首部:最小 20 字节,最大 60 字节(有 Options 字段,格式复杂)。

  • IPv6 首部:固定 40 字节,格式简化(去掉了校验和、分片字段,改用扩展头)。

👉 IPv6 的设计让路由器转发更高效。

在 IPv6 的中间传输过程中,不需要再对 IP 数据报进行校验

  • IPv4:有首部校验和 → 路由器逐跳检查,重算 → 保障有限,还增加开销。

  • IPv6 :取消首部校验和 → 中间路由器不再做校验,依赖链路层 + 传输层的校验 → 提升性能。

分片与重组

IPv4:支持中间路由器分片,目的主机重组。

IPv6:只允许源端分片,中间路由器不再分片,降低路由器负担。

地址类型

IPv4:单播、广播、多播。

IPv6:单播、多播、任播(anycast);去掉了广播(因为会引发广播风暴)。

本文章很多图片资源来源:小林coding