小Q:TCP 是如何保证可靠传输的?
- 数据报校验:数据链路层的差错检测(冗余校验)保证了数据的完整性,tcp 的序列号和确认号保证数据不会丢失。
- 通过滑动窗口来对失序的数据报进行重排;
- 通过序列号和确认号找到重复的数据并丢弃;
- 应答机制:只有收到确认后才继续发送数据报;
- 超时重传(ARQ):若不能及时收到确认,或确认号指明只接收到原先的数据,就会将数据报重传;
- 流量控制:TCP 连接的双方都有固定大小的缓存空间(滑动窗口),其能根据网络的拥堵情况以及对方的接收情况来控制发送速率。
小Q:如何做到超时重传(ARQ)
慢慢:自动重传请求(ARQ)是 OSI 模型中传输层的错误纠正协议之一。ARQ 分为两种:停止等待 ARQ 和 连续 ARQ 协议。
- 停止等待:当数据报发送后需要停下来等待接收方的响应报文,才能继续发送;当没有收到响应是就得要重新发送。
- 为了提高信道的利用率,发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明这个分组为止的前面所有分组都接收到了。
小Q:什么是滑动窗口呢?
慢慢:TCP 通过滑动窗口机制来控制发送的流量,以及暂存数据。
- 控制流量:根据连续 ARQ 得知,当滑动窗口越小时,发送的流量就越少,反之就越多。
- 暂存数据:当数据发送后,数据报并不是直接丢弃,而是还放在滑动窗口中,直到收到响应报文后才丢弃,这样也有利于超时重传的实现。
小Q:如何控制滑动窗口的大小呢?
慢慢:这个就是流量控制的原理了。流量控制通过接收方发送的确认报文中的窗口字段来控制发送方的窗口大小,告诉其我能接收数据的吞吐量。
小Q:什么是拥塞避免呢?
慢慢:流量控制是两点间发送流量的协商,而拥塞避免则是整个网络所有节点发送流量的协商。拥塞控制采用了四种算法:慢开始,拥塞避免,快重传和超时重传。
- 慢开始:当主机开始发送数据时,为了防止一开始将大量数据注入网络,引起网络的阻塞,先从小数据量开始试探,并通过翻倍的方式来增大发送的数据量。
- 拥塞避免:当发送的数据量到达我们认为会造成拥塞的点 cwd 时,我们就减少数据的增大量,每次增加一个数据报,而再是翻倍。
- 超时重传:当超过了一定的时间都没有收到响应报文,就认为这个网络发送了拥塞,将发送的数据量降为零,并从慢开始阶段开始发送。
- 快重传:当收到三个重复的确认报文时,我们就可以判断这个时候有数据报丢失,于是发送方会将发送数据量减半,同时更新 cwd 值,并从拥塞避免阶段开始发送数据报。