编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

你可知道tcp拥塞控制?

wxchong 2024-11-27 21:42:02 开源技术 43 ℃ 0 评论

这篇文档定义了tcp的四种相互交织的拥塞控制算法:慢启动,拥塞,避免快速重传以及快速恢复。同时也会讲,在一段数据相当长的闲置之后,tcp应该如何开始传送,并讨论了各种确认产生方法。

首先我们先来了解一下tcp的一些术语的一些定义:

数据段:一个数据段,就是任意的tcp/ip数据或确认包(或两者兼备)。

发送短最大数据段尺寸(smss):它是发送端能发送的最大数据段的尺寸,这个值是以太网络最大传输单元(mtu),mtu路径发现算法或其他因素为基础的。

该尺寸不包括tcp/ip头和选项。

接送端最大数据尺寸(rmss):他是接收端愿意接收到的最大数据段的尺寸。这个值在连接开始时接收端发送的mss选项中说明,又或者如果mss选项没有使用,就是536字节,该尺寸不包括tcp/ip头和选项。

满尺寸数据段:一个包括允许最大数目数据的数据段,(也就是说一个包括smss字节数据的数据段)。

接收端窗口(rwnd):最近通知的接收端窗口。

拥塞窗口(cwnd):一个tcp状态参量代表着一个tcp允许发送的最大数据量,在任意一个给定的时刻,tcp不会发送序号大于最大确认序号和cwnd,rwnd中较小者的数据。

初始窗口(iw):初始窗口是三次握手完成后,发送端的拥塞窗口的尺寸。

丢失窗口(lw):丢失窗口是在一个tcp根据它的重传定时器检测到的数据丢失之后,拥塞窗口的尺寸。

重启窗口(rw):重启窗口是tcp在一段闲置期之后重新开始传送后拥塞窗口的尺寸。

传送尺寸:已经被发送,但还没有确认的数据的总量。

拥塞控制算法

这里定义了四种拥塞控制算法:慢启动,拥塞避免,快速重传和快速恢复,在某些情况下,比算法的限定更加保守地行事也许对一个tcp发送端更有意义。无论如何,tcp不能超出下列算法的限定(也就是说当下列算法计算出来的cwnt值不允许数据被发送时,就不能发送数据)。

慢启动和拥塞避免

慢启动和拥塞避免算法必须被tcp发送端用来控制正在向网络输送的数据量。为了实现这些算法,必须向tcp每连接状态加入两个参量。拥塞窗口是对发送端收到确认(ack)之前能向网络传送的最大数据量的一个发送端限制,接收端通知窗口是对未完成数据量的接收端限制。cwnd和rwnd的最小值决定了数据传送。

另一个状态参量,慢启动阀值,被用来确定是否慢启动,还是用拥塞避免算法来控制数据传送。结论如下:

在不清楚环境的情况下向网络传送数据,要求tcp缓慢的探测网络已确定可用流量,以避免突然传送大量数据而使网络拥塞。在传送开始时,或者在修复了由重发定时器探测到的数据丢失之后,使用慢启动算法来达到此目的。

lw,cwnd初始值,必须小于或等于2*smss字节,而且不能大于两个数据段。

快速重传/快速恢复

当一个次序紊乱的数据段到达时,tcp接收端应该迅速发送一个重复ack。这个ack的目的是通知发送端,收到了一个次序紊乱的数据段。以及期望的序列号,从发送端的观点来看,重复ack可以有许多网络问题引起,首先可以有数据段丢失引起。在这种情况下,所有在丢失的数据段之后,发送的数据段都将从触发重复ack。又或者可以由网络对数据的重新排序引起。最后,重复ack可以由网络对ack或数据段的复制引起。另外,当接收数据段填补了全部或部分序列号间隔时。Tcp接收端应该立即发送一个ack。这将为一个通过重传超时机制来从数据丢失中恢复的发送端提供更多的及时的信息。此机制可能是一个快速重传,或者一个实验性的数据丢失恢复算法。

安全考虑

这篇文档要求tcp再出现超时重传和确认副本的情况下,减小它的发送速率,因此攻击者能够通过引起数据包或者他们的确认丢失的方式来削减tcp连接的性能,也可以通过伪造额外的确认副本来达到此目的。

因特网很大程度上依赖于这些算法的正确实现来保持网络的稳定,避免拥塞崩溃。攻击者能够通过伪造额外的重复确认或对新数据的额外确认的方式,来使tcp端点对拥塞做出更激烈的反应,这样的攻击者甚至可以是网络的一部分陷入拥塞崩溃。

对于tcp拥塞的理解就到此结束,个人理解能力有限。如果对你有帮助,请点个关注,获赞。谢谢!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表