tcp 拥塞产生及控制的原理,顺便问个问题

2016-05-17 21:21:38 +08:00
 hxndg

tcp 拥塞控制的原理及拥塞产生的原因。写这个重点是时延产生的原因,估计跟我一样的学生找实习可能会用到。。。。找实习好伤。。。。。

我有个问题,为什么主机对发生超时时采取的拥塞控制方式是慢启动,受到三个冗余 ack 时是采取乘性减,两个为什么不一致?

时延产生的原理: 1 四台主机在链路容量为 R 的共享式输出链路上传输,链路上有一台路由器,路由器的转发能力固定,但缓存无限大。这种情况下,吞吐量(也就是接收端的接受容量)会随着发送的速率增加而增加,但是时延呢?简单的求导可以发现时延在不断的增加(导数也在增加)当两台发送方的发送速率达到 R/2 时,数据包的时延就会扩大到无限。这里时延产生的原因是因为当分组速率达到链路容量时,分组经历的巨大的排队时延。

2 第二种时延来自什么情况呢?当路由器的缓存有限时,不断增加的缓存在满的情况下会丢弃掉部分数据包,而发送方就不得不进行数据重传,在这种情况下当传输层的发送速率接近链路容量时这些数据包有一部分是原始数据,而另外的数据是重传数据。这里需要注意的是,主机的发送速率和传输层的发送速率并不完全一致。这里时延产生的情况是因为缓存溢出导致了数据丢弃。

3 第三种情况的时延产生原因较为复杂,当线路较为复杂时可能多个线路通信时会共享一个或者多个路由器,比方说一个网络上多个对等主机都在相互进行数据传输(假设他们速度一致),起初发送主机发送速率较小的情况下他们不会产生对路由器缓存的竞争,吞吐量会随着发送速率增大而增大。但是当他们的发送速率都达到链路容量( R )的情况下,对于路由器缓存的争夺会十分严重,在这种重载情况下,网络中两台主机的吞吐量可能将趋于 0 ,这种拥塞是由上由路由器转发某分组而该分组被下游路由器丢弃导致。

tcp 拥塞的控制原理。

常见的方法分为两种:端到端的拥塞控制, tcp 采用的就是端到端的拥塞控制,这样做的原因是因为 ip 层没有向 tcp 提供网络拥塞的反馈迹象。那么 tcp 连接是怎么做的呢? tcp 使每一个发送方通过感知自己所感受到的网络拥塞现象,当发现拥塞时就降低其发送速率

这样子又可以引出三个问题

1tcp 如何感知网络产生了拥塞?

2tcp 怎样限制连接发送的速率

3tcp 使用什么算法来改变发送速率?

针对问题 1 ,联想三个 tcp 拥塞产生的原因,就可以理解 tcp 对拥塞的感知了, tcp 认为要么出现超时,要么出现三个冗余 ack ,就发生了拥塞

针对问题 2 , tcp 定义了发送窗口,接受窗口,和拥塞窗口,这三个窗口发送用来控制发送速率,接收窗口用来流量控制,而拥塞窗口用来控制拥塞。也就是保证 最后发送的 byte-最后接收的 ack <拥塞窗口。

针对问题 3 , tcp 拥塞控制算法包括 1 慢启动 2 加性增,乘性减 3 对超时做出反应,需要注意因为超时产生的拥塞控制和收到冗余 ack 产生的控制并不一致。这个就不多说了,本身理解下就好了。

2397 次点击
所在节点    问与答
3 条回复
hxndg
2016-05-17 21:33:43 +08:00
话说到底为什么拥塞针对超时和三个冗余 ack 采取的措施不一致?
gamexg
2016-05-18 01:46:34 +08:00
@hxndg 超时意味着对方要么完全没有收到任何数据,所以没发出 ack ,要么对方发出的 ack 一个都没收到,意味着网络拥塞很严重。
冗余 ack 意味着对方收到了之后的包,但是当前包未收到。这表示只是丢失了个别包,或者只是顺序乱了,网络拥塞不严重。记得这时候会触发快速重传。
hxndg
2016-05-18 09:53:21 +08:00
@gamexg 万分感谢,原来如此哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/279360

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX