我看的是一本《计算机网络 自顶向下方法》,看到运输层方面,还没看完,感觉蛮难的。我这里就把我自己理解的写写,估计有理解错的,希望大家发现后能多多指出我的错误。
首先运输层是在应用层下的,负责的是端到端的通信,不去管在网络链路中如何传输,只负责在端与端之间的传输。
先说说UDP,因为我才看到这,UDP有一个叫UPD检验和的玩意儿,它其实是报文段中所有16比特字的和进行的反码运算的结果,如果拿这个检验和与原来的那些和相加,那么结果全是1,如果出现0,说明这个报文段接收后,其中的分组出现了差错了。
由于UDP不是可靠的数据传输,所以接下来我按照书上所说,把我理解的可靠的数据传输协议给说明下,和书上一样,我主要讲下单向数据传输。
下面,先来个1.0版本,把发送方和接收方都成为有限状态机(FSM)。
首先发送方,接收来自上层的调用,发送数据,接收方等待下层的调用,接收数据。这个实现很简单,但是没考虑当中的差错。
接下来,2.0版本
我直接介绍书中的3.0版本,其实2.0版本加了一个肯定确认和否定确认,还有序号来标识是哪个分组。
3.0版本是个增强版。增加了倒计数定时器,来控制重传,当发送数据后,收到的序号不是刚传出去的序号,而是上一个的分组的序号,说明,刚传出去的序号,没有传到接收方,这个时候,就重新发那个分组,如果超时,也一样。只有当接收方传回正确的序号后,定时器结束计时。
同时如果一次发送,只传一个分组,效率很低,所以,就采用类似流水线的方式来传分组,把那些分组填充到一条流水线中,发送方和接收方都要能缓存分组。同时也有序号范围。接下来我介绍下当出错时的差错恢复的基本方法,回退N步和选择重传。
选择重传我暂时没看懂。先说说回退N步,等过段日子我看懂选择重传后,我再添加上去。
先说下回退N步的原理,首先,先发送第一个分组,然后接收方收到第一个分组的最后一个比特,就发送成功的标志给发送方,发送方就传下一个分组给接收方,由于流水线操作,所以一次依次传多个分组给接收方,如果第一个和第三个分组发送成功,第二个缺失败了。则在回退N步的协议中,只能把第三个分组给抛弃,重新传第二个分组然后第三个分组。
好了,到这,我理解就这么点。。。。。。那个选择重传真心没看懂多少,里面有个窗口的概念,其实窗口就是总的分组减去已确认的分组和不可用的分组,里面放的是未发送的分组和未确认的分组。等我明后两天抽空看懂选择重传后,再修改吧。由于白天要上班。。刚大专毕业的孩子伤不起啊。。。可能更新的会晚吧,这两天下定决心看懂那个选择重传,选择重传的效率很高。
希望大家多提些意见,我对这方面真心不是很懂,和大家多交流才能互相提高水平。