TCP协议讲解二

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hanani_Jia/article/details/83242059

   慢慢的到了夏天,天气越来越潮湿了,西安虽然很干旱,但是在西安到北京的路上阴雨天气越来越多,大华抱怨到:最近的纸飞机越来越脆弱了,经常就给丢了,烦的一批。我们得想想办法解决啊。

   小胖说,要不这样我们在这一路多安插一些人手,让我们的纸飞机一直在我们的视野中,给他们站好岗。

   大华就急了:哪来那么多人,给你站岗去,再说了,这么远的路,我一千米一个岗,我耗费多大的人力物力。

   小胖说:我不是这个意思嘛,你看你负责你西安那一段,我负责我北京这一段,河北那块就让阿水负责吧。郑州就让小虎负责。这不就行了么。动用那些中间节点,当你想个山东发消息的时候,就让小明帮个忙,这样就安全一些咯。

   大华想了想说也不是不可以嘛,那要不咱们就试试。

   小胖又补充到但是这样的话,如果我们通道暂时一段时间不发送包裹的话,那这个通道要浪费很多的人力物力啊。

   大华:“这不是没办法的办法么,先试试,钱能解决的问题就不是问题。”

这就是最初的虚电路传输方,就和我们抗日时期的专线电话一样,除了发送和接受数据的两端,没有其他人使用它,带宽是不进行共享的。

   实行了一段时间之后,虽然消息能够传输到了,但是大华撑不住了,找小胖说,不行不行,这太浪费人力和财力了,我的菜鸟驿站已经发不起工资了,要换一个。于是小胖和大华都把大家叫来,一起商量一下怎么办,小虎小明他们也都说到,不行这确实太耗费财力了,

  这时候小虎说,我听说江苏那边他们就需要人力来站岗,他们把包裹给了马和骆驼,就可以了。

怎么可能呢?马和骆驼谁认识路?这不是胡闹么?

不不不,这些马都是经过训练的,他们只会沿着一条路一直走,他们会在最初的时候给马选好一条路,让马走下去,当然,不是一条路直接通到目的地,但是他们会在岔路口设立一些小驿站,无论哪个方向的马来了之后,他们都会让马歇一会,然后看看马身上的包裹是往那个方向走的,他们就会把马带到正确的道路上,马就继续沿着这次选好的路继续往下走,在写一个岔路口会有新的驿站等着他。

小明又问了那你说即使一小段路,也有可能会有人把他们的马牵走啊,那咋办。

所以说呢,他们会还有一个机制叫做失败重传,当发现,他们的数据走了好久还没有到,他们就默认这批数据丢掉了,就重新发。

那这也太浪费了吧。

他们也这么认为,所以他们每次都让马少拉一点,用不同的马来送货,然后给货编上号码。在目的地那边看看哪个编号的货没有收到就再发送哪个编号的货。

大华说到:这就有意思了,他们不需要事先建立链接,甚至每个货走的路径都是不一样的。是中间小驿站的人来决定他们走哪个方向的。

小虎继续说到,对,路径不同还有可能导致他们发送接收的顺序不同,他们用这种方法,中间的小驿站是不承担责任的,他们完全可能导致包裹的乱序,重复甚至丢失,他说的可靠是由起点和终点来建立的,就是我没收到会告诉你,然后再让你重发。

那这个失败重传机制到底是怎么实现的,这才是一个重点啊。他们那边想把这个专利卖给我们可是实在是太贵了, 我们只能自己来解决了啊。

阿水说:不如这样,我们发送一个东西,都让那边给我们回复一个确认消息,这样如果我发送了一个数据,你没给我回复我就认为你没收到,你给我回复了我就认为你已经安全收到了。

这确实是一个办法啊。

小明说:但是还有一个问题啊,如果你的反馈机制出现了问题咋办,你不能好好给我回复了,我发送了一个数据包之后,你不能给我回复,我就会再重新发送一个数据包,你这时候收到了你咋知道我是新数据包还是我再次给你重新发送的数据包。

这就是你的问题了啊。刚刚明明说了,他们会给数据进行编号啊。我先发送编号是1的数据包,然后我就等你1的确认,等收到了我就给你发2数据包啊。

但是那你说,如果你的确认我迟迟收不到咋办,那我就一直等着你?我不干别的了?

大华终于说话了,那咱们可以这样,我们一人配一个沙漏,我们现在给你发送包裹的时候,就让他开始计时,如果说沙漏都漏完了,你还没有给我回机制,我就当有问题了,我再给你重新发一份数据包1.

小胖也接着说道,那咱们这不是每次只能发送一个数据了么。你要是给我们多配送几个沙漏,咱不就能多发送几个数据了么。

愚蠢,这是沙漏的问题么。这很复杂很容易让发送方和接收方混乱的不过我听说有个机制叫窗口。

他们是这么弄得。他们设定了以一个窗口大小,比如是4,发送窗口只能同时发送4个,如果四个满了,就得等确认回来,回来一个就能再发一个,回来两个就能发一对。

但是这样也太蠢了吧。你明明都收到3,4了你还得扔掉

对确实很可惜,不过最初设计的时候为了简单就设计了这么一个叫做回退N步的协议

很显然啊,你们得改进一下,哪些丢了再去传哪些啊。

那我们这样设计

 

这样我们就可以只发送丢失的数据包2,等2来了之后把2和之前缓存的3,4一起交给接收端。这样就实现了,这就是我们选择性重传。

猜你喜欢

转载自blog.csdn.net/Hanani_Jia/article/details/83242059