Кіріспе
Желідегі тығындарды хабарлау үшін Интернет-протоколының кеңейтілуі (Explicit Congestion Notification (ECN) – Интернет-протоколы мен Трансмиссиялық бақылау протоколының кеңейтілуі, RFC 3168 (2001) стандартында анықталған. ECN пакеттерді тастамай-ақ, желідегі тығын туралы бастапқыдан соңғы нүктеге хабарлауға мүмкіндік береді. ECN – бұл екі ECN қолдауын қосатын түйін арасында қолданылатын, ал негізгі желілік инфрақұрылым да оны қолдайтын қосымша мүмкіндік. Көбінесе TCP/IP желілері тығын пакеттерді тастау арқылы көрсетеді. ECN сәтті келісілген жағдайда, ECN-ді қолдайтын маршрутизатор пакетті тастаудың орнына, IP қаптамасында белгі қойып, тығынның алда тұрғанын хабарлайды. Пакетті алған түйін тығын туралы хабарламаны жіберушіге қайтарады, ол өз тарапынан деректерді жіберу жылдамдығын азайтады, пакет жоғалғандай әрекет етеді. Кейбір ескі немесе істен шыққан желілік құрылғылар бұрынғыда ECN белгісі бар пакеттерді дұрыс қабылдамай немесе бұзып жіберген. 2015 жылғы мәліметтерге сәйкес, ECN-ді қосу желілік қосылымдарды бұзуға әкелетін жалпы Интернеттегі веб-серверлердің үлесі 1%-дан азын құрады. Пассивті қолдау Ubuntu Linux жүйесінде 12.04 нұсқасынан бері, ал Windows Server жүйесінде 2012 нұсқасынан бері қолжетімді. Ең танымал веб-сайттардың пассивті қолдауы 2012 жылы 8,5% болса, 2017 жылдың мамыр айында 70% асты.
Explicit Congestion Notification (ECN) is an extension to the Internet Protocol and to the Transmission Control Protocol and is defined in RFC 3168 (2001). ECN allows end to end notification of network congestion without dropping packets. ECN is an optional feature that may be used between two ECN enabled endpoints when the underlying network infrastructure also supports it. Conventionally, TCP/IP networks signal congestion by dropping packets. When ECN is successfully negotiated, an ECN aware router may set a mark in the IP header instead of dropping a packet in order to signal impending congestion. The receiver of the packet echoes the congestion indication to the sender, which reduces its transmission rate as if it detected a dropped packet. Rather than responding properly or ignoring the bits, some outdated or faulty network equipment has historically dropped or mangled packets that have ECN bits set. as of 2015, measurements suggested that the fraction of web servers on the public Internet for which setting ECN prevents network connections had been reduced to less than 1%. Passive support has existed in Ubuntu Linux since 12.04 and in Windows Server since 2012. Passive support in the most popular websites has increased from 8.5% in 2012 to over 70% in May 2017.
ECN-нің TCP-мен жұмыс істеуі
TCP ECN-ді қолдау үшін TCP қабылдағыштарында екі жалауша қолданылады. Біріншісі – ECN Echo (ECE), ол тығырыл индикациясын қайтару үшін (яғни, жіберушіге беру жылдамдығын азайту туралы сигнал беру үшін) қолданылады. Екіншісі – Congestion Window Reduced (CWR), тығырыл индикациясының эхосы алынғанын растау үшін. TCP қосылысында ECN-ді пайдалану міндетті емес; ECN-ді пайдалану үшін, оны SYN және SYN ACK сегменттерінде тиісті опцияларды қосу арқылы қосылыс орнатылғанда келісу керек. ECN TCP қосылысында келісілген кезде, жіберуші осы қосылыстың TCP сегменттерін тасымалдайтын IP пакеттері ECN мүмкіндігі бар транспорттан трафик тасымалдайтынын ECT кодтық нүктесімен белгілеп көрсетеді. Бұл ECN-ді қолдайтын аралық маршрутизаторларға, оларды тастаудың орнына CE кодтық нүктесімен белгілеуге мүмкіндік береді, осылайша тығырыл жақындап келе жатқанын сигналдайды. Congestion Experienced кодтық нүктесі бар IP пакетін алғаннан кейін, TCP қабылдағышы TCP қабылдағыштарындағы ECE жалаушасын пайдаланып, осы тығырыл индикациясын қайтарады. Аяқ нүктесі ECE биті бар TCP сегментін алғанда, ол пакеттерді түсіргендей тығырыл терезесін азайтады. Содан кейін ол CWR биті орнатылған сегментті жіберу арқылы тығырыл индикациясын растайды. Торап CWR биті бар сегмент алғанға дейін ECE битімен TCP сегменттерін жіберіп отырады. tcpdump арқылы әсер еткен пакеттерді көру үшін (tcp[13] & 0xc0 != 0) сүзгі предикатын қолданыңыз.
ECN және TCP басқару пакеттері
Трансмиссияны басқару протоколы (TCP) басқару пакеттерінде (таза ACK, SYN, FIN сегменттері) қанағаттандыруды басқаруды жүзеге асырмайды, сондықтан басқару пакеттері көбінесе ECN мүмкіндігі бар деп белгіленбейді. 2009 жылғы ұсыныс SYN ACK пакеттерін ECN мүмкіндігі бар деп белгілеуді ұсынады. ECN+ деп аталатын бұл жақсарту қысқа өмір сүретін TCP қосылымдарының өнімділігін күрт жақсартатыны көрсетілді.
ECN-нің басқа да тасымалдау протоколдарымен жұмыс істеуі
ECN тығындарды басқаруды жүзеге асыратын басқа да тасымалдау қабаты протоколдары үшін де анықталған, атап айтқанда DCCP және Stream Control Transmission Protocol (SCTP). Жалпы қағидасы TCP-ге ұқсас, бірақ желідегі кодтау ерекшеліктерімен өзгеше. UDP-ден жоғары орналасқан протоколдармен ECN-ді қолдану мүмкін. Дегенмен, UDP тығындарды басқаруды қолданба арқылы жүзеге асыруды талап етеді, ал DNS сияқты UDP-ге негізделген ертерек протоколдар ECN-ді пайдаланбаған. Жақында пайда болған UDP-ге негізделген QUIC сияқты протоколдар тығындарды басқару үшін ECN-ді қолданып келеді.
Орындауға әсері
ECN тек белсенді кезекті басқару (AQM) саясатымен бірге тиімді болғандықтан, ECN-нің артықшылықтары қолданылатын нақты AQM-ға байланысты. Дегенмен, әртүрлі AQM-дарда тұрақты болатын бірнеше байқаулар бар. Күтілгендей, ECN TCP қосылысы арқылы жойылған пакеттер санын азайтады, бұл қайта жіберуді болдырмай, кідіріс уақытын және әсіресе джиттерді азайтады. Бұл әсер ең күштісі TCP қосылысында бір ғана күтіліп тұрған сегмент болғанда байқалады, ол RTO тайм-аутын болдырмауға мүмкіндік береді; мұндай жағдай көбінесе қашықтан кірулер сияқты интерактивті қосылымдарда, сондай-ақ HTTP сұраныстары, SMTP әңгімелесу фазасы немесе SQL сұраныстары сияқты транзакциялық протоколдарда кездеседі. ECN-нің үлкен көлемдегі деректерді жіберуге (throughput) әсері осы уақытқа дейін толыққанды түсініксіз, себебі қазіргі TCP жүзеге асырулары жіберушінің терезесі үлкен болған кезде жойылған сегменттерді уақтылы түрде қайта жіберуде жақсы жетістіктерге қол жеткізген. ECN-ді пайдалану, ешқашан пакеттерді тастамайтын AQM алгоритмдерін қолданғанда, тығыз желілерде өнімділікке кері әсер ететіндігі анықталды. Windows Server 2012 нұсқасынан бастап, ол Windows Server нұсқаларында әдепкі бойынша қосылған, себебі Data Center Transmission Control Protocol (DCTCP) қолданылады. Алдыңғы Windows нұсқаларында және серверлік емес нұсқаларында әдепкі бойынша өшірілген. ECN қолдауын, мысалы, терминал командасын пайдалану арқылы қосуға болады.
БСҚ
FreeBSD-де TCP үшін ECN жүйелік параметрлер (sysctl) арқылы конфигурациялануы мүмкін. Дәстүрлі түрде, ол тек оны сұраған кіріс байланыстар үшін қосулы болады. Оны барлық байланыстар үшін де қосуға немесе толығымен өшіруге де болады. NetBSD 4.0 TCP үшін ECN қолдауын жүзеге асырады; оны жүйелік параметрлер (sysctl) интерфейсі арқылы параметрге 1 мәнін беріп іске қосуға болады. Сол сияқты, OpenBSD-де де жүйелік параметрлер (sysctl) қолданылуы мүмкін.
Mac OS X жүйесі
Mac OS X 10.5 және 10.6 жүйелері TCP үшін ECN қолдауын іске асырады. Ол `sysctl` жүйелік айнымалылары арқылы басқарылады және бірінші айнымалы ECN белгілері бар кіріс байланыстарында ECN-ді қосады; екіншісі ECN қосылған шығыс байланыстарын құруға тырысады. Екі айнымалы да әдепкі бойынша 0-ге тең, бірақ тиісті әрекетті қосу үшін 1-ге орнатуға болады. 2015 жылдың маусым айында Apple Inc. OS X 10.11 жүйесінде ECN әдепкі бойынша қосылатынын хабарлады.
iOS жүйесі
2015 жылдың маусым айында Apple Inc. компаниясы iOS 9, iOS-тың келесі нұсқасы ECN-ді қолдайтынын және оны әдепкі бойынша қосылатынын хабарлады. Ал iOS 11 үшін – 100%.
IP-де ECN-ді маршрутизаторлар қолдауы
Маршрутизаторлардағы ECN белгіленуі белсенді кезек басқарудың қандай да бір түріне байланысты болғандықтан, маршрутизаторлар ECN белгіленуін жүзеге асыру үшін тиісті кезек тәртібімен конфигурациялануы керек. Cisco IOS маршрутизаторлары 12.2(8)T нұсқасынан бастап WRED кезек тәртібімен конфигурацияланған жағдайда ECN белгілейді. Linux маршрутизаторлары RED немесе GRED кезек тәртібінің бірімен, sfb тәртібімен, CoDel әділ кезекке қою (fq codel) тәртібімен немесе CAKE кезек тәртібімен конфигурацияланған жағдайда ECN белгілейді. Қазіргі заманғы BSD жүйелері, мысалы FreeBSD, NetBSD және OpenBSD, ALTQ кезек жүйесіндегі бірқатар кезек тәртіптері үшін, әсіресе RED және Blue үшін ECN белгіленуін қолдайды. FreeBSD 11 ipfw/dummynet құрылымында ECN белгілену мүмкіндігімен CoDel, PIE, FQ CoDel және FQ PIE кезек тәртіптерін енгізді.
Linux routers perform ECN marking if configured with one of the RED or GRED queue disciplines with an explicit ecn parameter, by using the sfb discipline, by using the CoDel Fair Queuing (fq codel) discipline, or the CAKE queuing discipline. Modern BSD implementations, such as FreeBSD, NetBSD and OpenBSD, have support for ECN marking in the ALTQ queueing implementation for a number of queuing disciplines, notably RED and Blue. FreeBSD 11 included CoDel, PIE, FQ CoDel and FQ PIE queuing disciplines implementation in ipfw/dummynet framework with ECN marking capability.
TCP деректер орталығы
Деректер орталығының беруді басқару протоколы (ДТБП немесе DCTCP) беруді басқару протоколының қанағаттандыруды басқару алгоритмін жақсарту үшін ECN-ді пайдаланады. Ол деректер орталығы желілерінде қолданылады. Стандартты TCP қанағаттандыруды басқару алгоритмі қанағаттандырудың бар-жоғын ғана анықтай алады, ал DCTCP ECN-ді пайдалана отырып, қанағаттандырудың дәрежесін бағалай алады. DCTCP TCP қабылдағышын кіріс пакеттердің нақты ECN белгілеуін әрқашан қайта жіберуге өзгертеді, бұл сигнал берудің сенімділігін сақтауға арналған функцияны елемеумен байланысты. Бұл DCTCP жіберушісін қабылдаушыдан ACK-тердің жоғалуына осал етеді, оны анықтау немесе онымен күресуге арналған механизмі жоқ. 2014 жылдан бастап, қабылдағыштан тең немесе жақсы кері байланыс беретін алгоритмдер сенімді тәсілмен белсенді зерттеу нысаны болып табылады.