TCP协议以及常见问题报文分析
一、TCP的概念
Source Port |
源端口,标识发送方的应用进程 |
||||||||||
Destination Port |
目的端口,标识接收方的应用进程 |
||||||||||
Sequence Number |
序列号:用于标识从发送端发出的不同的TCP数据段的序号。数据段在网络中传输时,它们的顺序可能会发生变化;接收端依据此序列号,便可按照正确的顺序重组数据。保证数据传输的有序性 |
||||||||||
Acknowledge Number |
确认号:对收到的数据进行确认,确认序列号为成功收到的数据序列号加1。 |
||||||||||
Header length |
表示头部占32bit字的数目,它能表达的TCP头部最大长度为60字节 |
||||||||||
FLAG字段(8位) |
|
||||||||||
window |
窗口,表示接收端期望通过单次确认而收到的数据的大小。由于该字段为16位,所以窗口大小的最大值为65535字节,该机制通常用来进行流量控制。 |
||||||||||
checksum |
校验整个TCP报文段,包括TCP头部和TCP数据。该值由发送端计算和记录并由接收端进行验证。 |
tcp是可靠的传输,需要通过三次握手来建立连接。
(1)主机A(通常也称为客户端)发送一个标识了SYN的数据段,表示期望与服务器A建立连接,此数据段的序列号(seq)为a。
(2)服务器A回复标识了SYN+ACK(回应主机A的SYN报文,并发送SYN请求建立连接报文)的数据段,此数据段的序列号(seq)为b,确认序列号为主机A的序列号加1(a+1),以此作为对主机A的SYN报文的确认。
(3)主机A发送一个标识了ACK的数据段,此数据段的序列号(seq)为a+1,确认序列号为服务器A的序列号加1(b+1),以此作为对服务器A的SYN报文的确认。
即过程为:主机A发送建立连接请求,然后服务器A回应并发送服务器A建立连接请求,最后主机A进行回应,建立完成。 |
(1)TCP滑动窗口技术通过动态改变窗口大小来实现对端到端设备之间的数据传输进行流量控制。
(2)主机A和服务器A之间通过滑动窗口来实现流量控制。如图只考虑主机A发送数据给服务器A时,服务器A通过滑动窗口进行流量控制。
主机A向服务器发送4个长度为1024字节的数据段,其中主机的窗口大小为4096个字节。
服务器A收到第3个数据段后,缓存区满,第4个数据段被丢弃。
服务器以ACK 3073响应,窗口大小调整为3072,表明服务器的缓冲区只能处理3072个字节的数据段。于是主机A改变其发送速率,发送窗口大小为3072的数据段。
3、TCP关闭连接的过程(四次挥手)
如图所示:
(1)主机A想终止连接,于是发送一个标识了FIN,ACK的数据段,序列号为a,确认序列号为b。
(2)服务器A回应一个标识了ACK的数据段,序列号为b,确认序号为a+1,作为对主机A的FIN报文的确认。
(3)服务器A想终止连接,于是向主机A发送一个标识了FIN,ACK的数据段,序列号为b,确认序列号为a+1。
(4)主机A回应一个标识了ACK的数据段,序列号为a+1,确认序号为b+1,作为对服务器A的FIN报文的确认。
以上四次交互便完成了两个方向连接的关闭。
4、TCP的状态总结
四、TCP抓包常见问题分析
1、TCP Previous segment not captured
2、TCP Out-Of-Order
TCP Out-Of-Order指的是TCP发送端传输过程中报文乱序了。Wireshark判断TCP out-of-order是基于TCP包中SEQ number并非期望收到的下一个SEQ number,则判断为out-of-order。因此,出现TCP out-of-order时,很大可能是TCP存在乱序或丢包,导致接收端的seq number不连续。接上图分析:74160出现在76976之后,所以被判定为乱序
有可能因为网络拥塞的情况下,TCP包不能按顺序到达,如果抓包中出现大量的out-of-order包,则说明网络存在较大的TCP乱序或丢包。
TCP dup ack XXX#X表示第几次重新请求某一个包,#前面的XXX表示第几个包(不是Seq),#后的X表示第几次请求。重复ack,当网络中存在乱序或者丢包时,将会导致接收端接收到的seq number不连续。此时接收端会向发送端回复重复ack,ack值为期望收到的下一个seq number。重复ack数大于等于3次将会触发快速重传
重复ACK标志,丢包或者乱序的情况下,会出现该标志。
TCP超时重传。当同时抓到2次同一数据报文,且没有抓到初传包的反馈ack,wireshark就会判断发生了重传,标记为TCP Retransmission。
TCP快速重传,一般快速重传算法在收到三次冗余的Ack,即三次TCP dup ack XXX#3后,发送端进行快速重传。
TCP虚假重传。当抓到2次同一包数据时,wireshark判断网络发生了重传,同时,wireshark抓到初传包的反馈ack,因此wireshark判断初传包实际并没有丢失,因此称为虚假重传。
是TCP协议结束异常连接的一种方式,通过flag中的reset=1标记。当TCP连接无法通过正常的4次挥手结束时,一方可以通过发送携带reset标志的TCP包结束TCP连接。
旁挂设备进行阻断可以伪造RST报文达到阻断的效果
收到RST置位报文可能的原因: 1、被安全设备拦截; 2、对方端口未打开,发生在连接建立; 3、全连接队列满,发生在连接建立; 4、长时间无流量超时,导致连接被清除 5、超过超时重传次数、网络暂时不可达 6、非正常报文等 |
8、TCP acked unseen segment