TCP的3次握手和4次断开

1.三次握手

第一次握手:客户端给服务端发一个 SYN 标志位的数据包,请求建立连接,并指明客户端的初始化序列号 seq。此时客户端处于SYN_SENT 状态。首部的同步位SYN=1,初始序号seq=x,SYN=1的报文段不能携带数据,但要消耗掉一个序号。

第二次握手:服务端收到客户端的SYN标志位数据包之后,也会给客户端发送一个SYN标准位数据包作为应答,表示同意建立连接。还指明了自己的初始化序列号seq。并且会把客户端的seq+1(x+1)作为ACK的值,表明自己已经接收到了客户端的SYN,此时的服务器处于SYN_RCVD的状态。

第三次握手:客户端收到SYN标志位数据包之后,会发送一个ACK标志位数据包,也会把服务端的初始序列号seq+1(y+1)作为自己的确认号ACK的值,表示收到了服务端的SYN标志位数据包。此时,客户端处于ESTABLISHED状态。

最后: 服务器收到确认标志位数据包,服务器状态由syn_received变为ESTABLISHED(完成连接)。这样双方就建立起了连接。

1.四次断开(挥手)
第一次断开:客户端发送一个FIN的标准位数据包给服务器端,会在报文中会指定一个序列号seq=u,并停止发送数据,主动关闭TCP连接。此时的客户端处于FIN_WAIT1的状态,等待服务端的确认。

第二次断开:服务端收到FIN标志位数据包之后,会给客户端发送ACK报文,表明已经收到客户端的报文了,这个报文中是把客户端的序列号值进行加一作为确认ACK报文的序列号值,同时也会生成一个初始序列号seq=v。此时的服务器端处于 CLOSE_WAIT (关闭等待)状态。

第三次断开:如果服务器也想断开连接了,就会和客户端的第一次挥手一样,会给客户端发送一个FIN报文,并且随机指定一个序列号seq=w。此时的服务端处于 LAST_ACK (最后确认)的状态,等待客户端的确认。

第四次断开:客户端收到FIN报文之后,一样的发送一个ACK报文作为应答,并且把服务端的序列号值+1作为自己ACK报文的序列号值。此时的客户端处于TIME_WAIT (时间等待)状态,需要经过一段时间以确保服务端收到自己的ACK报文之后才会进入CLOSED状态,服务器端收到ACK报文之后,就处于关闭连接了,处于CLOSED状态。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值