为面试做准备中。

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

四次挥手比较好解释。

看一下我的草图。

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

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

第一次挥手:

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

第二次挥手:

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

第三次挥手:

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

第四次挥手:

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

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

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

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

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

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

主动关闭方:

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

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

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

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

总结一下:

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

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

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

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

四次挥手中你还不知道的ACK机制的更多相关文章

  1. [转载]或许您还不知道的八款Android开源游戏引擎

    或许您还不知道的八款Android开源游戏引擎         分类:             技术文章              2010-08-04 20:27     17430人阅读     ...

  2. Spring中你可能不知道的事(一)

    Spring作为Java的王牌开源项目,相信大家都用过,但是可能大家仅仅用到了Spring最常用的功能,Spring实在是庞大了,很多功能可能一辈子都不会用到,今天我就罗列下Spring中你可能不知道 ...

  3. JS你可能还不知道的一些知识点(一)

    js程序是用Unicode字符集编写的, 2.转义字符:反斜线 1 2 3 4 function Test(){   var s='you\'re right,it can\'t be a quote ...

  4. [No0000194]聊聊 Chrome DevTools 中你可能不知道的调试技巧

    对于前端开发者来说,ChromeDevTools 绝对是不可或缺的调试工具,我们常用的调试方法包含一些console等,而ChromeDevTools 其实很强大,下面来聊聊一些你可能不知道的debu ...

  5. JavaScript中你可能不知道的九件事

    今天凑巧去W3School扫了一遍JavaScript教程,发现从中看到了不少自己曾经没有注意过的细节. 我这些细节列在这里.分享给可能相同不知道的朋友: 1.使用 document.write() ...

  6. 用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制

    关于TCP三次握手和四次挥手大家都在<计算机网络>课程里学过,还记得当时高超老师耐心地讲解.大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过<java程序设计>和< ...

  7. redis-cli中那些或许我们还不知道的一些实用小功能

    玩过redis的朋友都知道,redis中有一个叫做redis-cli的小工具,我们可以利用它在test和develop环境下进行高效的模拟测试,然而在现实环境中, 我们只知道直接键入redis-cli ...

  8. jdk1.8新特性,还不知道的朋友还不看看,1.9都快出来了

    一.接口的默认方法 Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下:代码如下:interface Formula {     ...

  9. Spring中你可能不知道的事(二)

    在上一节中,我介绍了Spring中极为重要的BeanPostProcessor BeanFactoryPostProcessor Import ImportSelector,还介绍了一些其他的零碎知识 ...

随机推荐

  1. docker配置私有镜像仓库-registry和hyper/docker-registry-web

    1.前言️​ Docker hub是远程仓库,是国外的,push pull速度特别慢,尤其是网速不好的时候,页面都点不进去,官网 但是可以配置阿里云镜像加速哦: 因此搭建一个私有的镜像仓库用于管理我们 ...

  2. Prometheus时序数据库-数据的查询

    Prometheus时序数据库-数据的查询 前言 在之前的博客里,笔者详细阐述了Prometheus数据的插入过程.但我们最常见的打交道的是数据的查询.Prometheus提供了强大的Promql来满 ...

  3. SpringBoot自动配置探究

    @SpringBootApplication @SpringBootApplication表示SpringBoot应用,标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就 ...

  4. Java 树结构实际应用 四(平衡二叉树/AVL树)

    平衡二叉树(AVL 树) 1 看一个案例(说明二叉排序树可能的问题) 给你一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 并分析问题所在.  左边 BST 存在的问题分析: ...

  5. 内存模型与c++中的memory order

    概 c++的atomic使用总会配合各种各样的memory order进行使用,memory order控制了执行结果在多核中的可见顺序,,这个可见顺序与代码序不一定一致(第一句代码执行完成的结果不一 ...

  6. [源码解析] 并行分布式框架 Celery 之架构 (2)

    [源码解析] 并行分布式框架 Celery 之架构 (2) 目录 [源码解析] 并行分布式框架 Celery 之架构 (2) 0x00 摘要 0x01 上文回顾 0x02 worker的思考 2.1 ...

  7. Tomcat详解系列(3) - 源码分析准备和分析入口

    Tomcat - 源码分析准备和分析入口 上文我们介绍了Tomcat的架构设计,接下来我们便可以下载源码以及寻找源码入口了.@pdai 源代码下载和编译 首先是去官网下载Tomcat的源代码和二进制安 ...

  8. [枚举]P1089 津津的储蓄计划

    津津的储蓄计划 题目描述 津津的零花钱一直都是自己管理.每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同. 为了让津津学习如何储蓄,妈妈提出,津津可以随时把整 ...

  9. 学习笔记-ionic3 环境配置搭建到打包

    折腾了两周总算理清楚了,参考的链接如下: https://blog.csdn.net/zeternityyt/article/details/79655150  环境配置 https://segmen ...

  10. 3步安装Python虚拟环境virtualenv

    1. pip安装必要库 pip install virtualenv -i https://pypi.douban.com/simple pip install virtualenvwrapper - ...