TCP和三次握手和四次挥手(第四挥手不见的问题)

tcp三次握手

这里就是tcp三次握手 的过程

第一次握手,客户端发送一个TCP,标志位为SYN=1,序号seq为Sequence number=0, 50735 -> 80,代表客户端请求建立连接;

第二次握手,服务器向客户端返回一个数据包,SYN=1,ACK=1,80 -> 50735,将确认序号(Acknowledgement Number)设置为客户的序号seq(Sequence number)加1,即0+1=1;

第三次握手,客户端收到服务器发来的包后检查确认序号(Acknowledgement Number)是否正确,即第一次发送的序号seq加1(X+1= 0+1=1)。以及标志位ACK是否为1。若正确,客户端会再向服务器端发送一个数据包,SYN=0,ACK=1,确认序号(Acknowledgement Number)=Y+1=0+1=1,并且把服务器发来ACK的序号seq(Sequence number)加1发送给对方,发送序号seq为X+1= 0+1=1。客户端收到后确认序号值与ACK=1,50735 -> 80,至此,一次TCP连接就此建立,可以传送数据了。

在三次握手的三个数据包之后,第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。

Tcp四次挥手

Tcp断开应该是有四次挥手的过程,但这里我只捉到了三次的过程,这是因为我捉取的是访问百度的包,但应为浏览器(即客户端)不会自动断开tcp连接,当百度把需要的代码传输给我们后它会自动断开tcp连接,可以理解成百度成为了客户端,而我们是服务端。百度发起请求FIN,ACK(第一次挥手),本机接收到并返回两个包,一个为ACK(第二次挥手),另一个为FIN,ACK(第三次挥手)。接着应该是百度发一个ACK返回给本机(第四次挥手)然后结束,但是由于百度单方面强制关闭了,并且不再接收本机的数据包,导致第三次挥手无法送法,也就有了下面深红色的TCP Retransmission(TCP重传)因为第三次挥手发给百度的包一直没有回应,本机启动超时重传机制。重传几次之后仍然没有回应,发送一个RST,ACK包,RST为复位,即表示TCP整个连接中出现了重大差错(如服务器崩溃或其他原因,也就是百度强制关闭了),必须释放连接。至此连接关闭。

猜你喜欢

转载自www.cnblogs.com/loveshit/p/11922876.html