TCP的流量控制和拥塞控制
流量控制
TCP流量控制是为了防止发送方发送数据过快,从而导致接收方无法及时处理而引起数据丢失。
滑动窗口
TCP流量控制主要通过滑动窗口机制来实现。滑动窗口是一种动态调整发送方发送数据量的方法,它基于接收方的接收能力来限制发送方的发送速率。
滑动窗口的概念:
发送方和接收方分别维护一个窗口,表示当前可以发送或接收的数据量。
发送窗口的大小取决于接收方的接收窗口大小,即接收方能够接收的数据量。
工作原理:
发送方在发送数据前,会先查看接收方的接收窗口大小。
根据接收窗口的大小,发送方调整自己的发送窗口,确保发送的数据量不会超过接收方的处理能力。
当接收方处理完一部分数据后,会向发送方发送确认报文(ACK),并更新自己的接收窗口大小。
发送方收到确认报文后,会更新自己的发送窗口,并根据新的窗口大小继续发送数据。
窗口的更新:
接收方根据自己的接收能力和处理速度,动态调整接收窗口的大小,并通过确认报文通知发送方。
发送方根据接收方发送的窗口更新报文,调整自己的发送窗口大小。
具体操作
发送方的操作:
发送方在发送数据时,会按照接收方的接收窗口大小来发送数据。
如果接收方的接收窗口变小,发送方会相应地减少发送数据量。
如果接收方的接收窗口变为0,发送方会停止发送数据,直到收到接收方发送的窗口更新报文为止。
接收方的操作:
接收方在接收到数据后,会根据自己的处理能力和接收窗口大小来确认数据。
如果接收方能够处理更多的数据,会增大接收窗口的大小,并通过确认报文通知发送方。
如果接收方无法处理更多的数据,会减小接收窗口的大小,以限制发送方的发送速率。
优点
防止数据丢失:通过控制发送方的发送速率,避免接收方因处理不过来而导致数据丢失。
提高网络效率:确保数据能够有序、可靠地传输,提高网络的整体传输效率。
增强网络稳定性:在网络拥塞时,通过调整发送速率来减轻网络负担,增强网络的稳定性。
拥塞控制
拥塞控制是为了防止过多的书记注入到网络中,TCP拥塞控制采用了慢启动、拥塞避免、快速重传和快速恢复来应对网络拥塞。
当 cwnd < ssthresh 时,使用慢开始算法。
当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。
工作原理
初始设置:在TCP连接刚建立时,拥塞窗口cwnd通常被设置为一个较小的值(如不超过2至4个SMSS,即最大报文段长度)。
慢启动阶段:在慢启动阶段,每当发送方收到一个对新的报文段的确认后,拥塞窗口cwnd就会增加(如每经过一个传输轮次,cwnd就加倍),直到达到慢启动门限(ssthresh)为止。这个阶段的目的是逐渐探测网络的拥塞程度。
拥塞避免阶段:当拥塞窗口cwnd达到慢启动门限ssthresh后,TCP连接进入拥塞避免阶段。在这个阶段,拥塞窗口cwnd的增长速度会放缓,每经过一个往返时间(RTT)就把cwnd加1,以避免网络拥塞的发生。
拥塞发生时的调整:如果网络中出现拥塞(如发送方未在规定时间内接收到ACK确认包),TCP会采取相应的拥塞控制算法来调整拥塞窗口cwnd的大小。例如,在超时重传时,会将cwnd重置为初始值,并将ssthresh设置为cwnd的一半,然后重新进入慢启动阶段。在快速重传和快速恢复算法中,当收到三个重复的ACK时,会立即触发重传,慢开始门限ssthresh减半,cwnd设置为ssthresh减半后的数值,然后开始执行拥塞控制算法,以快速恢复网络状态。
- 感谢你赐予我前进的力量