명시적 폭주 통지

Explicit Congestion Notification

Explicit Congestion Notification(ECN; 명시적 폭주 알림)은 인터넷 프로토콜Transmission Control Protocol에 대한 확장으로 RFC 3168(2001)에 정의되어 있습니다.ECN을 사용하면 패킷을 드롭하지 않고 네트워크 congestion를 엔드 투 엔드로 통지할 수 있습니다.ECN은 기반이 되는 네트워크인프라스트럭처에서도 지원되는 경우 2개의 ECN 대응 엔드포인트 간에 사용할 수 있는 옵션 기능입니다.

통상은, TCP/IP 네트워크는 패킷을 드롭 하는 것으로 congestion 신호를 보냅니다.ECN 네고시에이션에 성공하면, ECN 인식 라우터는, 임박한 congestion를 시그널링 하기 위해서 패킷을 드롭 하는 대신에, IP 헤더에 마크를 설정할 수 있습니다.패킷의 수신측은, congestion 표시를 송신측에 에코 합니다.이것에 의해, 드롭 된 패킷을 검출했을 때와 같이 전송 레이트가 저하됩니다.

일부 구식 또는 장애가 있는 네트워크 기기는 적절하게 응답하거나 비트를 무시하는 대신 ECN 비트가 [1][2][3]설정된 패킷을 폐기하거나 망가뜨렸습니다.2015년 현재 ECN 설정을 통해 네트워크 접속을 차단하는 공용 인터넷 웹 서버의 비율이 1% [4]미만으로 감소하는 것으로 나타났습니다.

패시브 지원은 Ubuntu Linux에서 12.04 이후,[5] Windows Server에서 2012년부터 제공되고 있습니다.가장 인기 있는 웹사이트의 수동적 지원은 2012년 8.5%에서 2017년 [5]5월 70% 이상으로 증가했습니다.인터넷을 통해 채택하려면 고객이 ECN을 적극적으로 요청해야 합니다.2015년 6월, Apple은 ECN 시그널링의 업계 [6]전체에의 도입을 촉진하기 위해서, 서포트 대상 제품 및 장래의 제품에서 ECN을 디폴트로 유효하게 할 것이라고 발표했습니다.

작동

ECN은 다음과 같은 이유로 인터넷레이어와 트랜스포트레이어 모두에서 특정 지원이 필요합니다.

  • TCP/IP 에서는, 라우터는 인터넷층내에서 동작하는 한편, 전송 레이트는 트랜스포트층의 엔드 포인트에 의해서 처리됩니다.
  • congestion는 송신기에 의해서만 처리할 수 있습니다만, 이것은 패킷이 송신된 후에만 발생하는 것으로 알려져 있기 때문에, 송신기에 대한 수신기의 congestion 지시 에코가 존재해야 합니다.

ECN이 없는 경우, congestion 표시 에코가 손실 패킷의 검출에 의해서 간접적으로 실현됩니다.ECN 에서는, IP 패킷내의 ECN 필드를 CE(Congestion Encountered)로 설정하는 것으로 congestion를 나타내, 트랜스포트 프로토콜의 헤더에 적절한 비트를 설정하는 것으로, 수신기에 의해서 송신기에 에코백 됩니다.예를 들어, TCP 를 사용하는 경우, congestion 표시는 ECE 비트를 설정하는 것으로 에코백 됩니다.

IP를 사용한ECN 동작

ECN은 IPv4 또는 IPv6 헤더의 Traffic Class 필드의 최하위2비트(오른쪽 가장 오른쪽)를 사용하여 4개의 다른 코드 포인트를 부호화합니다.

  • 00– ECN 비대응 트랜스포트, ECT 비대응 트랜스포트
  • 10– ECN 지원 트랜스포트, ECT(0)
  • 01– ECN 지원 운송, ECT(1)
  • 11– 폭주 발생, CE.

양쪽 엔드포인트가 ECN을 지원하는 경우 ECT(0) 또는 ECT(1)로 패킷을 마킹합니다.라우터는 ECT(0) 및 ECT(1) 코드 포인트를 동등하게 취급합니다.패킷이 congestion가 발생하고 있는Active Queue Management(AQM; 액티브큐 관리) 큐(Random Early Detection(RED;랜덤 조기검출)를 사용하는 큐)를 통과해, 대응하는 라우터가 ECN을 서포트하고 있는 경우는, 코드 포인트를 다음과 같이 변경할 수 있습니다.CE패킷을 드롭하는 대신.이 동작은 「마킹」이라고 불리며, 그 목적은, congestion가 임박한 것을 수신측 엔드 포인트에 통지하는 것입니다.수신측 엔드 포인트에서, 이 congestion 표시는 상위 레이어 프로토콜(트랜스포트 레이어 프로토콜)에 의해서 처리되어 송신 노드에 에코백 되어 송신 레이트를 저감 할 필요가 있다.

CE 표시는 이를 지원하는 상위 계층 프로토콜에 의해서만 효과적으로 처리되기 때문에 ECN은 congestion 제어를 지원하고 CE 표시를 전송 엔드포인트에 에코하는 방법을 가진 TCP 의 상위 계층 프로토콜과 함께만 사용됩니다.

TCP를 사용한ECN 동작

TCP는 TCP 헤더의 2개의 플래그를 사용하여 ECN을 지원합니다.첫 번째 ECN-Echo(ECE)는, congestion 인디케이터(즉, 송신 레이트를 낮추도록 송신자에게 시그널링)를 에코백 하기 위해서 사용됩니다.두 번째 Congestion Window Reduced(CWR; 폭주창 감소)는 폭주 표시 에코가 수신되었음을 확인합니다.TCP 접속에서의 ECN 사용은 옵션입니다.ECN을 사용하려면 SYN 및 SYN-ACK 세그먼트에 적절한 옵션을 포함하여 접속 확립 시 네고시에이트해야 합니다.

ECN이 TCP 접속으로 네고시에이트 되어 있는 경우, 송신측은, ECT 코드 포인트로 ECN Capable Transport 로부터의 트래픽을 전송 하고 있는 것을 나타냅니다.이것에 의해, ECN 를 서포트하는 중간 라우터는, 임박한 congestion의 시그널을 위해서, 이러한 IP 패킷을 드롭 하는 대신에, CE 코드 포인트로 마킹 할 수 있습니다.

congestion 익스피리언스 코드포인트를 가지는 IP 패킷을 수신하면, TCP 리시버는 TCP 헤더내의 ECE 플래그를 사용해 이 congestion 표시를 에코백 합니다.엔드 포인트는 ECE 비트를 포함한 TCP 세그먼트를 수신하면 패킷 드롭과 마찬가지로 congestion 창을 줄입니다.다음으로 CWR 비트가 설정된 세그먼트를 송신함으로써 congestion 표시에 응답합니다.

노드는 CWR 비트가 설정된 세그먼트를 수신할 때까지 ECE 비트가 설정된TCP 세그먼트를 계속 송신합니다.

tcpdump에서 영향을 받는 패킷을 표시하려면 필터 술어를 사용합니다.(tcp[13] & 0xc0 != 0).

ECN 및 TCP 제어 패킷

Transmission Control Protocol(TCP)은 제어 패킷(순수 ACK, SYN, FIN 세그먼트)에 대해 congestion 제어를 실행하지 않기 때문에, 통상은 제어 패킷은 ECN 대응으로 마크 되지 않습니다.

2009년[7] 제안에서는 SYN-ACK 패킷을 ECN 대응으로 마킹할 것을 권장합니다.ECN+라고 불리는 이 개선은 짧은 TCP [8]접속의 성능을 극적으로 향상시키는 것으로 나타났습니다.

다른 전송 프로토콜과의 ECN 운영

ECN은 congestion 제어를 실행하는 다른 트랜스포트층 프로토콜, 특히 DCCP Stream Control Transmission Protocol(SCTP)에도 정의되어 있습니다.일반적인 원리는 TCP와 비슷하지만, 온더와이어 인코딩의 자세한 내용은 다릅니다.

UDP 에 계층화된 프로토콜과 함께 ECN을 사용할 수 있습니다. 그러나 UDP는 애플리케이션에서 congestion 제어를 수행해야 하며 DNS와 같은 초기 UDP 기반 프로토콜은 ECN을 사용하지 않았습니다.QUIC와 같은 최근의 UDP 기반 프로토콜은 폭주 제어에 ECN을 사용하고 있습니다.

퍼포먼스에 미치는 영향

ECN은 Active Queue Management(AQM; 액티브큐 관리) 정책과의 조합만으로 유효하기 때문에 ECN의 이점은 사용되는 정확한 AQM에 따라 달라집니다.그러나 일부 관측치는 서로 다른 AQM에서 유지되는 것으로 보입니다.

예상대로 ECN은 TCP 접속에 의해 폐기되는 패킷의 수를 줄입니다.이를 통해 재발송신을 회피함으로써 지연, 특히 지터가 감소합니다.TCP 접속에 미결 세그먼트가 [9]1개 있는 경우, RTO 타임아웃을 회피할 수 있는 경우에 가장 큰 영향을 미칩니다.이것은, 리모트 로그인등의 인터랙티브 접속이나, HTTP 요구, SMTP 의 컨버세이션 단계, 또는 SQL 요구등의 트랜잭션·프로토콜의 경우에 해당합니다.

ECN이 벌크 스루풋에 미치는 영향은 명확하지[10] 않습니다.이것은, 현대의 TCP 실장에서는, 송신측의 윈도우가 클 때에 드롭 된 세그먼트를 적시에 재발송하는 것이 꽤 능숙하기 때문입니다.

ECN 의 사용은,[8] 패킷을 드롭 하지 않는 AQM 알고리즘을 사용하는 경우, 매우 congestion가 많은 네트워크에서의 퍼포먼스에 악영향을 주는 것이 판명되었습니다.현대의 AQM 실장에서는, 매우 높은 부하로 패킷을 마크 하는 대신에 드롭 하는 것으로, 이 문제를 회피합니다.

실장

TCP/IP 프로토콜 스위트의 많은 최신 구현에서는 ECN이 일부 지원되지만 일반적으로 ECN이 비활성화된 상태로 출고됩니다.

호스트에 의한 TCP에서의 ECN 지원

Microsoft Windows

Windows Server 2008 및 Windows Vista 이후의 Windows 버전은 ECN for [11]TCP를 지원합니다.윈도우즈 서버 2012 이후 윈도우즈 서버 버전에서는 데이터 센터 DCTCP(Transmission Control Protocol)가 [12]사용되므로 기본적으로 사용하도록 설정됩니다.이전 Windows 버전 및 비서버 버전에서는 기본적으로 비활성화되어 있습니다.

ECN 지원은 다음과 같은 셸 명령을 사용하여 활성화할 수 있습니다.netsh interface tcp set global ecncapability=enabled.

BSD

FreeBSD 에서는, ECN for TCP 를 설정할 수 있습니다. net.inet.secn.secysctl 입니다.디폴트에서는, 이것을 요구하는 착신 접속에 대해서만 유효하게 되어 있습니다.또, 모든 접속에 대해서 유효하게 하거나, 완전하게 [13]무효로 할 수도 있습니다.

NetBSD 4.0은 TCP의 ECN 지원을 실장하고 있습니다.이 지원은 sysctl 인터페이스를 통해 활성화 할 수 있습니다.sysctl net.inet.tcp.ecn.enable파라미터를 지정합니다.[14]

마찬가지로 sysctl net.inet.tcp.ecnOpenBSD에서 [15]사용할 수 있습니다.

리눅스

2002년 [16]11월에 출시된 Linux 커널 버전 2.4.20 이후 Linux에서는 파라미터 /proc/sys/net/ipv4/tcp_ecn을 다음 [17]값 중 하나로 설정하여 sysctl 인터페이스를 통해 설정된TCP용 ECN의 3가지 동작 모드가 지원됩니다.

  • 0 – ECN을 디세블로 하여 시작도 승인도 하지 않음
  • 1: 착신 접속이 요구되었을 때 ECN을 유효하게 하고, 발신 접속 시행 시에 ECN을 요구합니다.
  • 2: (디폴트) 착신 접속이 요구되었을 때 ECN을 이노블로 합니다만, 발신 접속에서는 ECN을 요구하지 않습니다.

2015년 6월에 출시된 Linux 커널 버전 4.1부터는 ECN이 네이블(값 1)일 때 RFC 3168 섹션 6.1.[18]1에 규정된 tcp_ecn_fallback 메커니즘이 디폴트로[19] 네이블이 됩니다.폴백 메커니즘은, 발신 접속의 초기 셋업시에 ECN 접속을 시도합니다.ECN 기능이 없는 전송을 위한 그레이스 풀백으로 ECN에 의존하지 않는 호스트 또는 방화벽에 관한 문제를 경감합니다.

Mac OS X

Mac OS X 10.5 및 10.6은 TCP에 대한 ECN 지원을 구현합니다.부울 sysctl 변수 net.inet.disc.ecn_negotiate_in 및 net.inet.secn_disc_out[20]사용하여 제어됩니다.첫 번째 변수는 ECN 플래그가 이미 설정되어 있는 착신 접속으로 ECN을 이노블로 하고, 두 번째 변수는 ECN이 네이블로 되어 있는 발신 접속을 개시하려고 합니다.두 변수 모두 기본값이 0이지만 각 동작을 활성화하기 위해 1로 설정할 수 있습니다.

2015년 6월, Apple Inc. OS X 10.11이 ECN을 [6]디폴트로 온으로 한다고 발표했지만, OS는 디폴트 동작 없이 출하되었습니다.macOS Sierra에서는 ECN은 TCP [21]세션의 절반에 대해 이니블로 되어 있습니다.

iOS

2015년 6월, 애플은 iOS의 차기 버전인 iOS 9가 ECN을 지원하며 [6]디폴트로 켜질 것이라고 발표했다.iOS 9에서는 Wi-Fi/Ethernet 경유로 랜덤으로 선택된 접속의 5%, Wi-Fi/Ethernet 경유로 랜덤으로 선택된 접속의 50%, iOS 10에서는[22][23][24] 일부 셀룰러 통신 사업자의 100%에 대해 TCP ECN 네고시에이션이 가능합니다.

솔라리스

Solaris 커널[25]TCP에 대해 다음 3가지 ECN 상태를 지원합니다.

  • 없음 – ECN 없음
  • 활성화 – ECN 사용
  • passive : 요청 시에만 ECN 지원을 애드버타이즈합니다.

Solaris 11.4 에서는, 디폴트의 동작이 액티브하게 되어 있습니다.ECN 사용량은 ipadm set-prop -p ecn=active [26]tcp를 통해 변경할 수 있습니다.

라우터에 의한 IP에서의 ECN 지원

라우터의 ECN 마킹은 어떤 형식의 액티브큐 관리에 의존하기 때문에 ECN 마킹을 실행하려면 적절한 큐의 규율을 사용하여 라우터를 설정해야 합니다.

버전 12.2(8)T 이후 WRED 큐잉 규율이 설정되어 있는 경우 Cisco IOS 라우터는 ECN 마킹을 수행합니다.

Linux 라우터는 명시적 ecn 파라미터를 사용하여 RED 또는 GRED 큐의 어느 쪽인가로 설정되어 있는 경우 CoDel Fair Queuing(fq_codel) 규율 또는 CACE 큐잉 규율을 사용하여[27] ECN 마킹을 수행합니다.

FreeBSD, NetBSDOpenBSD 등의 최신 BSD 구현에서는 다수의 큐잉 규칙(특히 REDBlue)에 대해 ALTQ 큐잉 구현에서 ECN 마킹이 지원됩니다.FreeBSD 11에는 CoDel, [28]PIE, FQ-CoDel 및 FQ-PIE 큐잉 규칙이 ECN 마킹 기능을 갖춘 ipfw/dummynet 프레임워크에 구현되어 있습니다.

데이터센터 TCP

Data Center Transmission Control Protocol(DCTCP)은 ECN을 사용하여 Transmission Control Protocol 폭주 제어 알고리즘을 강화합니다.데이터센터 네트워크에서 사용됩니다.표준 TCP congestion 제어 알고리즘에서는 congestion의 존재만을 검출할 수 있습니다만, DCTCP에서는 ECN을 사용해 [29]congestion의 정도를 측정할 수 있습니다.

DCTCP 는, 시그널링의 신뢰성을 유지하기 위한 기능을 무시한 채, 착신 패킷의 정확한 ECN 마킹을 항상 릴레이 하도록 TCP 리시버를 변경합니다.이것에 의해, DCTCP 송신측은, 리시버로부터의 ACK 의 손실에 취약하게 되어, [30]검출 또는 대처하는 메카니즘이 없습니다.2014년 7월 현재, 보다 신뢰할 수 있는 접근 방식으로 동등하거나 더 나은 수신자 피드백을 제공하는 알고리즘이 활발한 연구 [30]주제입니다.

「 」를 참조해 주세요.

레퍼런스

  1. ^ Steven Bauer; Robert Beverly; Arthur Berger (2011). "Measuring the State of ECN Readiness in Servers, Clients, and Routers" (PDF). Internet Measurement Conference 2011. Archived (PDF) from the original on 2014-03-22.
  2. ^ Alberto Medina; Mark Allman; Sally Floyd. "Measuring Interactions Between Transport Protocols and Middleboxes" (PDF). Internet Measurement Conference 2004. Archived (PDF) from the original on 2016-03-04.
  3. ^ "TBIT, the TCP Behavior Inference Tool: ECN". Icir.org. Archived from the original on 2013-03-11. Retrieved 2014-03-22.
  4. ^ Brian Trammell; Mirja Kühlewind; Damiano Boppart; Iain Learmonth; Gorry Fairhurst; Richard Scheffenegger (2015). "Enabling Internet-Wide Deployment of Explicit Congestion Notification" (PDF). Proceedings of the Passive and Active Measurement Conference 2015. Archived from the original (PDF) on 15 June 2015. Retrieved 14 June 2015.
  5. ^ a b David Murray; Terry Koziniec; Sebastian Zander; Michael Dixon; Polychronis Koutsakis (2017). "An Analysis of Changing Enterprise Network Traffic Characteristics" (PDF). The 23rd Asia-Pacific Conference on Communications (APCC 2017). Archived (PDF) from the original on 3 October 2017. Retrieved 3 October 2017.
  6. ^ a b c "Your App and Next Generation Networks". Apple Inc. 2015. Archived from the original on 2015-06-15.
  7. ^ Kuzmanovic, A.; Mondal, A.; Floyd, S.; Ramakrishnan, K. (June 2009). Adding Explicit Congestion Notification Capability to TCP's SYN/ACK Packets. doi:10.17487/RFC5562. RFC 5562.
  8. ^ a b 알렉산다르 쿠즈마노비치.명시적 congestion 알림의 기능.2005년 컴퓨터 통신용 애플리케이션, 테크놀로지, 아키텍처 프로토콜에 관한 회의의 속행.2005.
  9. ^ 자말 하디 살림과 우바이즈 아흐메드입니다IP 네트워크에서의 명시적 폭주 통지(ECN) 퍼포먼스 평가RFC 2884.2000년 7월
  10. ^ Marrek Malowidzki, RED 네트워크에서의 ECN 퍼포먼스에 관한 시뮬레이션 기반 연구, Proc. SPECT'03. 2003.
  11. ^ "New Networking Features in Windows Server 2008 and Windows Vista". Archived from the original on 2010-01-15.
  12. ^ "Data Center Transmission Control Protocol (DCTCP) (Windows Server 2012)". Archived from the original on 2017-08-26.
  13. ^ "tcp(4) - Internet Transmission Control Protocol". FreeBSD Kernel Interfaces Manual. Retrieved 3 April 2020.
  14. ^ "Announcing NetBSD 4.0". 2007-12-19. Archived from the original on 2014-10-31. Retrieved 2014-10-13.
  15. ^ Michael Lucas (2013). Absolute OpenBSD: UNIX for the Practical Paranoid. ISBN 9781593274764. Retrieved 2014-03-22.
  16. ^ "A Map of the Networking Code in Linux Kernel 2.4.20, Technical Report DataTAG-2004-1, FP5/IST DataTAG Project" (PDF). datatag.web.cern.ch. March 2004. Archived (PDF) from the original on 27 October 2015. Retrieved 1 September 2015.
  17. ^ "Documentation/networking/ip-sysctl.txt: /proc/sys/net/ipv4/* Variables". kernel.org. Archived from the original on 2016-03-05. Retrieved 2016-02-15.
  18. ^ The Addition of Explicit Congestion Notification (ECN) to IP. September 2001. doi:10.17487/RFC3168. RFC 3168. Retrieved 2016-02-15.
  19. ^ "Linux man pages". man7.org. 2015-12-05. Archived from the original on 2016-02-16. Retrieved 2016-02-15.
  20. ^ "ECN (Explicit Congestion Notification) in TCP/IP". Archived from the original on 2012-06-19.
  21. ^ "macOS 10.12 Sierra: The Ars Technica review". Ars Technica. 20 September 2016. Archived from the original on 26 April 2018. Retrieved 25 April 2018.
  22. ^ Inc., Apple. "Networking for the Modern Internet - WWDC 2016 - Videos - Apple Developer". Apple Developer. Archived from the original on 18 April 2018. Retrieved 18 April 2018.
  23. ^ Bhooma, Padma (March 2017). "TCP ECN — Experience with enabling ECN on the Internet" (PDF). Archived (PDF) from the original on 2018-05-09. Retrieved 2017-05-03.
  24. ^ Inc., Apple. "Advances in Networking, Part 1 - WWDC 2017 - Videos - Apple Developer". Apple Developer. Archived from the original on 31 January 2018. Retrieved 18 April 2018.
  25. ^ "ipadm(8)". Oracle Solaris 11.4 Information Library. Oracle. Retrieved 6 May 2021.
  26. ^ "Administering TCP/IP Networks, IPMP, and IP Tunnels in Oracle® Solaris 11.4, Using the TCP ECN Feature". Oracle Solaris 11.4 Information Library. Oracle. Retrieved 6 May 2021.
  27. ^ Høiland-Jørgensen, Toke; Täht, Dave; Morton, Jonathan (2018). "Piece of CAKE: A Comprehensive Queue Management Solution for Home Gateways". arXiv:1804.07617v2 [cs.NI].
  28. ^ "Import Dummynet AQM version 0.2.1 (CoDel, FQ-CoDel, PIE and FQ-PIE) to FreeBSD 11". The FreeBSD Project, FreeBSD r300779. Retrieved 5 August 2016.
  29. ^ Data Center TCP (DCTCP): TCP Congestion Control for Data Centers. doi:10.17487/RFC8257. RFC 8257. Retrieved August 21, 2021.
  30. ^ a b Problem Statement and Requirements for Increased Accuracy in Explicit Congestion Notification (ECN) Feedback. August 26, 2015. doi:10.17487/RFC7560. RFC 7560. Retrieved August 21, 2021.

외부 링크