TCP的三次握手和四次挥手

TCP三次握手

  • 客户端发送SYN给服务端, 并指明初始化序列号ISN(c), 此时客户端为SYN_SENT状态

  • 服务端接收到客户端的SYN报文, 并将客户端的ISN+1作为ACK的值发送给客户端, 此时服务端的的状态为SYN_RCVD

  • 客户端接收到SYN报文后,同时返回ACK给服务端,此时客户端的状态时为ESTABLISHED, 服务端接收到ACK后状态也变成了ESTABLISHED

为什么需要三次握手,而不是两次?

在第一次挥手时,客户端发送报文后,验证了客户端的发送能力和服务端的接收能力,第二次挥手验证了服务端的发送能力,但客户端的接收能力,无法在两次握手时告诉服务端; 同时客户端在发送消息时,会有信道不稳定的状态,延时阻塞的信息会多次请求建立连接, 浪费服务器的资源。

TCP四次挥手

  • 客户端从ESTABLISHED状态,向服务端发送断开连接的请求,附带FIN和序列号的一个报文,此时状态为FIN_WAIT1

  • 服务端接收后,会发送接收的序列号+1作为ACK的值给客户端,代表自己已经接收到断开连接的请求,此时服务端的状态为CLOSE_WAIT

  • 服务端也同意断开连接,则和第一次挥手一样,发送FIN及序列号给客户端,状态为LAST_ACK

  • 客户端收到后表示好了,我收到了,咱们断开吧,于是状态为TIME_WAIT,服务器:好咧,断开!CLOSED,确保服务器收到了,此时客户端也安心的CLOSED了

为什么需要四次挥手,而不是三次?

服务端在收到客户端断开连接Fin报文后,并不会立即关闭连接,而是先发送一个ACK包先告诉客户端收到关闭连接的请求,只有当服务器的所有报文发送完毕之后,才发送FIN报文断开连接,因此需要四次挥手

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值