假设名叫 A 和 B 的两个人要进行通信,那么他们两人之间,首先要确保通信顺畅。

而确保通信顺畅,就要从 3 个维度,确定 8 个能力

3 个维度分别是:

1、人知道(A 知道、B 知道)

2、人(A、B)

3、能力(发出、收到)

那么对应的 8 个能力就分别是:(有点绕,可直接看下面的表格)

能力 1 :A 知道 A 有 发出 的能力

能力 2 :A 知道 A 有 收到 的能力

能力 3 :A 知道 B 有 发出 的能力

能力 4 :A 知道 B 有 收到 的能力

能力 5 :B 知道 A 有 发出 的能力

能力 6 :B 知道 A 有 收到 的能力

能力 7 :B 知道 B 有 发出 的能力

能力 8 :B 知道 B 有 收到 的能力

8 个能力的图表表示:

图表 1(A 知道):

图表 2(B 知道):

接下来,分别模拟一下三次握手的内容,以及每次握手发生之后,两张图表的变化

总的对话如下:

A:你好,B,能收到消息吗?

B:你好,A,我收到了。你能收到我的消息吗?

A:我收到了。让我们开始通话吧。

第一次握手:

A:你好,B,能收到消息吗?

注:A 发出去,且 B 收到了

握手之后:

图表 1(A 知道):

图表 2(B 知道):

即,确定了能力 5、8

解释:

对于 A 来说,他发出了消息,但是没有得到 B 的回应,所以他并不知道自己的消息是否成功发送出去了,其他的就更不知道了

对于 B 来说,他收到了 A 的消息,那么他就很清楚,自己可以收到消息,A 可以发出消息

第二次握手:

B:你好,A,我收到了。你能收到我的消息吗?

注:B 发出去,且 A 收到了

握手之后:

图表 1(A 知道):

图表 2(B 知道):

即,确定了能力 1、2、3、4

解释:

A 收到了 B 的回应,那么 A 肯定清楚刚才自己的消息成功发送出去了,且 B 一定能收到消息,要不然不会作出回应。而且自己收到了 B 的消息,这件事本身,也说明了,A 知道了 B 可以发消息,自己可以收到消息。

而 B 只是作了一个回应,并不知道回应是否成功,所以他知道的跟第一次握手之后是一样的。

2019.11.10 补充

最近偶然又想起 TCP 的三次握手,之前对于为什么在 第三次握手的时候,A 就直接发送正文(即正式的通信数据)给 B 了,而不是等到三次握手结束 这个点一直没有完全弄明白。

现在的理解是:

在完成两次握手之后,发起方 A 已经知道了自己和对方都有接收和发送信息的能力了,即已经具备了发送正文的条件

第三次握手:

A:我收到了。让我们开始通话吧。

注:A 发出去,且 B 收到了

握手之后:

图表 1(A 知道):

图表 2(B 知道):

即,确定了能力 6、7

解释:

B 收到了 A 的回应,那么 B 知道了自己的消息可以发出去,且 A 可以收到消息

三次握手到此结束,8 个能力全部确定完毕

对于 TCP 三次握手的理解的更多相关文章

  1. TCP三次握手形象理解

    tcp三次握手就像是你用企业微信给人家发信息,首先你得确认别人在不在,你会发  在吗?  这个时候显示的是未读   对方看到之后未读会变成已读 然后他会回复你  在的    你看到这个消息后,他那边也 ...

  2. TCP三次握手简单理解

  3. TCP 三次握手原理,你真的理解吗?

    最近,阿里中间件小哥哥蛰剑碰到一个问题——client端连接服务器总是抛异常.在反复定位分析.并查阅各种资料文章搞懂后,他发现没有文章把这两个队列以及怎么观察他们的指标说清楚. 因此,蛰剑写下这篇文章 ...

  4. 理解TCP三次握手和四次挥手

    TCP相关知识 TCP是面向连接的传输层协议,它提供可靠交付的.全双工的.面向字节流的点对点服务.HTTP协议便是基于TCP协议实现的.(虽然作为应用层协议,HTTP协议并没有明确要求必须使用TCP协 ...

  5. 谈谈你对 TCP 三次握手和四次挥手的理解

    TCP三次握手: 1.客户端发送syn包到服务器,等待服务器确认接收. 2.服务器确认接收syn包并确认客户的syn,并发送回来一个syn+ack的包给客户端. 3.客户端确认接收服务器的syn+ac ...

  6. TCP三次握手、四次挥手理解

    tcp三次握手建立连接第一次握手 客户端发送给服务器一段连接请求报文,等待服务器回应 第二次握手 服务器收到报文,并发送给客户端一个确认报文,等待客户端回应 第三次握手 客户端收到新报文 ,再发送给服 ...

  7. TCP ,UDP概念和TCP三次握手连接 的知识点总结

    OSI 计算机网络7层模型 TCP/IP四层网络模型 传输层提供应用间的逻辑通信(端到端),网络层提供的是主机到主机的通信,传输层提供的是可靠服务. TCP 中常说的握手指的是:连接的定义和连接的建立 ...

  8. TCP三次握手,数据传输,四次挥手

    TCP包结构 一个TCP包结构如下: 一个TCP包主要由TCP包头和数据部分组成,包头固定部分为20字节,选项和数据部分根据实际情况设置为4N(N可以为0)字节. 1.16bit源端口和目的端口号,它 ...

  9. TCP三次握手四次挥手详解

    转载 http://www.cnblogs.com/zmlctt/p/3690998.html 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需 ...

随机推荐

  1. 朋友外包干了5年java,居然不知道dubbo-monitor是怎么用的?

    Dubbo工具--dubbo-monitor监控平台的发布和使用 1)下载 https://github.com/alibaba/dubbo/archive/dubbo-2.5.8.zip 2)编译 ...

  2. 代码审计-MetInfo CMS变量覆盖漏洞

    0x01 代码分析 安装好后是这样的 漏洞文件地址\include\common.inc.php 首先是在这个文件发现存在变量覆盖的漏洞 foreach(array('_COOKIE', '_POST ...

  3. Windows渗透测试中wmi的利用

    0x01 关于WMI WMI可以描述为一组管理Windows系统的方法和功能.我们可以把它当作API来与Windows系统进行相互交流.WMI在渗透测试中的价值在于它不需要下载和安装, 因为WMI是W ...

  4. 经验分享:程序员如何快速定位问题(BUG)

    让我掉下眼泪的 不止内存泄漏 让我夜夜不眠的 不止你的需求 明天还要改多久 你攥着我的手 让我感到为难的 是善变的需求 发布总是在半夜 回滚是永远的愁 错误(Bug)随时的暴漏 困扰着我心头 作为程序 ...

  5. Spring入门(五):Spring中bean的作用域

    1. Spring中bean的多种作用域 在默认情况下,Spring应用上下文中所有的bean都是以单例(singleton)的形式创建的,即不管给定的一个bean被注入到其他bean多少次,每次所注 ...

  6. 使用IIS部署网站

    使用IIS部署网站的步骤: IIS安装:控制面板->启用或关闭Windows功能->Internet信息服务->应用程序开发功能,勾选.net和asp相关的,和服务器端包含 ASP. ...

  7. 说说hashCode() 和 equals() 之间的关系?

    上一篇关于介绍Object类下的几种方法时面试题时,提到equals()和hashCode()方法可能引出关于“hashCode() 和 equals() 之间的关系?”的面试题,本篇来解析一下这道基 ...

  8. 百万年薪python之路 -- 面向对象之所有属性及方法

    1.私有成员公有成员 1.1 类的私有属性 # class A: # # name = '周道镕' # __name = 'zdr' # 私有类的属性 # # def func(self): # pr ...

  9. Spark集群安装与配置

    一.Scala安装 1.https://www.scala-lang.org/download/2.11.12.html下载并复制到/home/jun下解压 [jun@master ~]$ cd sc ...

  10. (23)ASP.NET Core EF关系数据库建模

    1.简介 一般而言,本部分中的配置适用于关系数据库.安装关系数据库提供程序时,此处显示的变为可用扩展方法(原因在于共享的Microsoft.EntityFrameworkCore.Relational ...