IPv4 与 IPv6 原理深度解析

Internet Protocol (IP) 是现代互联网的基石。本站旨在提供从历史演进到底层字节结构的完整技术图谱。

核心宗旨: 不止于科普,深入 RFC 标准文档(RFC 791, RFC 8200),解析报文在光缆中传输的逻辑本质。

IP 协议发展简史

为什么要发明 IP?在 20 世纪 70 年代,存在各种互不兼容的网络(卫星网、无线电网、有线网)。IP 的设计初衷就是为了“互联(Inter-networking)”这些异构网络。

1974

TCP/IP 的诞生

Vint CerfBob Kahn 发表了著名的论文《A Protocol for Packet Network Intercommunication》。他们提出了核心概念:网络不应保证可靠性,可靠性应由端到端(主机)负责。这奠定了 IP "尽力而为(Best Effort)" 的设计哲学。

1983-01-01

Flag Day

ARPANET 正式将核心协议从 NCP 切换到 TCP/IP。这一天被认为是现代互联网的诞生日。IPv4 (RFC 791) 开始统治世界。

1990s

地址危机与 CIDR

互联网爆炸式增长,A/B/C 类地址分类法导致严重的地址浪费。IETF 引入了 CIDR (无类别域间路由) 和 NAT 技术,为 IPv4 续命。

2011 & 2017

IPv6 标准化

IANA 宣布 IPv4 顶级地址池耗尽。IPv6 (RFC 8200) 成为互联网标准,彻底解决了地址枯竭问题,并优化了包头处理效率。

TCP/IP 协议栈定位

理解 IP 的第一步是明确它在 OSI 模型或 TCP/IP 模型中的位置。IP 位于网络层 (Layer 3),负责点对点的逻辑寻址和路由。

应用层 (Application) HTTP, DNS, SSH (Data)
传输层 (Transport) TCP, UDP (Segment / Port)
网络层 (Internet) IPv4, IPv6, ICMP (Packet / IP Addr)

封装逻辑: 当你发送一个 HTTP 请求时,数据层层向下包裹。IP 协议给 TCP 段加上 IP 头(包含源/目的 IP),使其能在复杂的路由网格中找到路径。

IPv4 vs IPv6:底层逻辑重构

IPv6 不仅仅是地址加长(从 32 位到 128 位),更是一次对数据平面处理逻辑的彻底重构。

特性机制 IPv4 逻辑 IPv6 变革逻辑
报文头结构 变长 20-60字节。包含 Options 字段,路由器处理慢。 定长 40字节。移除 Options(改为扩展头),移除 Checksum,硬件转发效率极高。
分片 (Fragmentation) 路径上的路由器如果发现包大于 MTU,可以进行分片。 路由器不再分片。仅源主机可分片。如果包太大,路由器直接丢弃并回传 ICMPv6 Packet Too Big,强迫源端使用 PMTU 发现机制
地址解析 使用 ARP (广播)。存在广播风暴,不仅消耗带宽,还打断局域网所有主机的 CPU。 使用 NDP (邻居发现协议)。基于 ICMPv6 和被请求节点组播地址。仅相关主机收到解析请求,不仅高效而且更安全。
生存时间 TTL (Time To Live),单位理论上是秒,实际作为跳数。 Hop Limit (跳数限制)。名称更准确地反映了其用途:防止路由环路。

开发者视角:Socket 编程适配

对于后端工程师,从 IPv4 迁移到 IPv6 意味着数据结构的变更。不要硬编码 AF_INET,应拥抱 getaddrinfo 自动适配。

C / Linux Kernel Structs
// IPv4 地址结构 (Legacy) struct sockaddr_in { sa_family_t sin_family; // AF_INET in_port_t sin_port; struct in_addr sin_addr; // 32-bit (0.0.0.0) }; // IPv6 地址结构 (Modern) struct sockaddr_in6 { sa_family_t sin6_family; // AF_INET6 in_port_t sin6_port; uint32_t sin6_flowinfo; // 流标签 (QoS) struct in6_addr sin6_addr; // 128-bit (::) uint32_t sin6_scope_id; // 接口索引 (如 eth0) };