TCP三次握手和四次挥手

关于 ACKFINSYN 状态码的含义
  1. ACK 用于确认,表示通知对方,我已经收到你发来的信息了。
  2. FIN 用于结束,表示告知对方,我这边已经结束,数据全部发送完毕,没有后续输出,请求终止连接。
  3. SYN 用于同步和建立连接,表示告知对方,我这边请求同步建立连接。
三次握手(简易版)
  1. 客户端向服务端发送一个连接请求SYN报文,表示想要与服务器建立连接
  2. 服务端接受到请求,首先表示确认再向客户端发送连接请求,同时发送一个ACKSYN
  3. 客户端收到请求,发送ACK发送确认请求,两者达成建立

为什么是三次不能是两次,不能在服务器发送确认和请求后也就是第二次握手后就直接确认连接呢?

因为很多不可控的因素,不如网络原因,客户端发送请求后,由于网络延迟,服务器不能及时收到请求。此时客户端响应了很久也没有得到反馈,就将这个请求废弃掉了,便开始下一次请求。但是过了一会儿服务器又收到了这姗姗来迟的请求,他并不知道他花了多久来的,只知道他来了,便确认了请求。

如果此时直接建立连接,那么这个连接是无效的,因为客户端已经废弃了这个请求,但是服务器不知道废弃了,知识傻傻的挂载那里消耗资源来维护它。

所以此时就体现了第三次握手的重要性,服务器需要知道这个连接是否还有用,因此需要客户端再发送一次请求,来表示这个请求的确是需要用的,并没有失效

四次挥手(简易版)
  1. 客户端发送FIN,表示请求可以结束了

  2. 服务器表示收到,并发送ACk

    2,3中间服务器可能还有一些没发送完成的数据可以继续发送

  3. 服务器再发送一个FIN,表示我的数据发送完了可以结束了

  4. 客户端表示收到发送ACK,连接断开

可以看成下面这段对话

  1. 客户端:喂,我好了。
  2. 服务端:噢,你好了是吧,我知道了,我还没好,你等一哈。
  3. 服务端:OK,现在我也好了。
  4. 客户端:收到,这次玩的很开心,我们下次再约。

为什么断开连接有四次

服务端收到来自客户端的FIN时,只是表示客户端不再发送数据了,但是还能接收数据,而且这会儿服务端可能还有数据没有发送完,不能马上发送 FIN 报文,只能先发送 ACK 报文,先响应客户端,在确认自己这边所有数据发送完毕以后,才会发送 FIN。 所以,在断开连接时,服务器的 ACKFIN 一般都会单独发送,这就导致了断开连接比请求连接多了一次发送操作。

这个文章讲的挺好的:

链接:https://juejin.cn/post/6844903938232156167

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值