TCP 为什么三次握手而不是两次握手(正解版)
创作时间:
作者:
@小白创作中心
TCP 为什么三次握手而不是两次握手(正解版)
引用
CSDN
1.
https://blog.csdn.net/lengxiao1993/article/details/82771768
TCP三次握手是网络通信中的一个基础概念,但你真的理解为什么需要三次握手而不是两次吗?本文将为你揭示这个看似简单却蕴含深刻原理的通信机制。
参考文章
Why do we need a 3-way handshake? Why not just 2-way
大部分网络博客的错误解读
首先需要声明的是, 百度搜索到的大部分网络博客关于这个问题的解答都是不清晰或者不准确的。 讨论这个问题的大部分博客都会引用《计算机网络》的内容:
- 防止已失效的连接请求又传送到服务器端,因而产生错误
不幸的是, 这种解释是不准确的, TCP 采用三次握手的原因其实非常简单, 远没有大部分博客所描述的那样云山雾绕。
这里先给出结论:
- 为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤
- 如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认
先修知识
TCP 通信流程
TCP 的通信流程
上图中的每一个箭头都代表着一次 TCP数据包的发送
- 需要注意的是, 上图中出现的 ACK = x +1 的写法很容易让人误以为数据包中的 ACK 域的数据值被填成了 x+1 。 ACK = x+1 的实际含义是:
- TCP 包的 ACK 标志位(1 bit) 被置成了 1
- TCP 包的确认号(acknowledgement number ) 的值为 x+1
- 类似的, TCP 数据包中的 SYN 标志位, 也容易与序号(sequence number) 混淆, 这点需要读者注意
TCP 数据包结构图
为什么 TCP 需要握手这个操作
在解答为什么 TCP 需要三次握手, 而不是两次之前, 首先需要回答的问题是:
- 为什么需要握手这个操作, 能不能不握手?
如果读者对比一下 UDP 的通信流程和 TCP 的通信流程, 可以发现, 在 UDP 协议中, 是没有握手这个操作的。
这里就引出了 TCP 与 UDP 的一个基本区别, TCP 是可靠通信协议, 而 UDP 是不可靠通信协议。 - TCP 的可靠性含义: 接收方收到的数据是完整, 有序, 无差错的。
- UDP 不可靠性含义: 接收方接收到的数据可能存在部分丢失, 顺序也不一定能保证。
UDP 和 TCP 协议都是基于同样的互联网基础设施, 且都基于 IP 协议实现, 互联网基础设施中对于数据包的发送过程是会发生丢包现象的, 为什么 TCP 就可以实现可靠传输, 而 UDP 不行?
TCP 协议为了实现可靠传输, 通信双方需要判断自己已经发送的数据包是否都被接收方收到, 如果没收到, 就需要重发。 为了实现这个需求, 很自然地就会引出序号(sequence number)和确认号(acknowledgement number)的使用。
发送方在发送数据包(假设大小为 10 byte)时, 同时送上一个序号( 假设为 500),那么接收方收到这个数据包以后, 就可以回复一个确认号(510 = 500 + 10) 告诉发送方 “我已经收到了你的数据包, 你可以发送下一个数据包, 序号从 510 开始” 。
这样发送方就可以知道哪些数据被接收到,哪些数据没被接收到, 需要重发。
为什么需要三次握手,而非两次
正如上文所描述的,为了实现可靠传输,发送方和接收方始终需要同步(SYNchronize )序号。 需要注意的是, 序列号并不是从 0 开始的, 而是由发送方随机选择的初始序列号 ( Initial Sequence Number, ISN )开始 。 由于 TCP 是一个双向通信协议, 通信双方都有能力发送信息, 并接收响应。 因此, 通信双方都需要随机产生一个初始的序列号, 并且把这个起始值告诉对方。
于是, 这个过程就变成了下面这样。
下面这个流程图描述的和上面一样, 但是更加清楚的展示了 TCP 数据包标志位, 以及数据域的命名来源。
值得注意的是, 如上图所说, 最后一次握手在默认不携带数据的情况下, 由于SYN 不是 1 , 是不消耗序列号的。 所以三次握手结束后,客户端下一个发送的报文中seq 依旧是 x+1, 示意图如下
注意到, 上图第四步发送的 seq 和第三次握手的 seq 是一样的, 体现了最后一次握手, 默认不消耗序列号的特点。
本文原文来自CSDN
热门推荐
如何合理确定装修大包费用?怎样避免装修费用超支?
家庭装修清包工纠纷案例:装修费用与质量的争议
如何帮助资优生做好时间管理?
如何实现API网关:从工具选择到架构设计的全面指南
川贝母一次吃多少克 川贝母适合什么咳嗽
石雕弥勒佛耳垂为什么这么大?
电脑微信登录不上去怎么回事?原因分析与解决方案
所有老人都应该吃钙片吗?钙片什么时候吃效果最好?5个问题
胆固醇高不能吃的食物有哪些?胆固醇高忌口食物一览表
世预赛预测推荐方法:神经时空点过程国际赛事预测方法与效能评估体系
汽车最大扭矩工况检测:原理、方法与应用
营销目标是什么
差动放大电路工作原理是什么?差动放大电路静态工作点分析
如何解决手机无法添加桌面快捷方式问题
先喝汤还是先吃菜?吃饭顺序竟然决定你的体重和健康!
车牌号码119的寓意与吉凶解析
最窄处仅13公里,中南半岛的缅甸,为何差点将泰国“一分为二”?
如何对服务器进行性能基准测试
民法典如何认定夫妻共同债务的责任和义务
古埃及美术比较显著特点有哪些?如何欣赏其独特魅力?
低价流量套餐的隐秘真相:诱惑背后的风险揭示
学校安全教育如何开展
硬件工程师必看:Type-C转DP的底层逻辑与实战应用
只有购房协议的房子如何转让给别人?
首套房贷抵扣个税:如何最大化你的财务收益
古老病毒序列,竟可调控鸟类大脑基因!
借条的正确写法是怎么样的
红楼梦中贾瑞在贾府的地位如何?与王熙凤是何关系
剑网三:红尘侠影 沈剑心获取攻略2.0
如何安全拆卸CPU风扇?简单步骤详解助你成功