我们先来看张图,从上往下对应的是OSI七层模型。
可以看出,传输层给上层数据添加了TCP头部,IP层给TCP层的数据添加了IP头部,数据链路层给数据添加了MAC头部。
接下来,我们通过分析wireshark
抓到的http报文,实地分解下http原始报文的长度,以及最终在物理层传递的Frame的长度,中间经过了多少变动。我们实战探究下。
我拿出一个祖传的wireshark报文,如下图所示,我们http层的数据和头部的总长度是931bytes,但是最终到了数据链路层后,传递的包长度变成了了985bytes。这期间它添加了哪些数据呢?
http的数据是699bytes;http头部是232bytes;tcp头部是20bytes;ip头部是20bytes;数据链路层头部是14bytes。
加起来总共是985bytes。 699 + 232 + 20 + 20 + 14 = 985
。
我们依次来验证下。
①先看下http原数据:
感兴趣的同学可以数一下下面的字节数,看是否是699bytes。
②接着看http头部的长度:
如图,数一下会得出http的header长度是232bytes。另外,请求头里面的Content-Length
的数据长度,是不包含header的长度的。
③接着看下tcp头部的长度:
另外,如下图所示,这个Len指的是上层的报文长度,不包含tcp header的长度。
④接着看ip头部的长度:
这个很直白,一看就懂。
⑤接着看下数据链路层的头部长度:
这个没有数据直接指明,我们数一下是14bytes。
至此我们分析完了报文的长度。
tcp层、ip层的header长度最少都是20bytes
,数据链路层的是14bytes,加在一起就是54bytes。
至此你应该对网络分层对数据包的影响,会有一个比较直观的看法了。
如果喜欢记得点赞哦。