TCP-流量控制和拥塞控制

流量控制和拥塞控制是计算机网络中确保数据可靠、高效传输的重要机制,它们在功能、作用对象和实现方法上有所不同,下面为你详细介绍:

流量控制#

定义

流量控制是一种协调发送方和接收方之间数据传输速率的机制。其主要目的是防止发送方发送数据的速度过快,导致接收方无法及时处理这些数据,从而造成数据丢失。它是端到端层面的控制,关注的是发送方和接收方之间的直接交互。

实现方法

  • 停止 - 等待协议:发送方每发送一个数据帧后,就停止发送,等待接收方的确认帧。只有当收到确认帧后,才会发送下一个数据帧。例如,在一个简单的文件传输场景中,发送方发送一个数据包后,会暂停操作,直到接收到接收方返回的“已收到”确认信息,才继续发送下一个数据包。这种方式实现简单,但效率较低,因为在等待确认的过程中,发送方处于空闲状态。
  • 滑动窗口协议:该协议允许发送方在未收到确认帧的情况下,连续发送多个数据帧。发送方和接收方分别维护一个发送窗口和接收窗口。发送窗口规定了发送方可以连续发送的数据帧范围,接收窗口规定了接收方能够接收的数据帧范围。例如,TCP协议就采用了滑动窗口机制。发送方可以在窗口大小允许的范围内连续发送多个数据包,而不需要等待每个数据包的确认。接收方会根据自身的处理能力动态调整窗口大小,并将窗口大小信息告知发送方,发送方根据该信息调整发送速率。

拥塞控制#

定义

拥塞控制是一种全局性的机制,用于防止网络出现拥塞。当网络中的流量过大,超过了网络的承载能力时,就会导致网络性能下降,如数据包延迟增加、丢包率上升等,这种情况被称为网络拥塞。拥塞控制的目的是通过调整发送方的发送速率,使网络中的流量保持在一个合理的范围内,避免网络拥塞的发生。

实现方法

  • 慢启动:发送方在开始发送数据时,先以较小的发送速率发送数据,然后逐渐增加发送速率。具体来说,发送方初始设置一个拥塞窗口(cwnd),初始值通常为 1 个最大报文段(MSS)。每收到一个确认帧,拥塞窗口大小就增加 1 个 MSS。例如,发送方最初发送一个数据包,收到确认后,拥塞窗口变为 2 个 MSS,此时可以发送 2 个数据包,收到这 2 个数据包的确认后,拥塞窗口变为 4 个 MSS,以此类推。
  • 拥塞避免:当拥塞窗口大小达到一个阈值(ssthresh)时,慢启动过程结束,进入拥塞避免阶段。在拥塞避免阶段,发送方每收到一个确认帧,拥塞窗口大小只增加 1/cwnd 个 MSS,这样拥塞窗口的增长速度会变得比较缓慢,从而避免网络拥塞。
  • 快重传:当接收方收到一个失序的数据包时,会立即发送一个对前面已正确接收的数据包的重复确认。当发送方收到 3 个重复确认时,就知道有一个数据包可能丢失了,此时发送方不需要等待超时重传定时器到期,而是立即重传丢失的数据包。
  • 快恢复:在快重传之后,进入快恢复阶段。发送方将拥塞窗口大小减半,同时将阈值(ssthresh)设置为减半后的拥塞窗口大小,然后拥塞窗口大小线性增加。

两者的区别与联系#

  • 区别
    • 作用范围:流量控制是端到端的控制,主要关注发送方和接收方之间的流量匹配;拥塞控制是全局性的控制,关注的是整个网络的性能。
    • 触发原因:流量控制是由接收方的处理能力触发的,当接收方缓冲区快满时,会通知发送方降低发送速率;拥塞控制是由网络的拥塞状态触发的,当网络出现拥塞迹象时,发送方需要调整发送速率。
  • 联系:两者都是为了保证数据的可靠传输,并且在实际的网络协议中,它们通常是相互配合使用的。例如,在 TCP 协议中,既包含了流量控制机制(滑动窗口),也包含了拥塞控制机制(慢启动、拥塞避免等)。

作者:Esofar

出处:https://www.cnblogs.com/firsthelloworld/p/18708884

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   我不想学编丿程  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示