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

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协议中的三次握手和四次挥手(图解)

在此表示感谢。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值