TCP可靠性传输,我们可以把他理解寄快递,比如古代,从北京有传达一封信,必须要有邮差送信,有一天皇上要发布一步密诏,告诉边境的将军,年底必须打败敌人
然后命令我去邮寄这封信,首先我们就找到了邮局,进入邮局,我看到很多邮差,背后都写着TCP邮差,找了一个大哥,
大哥问我,你要干啥,我说我要一封信,要送往边境,大哥说好,写一下地址,我写了我的收货方和寄货方的地址
发货发:北京天安门
收货方:边境80号
然后邮差拉出了一匹马,写了了一封信 ,对马儿说,去边境看看哪里可以邮信吗,过了两个小时,
边境看到到马儿带了的信,一看是要寄信,,就又回复了一封信,说北京北京,我是边境,我收到你的信件了,我们这里可以寄信,你可以建立连接哈
邮差,看到收到了回信之后,立马又回复了一封信,说边境边境,我收到了你的确认信,那我开始发货了哈
我就好奇说,你建立连接是什么意思,邮差说这个就是TCP连接,是虚拟的,连接状态信息并不会在路上保存,相反, 连接信息是在两端维持的,也即是北京和边境一起维持的
我有好奇的我问,你们我马上要发三封信呢(这就是著名的三次握手)
三次握手,就是是为了验证北京和边境的收信和发信没有问题,这样连接就是通了,就可以正式发货了
如果只有两次通信,没有第三次,那么边境就无法知道北京邮局有收到自己的通知,三握手的目的就是保证北京和边境都能验证自己的收信和发信没有问题,才能保证此连接是通的
我才恍然大悟,问题是你们现在送信都是无人驾驶了,直接用马儿送信,马儿又不通人性,路上走丢了怎么办呢,邮差大哥说,放心我们的马儿都是经过训练的,再说了每个一段路程都会有一个驿站
这个驿站,就是让马儿休息,吃草,更关键的是驿站的工作人员会指引马儿从那条路走,这个驿站就是我们说的路由器
但是马儿也有可能走丢呀,邮差说,放心,我们会把你的信分成好几份,每一份会让一个马儿邮寄,比如你的信分成十份,标记成1,2,....10,我们会每次出动三匹马寄信,然后到了边境邮局会在给你拼接起来的
送信过程中,三匹马,每匹马送一份信,每次送三封,过了一会其中一匹马儿回来了,确认马儿把信送了出去,然后我再把第4份信让马儿再发出去,依次类推,最终发信全部发出去
那如果万一有几份还是丢了怎么办呢,这个你放心,如果等到一定时间我们没有收到确认的信息,会重新发送丢失的那一份的,
那你们为什么不一次派10匹马送信呢,而是用三匹马送信,这样不是更快吗,这个你就不懂了,这个是有规定的,比如你每次用一匹马送信,太慢了,但是你一次用10匹马送信,虽然快,但是我们不能单独为你服务吧,还要其他事情让马儿干的,这个就是我们说的滑动窗口协议,你不能太大,也不能太小,并且一边发快递,一边等确认信息
我终于明白了,所谓的TCP,无非就是在那些不靠谱的马匹运输的基础上建立一种发送办法,基本上是失败重发就可以了。