概述
参考哈工大公开课。
拥塞的成因:
网络传输的是一个存储、转发的过程,两端由主机发送数据,中间是路由器或者交换机转发数据。那么中间的转发设备就需要把这些数据缓存起来,然后再进行转发。但是如果发送方发送数据过多、过快,但是转发设备的转发速率是有限的,那么就需要在转发设备那里排队,等待转发;而且转发设备的缓存空间有限,如果积累的数据过多,缓存满了,那么新来的数据就会因为数据无法被缓存而丢失。一旦数据丢失,就意味这之前的转发全部浪费,必须重发送方开始重发。
下面是一个因为拥塞丢包的例子:Host A通过红色的路线经过R1、R2发送给Host C,Host D 通过红色的路线经过R2、R3发送给Host B,如果在R2路由器发生了拥塞,导致Host A发送的数据包丢失了,那么Host A就必须重发并且R1的转发就浪费了。
图一:丢包重发实例
这个过程好比去买票,窗口是有限的,如果人太多,生意太好顾客就得排队;如果店面爆满,那就先把门关了,把店面暂时关了,先服务店面内的顾客。那么新来的顾客进不了店,白来一次,只有回家,等会再来。注意:顾客不能在门外等着,因为这是类比网络,顾客在门外等着就需要其他的缓存空间,这个在网络上是没有的,只能重来。
数据发送过多、过快导致延迟 -> 顾客来的过多、过快导致排队
转发设备缓存不足,数据包丢失 -> 店面爆满暂时关门,新顾客走了
拥塞在应用层的表现和解决方法:
表现也就是应用层如何判断网络拥塞,主要是两点:1、延迟增加;2、丢包率增加。
解决方法就是发送方减缓发送数据的速率。
拥塞控制的方法:
拥塞控制的方法主要有两种:1、网络辅助的拥塞控制(ATM);2、端到端拥塞控制(TCP)。
1、 网络辅助的拥塞控制(以ATM为例):就是路由器向发送方显示地反馈网络拥塞信息。 实现方式也很简单:就是在需要发生数据中加入记录各个路由器拥塞状态的数据块RM cell,每个路由器在转发时把拥塞状况写到RM cell中,接收方再接收到数据把RM cell发回给发送方,发送方根据RM cell中的信息控制发送速率;这种方式有最低保障速率。
图二:ATM拥塞控制过程
2、 端到端拥塞控制(TCP):
TCP获得网络拥塞的方法与TCP重复发送的方法一致:1、timeout;2、收到3个重复的ACK。
注:这里引入一个CongWin用来记录一个RTT内只发送Segment的数量。
TCP合理调整发送速率的方法:A、加性增—乘性减:Admin;B、慢启动:SS;
1)、 TCP连接开始时,CongWin = 1;
2)、 由于刚开始发送得比较少,CongWin就采用指数增长的方式,即CongWin= 2* CongWin;
3)、 在此需要引入一个Threshold变量,用来记录CongWin指数增长的上限。
4)、 当CongWin增长到大于等于Threshold,就会采用比较谨慎的增长方式,每次+1。
5)、 当增长到一定程度,发生拥塞事件,发送方收到3个重复的ACK,就直接把发送速度减半,即CongWin = CongWin / 2,同时将Threshold设置为Threshold = CongWin。
6)、 在发生拥塞事件后,也可能发生超时事件,这时Threshold也会被设置为Threshold = CongWin/2,但是在设置完Threshold后CongWin会被设置为1。
超时和收到3个重复的ACK对Threshold的处理是一样的,对CongWin的处理却不同。原因是因为可以收到ACK说明网络还有一定的传输能力,而连ACK都收不到,说明网络拥塞严重,顾降速幅度较大。
图三:CongWin变化过程
最后
以上就是无聊黑裤为你收集整理的传输层-5、网络拥塞原因和TCP拥塞控制的全部内容,希望文章能够帮你解决传输层-5、网络拥塞原因和TCP拥塞控制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复