先说结论:数据在网络上每经过一层协议,就要被套上一个新头,像出门前一件件加衣服,代理IP链路里的每一份数据同样如此。这个过程叫封装,数据包正是在一层层封装中诞生的。
理解了封装,就理解了数据包为什么长成那个样子,也理解了代理IP链路在不同层看到的「包」为什么不一样。
封装:一层协议加一个头
你在应用里发出的数据,先是应用层给它加个说明(比如 HTTP 的请求行和请求头),交给传输层;传输层再加一个头(含端口和编号),交给网络层;网络层再加一个头(含来源和目标地址),交给链路层;链路层最后加一个头尾,才真正送上线路。
每一层只认识自己那层加的头,把更里面的内容当成一个整体搬运。这种「各管一层」的设计,让每一层协议都能独立演进——换掉某一层,不影响其他层。
封装还有一个副产品:安全边界。某层的数据加密与否,只影响那一层以内的可见性;外面各层该读的信息照样读。理解了这层关系,就不会再问「为什么加密了中间设备还能转发」这种问题。
收到的方向正好相反:链路层剥掉自己的头,网络层剥掉自己的头,一层层剥下来,最后把原始数据交给应用。封装与剥壳,是一对完整的逆过程。
套娃结构里,谁看得见谁
封装结构决定了可见性:物理线路上的设备能看到链路层信息,路由器能看到网络层头,只有通信双方能看到完整内容。每一层的信息,只有处理那一层的设备才读。
这个「越往外越少看见内容」的结构,是网络分层最优雅的地方:中间设备不需要知道业务内容,只需要会读自己那层的头。
这也解释了配置代理IP时的常见疑问:为什么有的设置是全局的、有的只对某些程序生效?因为不同程序把数据封装到不同层级后交给系统,能拦截到哪一层,就决定配置管不管用。
代理IP链路的封装视角
走普通 HTTP 代理时,转发层读的是网络层和应用层的信息——它要知道目标地址,也要读请求才能代发,所以能看到一部分请求内容。走加密传输时,转发层只能看到加密后的数据,内容对它成了黑盒。
日常判断走没走代理,也可以借封装视角看:看连接是建立在哪个层级的。浏览器走系统代理,通常是应用层出发就交给代理;底层设备级代理,则在更底层就接管了流量,程序自己都未必察觉。
还有一种叫整包封装的形态:把原来的整个包当作载荷,再套一个新的网络层头送出去。外面那层头指向转发点,里面那层头指向真正的目标,中间设备只看得到外壳。
普通代理IP的转发属于「改头不套壳」,整包封装属于「再套一层壳」,两种做法对中间设备的可见性完全不同——前者中间环节仍能看到部分内容,后者内容被外壳挡得严严实实。
对不同形态的「套壳」保持敏感是有用的:同样的目标地址,外壳不同、途经的环节就不同,中间环节能看到的也不同。链路选型时问清「走的是哪种封装」,能避开不少理解偏差。
封装是逐层加头的套娃:每一层只读自己那层的信息,把里面的一切当整体搬运。
可见性跟着层走:中间设备能看到哪一层,取决于封装到哪一层——代理IP转发时改的是外层地址,内容藏在更里层。
