计算机网络--可靠数据传输原理(二)

            从计算机网络--可靠数据传输原理(一)中已经可知如何设计一个可靠的传输机制来保证数据可以完整有序的到达目的地,可是该机制采用了“停等”协议(也就是每发送一个数据包都要等待接收方的反馈消息不然就超时重传),它的传输效率比较低,所以出现了流水线可靠数据传输协议(在计算机网络-自顶向下一书中已经从理论上详细的讨论了传输效率低下的缘由,不过我仍是从直觉上记住这个结论先,暂时不去看具体缘由了)。java

            它的基本思想是发送方能够连续发送一批数据包给接受方,而不用每发一个数据包就等待确认。可是这批数据包的数量仍是有限制的,能够称之为缓冲区,若是发送的数据包占满了缓冲区尚未一个数据包被确认一样须要发送方进行等待!不过该方法仍然行之有效的缘由是尽管网络会丢包、乱序达到、数据损坏,可是大部分状况下数据仍是能够正常达到目的地,发送方大部分状况下都会收到接受方的正常反馈,因为发送方会有一个线程异步接受该反馈因此发送方能够继续发送新的数据包填满那些已经反馈的数据包的空间。这种机制在网络和双方机器都正常的状况下发送方会一直向接受方发送数据而感受不到停顿,这就是称之为流水线传输的缘由!缓存

            先假设缓冲区的大小为N且恰能对2取模(这样对N取余时能够简化运算见 java位运算技巧--不按期更新),每一个数据包都有一个序号,经过对N取余就能够求出数据包在缓冲区占用的位置。这里要特别强调发送方和接收方的缓冲区大小必须相同,接收方发送的反馈消息可能丢失致使发送方从新发送数据包,接收方可缓存已正确接收的数据包经过数据包的序号来判断是否为新数据包,这点在计算机网络--可靠数据传输原理(一)中也提过。          网络

            当接收方正确接收了一段连续且完整的数据包时,会将这段数据包的最后一个编号附加到反馈消息中表示<=该编号的数据包都正确接收(而不须要为每一个数据包都发送反馈消息从而节约了流量,这又叫累积确认),若是出现了丢包、乱序、数据包损坏状况,就须要差错恢复机制,流水线传输的处理方式有两种:回退N步和选择重传。异步

            一、回退N步.net

                 发送方会对丢包、乱序、数据包损坏以及超时状况从新发送数据包,接收方会丢弃全部乱序到达的数据包,这样作看似很是天然且合理,可是丢弃已正常接收确乱序达到的包有点浪费流量,因此就有了选择重传。选择重传比该方法要复杂,将在下篇进行分析。计算机网络

相关文章
相关标签/搜索