在通信系统中,最基本的信息的传递都需要两步,发送方发送的消息和对方的回复确认:A->B Send, B->A Reply(ACK)。如果多接触一下其他行业的通信流程和规范,例如航空、铁路调度,就会明白这一点。

TCP 建联,本质上需要传递两条信息:A->B 的初始 SYN 号,B->A 的初始 SYN 号,那么理论上需要四步通信( A->B 的初始 SYN 号,B->A 的 ACK ; B->A 的初始 SYN 号,A->B 的 ACK );只不过为了效率和性能,中间两条消息可以合并为一条,这便是现在的三路握手的来源。后续的所有报文的传递机制,依然是Send/Ack两步 + 消息合并。

仅有Send没有Reply,属于不可靠传递;Send有单条Reply,可以实现99%的容错。只有发送方才有责任确保消息传递完整性,而且因为两军问题,任何信道不可能实现100%的有效性。所以折衷考虑,一般一条Send只需有一个Reply.

通信技术,关心的是通信的基本单元(单条消息、一个独立的数据包...),如何尽可能可靠地传递的流程,适用于所有领域,属于通用的泛化的规则。例如上述Send/Reply模型。

而协议,描述的则是消息的内容、格式,以及多条消息之间如何交互,是和应用领域相关的。例如:没有Reply意味着什么,Reply可以是什么样的信息格式,不同的格式代表什么含义,不同的格式下采用什么行为...

例如在航空通信,塔台向客机发送指令的协议:

  • 需要先报航班号,采用军队电文报数,之后是方位角、高度、行为等指令;
  • 航班必须在相同频率下先回复参数,最后附加航班号

上海管制区PVG进近塔台:东方三两幺拐,航向187度上3000保持!
MU3217机长:航向187度上3000保持,东方三两幺拐!

指令格式可以自定义,但塔台发出的指令,必须有Reply。

再比如在大家关心的计算机网络领域,包括但不限于以下语义及协议:

  • 信息包括SYN号,通过SYN号确保报文顺序性,有效性;
  • 跳跃ACK号(Reply),语义是“ACK号之前的包对方也都收到了”;

.....

TCP协议还可以定义状态机、定义新的类型字段、新的语义,但是任何一方主动发出的消息,必须有Reply(ACK).

所以,目前中文互联网的所谓“原因分析”都是皮肉之象,比如“防止包乱序及可能的重连”、“确认对方有收和发的能力”.....都不是三路握手的问题的本质。因为混淆了通信技术和TCP协议,甚至对通信基本原理没有任何感知。

TCP三路握手,本质是一个通信原理相关的问题的更多相关文章

  1. 两将军问题、拜占庭将军问题、TCP三路握手过程的联系

    2015年初时产生了一个疑问:基于不可靠的通信链路,为什么在两将军问题中永远无法达到共识,而在TCP三路握手中可以? 今天抽出了一些时间进行研究发现,实际上TCP三路握手也不是完全可靠的,只是一个近似 ...

  2. 27.Socket,TCP,UDP,HTTP基本通信原理

    Socket,TCP,UDP,HTTP基本通信原理(摘自百度): TCP.UDP,HTTP 底层通信都是通过 socket 套接字实现 网络上不同的计算机,也可以通信,那么就得使用网络套接字(sock ...

  3. Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)

    转载地址:http://blog.csdn.net/mad1989/article/details/9147661 ZERO.前言 有关通信原理内容是在网上或百科整理得到,代码部分为本人所写,如果不当 ...

  4. TCP协议—三次握手四次挥手的原理<转>

    三次握手四次挥手的原理   TCP是面向连接的,无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接.在TCP/IP协议中,TCP 协议提供可靠的连接服务,连接是通过三次握手进行初始化的.三 ...

  5. C#版清晰易懂TCP通信原理解析(附demo)

    [转] C#版清晰易懂TCP通信原理解析(附demo) (点击上方蓝字,可快速关注我们) 来源:周见智 cnblogs.com/xiaozhi_5638/p/4244797.html 对.NET中网络 ...

  6. 通信原理之TCP/IP基本概念 (二)

    本来想写写,但发现有人写的很好了,不造轮子了!  直接转了 一.为什么会有TCP/IP协议 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是 ...

  7. 基于web的IM软件通信原理分析

    关于IM(InstantMessaging)即时通信类软件(如微信,QQ),大多数都是桌面应用程序或者native应用较为流行,而网上关于原生IM或桌面IM软件类的通信原理介绍也较多,此处不再赘述.而 ...

  8. SSL 通信原理及Tomcat SSL 配置

    SSL 通信原理及Tomcat SSL 双向配置 目录1 参考资料 .................................................................. ...

  9. SSL 通信原理及Tomcat SSL 双向配置

    SSL 通信原理及Tomcat SSL 双向配置 目录1 参考资料 .................................................................. ...

随机推荐

  1. mysql workbench中my.ini路径不一样

    mysql workbench中的my.ini路径与mysql服务中的路径不一样 删除mysql workbench的配置文件即可解决 win7下的配置文件路径: %APPDATA\MySQL\Wor ...

  2. spark任务调度和资源分配

    Spark调度模式 FIFO和FAIR     Spark中的调度模式主要有两种:FIFO和FAIR.    默认情况下Spark的调度模式是FIFO(先进先出),谁先提交谁先执行,后面的任务需要等待 ...

  3. sqoop导入时删除string类型字段的特殊字符

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/sheismylife/article/details/29384357 假设你指定了\n为sqoop ...

  4. ES6标准入门之变量的解构赋值简单解说

    首先我们来看一看解构的概念,在ES6标准下,允许按照一定模式从数组和对象中提取值,然后对变量进行赋值,这被称作解构,简而言之粗糙的理解就是变相赋值. 解构赋值的规则是,只要等号右边的值不是对象或者数组 ...

  5. apache出现You don’t have permission to access / on this server问题的解决

    今天在部署一个系统时,在apache中新开了一个VirtualHost,然后设置了DocumentRoot,等访问时却提示“You don’t have permission to access / ...

  6. Spark项目之电商用户行为分析大数据平台之(六)用户访问session分析模块介绍

    一.对用户访问session进行分析 1.可以根据使用者指定的某些条件,筛选出指定的一些用户(有特定年龄.职业.城市): 2.对这些用户在指定日期范围内发起的session,进行聚合统计,比如,统计出 ...

  7. Spark项目之电商用户行为分析大数据平台之(五)实时数据采集

  8. Scala学习之路 (五)Scala的关键字Lazy

    Scala中使用关键字lazy来定义惰性变量,实现延迟加载(懒加载). 惰性变量只能是不可变变量,并且只有在调用惰性变量时,才会去实例化这个变量. 在Java中,要实现延迟加载(懒加载),需要自己手动 ...

  9. Vue 下拉列表 组件模板

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. 学习C#(一)

    赶紧好好学学自己的C#,,要不然要给做的东西说拜拜了,,,时间紧迫,,,真担心会食言..................... 在C#中以为只要类有构造方法,,,,原来结构也有 using Syste ...