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的长度
|