操作系统,计算机网络都属于计算机系统,为了使得整个系统运行起来,人们根据当时的硬件条件和理论认识设计了各种的算法(也可以叫机制),这些机制有些被抛弃,有些被进化。所以操作系统、计算机网络里面的内容概括起来就是:条件(已知)、问题(未知)----》算法----》实现;在具体实现的时候为了配合算法设计了各种精巧的数据结构。《计算机网络重要机制》系列总结的是自己学习计算机网络中的重要机制,材料主要参考《计算机网络自顶向下》和网上资料,叙述方式就是上面的框架。
1,传输的基本流程图如下所示:
图1
2,下面要解决传输中两个问题:丢包、坏包(01bit发生翻转),要使用到的工具是数学中的有限状态机如下图:
图2
3,假设说网络层的传输是没有问题的,如图1b图,那应该怎样设计我们的传输层协议呢?如下图:
图3
4,假设网络层中传输过程中存在包被破坏(01翻转)且接收方还能收到这个坏包,那么上面的1.0协议该如何改进呢,如下图:
图4
5,上面的rdt2.0没有考虑NAK/ACK包在传输中被破坏且还能被发送方接受到的问题,未解决这个问题为每个数据包增加了1bit位的序列号,即0或1,rdt2.1如下图:因为增加了两个序列号,所以rdt2.1的状态是2.0状态的二倍,此时从图上已经感觉到略显复杂,其实并不复杂,就是把2.0版本重复一次而已(但并不完全一样),还有这个图是可以简化的。
图5
图6
6,观察图6知道,receiver在收到坏包时,会向sender发送NAK,receiver收到上一个包(重复包)时,会向sender发送ACK,但是目的都是一样,需要sender送正确的当前包,所以这两个情况可以合并起来考虑,那怎么合并呢,其实很简单,就是出现上面两种情况时,都发送上一个包的ACK(此时的ACK也带有序列号01了),这样sender也稍微调整一下就可以了。如rdt2.2下图:
图7
图8
jj