十五大原理之零三--TCP/IP的三次握手和四次断开原理

重要的标志位含义:

ACK:表示确认。只有当ACK标志位为1时,TCP报文的确认字段才有效。

SYN:表示同步,在连接建立时用来同步序列号。当SYN=1而ACK=0时,表明这是一个连接请求报文。若对方同意建立连接时,则在响应报文中,应使SYN=1,ACK=1.因此,同步比特SYN置为1,就表明这是一个连接请求报文或连接接受响应报文。

FIN:用于释放一个连接。当FIN位为1时,表明此报文段的发送端数据已发送完毕,并要求释放连接。

一、TCP/IP的三次握手

第一次握手:首先发送方主机向接收方主机发起一个建立连接的同步(SYN)请求SYN(X),进入SYN_SENT状态,等待接收方主机确认。

第二次握手:接收方在收到这个请求后,如果同意建立连接,则发送确认ACK,确认序列号为收到的序列号加1,并且报文中的SYN也要置1,即向发送方主机回复一个同步/确认(SYN/ACK)应答报文,并进入SYN_RECVD状态。

第三次握手:发送方主机收到此应答报文后,再向接收方发送一个确认(ACK)报文,然后发送方和接收方均进入ESTABLISHED状态,完成三次握手,至此,TCP连接建立成功,发送方和接收方就可以开始传输数据了。

TCP建立连接的三次握手过程如图所示:

wKioL1ZsXA3RUi6QAADWfx8UG3I930.jpg




二、TCP/IP的四次断开

当应用进程结束数据传送后,就要释放已建立的连接,TCP连接是双向的,每个方向都必须单独进行关闭,首先进行关闭的一方执行主动关闭,而另一方则执行被动关闭。

1、当客户端的数据传输完后,可主动发送出FIN置1的报文给服务端(客户端主动关闭),以关闭客户端至服务端方向的数据传送,并等待服务端的ACK确认应答,同时进入FIN_WAIT1状态。

2、服务端收到FIN置1的报文后,进入被动关闭,回复一个ACK确认报文,并进入CLOSE_WAIT状态;客户端收到该ACK确认报文后,进入FIN_WAIT2状态。

3、至此完成了TCP连接的半关闭,即完成了客户端至服务端方向的数据发送。此时,客户端虽然不能发送数据,但仍然能接受服务端发给客户端的数据,即服务端至客户端方向的连接还未关闭。

4、服务端发送一个FIN置1的报文给客户端,关闭服务端至客户端方向的数据传送,并等待客户端的ACK确认应答,同时进入LAST_ACK状态,客户端收到FIN置1的报文后,回复ACK确认报文,并进入TIME_WAIT状态,经过2倍报文最大生存时间(MSL)后,TCP删除原来建立的链接记录,返回到初始的CLOSED状态。服务端收到ACK确认报文后,进入CLOSED状态,完成链接的双向关闭。

TCP/IP四次断开过程如图:

wKioL1ZsWGvAgKEfAAEUAiv_oqo885.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章