每个数据包都由两段拼成:前一段是包头,负责说明这包从哪来、到哪去、装了什么;后一段是载荷,装着真正要送的字节。两段职责分明,代理IP链路上每一个包都遵循这个结构。
这篇把包头的几个关键字段和载荷的边界讲清楚。分清两段,看抓包和理解网络行为都会轻松很多。
包头:给网络看的说明书
包头是一段固定格式的二进制信息,开头有版本、长度这类基础字段,接着是来源地址、目标地址、协议类型、编号等信息。网络设备拿到包,主要就是读这份说明书决定怎么处理。
三个字段最关键:目标地址告诉设备往哪送,来源地址告诉设备回信寄到哪,协议类型告诉设备这包是给传输层的谁。少了任何一个,包都没法正常流转。
包头里还有编号和时间寿命这类辅助字段:编号用于接收端排序拼装,寿命用于防止包在网络里无限转圈。辅助字段平时不显眼,关键时刻却各有用处。
载荷:真正要送的内容
载荷是包头之后的那一段,装着从上层传来的实际数据——可能是网页内容的一段、文件的一截、视频的一帧。网络设备通常不关心载荷是什么,只负责把它原样送到目标。
区分包头和载荷有一个实用价值:网络设备改包时,绝大多数只动包头(比如换来源地址),不碰载荷。这也是代理IP能改地址转发而不破坏内容的原因——它动的恰好是包头字段,载荷一路原样。
注意别把「包头」和前面聊过的「请求头」弄混:请求头是应用层 HTTP 的文本头,写在载荷内部;包头是网络层的二进制头,包在所有载荷之外。两者层级不同,名字相近,用途完全两码事。
两段在代理IP链路上各自是什么待遇
走代理IP时,包头会被转发层做一次「手术」:把来源地址换成代理出口的地址,有时还会改写其他辅助字段。载荷则基本不动——内容该是什么样还是什么样,代理IP只负责换寄件人,不拆包裹。
所以从目标站的角度看,收到的包「头」变了、「身」没变:来源显示的是代理出口,内容却是你原本发出的。这个「头变身不变」的机制,正是代理IP在报文层的全部秘密。
抓包软件里能直接看到包头各字段的值,也能看到载荷的内容(未加密时)。看多了就会发现:包头的字段就那些,规律性强;载荷则千变万化,跟着业务走。
还要注意一个细节:包头不是只有一层。网络层有网络层的头,传输层有传输层的头,它们叠在一起,各自服务各自的层级。说「包头」时先想清楚说的是哪一层,否则容易和前面讲过的请求头混成一团。
多提一句载荷的边界:它只负责「装」,不负责「懂」。载荷里是明文还是密文、是网页还是视频,对网络层来说没有区别——这正是分层带来的自由,也让加密成为可能:把载荷加密,中间环节照样搬运,却再也看不懂内容。
包头管去向、载荷管内容,两段各司其职,网络设备读包头做决定,业务数据躺在载荷里被搬运。
把两段分清楚,很多网络现象就有了第一层解释:为什么改地址不影响内容?因为改的是包头;为什么加密后看不到内容?因为内容进了加密的载荷——这些规律在代理IP链路上同样成立。
