IP — 网际协议
为主机寻址并让数据包跨网络路由转发 / 网络层 / 无端口(EtherType 0x0800 / 0x86DD)/ RFC 791(IPv4)、RFC 8200(IPv6)
Table of Contents
1. 协议定位
| 项目 | 信息 |
|---|---|
| 所属层 | 网络层(TCP/IP 模型的网际层,整个协议栈的"细腰") |
| 英文全称 | Internet Protocol(IPv4 / IPv6) |
| 主要 RFC | RFC 791(IPv4,1981,STD 5)、RFC 8200(IPv6,2017,STD 86,取代 RFC 2460);相关:RFC 1812(路由器要求)、RFC 1918(私有地址)、RFC 4632(CIDR)、RFC 8201(IPv6 PMTUD)、RFC 6864(IPv4 ID 字段) |
| 端口 | 无。端口是传输层概念;IP 用 Protocol 字段(IPv4)/ Next Header(IPv6)区分上层:1=ICMP,2=IGMP,6=TCP,17=UDP,47=GRE,50=ESP,51=AH,58=ICMPv6,89=OSPF |
| 封装于 | 以太网帧,EtherType 0x0800(IPv4)/ 0x86DD(IPv6);也可承载于 PPP、Wi-Fi、隧道等 |
| 典型应用 | 一切互联网通信的底座——TCP/UDP、ICMP、路由协议、VPN 隧道全部构建其上 |
2. 一句话理解
IP 是互联网的"快递面单":它给每台主机一个全球(或全网)可识别的地址,然后让数据包在一个个路由器之间"看着面单接力投递"。它不保证送到、不保证顺序、不保证不重复——只负责尽最大努力朝目的地转发。
生活化类比
寄快递时,你只写"收件人地址",并不知道包裹会经过哪几个分拣中心。每个中心拆开外袋看一眼地址,判断"这个该往哪个方向送",换个新袋子接着往下发。面单上的地址从头到尾不变,外面的袋子换了一路又一路——这就是"IP 地址端到端不变、MAC 逐跳改写"。
再补一个类比:IP 是平邮,不是挂号信。它尽力送,但不签收、不保证顺序、不保证不重复,丢了也不通知你重寄。想要"寄丢了自动重寄、乱序自动排好",得在寄件人和收件人之间另加一套规矩——那套规矩叫 TCP。
3. 它解决什么问题
为什么没有它,网络就"缺了一块":
链路层只能在同一个物理网络内投递帧。要让全球异构网络互联互通,必须解决四个问题:
- 统一寻址:不同链路技术(以太网、Wi-Fi、光纤、蜂窝)的地址格式完全不同,需要一套与链路无关的逻辑地址。IP 地址提供全局统一的编址空间,并通过"网络号 + 主机号"结构支持层次化聚合。
- 跨网转发(路由):路由器基于目的 IP 查路由表,逐跳把包朝目的地推进。IP 地址的层次结构使核心路由器只需记住"网段"而非每台主机,让全球路由表规模可控。
- 屏蔽链路差异:不同链路的 MTU、帧格式、可靠性各不相同。IP 提供统一的数据报抽象(IPv4 还提供分片重组),实现"IP over everything,everything over IP"。
- 防止无限循环:拓扑变化可能产生环路,IP 用 TTL / Hop Limit 保证包不会永久打转。
设计哲学:端到端原则 + 尽力而为。IP 刻意做得极简且无状态,把可靠性、有序性、拥塞控制统统交给端系统的传输层(TCP)。正是这种"细腰"设计让 IP 能承载任何上层应用、跑在任何下层链路上。
4. 核心特征
- 【不打招呼】无连接(Connectionless):不建立链路,每个数据报独立处理,可走不同路径、乱序到达。
- 【尽力而为】不可靠(Best-Effort):不保证送达、不保证顺序、不保证不重复;出错就丢弃(可选地由 ICMP 报错)。
- 【路由器不记事】无状态:路由器不为数据流保存状态,仅按当前路由表逐包转发,这是互联网可扩展的关键。
- 【只护头不护身】仅头部校验:IPv4 头部校验和只保护头部,不保护数据(数据完整性交给 TCP/UDP 校验和)。IPv6 直接取消了头部校验和,减少逐跳开销。
- 【走一跳减一】逐跳递减 TTL:每经过一台路由器 TTL 减 1,减到 0 丢弃并回 ICMP 超时——这正是
traceroute的原理。 - 【大包能切开】分片能力:IPv4 允许中间路由器分片;IPv6 只允许源端分片,中间设备遇到过大包直接丢弃并回 ICMPv6 Packet Too Big,强制使用 PMTUD。
- 【32 位不够用】地址空间:IPv4 为 32 位(约 43 亿,已耗尽,靠 NAT 续命);IPv6 为 128 位(约 3.4×10³⁸)。
5. 与其他协议的关系
| 相关协议 | 关系说明 |
|---|---|
| ARP / NDP | IP 决定"下一跳 IP 是谁",ARP(IPv4)/ NDP(IPv6)负责把它翻译成 MAC 才能真正发帧 |
| ICMP / ICMPv6 | IP 的"差错与控制信使":不可达、超时、分片需求、重定向。ICMPv6 更是 IPv6 的必需组件(承载 NDP、MLD、PMTUD) |
| TCP(RFC 9293)/ UDP(RFC 768) | 直接承载于 IP,用 Protocol 字段 6 / 17 标识;二者的校验和覆盖 IP 伪首部(源/目的 IP、协议号、长度) |
| 路由协议(RIP / OSPF / BGP) | 它们的职责是填写路由表,IP 转发平面则使用路由表。控制平面与数据平面分离 |
| IGMP / MLD | 管理 IP 组播(224.0.0.0/4 与 ff00::/8)的成员关系 |
| DHCP | 自动分配 IP 地址、掩码、网关、DNS,解决"地址从哪来" |
| IPSec(AH/ESP) | 在网络层为 IP 包提供加密与认证(协议号 51 / 50),IPv6 中作为扩展头原生集成 |
| NAT(RFC 3022) | IPv4 地址枯竭的现实解法,改写 IP/端口实现多对一复用,代价是破坏端到端可达性 |
| GRE / VXLAN / IP-in-IP | 把 IP 包再封装进 IP 包,构建覆盖网络(Overlay)与隧道 |
6. 本目录学习路线
- 01-原理与报文 — IPv4 头部 20 字节逐字段详解、地址分类与 CIDR 子网划分、路由查表与最长前缀匹配、分片与重组机制、TTL、IPv6 头部与扩展头、IPv4/IPv6 全面对比。
- 02-实战与排错 — Wireshark 过滤式、
ip/ping/traceroute/mtr/tcpdump实操,MTU 黑洞、路由回程不对称、地址冲突、TTL 耗尽等典型故障排查。
学习建议:IP 是承上启下的枢纽。建议先彻底吃透**“掩码 → 网段判断 → 路由决策 → 下一跳 → ARP 解析”**这条主线,这是所有网络排错的思维骨架;之后再攻分片与 PMTUD(生产环境疑难杂症的高发区)和 IPv6。
初学者最常踩的坑:把 IP 当成"能保证送到"的协议。IP 明确不保证送达、不保证顺序、不保证不重复,出错就直接丢弃——可靠性是 TCP 在端系统上另外补出来的。第二个高频坑是忘了"IP 只决定下一跳是谁":算出下一跳之后,还必须由 ARP(IPv4)/ NDP(IPv6)把它翻译成 MAC,帧才发得出去。