MST

星途 面试题库

面试题:网络编程:TCP流量控制与拥塞避免的区别

请阐述在TCP/UDP Socket编程中,流量控制和拥塞避免分别解决什么问题,以及它们的实现机制有哪些不同。
17.1万 热度难度
后端开发网络编程

知识考点

AI 面试

面试题答案

一键面试

流量控制解决的问题

流量控制主要解决发送方和接收方速度不匹配的问题。防止发送方发送数据过快,导致接收方来不及接收而丢失数据。例如,接收方的缓冲区已满,若发送方继续高速发送,就会造成数据溢出丢失。

拥塞避免解决的问题

拥塞避免主要解决网络中的拥塞问题。当网络中数据量过大,超过了网络的承载能力时,会导致网络性能下降,如延迟增加、吞吐量降低等。拥塞避免机制就是要防止网络进入拥塞状态,并在拥塞发生时进行缓解。

实现机制的不同

  1. 流量控制实现机制
    • TCP的流量控制:通过接收方通告窗口(Advertised Window)来实现。接收方在TCP报文中的窗口字段告知发送方自己当前的接收缓冲区大小(可用空间),发送方根据这个窗口大小来调整发送数据量。例如,接收方当前接收缓冲区有1000字节可用,就在窗口字段填1000,发送方就知道最多能发送1000字节数据。
  2. 拥塞避免实现机制
    • TCP的拥塞避免
      • 慢启动:初始时,拥塞窗口(Congestion Window,cwnd)设置为一个较小的值(如1个最大段长度MSS),每收到一个确认(ACK),cwnd就增加一个MSS。这样,cwnd呈指数增长,快速探测网络的承载能力。
      • 拥塞避免:当cwnd增长到慢启动门限(ssthresh)时,进入拥塞避免阶段,此时cwnd每经过一个往返时间(RTT),只增加1个MSS。这种线性增长方式可以避免网络拥塞。
      • 拥塞发生处理:如果出现超时(RTO)或收到三个重复ACK,认为网络发生拥塞,ssthresh会降低为当前cwnd的一半,cwnd重新设置为1个MSS,再次进入慢启动阶段。而UDP本身没有内置的拥塞避免机制,一般需要应用层自己实现类似机制,如基于速率的控制等。