TCP中的流量控制和拥塞控制有什么区别?

95

TCP中流量控制与拥塞控制有何不同?

这个问题可以分为两部分:

  1. 流量控制和拥塞控制的总体目的是什么?
  2. 如何完成这项任务?

根据维基百科,TCP流量控制依赖于ACK消息中报告的窗口大小。拥塞控制也依赖于确认消息。我想知道两种目标之间的区别以及它们的工作原理。


48
这不是一道作业题,更多是一道面试准备题。为什么它被认为是“离题”的?@EJP - GM Lucid
8个回答

137

关于第一部分,总体概述:

流量控制由接收方控制。它确保发送方只发送接收方能够处理的内容。想象一种情况,一个拥有快速光纤连接的人可能会发送到一个使用拨号或类似方式连接的接收方。发送方将能够非常快地发送数据包,但这对于拨号接收方来说是无用的,因此他们需要一种方法来限制发送方可以发送的内容。流量控制涉及可用机制,以确保通信顺畅进行。

拥塞控制是一种确保网络上每个人在任何时间都有“公平”的访问网络资源的方法。在混合网络环境中,每个人都需要能够假定同样的性能水平。一个常见的场景是办公室局域网。在局域网内有许多LAN段在其内运行,但是它们可能都需要通过比组成部分LAN段更慢的WAN链路出去。想象一下,在LAN内有100mb的连接,最终经过一个5mb的WAN链接出去。这里需要某种拥塞控制来确保整个网络没有问题。

关于第二部分:

如果这是一个面试准备问题,就像你之前所说的那样,我建议花时间阅读一些关于TCP/IP的一般资料。不要使用维基百科。阅读官方文档是非常值得你的时间的。你可以认为这是支撑现代互联网的最重要的协议。

有关流量控制的内容:停止等待、滑动窗口、暂停帧。

有关拥塞控制的内容:QoS(服务质量)、重新传输策略、窗口策略。

除此之外,你还可以搜索任何特定供应商的实现(如Cisco等)。


3
答案很好,但至少有一个错误:“PAUSE帧”并未用于拥塞控制,而是用于流量控制的机制。 - Angel
2
你说得完全正确。我把它加在了错误的段落中,正在编辑。 - JP Doherty
手册在哪里?谷歌只给了一些博客。 - Jams.Liu
一个人不应该完全依赖维基百科,但它可以是一个可靠的资源。 - undefined

30

流量控制:发送方将发送足够的数据以适应接收方。

拥塞控制:发送方会减少发送数据包的数量,以避免路由器缓冲区(队列)溢出。


23

流量控制:

  • 确保发送方不会过载接收方。
  • 这是局部现象,与拥塞控制不同。
  • 通常由发送方发起。

拥塞控制:

  • 确保网络能够处理数据包的负载。
  • 这是全局现象,影响连接到该网络的每个主机。
  • 由路由器发起。

6

拥塞控制是一个全球性问题——它涉及到子网内的每个路由器和主机。

流量控制仅涉及发送方和接收方,范围从点到点。


5

流量控制主要在接收端进行,用于调整发送方注入网络的数据量;拥塞控制主要在发送端进行,尝试通过ACK包的时间来感知网络的拥塞情况,以调整发送到相应情况的数据量。


2

流量控制是在接收方完成的。如果发送方发送的数据包大于接收方的缓冲区大小,则接收方的缓冲区会发生溢出。为了避免在接收方发生溢出,发送方使用了窗口技术。

拥塞控制是在发送方完成的。这是一个全局现象,在路由器上发生。当许多发送方尝试通过同一链接推送更多的数据包时,路由器的缓冲区会发生溢出。


这似乎是一个诚实的回答尝试,但现在,你的回答有点令人困惑。它也相当简短。请考虑花费一两个完整段落来讨论流量控制和一两个完整段落来讨论拥塞控制,使用更多逗号和减少单词省略。 - Julian

2

拥塞控制:除了防止路由器的缓冲区溢出之外,它还处理其他两个重要因素。

  • 公平性:不应该发生任何连接到网络的主机饥饿的情况,尽管术语更为复杂。
  • 效率:应该充分利用链路的容量,以避免拥塞发生。

0

流量控制:

  1. 当发送缓冲区已满时,我们会阻止源端发送数据,以避免数据丢失。
  2. 接收缓冲区在这种情况下也已满。
  3. 通过滑动窗口协议可以轻松实现。

拥塞控制:

  1. 当我们从源端开始传输数据时,它通过网络到达目的地。拥塞控制防止源端发送数据,以避免路由器在网络中丢失数据。

  2. 这个问题与路由器的队列有关。

  3. 这更加复杂,因为路由器从连接到其网络的不同源接收不同的数据包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接