“IP转发接收一份IP数据报和当前转发表,输出下一跳、出接口,或丢弃结果。路由计算负责学习并选择路径、生成表项;转发负责对当前数据报查表。查表正确不意味着路由协议已经收敛,也不保证沿途没有环。”
形式陈述
一段应用数据到达另一台主机,会经过不同范围的协议对象。链路帧负责同一链路上的一次传送;IP数据报携带跨网络的源、目的地址;TCP段或UDP数据报再带端口等端点信息;应用自行解释数据内容。这里的“包”只是统称,计算长度或确认含义时必须指出具体层。
封装把上层对象作为下层的载荷。写作
本页固定无隧道、无NAT、无分片的IPv4路径 A→R→B。A把IP数据报封装进面向R的链路帧。R检查并去掉入站链路封装,依据IP目的地址选择出接口,递减TTL并更新IPv4首部校验和,再为出站链路构造新帧。IP源、目的地址不变,链路源、目的地址按本跳重建。若TTL耗尽、首部无效或没有可用出口,转发可以失败,不能保证数据报交付。
路由器的IP转发通常不需要读取应用消息边界。链路交换机、IP路由器和应用代理处理的协议对象不同;代理可能终止一条传输连接并另起一条,因此不能把所有中间设备都画成完全透明的“线”。
直觉
每层首部像写给不同范围收件人的说明。链路地址告诉本跳“交给谁”,IP地址告诉路由器“最终去哪里”,端口帮助端系统选择接收入口。包每过一跳可以换外层包装,而不是把终点地址改成下一站。
分层的价值是接口可替换:相同IP载荷可以经过不同链路。但这种组合有条件,例如每个链路的最大载荷不同;上层不能只看本地网卡,就假定整个路径都装得下同样大的包。
例子与边界
一段12字节数据的账本
选定以太网教学封装,不计VLAN、前导码和帧间隙:以太网首部14字节、尾部FCS 4字节;IPv4无选项首部20字节;UDP首部8字节。应用12字节先得到UDP长度20,再得到IP总长度40。以太网数据区最少46字节,因此补6字节填充,帧长为
A的IP为192.0.2.10,B的IP为198.51.100.20,初始TTL=64。第一跳帧的链路目的地址是R入接口的地址。R转发后,IP源、目的仍为A、B,TTL=63;第二跳链路源地址改为R出接口,目的地址改为B。UDP端口和这12字节载荷保持不变。首部字段改变不等于应用内容改变。
若R的下一链路不是以太网,不能沿用64字节的帧账本;应使用该链路自己的封装与最小长度。若加入NAT、隧道或选项,地址和长度规则也要重新说明。本例的“IP地址不变”只属于已声明路径。
推论与应用
观察一次丢包应先定位对象:链路校验失败、路由器丢弃、传输重传和应用拒绝,发生在不同接口。抓到一个IP包也不证明服务端已读取其中的数据。TCP在IP之上重新组织字节,但业务执行还在更高一层。
后续最长前缀转发决定出接口,路径MTU限制每跳可承载的IP大小。分层不是“每层必定可靠”的阶梯,而是一组需要逐项核查的合同。
参考资料
- Larry Peterson、Bruce Davie,Computer Networks: A Systems Approach,在线6.2-dev版,§3.3.2,IP服务模型、封装与逐跳重封装;2026-10-08实读。
- RFC 791,1981,§§2.1、3.1,IPv4首部、TTL与校验;本页不将该IPv4格式套用于IPv6。
- RFC 894,1984,IP以太网封装与最小数据字段;长度账本另计以太网14字节首部和4字节FCS。