网络协议系列九-传输层-tcp之流量控制和拥塞控制(代码片段)

1024星球 1024星球     2023-03-01     610

关键词:

如果接收方的缓存区满了,发送方还在疯狂发送数据,接收方只能把收到的数据包丢掉,大量的丢包会极大浪费网络资源,所以要进行流量控制。

一、流量控制

流量控制:让发送方的发送速率不要太快,让接收方来得及接收处理。

原理:通过确认报文中窗口字段来控制发送方的发送速率;发送方的发送窗口大小不能超过接收方给出的窗口大小;当发送方收到接收窗口的大小为0时,发送方就会停止发送数据。

有一种特殊情况,一开始,接收方给发送方发送了0窗口的报文段。后面,接收方又有了一些存储空间,给发送方发送的非0窗口的报文段丢失了。此时发送方的发送窗口一直为0,双方陷入僵局。

解决方案就是:当发送方收到0窗口通知时,这时发送方停止发送报文。并且同时开启一个定时器,隔一段时间就发个测试报文去询问接收方最新的窗口大小,如果接收的窗口大小还是0,则发送方再次刷新启动定时器。

缩写:

  • MSS(Max Segment Size):每个段最大的数据部分大小,是在建立连接时确定的,根据数据链路层倒推计算可得出MSS值是1460字节,但每次值大小是不确定的,需要双方通信时一起确定(取最小值)。计算方式:传输层数据1500字节 = 网络层(首部20字节 + 数据1480字节 = 传输层(首部20字节 + 数据1460字节(MSS)))
  • cwnd(congestion window):拥塞窗口(发送方)
  • rwnd(receive window):接收窗口(接收方)
  • swnd(send window):发送窗口,最大值取拥塞窗口和接收窗口的最小值(swnd = min(cwnd, rwnd)),当rwnd < cwnd时,是接收方的接收能力限制发送窗口的最大值,当rwnd > cwnd时,是网络的拥塞限制发送窗口的最大值。

二、拥塞控制

拥塞控制:防止过多的数据注入到网络中,避免网络中的路由器或链路过载。

拥塞控制是一个全局性的过程,涉及到所有的主机、路由器以及与降低网络传输性能有关的所有因素,是大家共同努力的结果。相比而言,流量控制是点对点通信的控制。

负载指的是经过路由器的带宽量总和。吞吐量就是带宽理论峰值。上图中链路吞吐量的理想情况是当负责超过带宽时,吞吐量达到峰值。但实际情况是,当负载越来越大(网络开始拥塞),吞吐量不会达到带宽值,并且之后就会下滑(网络拥塞开始严重),负载达到一定程度后网络就会卡死(死锁)。

可以类比一下交通。理论上一条8车道的道路可以同时开1000辆车,但实际700辆车就会发生拥堵。在早高峰或者晚高峰时,道路上的车辆开始出现缓慢移动,随着车辆越来越多,就会导致交通瘫痪。

2.1. 控制方法

2.1.1. 慢开始/慢启动(slow start

接收方告诉发送方MSS=100, rwnd=3000,发送方根据MSS设置发送窗口(拥塞窗口)为cwnd=100,每一轮成功接收后,cwnd都呈指数级增长(2^n,最大不超过rwnd),这就是慢开始。

当主机开始发送数据时,如果立即所大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。因此,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚开始发送报文段时,先把拥塞窗口CWND设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口CWND,可以使分组注入到网络的速率更加合理。

为了防止拥塞窗口CWND增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量:

  • CWND < ssthresh时,使用上述的慢开始算法。
  • CWND > ssthresh时,停止使用慢开始算法而改用拥塞避免算法。
  • CWND = ssthresh时,既可使用慢开始算法,也可使用拥塞控制避免算法。

2.1.2. 拥塞避免(congestion avoidance

ssthresh(slow start threshold):慢开始阈值,cwnd达到阈值后,以线性方式增加。当网络出现频繁拥塞时,ssthresh值就下降的很快。

拥塞避免(加法增大):拥塞窗口缓慢增大,以防止网络过早出现拥塞。

乘法减小:只要网络出现拥塞,把ssthresh减半,与此同时,执行慢开始算法(cwnd又恢复到初始值)。

让拥塞窗口CWND缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口CWND加1,而不是加倍。这样拥塞窗口CWND按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。

  • 当TCP连接进行初始化时,把拥塞窗口CWND置为1。前面已说过,为了便于理解,图中的窗口单位不使用字节而使用报文段(SMSS)的个数。慢开始门限的初始值设置为16个报文段,即CWND = 16
  • 在执行慢开始算法时,拥塞窗口CWND的初始值为1。以后发送方每收到一个对新报文段的确认ACK,就把拥塞窗口值另1,然后开始下一轮的传输(图中横坐标为传输轮次)。因此拥塞窗口CWND随着传输轮次按指数规律增长。当拥塞窗口CWND增长到慢开始门限值ssthresh时(即当CWND=16时),就改为执行拥塞控制算法,拥塞窗口按线性规律增长。
  • 假定拥塞窗口的数值增长到24时,网络出现超时(这很可能就是网络发生拥塞了)。更新后的ssthresh值变为12(即变为出现超时时的拥塞窗口数值24的一半),拥塞窗口再重新设置为1,并执行慢开始算法。当CWND=ssthresh=12时改为执行拥塞避免算法,拥塞窗口按线性规律增长,每经过一个往返时间增加一个MSS的大小。

强调: “拥塞避免”并非指完全能够避免了拥塞。利用以上的措施要完全避免网络拥塞还是不可能的。“拥塞避免”是说在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。

怎么知道网络拥塞?通过丢包监测即可知道是否发生网络拥塞。

2.1.3. 快速重传(fast retransmit

接收方: 每收到一个失序的分组后就立即发出重复确认,使发送发及时知道有分组没有到达,而不要等待自己发送数据时才进行确认。

发送方: 只要连续收到三个重复确认(总共4个相同的确认),就应当立即重传对方尚未收到的报文段,而不必继续等待重传计时器到期后再重传。

M3算法送的确认报段丢失后,发送端继续传递M4、M5和M6数据报,接收方确认数据报发送回去。快重传算法还规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段M3,而不必继续等待M3设置的重传计时器到期。由于发送方尽早重传未被确认的报文段,因此采用快重传后可以使整个网络吞吐量提高约20%。

2.1.4. 快速恢复(fast recovery

其过程有以下两个点:

  • 当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。这是为了预防网络发生拥塞。请注意:接下去不执行慢开始算法。
  • 由于发送方现在认为网络很可能没有发生拥塞,因此与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口CWND现在不设置为 1),而是把CWND值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

下图给出了快重传和快恢复的示意图,并标明了“TCP Reno版本”。

也有的算法把开始时的重传的拥塞窗口值设置为ssthresh + 3 * MSS。这样做的理由是:既然发送方收到三个重复的确认,就表明有三个分组已经离开了网络。这三个分组不再消耗网络的资源而是停留在接收方的缓存中。可见现在网络中并不是堆积了分组而是减少了三个分组。因此可以适当把拥塞窗口扩大了些。

在采用快恢复算法时,慢开始算法只是在 TCP 连接建立时和网络出现超时时才使用。

采用这样的拥塞控制方法使得TCP的性能有明显的改进。

当发送方连续收到三个重复确认,就执行“乘法减小”算法,把ssthresh减半,这是为了预防网络发生拥塞。

由于发送方现在认为网络很可能没有发生拥塞,因此,与慢开始不同之处是现在不执行慢开始算法,即cwnd现在不恢复到初始值,而是把cwnd值设为ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢的线性增大。

2.2. 总结

  • 接收方根据自己的接收能力设定了接收窗口rwnd,并把这个窗口值写入TCP首部中的窗口字段,传送给发送方。因此,接收窗口又称为通知窗口。因此,从接收方对发送方的流量控制的角度考虑,发送方的发送窗口一定不能超过对方给出的接收窗口rwnd。
  • 发送方窗口的上限值swnd = Min(rwnd, cwnd)
  • rwnd < cwnd时,是接收方的接收能力限制发送方窗口的最大值。
  • cwnd < rwnd时,则是网络的拥塞限制发送方窗口的最大值。

网络协议系列八-传输层-tcp之可靠传输(代码片段)

TCP比UDP复杂,也是一个难点,在面试过程中也是会被大概率提问的。一、TCPTCP(TransmissionControlProtocol):传输控制协议。TCP的几个要点:可靠传输、流量控制、拥塞控制、连接管理(建立和释放连接... 查看详情

计网四章

...无连接传输服务不可靠的交付服务,基于“尽力而为”的网络层。(多路分用、多路复用)TCP:面向连接的传输服务可靠、按序的交付服务,提供拥塞控制、流量控制、连接建立UDP和TCP的共同点:都不保证延迟、带宽 3.1传输... 查看详情

计算机网络概述传输层tcp拥塞控制

TCP拥塞控制计算机网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏。这种情况就叫做拥塞。    &nb... 查看详情

计算机网络:可靠传输的实现(tcp窗口滑动以及拥塞控制)

转自:http://blog.chinaunix.net/uid-26275986-id-4109679.html    TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗口结合一系列的控制算法实现。一、滑动窗口协议&nb... 查看详情

tcp-拥塞控制

和UDP不同,TCP要考虑到网络的拥塞状况。发送方允许发送的数据量不仅要收接收方的控制(流量控制),而且还要有网络的拥塞状况(如果有的话)决定。1、报文段:格式、封装、TCP的链接:TCP是面向连接的协议。面向连接的... 查看详情

计算机网络tcp的可靠传输流量控制拥塞控制详解

...到成功吗?TCP数据包为什么在传输层切片,不在网络层和数据链路层切片?接收窗口大小比发送的数据还要大,TCP会一直等数据填满接收窗口吗?TCP流量控制TCP流量控制--特殊情况TCP拥塞控制TCP拥塞控制--方法T... 查看详情

计算机网络期末复习(卷二)(代码片段)

...器第六章应用层1、域名服务器2、URL3、电子邮件4、简单网络管理协议SNMP第七章网络安全1、主动攻击和被动攻击有哪些2、对称密钥和非对称密钥3、IEEE802.11层次模型结构4、分布协调功能和点协调功能Fighting!!考研加油!!... 查看详情

第五章传输层计算机网络(王道考研)

目录第五章传输层计算机网络(王道考研)概述功能TCPvsUDP寻址与端口常用端口Socket复用与分用UDP协议UDP首部格式UDP校验TCP协议特点和报文段格式特点TCP报文段首部格式控制位我的理解窗口TCP连接管理TCP连接建立三次握手SYN洪泛... 查看详情

一文搞定计算机网络(代码片段)

计算机网络目录计算机网络计算机网络和因特网分组交换协议层封装网络攻击应用层超文本传输协议http(80端口)HTTP报文格式:请求报文和响应报文用户与服务器的交互cookieWeb缓存器文本传输协议FTP(21端口)电子邮件SMTP(25端... 查看详情

tcp拥塞控制及bbr原理分析

参考技术A导语:TCP拥塞控制不仅仅是网络层的概念,可以将其归属于控制论的范畴。在TCP的演进过程中,出现了很多优秀的思想和算法,以实现网络传输过程中,在公平竞争性的前提下,尽可能地利用带宽资源。本文介绍TCP发... 查看详情

tcp拥塞控制机制

...拥塞控制机制呢,就是防止丢包过多导致传输效率低下。网络中传输的包太多,路由器的缓存又不够,每一个发送端都以自己想要的发送速率发送包,自然会导致网络拥塞。所以我TCP就包括了拥塞控制机制。 有几种拥塞控制... 查看详情

网络管理

osi模型应用层:为网络进程提供网络服务,提供身份验证表示层:格式化构建数据,提供加密会话层:建立管理终止应用之间的会话传输层:确保数据传输可靠性,建立维护终止虚拟电路,通过错误检测和恢复网络层:定义逻辑... 查看详情

王道计算机网络传输层(代码片段)

王道考研计算机网络传输层1、传输层1.1、传输层的两个协议1.1.1、面向连接的传输控制协议TCP1.1.2、无连接的用户数据报协议UDP1.2、传输层的寻址与端口1.3、UDP协议1.3.1、UDP首部格式1.3.2、UDP校验1.4、TCP协议1.4.1、TCP报文段首部格... 查看详情

网络tcp流控制和拥塞控制(代码片段)

名词解释MTU:最大传输单元(硬件规定),指的是ip头+data的最大字节数(数据包超过该值会分片,主要为UDP协议)TTL:数据报的寿命(经过一个路由器减1,工作在ip层)RTO:重传超时时间cwnd:发送窗口rwnd:接受窗口流控制目的:防止发... 查看详情

计算机网络第5章(传输层)

B站视频:计算机网络微课堂(有字幕无背景音乐版)网址:https://www.bilibili.com/video/BV1c4411d7jb?p=61目录5.1、运输层概述概念总结5.2、运输层端口号、复用与分用的概念为什么用端口号发送方的复用和接收方的分... 查看详情

计网传输层(tcpudp可靠传输流量控制......)(代码片段)

文章目录传输层UDP协议TCP协议TCP首部字段可靠传输流量控制窗口关闭问题糊涂窗口综合症拥塞控制慢启动拥塞避免拥塞发生快速恢复连接管理建立连接(3次握手)释放连接(4次挥手)传输层传输层有两大协议ÿ... 查看详情

tcp协议--流量控制,拥塞控制,mss

...该网卡的MTU。可见,MTU这个参数通常与通信接口有关(网络接口卡、串口等)。如果IP层以上的协议层,传输的报文大于MTU,则在IP层,就需要对报文进行分片,分成多个MTU发出。我们可以想象,如果IP层以上... 查看详情

tcp/ip协议图--传输层中的tcp和udp

...外还具备“流控制(流量控制)”、“拥塞控制”、提高网络利用率等众多功能。UDP是不具有可靠性的数据报协议。细微的 查看详情