对于 TCP 三次握手的理解
假设名叫 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 三次握手的理解的更多相关文章
- TCP三次握手形象理解
tcp三次握手就像是你用企业微信给人家发信息,首先你得确认别人在不在,你会发 在吗? 这个时候显示的是未读 对方看到之后未读会变成已读 然后他会回复你 在的 你看到这个消息后,他那边也 ...
- TCP三次握手简单理解
- TCP 三次握手原理,你真的理解吗?
最近,阿里中间件小哥哥蛰剑碰到一个问题——client端连接服务器总是抛异常.在反复定位分析.并查阅各种资料文章搞懂后,他发现没有文章把这两个队列以及怎么观察他们的指标说清楚. 因此,蛰剑写下这篇文章 ...
- 理解TCP三次握手和四次挥手
TCP相关知识 TCP是面向连接的传输层协议,它提供可靠交付的.全双工的.面向字节流的点对点服务.HTTP协议便是基于TCP协议实现的.(虽然作为应用层协议,HTTP协议并没有明确要求必须使用TCP协 ...
- 谈谈你对 TCP 三次握手和四次挥手的理解
TCP三次握手: 1.客户端发送syn包到服务器,等待服务器确认接收. 2.服务器确认接收syn包并确认客户的syn,并发送回来一个syn+ack的包给客户端. 3.客户端确认接收服务器的syn+ac ...
- TCP三次握手、四次挥手理解
tcp三次握手建立连接第一次握手 客户端发送给服务器一段连接请求报文,等待服务器回应 第二次握手 服务器收到报文,并发送给客户端一个确认报文,等待客户端回应 第三次握手 客户端收到新报文 ,再发送给服 ...
- TCP ,UDP概念和TCP三次握手连接 的知识点总结
OSI 计算机网络7层模型 TCP/IP四层网络模型 传输层提供应用间的逻辑通信(端到端),网络层提供的是主机到主机的通信,传输层提供的是可靠服务. TCP 中常说的握手指的是:连接的定义和连接的建立 ...
- TCP三次握手,数据传输,四次挥手
TCP包结构 一个TCP包结构如下: 一个TCP包主要由TCP包头和数据部分组成,包头固定部分为20字节,选项和数据部分根据实际情况设置为4N(N可以为0)字节. 1.16bit源端口和目的端口号,它 ...
- TCP三次握手四次挥手详解
转载 http://www.cnblogs.com/zmlctt/p/3690998.html 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需 ...
随机推荐
- [JZOJ5818] 【NOIP提高A组模拟2018.8.15】 做运动
Description 一天,Y 君在测量体重的时候惊讶的发现,由于常年坐在电脑前认真学习,她的体重有了突 飞猛进的增长. 幸好 Y 君现在退役了,她有大量的时间来做运动,她决定每天从教学楼跑到食堂来 ...
- oracle初级系列教程
https://www.cnblogs.com/linjiqin/category/349944.html
- 如何在CentOS6.4系统上安装KVM虚拟机
CentOS6.4系统上安装KVM虚拟机 备注:以下操作说明是经过实验验证后总结出来的笔录,有需要的朋友可以进行参考,以下是基于VMware12.5.2虚拟机版本上安装的实验环境. 一.安装KVM ...
- python问题:IndentationError:expected an indented block
Python语言是一款对缩进非常敏感的语言,给很多初学者带来了困惑,即便是很有经验的Python程序员,也可能陷入陷阱当中.最常见的情况是tab和空格的混用会导致错误,或者缩进不对,而这是用肉眼无法分 ...
- Java学习笔记二--API课堂记录
JavaSE课堂记录(二) 第一节课 方法的重载:方法名相同,参数列表不同 方法的重写:方法名,参数列表相同 两同:方法名相同,参数列表相同 两小:访问权限小与等于父类,返回值类型小于等于父类(返回值 ...
- SpringBoot学习(三)探究Springboot自动装配
目录 什么是自动装配 何时自动装配 原理分析 注:以下展示的代码springboot的版本为2.0.3版.因源码过长,大家选择展开代码 ㄟ( ▔, ▔ )ㄏ 什么是自动装配 自动装配还是利用了Spri ...
- Spring Boot Mail 实现邮件发送
此 demo 主要演示了 Spring Boot 如何整合邮件功能,包括发送简单文本邮件. 邮件服务在开发中非常常见,比如用邮件注册账号.邮件作为找回密码的途径.用于订阅内容定期邮件推送等等,下面就简 ...
- [最新方法]终于解决了 Ubuntu 14.04 网络图标不见了 的问题|Ubuntu14.04 网络图标消失
解决 Ubuntu 14.04 网络图标不见了 消失的问题 这个问题困扰了我大半年了.但是我就硬是不想重新装系统.搜索研究一番发现,这个问题是nm-applet的问题. 然后偶然发现nm-ap ...
- springboot整合Shiro功能案例
Shiro 核心功能案例讲解 基于SpringBoot 有源码 从实战中学习Shiro的用法.本章使用SpringBoot快速搭建项目.整合SiteMesh框架布局页面.整合Shiro框架实现用身份认 ...
- IDEA配置maven+错误记录
使用maven并不是那么顺利所以把自己遇到的问题也记录一下 下载maven 从官网下载maven官网 配置环境变量 新建一个变量名:MAVEN_HOME 值:maven目录 path:%MAVEN_H ...