TCP 为什么是三次握手,而不是两次或四次?

转自知乎

Tcp是个状态鸡
Tcp是个双功通信的状态鸡

有了这两个前提,我们来枚举所有A鸡和B鸡组成的分布式系统关于信道的所有状态。

A鸡

  1. A->B是通的还是不通。我们用AB表示,值域是y/n。
  2. B->A是通的还是不通。我们用BA表示,值域也是y/n。

B鸡

  1. A->B是通的还是不通。我们用AB表示,值域是y/n。
  2. B->A是通的还是不通。我们用BA表示,值域也是y/n

很显然这是关于信道状态的穷举啦。没有异议吧。

初始状态
A鸡: AB = n, BA = n
B鸡: AB = n, BA = n

事实上,通信领域所有的握手都是协商状态。我没见过不是协商状态叫握手的。跟人类一样吧,我握住你的手,我确认你不是***,你确认我不是***,就是不是***这个变量两个人达成共识状态。那些弄比特币的神棍把这个叫共识,我觉得很有道理,因为在我心里一致就是时间序相关的,其实就是这么回事。下面A鸡和B鸡组成的state machine得到什么状态才能通信呢。我们描绘一下可以通信的状态。

通信状态
A鸡: AB = y, BA = y
B鸡: AB = y, BA = y

我们怎么从初始的状态迁移到通信状态呢,其实我们又不是心有灵犀一点通,我们只能通过交换消息。我们还是按照装逼的方式说事件吧。

event 1:
A发一个sync给B,此时没有发生状态迁移。因为A也不知道B能不能收到,显然两个信道都没有资格设置成y。

event 2:
B收到A的sync,此时B知道A->B是通的。系统的状态机鸡迁移。

A鸡: AB = n, BA = n
B鸡: AB = y, BA = n

event 3:
B发送上一个sync的ack + 自己的sync给A,这个时候其实很明显,跟event1一样,对整个系统的状态鸡没影响的。

event 4:
A收到B发的ack + sync,A知道A->B是通的,因为他通过这条信道发消息收到回复了。同时A知道B->A是通的,因为他从B收到消息了。所以整个系统的状态鸡。迁移到:

A鸡: AB = y, BA = y
B鸡: AB = y, BA = n
玩到这里已经用了两个消息了。然而还是没有达到可通信的状态。因为B鸡还是不确定B到A的信道是不是通的。这两边就不能够进行通信,因为两个通信主体就信道状态没有达成共识呀。答案只能是

event 5:
A回复B的sync发给B一个ack。这时候,也不会发生状态迁移。

event 6:
B收到A回复的ack,这时候B知道我发给A消息是可以收到回复的,因此B认为B->A的信道是通的。因此我可以很happy的把状态迁移到

A鸡: AB = y, BA = y
B鸡: AB = y, BA = y
game over

这个状态两个节点就A到B和B到A两个信道是通的达成了共识。所以需要三条消息因为有双向信道各个方向各有一个变量表示信道是否是通的,跟序号毫无关系,楼上扯序号的都是瞎掰的。序号的存在因为tcp是流协议。后面还需要排序。

全部评论

相关推荐

强大的马里奥:不太可能,我校计算机硕士就业率99%
点赞 评论 收藏
分享
06-27 12:54
已编辑
门头沟学院 Java
累了,讲讲我的大学经历吧,目前在家待业。我是一个二本院校软件工程专业。最开始选专业是觉得计算机感兴趣,所以选择了他。本人学习计算机是从大二暑假结束开始的,也就是大三开始。当时每天学习,我个人认为Java以及是我生活的一部分了,就这样持续学习了一年半,来到了大四上学期末,大概是在12月中旬,我终于找的到了一家上海中厂的实习,但我发现实习生的工作很枯燥,公司分配的活也不多,大多时间也是自己在自学。就这样我秋招末才找到实习。时间来到了3月中旬,公司说我可以转正,但是转正工资只有7000,不过很稳定,不加班,双休,因为要回学校参加答辩了,同时当时也是心高气傲,认为可以找到更好的,所以放弃了转正机会,回学校准备论文。准备论文期间就也没有投递简历。然后时间来到了5月中旬,这时春招基本也结束了,然后我开始投递简历,期间只是约到了几家下场面试。工资也只有6-7k,到现在我不知道该怎么办了。已经没有当初学习的心劲了,好累呀,但是又不知道该干什么去。在家就是打游戏,boss简历投一投。每天日重一次。26秋招都说是针对26届的人,25怎么办。我好绝望。要不要参加考公、考研、央国企这些的。有没有大佬可以帮帮我。为什么感觉别人找工作都是顺其自然的事情,我感觉自己每一步都在艰难追赶。八股文背了又忘背了又忘,我每次都花很长时间去理解他,可是现在感觉八股、项目都忘完了。真的已经没有力气再去学习了。图片是我的简历,有没有大哥可以指正一下,或者说我应该走哪条路,有点不想在找工作了。
码客明:太累了就休息一下兄弟,人生不会完蛋的
如果实习可以转正,你会不...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务