计算机网络Chapter 3 TCP

前面虽然有复习Chapter 3的部分,但是并没有详细讲TCP的通信部分,这篇专门用来讲TCP通信。

Principles of Reliable Data Transfer

In a general context. 可靠数据传输用来提供什么服务?解决什么问题?

rdt 1.0

一切都很完美,最简单的协议。 0

rdt存在什么问题?数据可能会出错(corrupted),rdt1.0完全没有考虑。

rdt 2.0

开始考虑数据丢失的问题,怎么解决?AQR(Automatic Repeat reQuest):基于ACK和NAK的确认重传机制。 0

rdt 2.0没有考虑的一个问题是ACK和NAK出错了怎么办? 于是衍生出了rdt 2.1,利用了一个sequence number,同时验证ACK和NAK是否出错。

0

rdt2.2则是在2.1的版本上进一步变更一点点。

rdt 3.0

以上的1.0和2.0虽然考虑了数据corrupted,但是完全没考虑packet loss的情况。 而rdt3.0则考虑了丢包的情况。 丢包怎么办?重传永远是最好的解决方法,rdt3.0利用一个countdown timer,每次发送时开始计时,超时重传。

流水线协议

rdt3.0 看上去已经很完美了,但是还需要进一步改进,为什么呢?rdt3.0仍旧是一个hold-and-wait协议,它在发送一个packet之后没收到确认信息就一直在等, 这样效率非常低,所以就有人提出了流水线协议,按顺序发送多个packets.

GBN

GBN(Go Back N)回退N步协议也被叫做silding window protocol,它维护了一个窗口,设置窗口长度为N,整个窗口分成四个部分,如图所示。 0

0

SR

GBN也有缺点,有什么缺点呢?如果传过来的包是失序的,它是选择把失序的包全部丢掉,这不就很浪费吗? 而SR,选择重传则接收失序的包,对于那些丢失的包,则重传,直到一组全部到齐之后全部发送。

0