TCP三次握手、四次挥手理解及可能问为什么?
三次握手:
TCP3次握手连接:浏览器所在的客户机向服务器发出连接请求报文(SYN标志为1),此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。
服务器接收报文后,同意建立连接,向客户机发出确认报文(SYN,ACK标志位均为1)此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。
客户机接收到确认报文后,再次向服务器发出报文(ACK标志为1),同时客户端进入ESTABLISHED(已建立连接)状态。服务器确认已接收到确认报文进入到ESTABLISHED(已建立连接)状态。此时,TCP连接建立。

四次挥手:
TCP4次挥手断开连接:浏览器所在的客户机发出连接释放报文(FIN标志为1),然后停止发送数据。此时,客户端进入FIN-WAIT-1(终止等待1)状态。
服务器收到连接释放报文后向客户及发出确认报文(ACK标志为1)。此时,服务端就进入了CLOSE-WAIT(关闭等待)状态,客户端就进入FIN-WAIT-2(终止等待2)状态。
服务器传输完毕后,向客户机发送连接释放报文(FIN标志为1)。此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
客户端收到服务器的连接释放报文以后,发出确认报文(ACK标志为1)。此时,客户端就进入了TIME-WAIT(时间等待)状态而服务器已经进入CLOSED状态。然后等待2*MSL(最长报文段寿命)的时间后,释放TCP连接,进入CLOSED状态。此时客户机与服务器之间的TCP连接断开。

为什么要三次握手(为什么不能两次)?
计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。
如果不采用“三次握手”,那么只要服务器发出确认,新的连接就建立了。由于现在客户机并没有发出建立连接的请求,因此不会理睬服务器的确认,也不会向服务器发送数据。但服务器却以为新的运输连接已经建立,并一直等待客户机发来数据。这样,服务器的很多资源就白白浪费掉了。
为什么要四次挥手?
建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。
本文来自博客园,作者:天天开心1?,转载请注明原文链接:https://www.cnblogs.com/tomygzz/p/13305391.html

浙公网安备 33010602011771号