创作不易,喜欢的话请点赞保藏转载,您的支撑是我更新的最大动力!!!
本篇文章开始了解 TCP 协议的重传机制、流量操控和拥塞操控。关于 TCP 协议的基础、三次握手和四次挥手能够参考上一篇文章:知道 TCP 协议(上)。
TCP 协议重传机制
当客户端和服务端进行网络通信时,在网络环境不良的状况下,会呈现数据丢掉。TCP 协议供给了多种重传机制来保证数据的牢靠传输。
超时重传
超时重传,当发送方发送一个 TCP 报文段后,会发动一个定时器计时,如果在规矩的时刻内没有收到对应的承认 ACK 报文段,发送方会假定该报文段丢掉,并重新发送该报文段。如下图所示:
在网络通信中,咱们习惯用 RTT 来表示往复时刻,指从发送方发送数据到接纳方接纳到相应数据,并将承认信息返回到发送方的整个往复时刻。如下图所示:
超时重传是以 RTO 来表示的,即超时重传时刻。一般状况下,超时重传时刻 RTO 的值等于或略大于往复时刻 RTT。如下图所示:
若超时重传时刻 RTO 小于往复时刻 RTT 时,会导致重发快,添加了网络拥塞,然后可能引发更多的通信数据丢掉。如下图所示:
若超时重传时刻 RTO 大于往复时刻 RTT 时,会导致重发慢,功率低和功能差。如下图所示:
快速重传
快速重传,当发送方发送一个数据包(通常是 TCP 报文段)后,会发动一个定时器计时,然后持续发送报文。但如果发送方接连收到三个相同的承认 ACK 报文段,表示接纳方现已接纳到后续的报文段,但某个中心的报文段丢掉了。发送方不等待定时器超时,而是当即重传丢掉的报文段,以进步传输功率。如下图所示:
SACK 重传
当超时重传和快速重传产生的时分,客户端不知道重传丢掉的那个报文还是重传后边的所有报文。SACK 重传,当接纳方收到报文后,会发送一个承认 ACK 报文段,其间包含 SACK 选项字段。SACK 选项字段会指示接纳方现已正确接纳到的报文段规模,即接连收到的报文段以及中心缺失的部分。发送方依据接纳到的 SACK 选项字段,能够知道哪些报文段现已抵达,哪些报文段还未抵达。发送方能够选择性地重传丢掉的报文段,只重传未抵达的部分,而无需重传现已接纳到的报文段。
经过 SACK 重传,TCP 协议能够愈加高效地处理乱序报文段,削减不必要的重传和带宽浪费。它能够帮助进步数据传输的功率和牢靠性,并削减网络拥塞的影响。
需求留意的是,SACK 重传是可选的,不是所有的 TCP 完成都支撑该机制。另外,SACK 重传的使用需求接纳方和发送方都支撑并正确处理 SACK 选项字段。
Duplicate SACK 重传
Duplicate SACK 重传和 SACK 重传是差不多,只不过 Duplicate SACK 重传能够在 ACK 报文丢掉的状况下,承认哪些数据被重复接纳了。
接纳方收到重复的报文段后,会在承认 ACK 报文段的 SACK 选项中包含重复的 SACK 选项字段。SACK 选项字段指示重复报文段的规模,使发送方能够辨认并了解哪些报文段是重复接纳的。1发送方接纳到带有 D-SACK 选项的承认 ACK 报文段后,能够依据其间的信息来承认是否需求采取相应的办法,例如调整拥塞窗口巨细、重传被过错地丢弃的报文段等。
D-SACK 机制有助于发送方更好地了解网络中产生的重复接纳状况,并依据这些信息进行相应的处理。它能够进步 TCP 协议的牢靠性和功能,并削减不必要的重传。
需求留意的是,D-SACK 机制是可选的,并不是所有的 TCP 完成都支撑该机制。此外,D-SACK 机制的使用需求接纳方和发送方都支撑并正确处理 D-SACK 选项字段。
滑动窗口
滑动窗口(Sliding Window)是 TCP 协议中用于流量操控和拥塞操控的一种机制。它答应发送方在不等待承认的状况下接连发送多个报文段,以进步传输功率。
在 TCP 通信中,发送方和接纳方之间有一个滑动窗口的概念。滑动窗口定义了发送方能够接连发送的报文段数量,而接纳方则经过承认报文段的办法奉告发送方窗口中还有多少可用的空间。发送方依据接纳方供给的窗口巨细来决议发送的报文段数量,并跟着承认的抵达逐步滑动窗口,发送新的报文段。窗口巨细实践是由操作系统开辟的缓存空间。
当客户端和发送端建立衔接后,两边会协商好窗口巨细,然后客户端会不断向服务端发送数据,窗口改变如下图所示:
客户端在发送报文的时分会不断的耗费窗口,当把窗口中的数据发送完后,可用窗口就会为0,如下图所示:
服务端在接纳数据的时分,也会保护一个窗口,接纳窗口巨细约等于发送窗口巨细。如下图所示:
客户端收到服务端对 32~36 字节承认的 ACK 报文,若窗口巨细没有改变,则向右滑动 5 个字节,不断重复这个进程直至数据传输完毕。如下图所示:
经过滑动窗口机制,TCP 能够依据网络状况动态调整发送速率,以习惯不同的网络推迟和带宽状况。它能够完成流量操控,保证发送方不会以过快的速度发送报文段,导致接纳方无法处理。一起,滑动窗口也能够用于拥塞操控,依据接纳方供给的窗口巨细来操控发送方的发送速率,以防止网络拥塞。
流量操控
流量操控,是 TCP 协议自身的一种机制,用于防止发送方发送数据的速率过快,接纳方来不及处理,然后防止数据丢掉或丢包。
具体来说,当接纳方处理数据的速度比发送方发送数据速度快时,流量操控机制能够约束发送方发送数据的速率,防止接纳方来不及处理。这能够经过在 TCP 报文中添加一些操控字段来完成,例如滑动窗口机制中的窗口巨细和接纳方反馈的接纳窗口告诉等。
流量操控机制能够防止发送方发送的数据量过大,导致接纳方处理不过来,然后削减数据丢掉或丢包的危险。一起,它还能够减轻接纳方的负担,防止接纳方因处理数据过载而溃散。
拥塞操控
TCP 协议的拥塞操控也是一种机制,用于在数据传输进程中,当网络拥塞状况产生时,对发送方的发送速率进行调理,以削减数据包丢掉,并康复网络功能。
具体来说,当网络产生拥堵时持续发送很多数据,会导致数据丢掉或丢包时,然后触发重传机制。重传机制又会反向添加网络负担,然后导致更多数据丢掉或丢包,进入了一个恶性循环。TCP 协议的拥塞操控机制,能够经过慢发动算法、拥塞防止算法、调整 TCP 报文的拥塞窗口巨细、快康复算法来调理发送方的发送速率,以下降数据包丢掉的危险。
慢发动算法
慢发动算法是一种用于进步网络拥塞防止和拥塞康复机制的办法,它主要应用于TCP 协议中。在慢发动算法中,发送方会逐步添加其发送的数据量,而不是一开始就发送很多的数据。其规矩主要是发送方每收到一个 ACK 报文时,拥塞窗口 cwnd 的巨细会翻倍。如下图所示:
能够看出,慢发动算法的发包数会呈指数式添加。一般状况下,发送方会设置一个慢发动门限 ssthresh。当拥塞窗口 cwnd <= 拥塞防止阈值 ssthresh,则使用慢发动算法;当拥塞窗口 cwnd > 拥塞防止阈值 ssthresh 时,开始进入拥塞防止算法。
拥塞防止算法
TCP 拥塞防止算法是为了在网络拥塞的状况下操控数据传输速率的一种机制。一旦拥塞窗口 cwnd 巨细达到拥塞防止阈值 ssthresh,TCP发送方就会进入拥塞防止阶段。在这个阶段,拥塞窗口以线性添加的速度添加,而不是指数级添加。每次收到一个承认,拥塞窗口添加的巨细也减小。
快速康复
TCP快速康复算法是TCP拥塞操控机制中的一部分,用于在网络拥塞时快速康复数据传输速率。它是TCP拥塞防止算法的一个扩展,旨在削减由于产生拥塞而导致的传输推迟。在快速康复阶段,TCP发送方不再依照慢发动或拥塞防止的办法线性添加拥塞窗口,而是每收到一个重复承认,拥塞窗口添加1个MSS(最大报文段长度)。
总结
本篇咱们先是介绍 TCP 协议的重传机制,主要有超时重传、快速重传、SACK 重传和 D-SACK 重传,且别离介绍了它们的特色。接着又侧重介绍了 TCP 协议中的滑动窗口机制,经过几张图简洁明了地描述了发送方和接纳方在传输数据进程中窗口的改变进程。此外,咱们也简略的了解了流控操控在 TCP 传输协议的重要性。最终,咱们系统性地学习了 TCP 协议的拥塞操控,主要有慢发动、拥塞防止和快回复。