0. 前语
在上一节中,我们说到TCP协议有以下特点:
这一节,我们来分析一下TCP是如何实现可靠交付的。在弄清楚这个问题,我们要首先明白以下几个问题:
a. 要可靠交付什么?
答:TCP传输的是字节流(也就是从进程流进流出的字节序列)。这里有两个很重要的概念约束1.字节和2.序列
b. 什么是可靠交付?
答:因为传输的是字节流,可靠交付需要保证以下的情况:
- 无差错:也就是字节要不能改变。不能发
You are sweet , 但是却收到了You are sweat - 不丢失:也就是字节不能丢失。不能发
bite ,但是却收到了bit - 不重复:也就是字节不能变多。不能发
as ,但是却收到了ass - 按序到达:也就是字节的顺序不能变。不能发
ADC , 却收到了 DAC
c. 为什么是TCP来实现可靠交付?
答:因为传输层之下,包括网络层、数据链路层和物理层,都是尽最大可能交付。所以要完成可靠交付,还得自己亲力亲为。
1. 可靠传输的工作原理
1.1 停止等待协议——有问有答
把发送数据的一方叫做发送方A,把接收数据的一方叫做接收方B。在停止等待协议中,双都是懂礼貌的人。
- 接收方每次接收到数据的时候,都会回复一声。
- 发送方每次要等上一个回复了才发送下一个。
a. 出现差错时候
但是由于底层的各种原因,发送和接收不会总是这般丝滑,总会有一些差错。这时一个很重要的机制保证了差错可以被恢复——超时重传。
- A: 发送数据
- B:校验发现错误,丢弃,不做处理
- A:等待超时,重新发送
- B:校验没有错误,发送确认信息
b. 确认丢失和确认迟到
除了出现差错,接收方可能接收到正确的信息,但是在发送确认信息时候可能会出现以下情况:
- 确认信息丢失了
- 在这种情况中,发送方A会因为超时重新发送M1
- 这是接收方会丢弃重复的M1,冲洗发送确认信息
- 确认信息发送延迟了
- 在这种情况中,接收方发送的确认信息会经过一个延迟到达A
- 发送方A接收到信息之后,什么也不做
这种确认和重传的机制,可以保证在不可靠网络上实现可靠的通信,而这种可靠传输的协议又被称为自动重传请求协议 ARQ
1.2 连续ARQ协议
缺点
在上面的情况中,虽然可以保证可靠,但是有一个缺点——慢!
这种一来一回将会耗费大量的时间。
改进
类似于CPU中的流水线工作,人们想到一种连续传输的方法。
滑动窗口协议
在发送方中,会有一个发送窗口
- 只有在发送窗口中的分组才可以发送
- 在收到第一个确认信息之后,就可以将滑动窗口向后移一个位置
|