TCP/IP报文分析

三次握手和四次挥手

Seq,Ack和Len

 TCP Sequence(seq)和Acknowledgement(ack)序号用来帮助实现顺序的、可靠的TCP传输。TCP Client发送数据报文携带seq序号,表示本次会话(session)发送了多少个字节的数据,seq序号也称为“字节序”。TCP Server发送ACK报文携带ack序号,表示累积收到了ack-1个字节的数据,准备接收下一帧。

每次会话开始时,seq序号和ack序号均从0开始。

 上图中,TCP Client发送的第一个数据报文携带seq为1,len为669;TCP Server的应答报文ack为670(即ack = seq + len),表示它收到了669(ack -1)个字节的报文,期望收到的下一个数据报文的seq为670。

从这个图上面看,seq序号并不是从0开始的,而是从1开始的。这是因为SYN报文和FIN报文虽然payload均为0,但是它们均会占据一个字节序(seq),如果不这样设计的话,无从判断ACK报文是否应答的SYN和FIN报文。

 上图为TCP头部帧格式,其中,seq和ack均占据4个字节,取值范围0 ~ 232-1,即0~4294967295。

Wireshark异常报文分析

TCP Previous segment not captured

数据帧丢失,即收到的报文的seq大于上一个收到报文的seq+len。如果是Wireshark抓包,有可能是因为乱序导致,需要仔细甄别是因为乱序还是丢帧。

TCP Out-Of-Order

次序颠倒,数据在传输过程中顺序乱了,也就是当前报文的seq小于前一个报文的seq+len。

TCP Dup ACK xxx#y

重复应答seq=xxx的表示报文到哪个序号丢失,y表示第几次丢失。
当报文发生乱序或者丢失时,接收端会收到一些seq比期望值更大的报文。
每收到一次这种报文就ack一次期望值,用以提醒发送方。

TCP Retransmission

超时引发的数据重传。

TCP Spurious Retransmission

虚假重传,发送端认为报文已经丢失了,发起重传,尽管此时接收端已经发送了ACK应答报文。

TCP Fast Retransmission

快速重传,当发送方接收到3个或以上的[TCP Dup ACK],就意识到之前发的包可能丢了,于是快速重传丢失的数据帧。

TCP Keep-Alive

保持连接特性,socket 发起方发包

TCP Keep-Alive ACK

保持连接特性,socket 应答方发包

TCP ZeroWindow

 接收方接收缓冲区(接收窗口)满,停止收包

TCP Window Full

 发送方发送窗口(在途发送的字节数,即接收方未应答,但是发送方已发送的字节数)满,停止发包

posted on 2021-08-20 14:26  者旨於陽  阅读(797)  评论(0编辑  收藏  举报

导航