四次挥手中你还不知道的ACK机制

为面试做准备中。

后面有对ACK机制的详细讲解。

四次挥手比较好解释。

看一下我的草图。
四次挥手1.jpg

ACK表示发来的数据已确认接收无误。

图中一个箭头代表一次挥手。

第一次挥手:

  • 主动关闭方:发送一个FIN,表示自己没有数据要发送了。

第二次挥手:

  • 被动关闭方:收到FIN后知道对方不会再有数据传来。
  • 主动关闭方:收到ACK后将进入半关闭状态,只会发送ACK进行确认,不会发送其他数据。

第三次挥手:

  • 被动关闭方:发送一个FIN,表示自己没有数据要发送了。

第四次挥手:

  • 被动关闭方:收到ACK后将进入关闭状态。

面试过程中除了将上面的讲完之外。如何可以、还可以用自己的话讲述一遍,这样子面试官才会知道你是真的理解。

用自己的话讲就是:A和B通话,聊到最后A和B说我讲完了,B回复说我知道了。但是此时B还没有讲完,所以B又瞎扯了一堆后,B和A说我讲完了,A回复说我知道了。此时通信才完全断开。

这里再科普一下有关知识,大多数三次握手和四次挥手都没有提到。

发送任何数据、需要接收一个确认对吧。那这个确认是用什么标识的呢。其实还是用的ACK,这个ACK和三次握手四次挥手的ACK都是一回事,都是全大写的ACK。

也就是说真正的四次挥手其实是这样子的

四次挥手2.jpg

主动关闭方:
发送一个FIN的同时还需要带一个ACK,这个ACK是为了确认被动关闭方所发送的上一条数据的。

可以这样子理解,FIN数据包和普通的数据包并没有什么区别好吧,只是将FIN标识位设为1罢了。

ACK : TCP协议规定,只有ACK=1时表示对方数据发送有效,也规定连接建立后所有发送的报文的ACK必须为1

所以说如论你是发送普通数据还是发送四次挥手的数据你都要带上ACK,用来表示对方发送的信息你此时已经收到哪里了。丢失的那些你不需要确认,你只需要确认你收到哪里了。

总结一下:

大写ACK可以理解为我收到你发来的数据了

ACK标志为除了三次握手的第一次握手置为0之外,其他的时候ACK都是置为1的,也就是说我们进行通信的时候ACK的标志位都是被置为1。为什么呢?哪怕传送失败了也是置为1吗?没错、传送失败了也是置为1、你想想我发送出错了,你还是需要确认你到底收到哪里了,所以你的ACK还是需要置为1。

这下你理解下面这个四次挥手的含义了吧。

四次挥手2.jpg

大家要是觉得有收获的话,麻烦动动手,帮忙点赞,关注。欢迎关注我的公众号玩编程地码农

微信图片_20201001111753.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值