重要的标志位含义:
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建立连接的三次握手过程如图所示:
二、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四次断开过程如图:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。