一份数据从发送方到接收方,外形上是被一层层包起来的。每一层在自己的位置上加一段说明,说明的内容各自不同:上面加的是给对端同类程序看的,中间加的是给沿途找路用的,下面加的是给物理介质用的。到了对面再一层层拆掉,最后交到业务程序手上的就是最初那一份内容。代理IP的转发会在中间那一段做替换。
各层加的内容
上层加端口和序号,让对端知道交给哪个服务、怎么拼装。中层加来源和目标的地址,让沿途设备知道往哪送。下层加硬件标识,让同一段介质上的设备知道该谁收。每一段都只给自己这一层的对端看。每一段的结构是固定的,长度和字段位置由规范约定,所以接收方能准确知道该从哪里开始读。不同厂商的设备能互通,靠的就是格式一致、实现各管各的。
- 上面那一段
- 端口与序号,给对端同类程序看
- 中间那一段
- 来源与目标地址,给沿途设备找路用
- 下面那一段
- 硬件标识,给同一段介质上的设备认
收到之后先看最外面那一段,确认是给自己的,拆掉交给上一层;再往里看,逐步剥到内容本身。任何一层发现对不上,就会丢弃并可能给对方一个反馈,让发送方重来一次。代理IP使用中如果出现某一层对不上被丢弃的情况,从现象上看到的往往是连接突然中断。
加的内容会不会一直留着
每加一段就长一点,所以同一份内容在路上比原始体积大一些。这个额外开销跟层数和每层说明的长度有关,通常占比不大。
转发时哪些内容会被改
中间那一段的来源信息在每一跳可能被改写,其他部分保持不变。这也解释了为什么接收方看到的来源,未必是发送方本来的那一个。代理IP使用中看到的结果,就是这种逐跳改写之后的样子。
每层加一段给自己的对端看的说明,到对面按相反顺序拆掉。
拆的时候任何一层对不上,这一份就会被丢弃。
中间那一段的来源在每一跳可能被改写。接收方看到的来源未必是原始的。
