目录
拥塞控制原理
拥塞:
- 非正式的定义:“太多的数据需要网络传输,超过了网络的处理能力”
- 与流量控制不同【流量控制是我到你的问题,拥塞控制是网络的问题】
- 拥塞的表现:
- 分组丢失(路由器缓冲区溢出)
- 分组经历比较长的延迟(在路由器的队列中排队)
- 网络中前10位的问题
拥塞的原因/代价:场景1
- 2个发送端,2个接收端
- 一个路由器,具备无限大的缓冲
- 输出链路带宽:R
- 没有重传
拥塞的原因/代价:场景2
- 一个路由器,有限的缓冲
理想化,发送端有完美的信息
理想化:掌握丢失信息
分组可以丢失,在路由器由于缓存区满而被丢弃
- 如果发送端知道分组丢失了,发送方重传分组
现实情况:重复
- 分组可能丢失,由于缓存器满而被丢弃
- 发送端最终超时,发送第2个拷贝,2个分组都被传出
输出比输入少原因:
- 重传的丢失分组
- 没有必要重传的重复分组
拥塞的“代价”:
- 为了达到一个有效输出,网络需要做更多的工作(重传)
- 没有必要的重传,链路中包括了多个分组的拷贝
- 是那些没有丢失,经历的时间比较长(拥塞状态)但是超时的分组
- 降低了的“goodput”
拥塞的原因/代价:场景3
【A向C传,C向A传;BD也是互传。当网络拥塞的时候,上面的路由器如果有空闲的空间,这个空闲的空间将被红色的流量抢走,红色流量经过一段之后到了第二个路由器,即右边的路由器,右边的路由器一旦有空闲的缓冲区,将会被绿色的流量抢走。所以从宏观的角度来看,大家不停的往网络当中注入,但是网络当中没有输出的流量,这时候就发生了网络拥塞的极致,整个网络出现了死锁的情况】
【在拥塞的时候,分组已经穿过了一段或者若干段路由器,然后被抛弃掉,这样就是十分可惜的事】
又一个拥塞的代价:
- 当分组丢失时,任何“关于这个分组的上游传输能力”都被浪费了【在网络非常拥塞的时候被浪费了】
拥塞控制方法
2种常用的拥塞控制方法:
端到端拥塞控制:
【网络不提供关于网络是否拥塞的明显的信息,端系统要靠自身的判断来判断是否发生拥塞,如果发生了,要降低他的发送速率或者不增加他的发送速率,如果没有发生拥塞,网络处再一个比较轻载的状态,再尝试着增加他的发送速率】
- 没有来自网络的显式反馈
- 端系统根据延迟和丢失事件推断是否有拥塞
- TCP采用的方法【有哪些指针预示着发生了拥塞,发生一些段,有些段超时了,意味着发生了拥塞,另外一个就是,我收到了某些端的三个冗余ACK,这时候网络已经发生了轻微的拥塞,这时候我就不要增加发送速率,甚至降低发送速率。】
网络辅助的拥塞控制:
【网络核心提供有没有发生拥塞以及拥塞发生程度等的一些信息给端系统,端系统通过反馈的信息来决定是否发生拥塞,没有发生拥塞增加他的发送速率,已经发生拥塞不再增加或者降低发送速率】
- 路由器提供给端系统以反馈信息
- 单个bit置位,显示有拥塞(SNA,DECbit,TCP/IP ECN,ATM)
- 显式提供发送端可以采用的速率
【拥塞控制的主要目的不是不发生拥塞,而是说在不发生拥塞的情况下尽可能地增加他的发送速率。是两个矛盾的目标,一个是尽可能增加他的发送速率,第二个让网络尽可能不拥塞】
案例学习:ATM ABR拥塞控制
【ATM:异步传输网络,以前是互联网承载的一个网络。他的数据交换的单位叫信元,信元可以认为是一个小的分组,只有53个字节,5个字节的头部,48字节的载荷部分,分组非常小,而且是固定长度。所以在每个交换节点当中存储转发时间非常小,而且时间是可以控制的,可以预期的。(信元在每个交换节点当中只耽误53个字节的存储时间,比线路交换(1比特)来的大,比分组交换(大的分组可能1000+字节)来的小)】
【ATM既具备线路交换的一些特性,也具备分组交换的一些特性,原来认为ATM网络是一个非常有希望的网络形式,但是由于其他的各种各样的原因,包括网络技术非常复杂,所以后来没有变成非常流行的网络,但是在一些专业的行业领域当中用的还是比较多的,包括银行系统】
ABR:available bit rate
- “弹性服务”
- 如果发送端的路径“轻载”
- 发送方使用可用带宽
- 如果发送方的路径拥塞了
- 发送方限制其发送的速度到一个最小保障速率上
RM(资源管理)信元:
- 由发送端发送,在数据信元中间隔插入
- RM信元中的比特被交换机设置(“网络辅助”)
- NI bit:no increase in rate(轻微拥塞)速率不要增加了
- CI bit:congestion indication 拥塞指示
- 发送端发送的RM信元被接收端返回,接收端不做任何改变
- 在RM信元中的2个字节ER(explicit rate)字段
- 拥塞的交换机可能会降低信元中的ER的值
- 发送端发送速度因此是最低的可支持速率
- 数据信元中的EFCI bit:被拥塞的交换机设置成1
- 如果在管理信元RM前面的数据信元EFCI被设置成了1,接收端在返回的RM信元中设置CI bit