您的位置:首页 > 理论基础 > 计算机网络

【转】TCPIP协议中的三次握手和四次挥手

2016-02-17 23:57 302 查看
TCP_IP通信主要包含以下三个步骤(/阶段):

一、建立连接阶段 —— 三次握手

二、数据传输阶段

三、关闭连接阶段(/释放连接) —— 四次挥手

第一阶段:建立连接 (如下图)



① 客户端向服务端发送连接请求报文 → (SYN=1,seq = client_isn)

② 服务端接受客户端的连接请求并回复ACK报文及给此次连接分配资源。 → (SYN=1,seq = client_isn, ack = client_isn + 1)

③ 客户端接受来自服务端的ACK报文后,回复ACK报文给服务端并分配资源。 → (SYN=0,seq = server_isn, ack = server_isn + 1) // 图有误

第三阶段:断开连接 (如下图)






【注】 TCP连接的断开可以是服务端,也可以是客户端。

下面以客户端断开TCP连接为例说明。

① 客户端向服务端发送断开TCP连接的请求,即发送FIN报文。【这一步表明客户端没有数据要发送给服务端了】

② 服务端接受客户端的FIN报文后,由于可能还有数据未发送完成,因此先发送ACK报文。【这一步表明服务端已收到客户端的关闭连接请求,但服务端可能还有数据需要发送,让客户端等待消息】 —— 此时客户端进入FIN_WAIT状态,等待服务端的FIN报文。

③ 当服务端的数据发送完毕,就向客户端FIN报文。【这一步表明服务端数据发送完毕,准备好关闭连接了】

④ 客户端接受到服务端的FIN报文后,但仍不确定服务端是否清楚要关闭。因此接着发送ACK报文,直至服务端接收到为止。【这一步客户端发送完ACK报文后就进入TIME_WAIT状态】

服务端接受到客户端的ACK报文后,就断开连接。客户端等待2MSL依然没有收到回复则说明服务端已正常关闭,此时客户端也关闭连接。

OVER~TCP连接就正常关闭了。

整个TCP连接建立至断开的过程中,

客户端的状态变化

建立连接阶段:

发送SYN → SYN_SEND

接收SYN+ACK & 发送ACK → ESTABLISHED

断开连接阶段:

向服务端发送FIN → FIN_WAIT_1

接收服务端ACK → FIN_WAIT_2

接收服务端FIN & 发送ACK → TIME_WAIT

等待2MLS → CLOSED

服务端的状态变化

建立连接阶段:

监听套接字 → LISTEN

接收到客户端SYN & 发送SYN+ACK → SYN_RCVD

接收客户端ACK → ESTABLISHED

断开连接阶段:

接收FIN & 发送ACK → CLOSE_WAIT

发送FIN报文 → LAST_ACK

接收客户端ACK → CLOSED

参考:

TCP协议中的三次握手和四次挥手(图解)

在此表示感谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: