但是根据双将军问题 , 谁说一来一回两个包就能确保同步成功 。
为了缓解双将军问题 , tcp3次握手增加了超时重试的机制 。
第一个包: A发送给B的SYN中途丢失 , 没有到达B
A会周期性超时重传 , 直到收到B的确认 。
第二个包 , 即是发送给A的SYN+ACK 中途丢失 , 没有到达A
B会周期性超时重传 , 直到收到A的确认 。(实际上 , A因为没有收到确认 , 也会重传)
第三个包:即A发送给ACK 中途丢失 , 没有到达B
A发完ACK , 单方面认为tcp Established状态 , 而B显然认为tcp为Active状态 。
a. 假定此时双方都没有数据发送 , B会周期性超时重传 , 直到收到A的确认 , 收到之后B的TCP 连接也为 Established状态 , 双向可以发包 。
b. 假定此时A有数据发送 , B收到A的 Data + ACK , 自然会切换为established 状态 , 并接受A的 Data 。
c. 假定B有数据发送 , 数据发送不了 , 会一直周期性超时重传SYN + ACK , 直到收到A的确认才可以发送数据 。
小林coding 有一篇讲解了握手异常 很是牛叉
总结本文记录了两将军问题: 对于不可靠信道 , 无数次确认都不能达成可靠共识 。TCP 三次握手是在两个方向确认包的序列号 , 增加了超时重试 , 是两将军问题的一个工程解 。
(本文部分内容提炼自知乎 , 感谢这届网友的智慧)
- https://finematics.com/two-generals-problem/
- https://www.bilibili.com/read/cv16604716
经验总结扩展阅读
- 两地分居怎么办
- 近代中国的两大历史使命是什么
- C++栈和典型迷宫问题
- 腌制肉一斤需要多少两盐
- 电视机没声音是什么原因
- 海信跟tcl电视哪个好 两者必有你喜爱
- 两融差额是什么意思
- 壬水偏偏喜欢丁火
- 食神男和伤官女合适吗
- 三两五钱女命一生婚姻