IP-ECN简介

IP-ECN简介

该文部分转载,部分自我翻译rfc3168标准。

一、背景

当中间路由器队列过载导致丢包后,所有主机的TCP连接并不立即感知到,而是在定时器超时之后,由于没有收到ACK,开始重传报文。而这个定时器的时间相对较长,通常从几秒到几十秒不等。报文丢弃导致多路TCP开始降低发送速率,甚至在一个窗口发送完毕之后,TCP的重传定时器没有超时之前,整个发送过程会偶尔停滞。在所有TCP降低性能之后,路由器的转发队列拥塞得到缓解,不再丢弃报文,所有TCP又会同时提高发送速率,到达一定程度之后,路由器又开始丢弃报文,并重复刚才TCP的重传过程。该现象的问题有:

1、丢包导致TCP重传,该重传定时器的时间较长,对时延敏感的应用来说,影响用户感受。

2、丢包之后,TCP根据RFC793规定的要求,所有TCP开始进行退避,下调发送性能,拥塞得到缓解,但此时的网络利用率无法达到最优。

3、在拥塞缓解之后,TCP为了获得发送的最优性能,又继续扩大发送窗口,直到发现丢包,重复上述问题过程。

二、现有TCP的拥塞控制

1、慢启动,TCP为了探测网络实际性能,也为了避免一开始就发送过多数据,使用的一种发送算法。即一开始尽发送一个MSS报文段,随着ACK的不停回复,TCP发送端开始放大发送能力,该算法的放大时按照指数方式,当达到一定的速率时切换成线性增长方式。

2、快速重传,TCP在收到重复的3次ACK时,会认为重传队列中的第一个报文段被网络丢弃,但由于收到的重复的3次ACK,则认为该报文段之后的三个报文已经被接收端收到,则不等待重传定时器超时,直接重发重传队列中的第一个报文段。

3、快速恢复,当TCP收到3次重复的ACK时,将拥塞窗口减半,并在后续再收到重复的ACK时线性增加窗口,以保证发送报文的性能。在收到新的非重复ACK后,TCP连接恢复到慢启动状态发送报文。

三、路由器拥塞控制队列

在网络中的路由器的转发队列通常实现了Random Early Detection(RED)功能,即,路由器会根据当前转发队列的平均长度来做丢包决策,并且随机的丢弃一些TCP流量的报文,而不是等待队列溢出后丢弃全部的报文,这样能够很好的避免所有TCP同时超时的问题。由于按照队列的平均长度来进行丢包,而不是队列满长,所以会引起一部分TCP的退避,让一部分TCP先放缓,保证另一些TCP的通常。再次,使用的随机丢弃,所以针对所有TCP连接来说是相对公平的。

四、ECN设计原理

在RFC3168中定义了ECN的设计目标,是通过TCP发送端和接收端以及中间路由器的配合,感知中间路径的拥塞,并主动的减缓TCP的发送速率,从而从早期避免拥塞而导致的丢包,实现网络性能的最大利用。能够解决的问题如下:

1、所有TCP发送端能够早期感知中间路径拥塞,并主动放缓发送速率,预防拥塞发生。

2、在中间路由器上转发的队列上,对于超过平均队列长度的TCP报文进行ECN标记,并继续进行转发,不再丢弃报文。避免了报文的丢弃和TCP的重传。

3、由于减少了丢包,TCP不需要经过几秒货几十秒的重传定时器出发报文重传,提高了时延敏感应用的用户感受。

4、与没有部署ECN功能的网络相比,网络的利用率更好,不再在过载和轻载之前来回震荡。

ECN字段是IP头部TOS字节中后2bit,与DSCP的6bit合用一个字节。
在这里插入图片描述

00代表该报文并不支持ECN,所以路由器的将该报文按照原始非ECN报文处理即可,即,过载丢包。01和10这两个值针对路由器来说是一样的,都表明该报文支持ECN功能,如果发生拥塞,则ECN字段的这两个将修改为11来表示报文经过了拥塞,并继续被路由器转发。

一般推荐使用ECT(0)“10”。

路由器转发侧要支持ECN,需要有以下新增功能:

1、当拥塞发生时,针对ECN=00的报文,走原有普通非ECN流程,即,进行RED丢包。

2、当拥塞发生时,针对ECN=01或ECN=10的报文,都需要修改为ECN=11,并继续转发流程。

3、当拥塞发生时,针对ECN=11的报文,需要继续转发。

4、为了保证与不支持ECN报文的公平性,在队列超过一定长度时,需要考虑对支持ECN报文的丢弃。

RFC3168中明确指出,只有在早期检测(RED,WRED)功能检测到需要丢弃报文,但此时队列还未满时,才可以对报文设置CE标记并转发。如果是队列已经满了,此时就要丢包,不能转发。像其他一些用户设置报文必须丢弃的场景不能设置CE并转发,要按照用户配置执行丢弃。

五、TCP对ECN的支持

TCP首部的修改,增加CWR和ECE两个flag位。
在这里插入图片描述

CWR: Congestion Window Reduce
ECE: ECN-Echo
The new definition of bytes 13 and 14 of the TCPHeader.

针对主机侧的修改,首部将bit8和bit9的res字段修改为CWR和ECE。

TCP连接建立及数据传输涉及到的步骤:

1、 会话建立时,要协商ECN支持情况,host A发送一个ECE和CWR置位的SYN包,host B应答一个ECE置位的SYN-ACK包,这样协商表示双方支持ECN,其他情况不允许发送一个ECE置位的SYN-ACK包。

2、 连接建立后,后续发送数据报文要将IP头中ECN置位为ECT。

3、 后续传输中若中间链路预测到拥塞,则会对上述数据报文IP头中置位CE;

4、 在TCP接收端收到IP头中的CE(ECN=11)标记的报文,在回复ACK时将TCP的ECE bit置1。并在后续所有报文一直将ECE bit置1,不论收包是否ECN=11。

5、 在TCP发送端收到ECE bit置1的ACK报文时,缩小发送窗口,并且在本次RTT时间内将不再再次缩小发送窗口,将自己的发送速率减半,并在发送下一个报文时,将CWR bit置1。

6、 在TCP接收端收到CWR bit置1的报文时,后续报文的ECE bit将不再置1。直到再次收到IP首部ECN=11时,重复上述过程。

RFC3168规定的一些细节如下:

1、 TCP接收端向发送端回应ACK时,如果该ACK是一个不带数据的“纯”ACK,那么必须IP首部ECN=00,因为TCP没有机制对纯ACK进行响应,就无法针对纯ACK发送拥塞通知。

2、 只有TCP连接发送(或接收)过至少一个ECE置位的SYN包,收到(或发送)过ECE置位的SYN-ACK,并且没有发送过非ECE置位的SYN和SYN-ACK。简而言之,TCP必须协商成功双方支持ECN之后,才可以在发送数据包时将IP头中ECN置位为ECT。

3、 如果TCP连接一端发送了ECT包,该主机需要正确清除或设置该TCP连接中后续报文的CWR标记。

4、 即便一开始ECN协商没有成功,后续有收到CE标记的TCP报文,也要正确按照支持ECN处理,发出ECE置位的ACK包。

5、 ECE和CWR完全置位的认为是ECE-setup SYN,ECE和CWR一个或者2个都不置位都是non-ECE-setup SYN。只有ECE置位,CWR不置位才是ECE-setup SYN-ACK,其他ECE/CWR组合都认为是non-ECE-setup SYN-ACK,都需要正确处理;

6、 SYN和SYN-ACK报文中不允许设置IP头中ECT位;

7、 一旦连接进入TIMEW-WAIT或CLOSED状态,ECN协商结果不可继承,必须重新协商。

8、 如果主机发送ECN-setup SYN包后,收到了RST,或者在SYN重传定制器超时后重新发送。后续要重新发送一个普通ECE/CWR都不置位的SYN包,进行非ECN连接。

9、 TCP重传报文不允许设置ECT(0)或ECT(1),防止DOS攻击。

10、收包窗口之外的报文应该忽略ECN位的处理,防止DOS攻击。

11、 TCP窗口探测报文不允许设置IP头ECT位或TCP CWR标记,窗口探测报文如果被置CE,接收端要按照ECN标准正确处理。

12、窗口内只处理一次ECE报文,或者一个round-trip-time RTT周期内处理一次ECE。

13、如果TCP支持ECN,TCP发送端口不论什么原因导致的窗口减小,都要在窗口减小后发送的第一个包中将CWR置位,如果此CWR置位的包被丢弃(对应重传定时器超时),发送端需要再次减小窗口并发送一个新的CWR置位的包,CWR置位的包不能是重传的包。

14、针对主机侧TCP仅有一端支持ECN功能时,支持ECN的TCP端需要先尝试进行ECN的协商,如果连接不成功,必须进行非ECN功能的TCP连接协商,以保证TCP的向后兼容性。

15、TCP接收端在收到IP头的ECN=11时,但TCP序号不正确的报文,回应ACK时,不应该将ECE bit置位,以避免DOS攻击。

六、ECN在各种隧道中的支持

针对IPTunnel[RFC2003],RFC3168明确规定了报文到达隧道ingress和egress时ECN字段的复制要求,详细信息参考RFC3168。

针对IP Sec[RFC2401],RFC3168中明确定义了需要在IPSec的安全关联数据库(SAD)和安全关联属性(SAA)中增加类型和字段来支持ECN在IPSec隧道下的协商。详细信息请参考RFC3168,这里不再赘述。

针对MPLS, GRE, L2TP,PPTP等隧道支持ECN的规范没有在RFC3168中明确说明,但RFC3168提到使这些隧道支持ECN并非难事。

有几点要求:

1、 针对IP Tunnel和IPSec隧道,设置两种模式开关,即支持ECN和不支持ECN,在不支持ECN情况下,ECN报文通过隧道将按照原始不支持ECN的行为进行转发和丢弃。

2、在隧道的ingress和egress必须同时支持ECN或同时不支持ECN,不允许非对称处理。

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值