TCP报文段的数据长度是如何计算得到的

TCP/IP结构分析

应用层把数据传给运输层,也就是给TCP协议。来自应用层的数据会被分割为MSS的大小,放到如下图的数据部分。
在这里插入图片描述
TCP报文段发送给网络层,也就是给IP协议。需要在TCP报文段的外面再套上IP协议的头部。如下图的数据部分,其实就是 整个TCP报文段 罢了。
在这里插入图片描述
从上面两个图可知:

  • TCP头部、IP头部都是以4Byte为单位的。头部是指除了数据部分。
  • TCP头部的固定部分(除了TCP头部的选项)为4*5=20Byte。
  • IP头部的固定部分(除了IP头部的选项)为4*5=20Byte。
  • 综上两条,一个IP数据报至少会有40Byte。
  • TCP头部、IP头部都可能有选项。TCP头部的选项的组成方式在计算机网络 理解流量控制与SACK机制Options的构成章节有讲解。

Wireshark分析

所以当我们分析wireshark的数据包时,也应该先看TCP报文段,再看IP协议的头。

三次握手时的包

在这里插入图片描述
如上图,我们先看TCP报文段的头部,发现其总共占了32字节。上图16进制部分的蓝色部分,总共是32字节,但这是我们自己数出来的(当你点击Transmission Control Protocol后,16进制部分中,TCP头部的那些字节会变成蓝色)。当然,我们能发现TCP头部之后没有别的字节了,所以从这一点我们也能得知TCP报文段的Data长度为0。
在这里插入图片描述
如上图,Header Length显示了TCP的头部为32字节。
在这里插入图片描述
如上图,展示了IP数据报的头部处于哪个位置,从上图16进制部分的蓝色部分可知,它其实就是给TCP套了个壳。
在这里插入图片描述
如上图,IP的总长度为52,IP的头部长度为20;TCP的头部长度为32。那么TCP报文段的Data长度为52-20-32=0。

正常传输时的包

在这里插入图片描述
TCP头部数出来一共20字节。TCP头部后面还有好多数据,说明肯定有Data。
在这里插入图片描述
如上图,Header Length显示了TCP的头部为20字节。TCP的Data为1412。
在这里插入图片描述
如上图,显示了IP的头部为20字节,整个IP包的长度为1452。那么1452-20-20=1412。第二个图的TCP payload就是这么计算出来的。

总结

IP的总长度 - IP的头部长度- TCP的头部长度 = TCP的Data的长度

猜你喜欢

转载自blog.csdn.net/anlian523/article/details/120983755