# 网络 Network

# 目录

# 1. 怎么做 tcp 的流量控制?

点击查看实现代码

利用滑动窗口的流量控制

一般来说,我们总希望数据传输的更快一些。但如果发送方把数据发得过快,接收方就可能来不及接收,这就会造成数据的丢失。流量控制(flow control)就是让发送方的发送速率不要太快,要让接收方来得及接收。    利用滑动窗口机制可以很方便地在 TCP 连接上实现发送方流量控制。通过接收方的确认报文中的窗口字段,发送方能够准确地控制发送字节数。

# 2. 怎么做 tcp 拥塞控制?

点击查看实现代码

前面的流量控制是避免发送方的数据填满接收方的缓存,但并不知道网络中发生了什么。一般来说,计算机网络都处在一个共享的环境。因此也有可能会因为其他主机之间的通信使得网络拥堵。在网络出现拥堵时,如果继续发送大量的数据包,可能会导致数据包时延、丢失,这时 TCP 就会重传数据,但是⼀重传就会导致⽹络的负担更重,于是会导致更⼤的延迟以及更多的丢包,这个情况就会进⼊恶性循环被不断地放⼤…    于是,就有了拥塞控制,控制的⽬的就是避免「发送⽅」的数据填满整个⽹络。为了在「发送⽅」调节所要发送数据的数据量,定义了⼀个叫做「拥塞窗⼝」的概念。拥塞窗⼝ cwnd 是发送⽅维护的⼀个的状态变 ᰁ,它会根据⽹络的拥塞程度动态变化的。

只要⽹络中没有出现拥塞, cwnd 就会增⼤; 但⽹络中出现了拥塞, cwnd 就减少;

# 拥塞控制四个算法

点击查看实现代码
  • 慢启动(slow-start)
  • 拥塞避免(congestion avoidance)
  • 快重传(fast retransmit)
  • 快恢复(fast recovery)

# 3. 流量控制和拥塞控制的区别

点击查看实现代码

拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况;常用的方法就是:( 1 )慢开始、拥塞避免( 2 )快重传、快恢复。

流量控制:流量控制是作用于接收者的,它是控制发送者的发送速度从而使接收者来得及接收,防止分组丢失的。

Last Updated: 4/6/2023, 3:53:33 PM