IP-ECN简介

article/2025/9/14 4:33:52

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,不允许非对称处理。


http://chatgpt.dhexx.cn/article/1NeyZ2BW.shtml

相关文章

如何更改IP地址使用代理ip软件

如果您想更改家用计算机上的 IP 地址,有几种方法可能适合您——有些简单,有些则不然。在尝试下面描述的更复杂/技术方法之前,您可以尝试一些非常简单的方法。   只需关闭或拔下调制解调器约五分钟。(您不必关闭计算机。)在许多情况下&…

网络基础 ------- UDP、TCP及IP协议详解

目录 UDP协议 1.UDP报文结构 报文长度 校验和 TCP协议 1.TCP报文结构 2.TCP的可靠传输机制 1.确认应答 2.超时重传 3.连接管理 4.滑动窗口 5.流量控制 6.拥塞控制 7.延时应答 8.捎带应答 9.粘包问题 10.TCP异常处理 小结 TCP VS UDP IP协议 1. ip报头结构 …

手把手教你android手机怎么修改自己的ip地址方法

第一步:网上搜索软件名称深度IP转换器 下载正版软件并注册账号密码登录 第二步:打开软件连接国内任何城市IP根据自己需要连接自己需要的IP 第三步:连接成功无限其他任何设置,IP就变成那个城市了、 4.此时我们打开百度查下IP看看是…

VMware设置静态IP

系统版本:Centos7 VMware刚安装完Centos7的镜像需要设置成静态IP,防止宿主机在切换公司网和手机网时虚拟机IP变动,特此记录 网络连接模式设置为自定义 VMnet8 虚拟网络编辑器设置 修改网络配置 执行 /etc/sysconfig/network-scripts/ifcfg-ens33 修改配置信息 IPADDR就是要…

android绑定两个ip,安卓手机模拟器如何多开切换IP防封号的最新方法介绍

原标题:安卓手机模拟器如何多开切换IP防封号的最新方法介绍 很多手游玩家、工作室和网吧用户想在电脑上登手机游戏,其实在电脑上装一个手机模拟器就可以了, 而且可以改不同的IP地址,实现游戏无限多开,今天小编就来为大…

ip地址切换器如何切换电脑或者手机上网ip使用教程

简述:ET代理是一款高效率的换ip软件,IP覆盖国内200多个城市,每天更新60多万动态IP,静态ip高达1400多条,支持动态线路和静态线路使用,软件无需设置千万ip任意切换。软件支持电脑,安卓手机,苹果手机等设备使用,支持l2tp/pptp连接。 ET代理换IP软件如何使用 一、下载ET…

基于javaweb的音乐网站

Springboot springmvc mybatis 数据库mysql 开发工具不限 前台 html css js 实现了注册、登陆、权限校验、上传歌曲、下载歌曲、播放歌曲、删除歌曲、个人歌单、后台:用户管理 mv上传/播放 歌曲新增、删除 点赞、踩、评论功能 .

6个免费音乐网站,随便听随便下,都是好干货

我们在闲暇时光,都可能会选几首自己爱听的歌曲来放松一下自己的身心,散步的时候听听歌,无聊的时候听听歌,做事情的时候听听歌。可是我们想要听优质歌曲的地方少之又少,很多优质的歌曲都是要花钱的,今天给大…

springboot+vue音乐网站实战项目

文章目录 前言一.成果展示二. 后端流程2.1数据库表设计2.2. 后端搭建2.2.1 mybatis-plus逆向工程生成代码简化开发2.2.2 配置数据,跨域和静态资源放行2.3. 流水线式开发模式 三.前端vue搭建3.1 前端基本环境搭建3.1.1 脚手架搭建和容易出现的错误3.1.2 axios与后端交互搭建 3.2…

基于Java的在线音乐网站的设计_基于javaweb的音乐网站的设计与实现论文.doc

基于javaweb的音乐网站的设计与实现论文.doc 本科毕业论文(设计)题目基于JSP的音乐网站的设计与实现姓名学号专业院系指导老师职称学位讲师/硕士完成时间2015年5月教务处制安徽新华学院本科毕业论文(设计)独创承诺书本人按照毕业论文(设计)进度计划积极开展实验(调…

ThinkMusic源码搭建音乐网站,并实现公网访问

1、前言 在我们的日常生活中,音乐已经成为不可或缺的要素之一,听几首喜欢的音乐,能让原本糟糕的心情变得好起来。虽然现在使用电脑或移动电子设备听歌都很方便,但难免受到诸多会员或VIP限制,难免让我们回想起音乐网站…

Python爬虫下载QQ音乐网站歌曲

Python爬虫下载QQ音乐网站歌曲 1.分析QQ音乐网站数据请求url 在QQ音乐搜索歌曲页面,通过浏览器调试工具,监测到向服务器发出的请求,获取到的json数据中list正好保存了对应于单页搜索结果的数据。查看请求header,得到url https:/…

计算机毕业设计 SSM在线音乐网站设计与实现(源码+论文)

文章目录 1 前言2 实现效果3 设计方案4 最后 1 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的java web缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的java web管理系统达不…

自媒体人必看,这些无版权背景音乐网站,免费下载

近年来,自媒体行业发展迅速,但随之而来的问题也越来越多,尤其是侵权问题,动辄几万、几十万的赔偿金额,稍不注意,可能就侵权了。 这其中包含了图片、音乐版权等各种问题,之前小易和你们分享过很…

新版音乐网站系统源码Sourcecode

正文: 搭建教程: 1.上传源码,解压到根目录,php版本建议最好是7.0或以上版本2绑定域名3直接点击域名打开即可 程序: wwgth.lanzout.com/iCLNb093uzdg 图片:

python实现千千音乐mp3下载

文章来源:https://www.bobobk.com/216.html 进入千千音乐主页面,选择周杰伦的音乐告白气球,发现竟然是2016年的音乐试听都木有,悲伤。那么有没有办法可以获取到mp3文件呢?答案是肯定的。音乐下载可运行程序可在文末获…

一个简单的音乐网站项目

最近闲来无事,就用IDEA编写了一个简单的音乐网站,此网站具有音乐的试听,下载,收藏功能,并且点击收藏时,可以根据用户收藏的音乐信息,进行判定,推荐相类似的歌曲,而且&…

【免费】如何轻松的从音乐网站下载自己喜欢的mp3音乐?

如何轻松的从音乐网站下载自己喜欢的mp3音乐? 一般人我不告诉他,哈哈 首先,拿一个不知名的音乐网站开刀——九酷音乐(http://www.9ku.com/)。 打开官网首页: 找一首自己喜欢的音乐,比如少年&…

从虾米音乐缓存中下载音乐

浏览器:谷歌 听歌网站:虾米音乐 搜索自己想听的歌,点进去,先不开始听 右键打开检查---->NETWORK 搜索mp3文件,此时没有MP3文件 开始播放音乐,出现一条路径,复制该路径,用浏览器…

JYmusic音乐网站管理系统源码

介绍: JYmusic是一款开源的跨平台音乐管理系统,基于php框架tninkphp开发,稳定、易于扩展、超强大负载能力,完全可以满足音乐、DJ、音乐分享、原创音乐、音乐资讯站等使用。 环境要求: php 版本必须 5.4 或更高 ,MySQ…