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
热门推荐
实话实说:三句直白话语揭示人生真相
S14半决赛:BLG 3比0战胜WBG,晋级总决赛
呼吸频率正常范围是多少
胃里长「巨石」?!这些都是危险人群
泡温泉、玩手机,日本雪猴是如何过上这么惬意的冬季生活?
同业竞争难题始终未解,武商、中百能否重组成功?公司:一切以公告为准
世界读书日:探索阅读的多样性——漫画、图解、图形化立体图书
新手写书,一本书到底写多少字才合适?出书有字数要求吗?
中国预防出生缺陷日 关注孕期用药安全 避免不良妊娠结局
项目管理中工程量计算方法详解
进口药品如何查溯源码
如何理解黄金投资的多元化和资产配置?这种配置如何降低投资风险?
单位辞职后个人档案怎么办?查询档案存在哪里,一文全解答!
绝地求生地图里如何练习枪法
快速设置HuggingFace镜像源:简单易懂教程
《天国:拯救 2》深度上手前瞻:有望成为中世纪主题大师之作
古村探幽,甪直乡野里的寻宋之旅
传统海运和空运快递的运输方式、运费和快递时效对比
罗塞蒂《莉莉丝女士》:一个充满矛盾与诱惑的艺术形象
莲雾成熟的时间及产地介绍(了解莲雾成熟的标志和产地特色)
长沙十大名菜排行榜,长沙美食江湖争霸:谁是舌尖上的霸主?
七言律诗的特点是什么?十首著名的七言律诗分析赏鉴!
喜欢抖脚是什么原因
常见的求职面试问题及答案指南
记忆力提升:情绪与记忆的关系
敷面膜后还需要洗脸吗?
最高法判例:被执行人到期债权的债务人是否具有案外人执行异议之诉原告主体资格
可乐热量高吗?一文详解可乐热量及饮用建议
车位经常被占很烦?千万别做“极端”的事,聪明人分享几个好办法
太极与身心健康:如何通过太极改善身心状态