1.知识点
TCP/IP协议 是全双工的(发送数据的同时也能够接收数据,两者同步进行。半双工:一个时间段内只有一个动作发生,如早期的对讲机就是半双工产品),因此每个方向都必须单独进行关闭。
三次握手 (同步连接双方的序列号和确认号并交换 TCP 窗口大小信息)
第一次握手:建立连接时, 客户端发送syn包(syn=j)到服务器, 并进入SYN_SENT状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也 发送一个SYN包(syn=k),即SYN+ACK包, 此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包, 向服务器发送确认包ACK(ack=k+1), 此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。(中断连接端可以是Client端,也可以是Server端。)
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。(当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手)
(3) 服务器关闭客户端的连接,发送一个FIN给客户端。
(4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。(等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!)
2.链接
3.相关文章