我们先来看张图,从上往下对应的是OSI七层模型。

wireshark分析qq协议 wireshark分析http协议_http


可以看出,传输层给上层数据添加了TCP头部,IP层给TCP层的数据添加了IP头部,数据链路层给数据添加了MAC头部。

接下来,我们通过分析wireshark抓到的http报文,实地分解下http原始报文的长度,以及最终在物理层传递的Frame的长度,中间经过了多少变动。我们实战探究下。

我拿出一个祖传的wireshark报文,如下图所示,我们http层的数据和头部的总长度是931bytes,但是最终到了数据链路层后,传递的包长度变成了了985bytes。这期间它添加了哪些数据呢?

wireshark分析qq协议 wireshark分析http协议_wireshark分析qq协议_02


http的数据是699bytes;http头部是232bytes;tcp头部是20bytes;ip头部是20bytes;数据链路层头部是14bytes。

加起来总共是985bytes。 699 + 232 + 20 + 20 + 14 = 985

我们依次来验证下。

①先看下http原数据:

wireshark分析qq协议 wireshark分析http协议_网络协议_03


感兴趣的同学可以数一下下面的字节数,看是否是699bytes。②接着看http头部的长度:

wireshark分析qq协议 wireshark分析http协议_wireshark分析qq协议_04


如图,数一下会得出http的header长度是232bytes。另外,请求头里面的Content-Length的数据长度,是不包含header的长度的。③接着看下tcp头部的长度:

wireshark分析qq协议 wireshark分析http协议_http_05


另外,如下图所示,这个Len指的是上层的报文长度,不包含tcp header的长度。

wireshark分析qq协议 wireshark分析http协议_http_06


④接着看ip头部的长度:

wireshark分析qq协议 wireshark分析http协议_http_07


这个很直白,一看就懂。⑤接着看下数据链路层的头部长度:

wireshark分析qq协议 wireshark分析http协议_wireshark_08


这个没有数据直接指明,我们数一下是14bytes。

至此我们分析完了报文的长度。

tcp层、ip层的header长度最少都是20bytes,数据链路层的是14bytes,加在一起就是54bytes。

至此你应该对网络分层对数据包的影响,会有一个比较直观的看法了。

如果喜欢记得点赞哦。