明示的輻輳通知

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

明示的輻輳通知ECN )は、インターネットプロトコルおよび伝送制御プロトコルの拡張であり、RFC 3168(2001)で定義されています。ECNを使用すると、パケットをドロップすることなく、ネットワークの輻輳をエンドツーエンドで通知できます。ECNは、基盤となるネットワークインフラストラクチャもサポートしている場合に、2つのECN対応エンドポイント間で使用できるオプション機能です。

従来、TCP / IPネットワークはパケットをドロップすることで輻輳を通知していました。ECNが正常にネゴシエートされると、ECN対応ルーターは、差し迫った輻輳を通知するために、パケットをドロップする代わりにIPヘッダーにマークを設定する場合があります。パケットの受信者は、輻輳表示を送信者にエコーします。これにより、ドロップされたパケットを検出したかのように、送信速度が低下します。

一部の古いまたは障害のあるネットワーク機器は、適切に応答したりビットを無視したりするのではなく、ECNビットが設定されたパケットを歴史的にドロップまたはマングルしていました。[2] [3] [4] 2015年の時点で、測定によると、ECNを設定するとネットワーク接続が妨げられるパブリックインターネット上のWebサーバーの割合は1%未満に減少しました。[5]

パッシブサポートは、UbuntuLinuxでは12.04から、Windows Serverでは2012年から存在しています。[ 6]最も人気のあるWebサイトでのパッシブサポートは、2012年の8.5%から2017年5月には70%以上に増加しました。クライアントは積極的にECNを要求します。2015年6月、Appleは、業界全体でECNシグナリングの採用を促進するために、サポートされている将来の製品でECNがデフォルトで有効になることを発表しました。[7]

操作

ECNでは、次の理由により 、インターネット層とトランスポート層の両方で特定のサポートが必要です。

  • TCP / IPでは、ルーターはインターネット層内で動作しますが、伝送速度はトランスポート層のエンドポイントによって処理されます。
  • 輻輳は送信機によってのみ処理される場合がありますが、パケットが送信された後にのみ発生したことがわかっているため、受信機から送信機への輻輳表示のエコーが存在する必要があります。

ECNがない場合、輻輳表示エコーは、失われたパケットの検出によって間接的に実現されます。ECNの場合、輻輳はIPパケット内のECNフィールドをCEに設定することで示され、トランスポートプロトコルのヘッダーに適切なビットを設定することで受信機から送信機にエコーバックされます。たとえば、TCPを使用する場合、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)コードポイントを同等のものとして扱います。パケットが輻輳を経験しているアクティブキュー管理(AQM)キュー(たとえば、ランダム早期検出(RED)を使用するキュー)を通過し、対応するルーターがECNをサポートしている場合、パケットをドロップCEする代わりにコードポイントをに変更することがありますこの行為は「マーキング」と呼ばれ、その目的は受信側のエンドポイントに差し迫った輻輳を通知することです。受信エンドポイントでは、この輻輳表示は上位層プロトコル(トランスポート層)によって処理されますプロトコル)であり、送信レートを下げるように信号を送るために、送信ノードにエコーバックする必要があります。

CE表示は、それをサポートする上位層プロトコルによってのみ効果的に処理できるため、ECNは、輻輳制御をサポートし、CE表示を送信エンドポイントにエコーする方法を持つTCPなどの上位層プロトコルと組み合わせてのみ使用されます。

TCPによるECNの運用

TCPは、TCPヘッダーで2つのフラグを使用してECNをサポートします。1つ目は、ECN-Echo(ECE)を使用して、輻輳表示をエコーバックします(つまり、送信者に信号を送信して伝送速度を下げる)。2番目の輻輳ウィンドウ削減(CWR)は、輻輳表示エコーが受信されたことを確認します。TCP接続でのECNの使用はオプションです。ECNを使用するには、接続の確立時に、SYNおよびSYN-ACKセグメントに適切なオプションを含めることによってECNをネゴシエートする必要があります。

ECNがTCP接続でネゴシエートされている場合、送信者は、その接続のTCPセグメントを伝送するIPパケットが、ECTコードポイントでマークすることにより、ECN対応トランスポートからのトラフィックを伝送していることを示します。これにより、ECNをサポートする中間ルータは、差し迫った輻輳を通知するために、それらのIPパケットをドロップするのではなく、CEコードポイントでマークすることができます。

輻輳が発生したコードポイントでIPパケットを受信すると、TCPレシーバーは、TCPヘッダーのECEフラグを使用して、この輻輳表示をエコーバックします。エンドポイントがECEビットを含むTCPセグメントを受信すると、パケットドロップの場合と同様に輻輳ウィンドウが減少します。次に、CWRビットが設定されたセグメントを送信することにより、輻輳表示を確認します。

ノードは、CWRビットが設定されたセグメントを受信するまで、ECEビットが設定されたTCPセグメントを送信し続けます。

tcpdumpで影響を受けるパケットを確認するには、フィルター述語を使用します(tcp[13] & 0xc0 != 0)

ECNおよびTCP制御パケット

伝送制御プロトコル(TCP)は、制御パケット(純粋なACK、SYN、FINセグメント)に対して輻輳制御を実行しないため、制御パケットは通常、ECN対応としてマークされていません。

2009年の提案[8]は、SYN-ACKパケットをECN対応としてマークすることを提案しています。ECN +として知られるこの改善により、短命のTCP接続のパフォーマンスが劇的に改善されることが示されています。[9]

他のトランスポートプロトコルでのECNの運用

ECNは、輻輳制御を実行する他のトランスポート層プロトコル、特にDCCPおよびStream Control Transmission Protocol(SCTP)に対しても定義されます。一般的な原理はTCPに似ていますが、オンザワイヤエンコーディングの詳細は異なります。

UDPの上に階層化されたプロトコルでECNを使用することが可能ですただし、UDPでは、輻輳制御をアプリケーションで実行する必要があり、 DNSなどの初期のUDPベースのプロトコルはECNを使用していませんでした。QUICなどの最近のUDPベースのプロトコルは、輻輳制御にECNを使用しています。

パフォーマンスへの影響

ECNは、アクティブキュー管理(AQM)ポリシーとの組み合わせでのみ有効であるため、ECNの利点は、使用されている正確なAQMによって異なります。ただし、いくつかの観察結果は、さまざまなAQMにまたがって保持されているように見えます。

予想どおり、ECNはTCP接続によってドロップされるパケットの数を減らし、再送信を回避することで、遅延、特にジッターを減らします。この効果は、TCP接続に単一の未処理のセグメントがある場合[10] 、 RTOタイムアウトを回避できる場合に最も劇的になります。これは、リモートログインなどの対話型接続、およびHTTP要求、SMTPの会話フェーズ、またはSQL要求などのトランザクションプロトコルの場合によくあります。

最新のTCP実装は、送信者のウィンドウが大きい 場合にドロップされたセグメントをタイムリーに再送信するのにかなり優れているため、バルクスループットに対するECNの影響はあまり明確ではありません[11] 。

ECNを使用すると、パケットをドロップしないAQMアルゴリズムを使用する場合に、非常に混雑したネットワークのパフォーマンスに悪影響を与えることがわかっています。[9] 最新のAQM実装は、非常に高い負荷でパケットにマークを付けるのではなく、ドロップすることでこの落とし穴を回避します。

実装

TCP / IPプロトコルスイートの最新の実装の多くは、ECNをある程度サポートしています。ただし、通常はECNを無効にして出荷されます。

ホストによるTCPでのECNサポート

Microsoft Windows

Windows Server2008およびWindowsVista以降のWindowsバージョンは、TCP用のECNをサポートしています。[12] Windows Server 2012以降、データセンター伝送制御プロトコル(DCTCP)が使用されているため、WindowsServerバージョンではデフォルトで有効になっています。[13]以前のWindowsバージョンおよび非サーバーバージョンでは、デフォルトで無効になっています。

ECNサポートは、 netsh interface tcp set global ecncapability = enabledなどのシェルコマンドを使用して有効にできます。

BSD

FreeBSDでは、TCP用のECNは、net.inet.tcp.ecn.enablesysctlを使用して構成できますデフォルトでは、それを要求する着信接続に対してのみ有効になっています。また、すべての接続に対して有効にすることも、完全に無効にすることもできます。[14]

NetBSD  4.0は、TCPのECNサポートを実装しています。sysctl net.inet.tcp.ecn.enableパラメータの値として1を設定することにより、 sysctlインターフェイスを介してアクティブ化できます。[15]

同様に、sysctlnet.inet.tcp.ecnはOpenBSDで使用できます[16]

Linux

2002年11月にリリースされたLinuxカーネルのバージョン2.4.20以降、 [17] Linuxは、パラメータ/ proc / sys / net / ipv4 / tcp_ecnを1に設定することにより、 sysctlインターフェイスを介して構成されたTCP用ECNの3つの動作モードをサポートします。次の値の:[18]

  • 0  – ECNを無効にし、開始も受け入れもしません
  • 1  –着信接続によって要求されたときにECNを有効にし、発信接続の試行時にECNを要求します
  • 2  –(デフォルト)着信接続から要求された場合はECNを有効にしますが、発信接続ではECNを要求しません

2015年6月にリリースされたLinuxカーネルのバージョン4.1以降、RFC 3168セクション6.1.1.1で指定されているtcp_ecn_fallbackメカニズム[19]は、ECNが有効な場合(値1)にデフォルトで有効になります[20] 。フォールバックメカニズムは、発信接続の初期設定でECN接続を試行し、ECN機能のない送信に対して適切なフォールバックを行い、ECN不耐性のホストまたはファイアウォールの問題を軽減します。

Mac OS X

Mac OS X 10.5および10.6は、TCPのECNサポートを実装しています。これは、ブール値のsysctl変数net.inet.tcp.ecn_negotiate_inおよびnet.inet.tcp.ecn_initiate_outを使用して制御されます。[21] 最初の変数は、すでにECNフラグが設定されている着信接続でECNを有効にします。2つ目は、ECNを有効にして発信接続を開始しようとします。両方の変数のデフォルトは0ですが、それぞれの動作を有効にするため に1に設定できます。

2015年6月、Apple Inc.は、OS X 10.11でデフォルトでECNがオンになると発表しましたが[7]、OSはそのデフォルトの動作なしで出荷されました。macOS Sierraでは、TCPセッションの半分でECNが有効になっています。[22]

iOS

2015年6月、Apple Inc.は、 iOSの次のバージョンであるiOS 9がECNをサポートし、デフォルトでオンになることを発表しました。[7] TCP ECNネゴシエーションは、iOS9のWi-Fi /イーサネット経由でランダムに選択された接続の5%、 iOS 10のWi-Fi /イーサネットおよびいくつかのセルラーキャリア経由でランダムに選択された接続の50%で有効になります[23] [24 ]およびiOS11の場合は100%[25]

Solaris

Solarisカーネルは、TCP用のECNの3つの状態をサポートしています。[ 26]

  • 決して –ECNなし
  • アクティブ –ECNを使用
  • パッシブ –要求された場合にのみECNサポートをアドバタイズします。

デフォルトの動作はパッシブです。Solaris 11以降、完全なECN使用は、ipadm set-prop -p ecn = activetcpを介してアクティブ化できます。[27]

ルーターによるIPでのECNサポート

ルーターのECNマーキングは、何らかの形式のアクティブキュー管理に依存しているため、ECNマーキングを実行するには、ルーターを適切なキュー規律で構成する必要があります。

バージョン12.2(8)T以降 のWREDキューイングディシプリンで設定されている場合、CiscoIOSルータはECNマーキングを実行します。

Linuxルーターは、明示的なecnパラメーターを持つREDまたはGREDキューディシプリンのいずれかで構成されている場合、 sfbディシプリン、CoDel Fair Queuing(fq_codel)ディシプリン、またはCAKE [28]キューイングディシプリンを使用して、ECNマーキングを実行します。

FreeBSDNetBSDOpenBSDなどの最新のBSD実装は、多くのキューイング分野、特にREDBlueのALTQキューイング実装でECNマーキングをサポートしています。FreeBSD 11には、ECNマーキング機能を備えたipfw / dummynetフレームワークでのCoDel、PIE、FQ-CoDel、およびFQ-PIEキューイング分野の実装が含まれていました。[29]

データセンターTCP

データセンター伝送制御プロトコルデータセンターTCPまたはDCTCP)は、ECNを利用して伝送制御プロトコルの輻輳制御アルゴリズムを強化します。データセンターネットワークで使用されます。標準のTCP輻輳制御アルゴリズムは輻輳の存在のみを検出できますが、DCTCPはECNを使用して輻輳の程度を測定できます。[30]

DCTCPは、シグナリングの信頼性を維持することを目的とした機能を無視するという犠牲を払って、着信パケットの正確なECNマーキングを常に中継するようにTCPレシーバーを変更します。これにより、DCTCP送信側は、受信側からのACKの損失に対して脆弱になります。これには、検出または対処するメカニズムがありません。[31] 2014年7月の時点で、より信頼性の高いアプローチで同等以上の受信機フィードバックを提供するアルゴリズムが活発な研究トピックになっています。[31]

も参照してください

参考文献

  1. ^ W. Richard Stevens、 TCP / IP Illustrated、Volume 1:The Protocols、Addison Wesley、1994、ISBN0-201-63346-9。
  2. ^ スティーブンバウアー; ロバートビバリー; アーサーバーガー(2011)。「サーバー、クライアント、およびルーターのECN準備状況の測定」 (PDF)インターネット測定会議2011。 2014年3月22日のオリジナルからアーカイブ (PDF)
  3. ^ アルベルトメディナ; マーク・オールマン; サリー・フロイド。「トランスポートプロトコルとミドルボックス間の相互作用の測定」(PDF)インターネット測定会議2004。2016-03-04のオリジナルからアーカイブ(PDF)
  4. ^ 「TBIT、TCP動作推論ツール:ECN」Icir.org。2013-03-11にオリジナルからアーカイブされました2014年3月22日取得
  5. ^ ブライアントランメル; MirjaKühlewind; ダミアーノボパート; Iain Learmonth; ゴーリーフェアハースト; リチャードシェフェネガー(2015)。「明示的輻輳通知のインターネット全体への展開の有効化」(PDF)パッシブおよびアクティブ測定会議2015の議事録。2015年6月15日のオリジナル(PDF)からアーカイブ2015年6月14日取得
  6. ^ a b David Murray; テリーコジニエック; セバスティアン・ザンダー; マイケルディクソン; Polychronis Koutsakis(2017)。「変化するエンタープライズネットワークトラフィック特性の分析」(PDF)第23回アジア太平洋通信会議(APCC 2017)。2017年10月3日のオリジナルからアーカイブ(PDF)2017年10月3日取得
  7. ^ a bc 「あなたのアプリと次世代ネットワーク」Apple Inc. 2015.2015-06-15のオリジナルからアーカイブ。
  8. ^ Kuzmanovic、A。; モンダル、A。; フロイド、S。; Ramakrishnan、K。(2009年6月)。TCPのSYN / ACKパケットに明示的輻輳通知機能を追加します土井10.17487 / RFC5562RFC5562_
  9. ^ a b AleksandarKuzmanovic。明示的輻輳通知の力。コンピュータ通信用のアプリケーション、テクノロジ、アーキテクチャ、およびプロトコルに関する2005年の会議の議事録2005年。
  10. ^ Jamal HadiSalimとUvaizAhmed。IPネットワークにおける明示的輻輳通知(ECN)のパフォーマンス評価。RFC2884  _ 2000年7月
  11. ^ Marek Malowidzki、REDネットワークにおけるECNパフォーマンスのシミュレーションベースの研究、 Proc。SPECTS'032003年。
  12. ^ 「WindowsServer2008およびWindowsVistaの新しいネットワーク機能」2010年1月15日にオリジナルからアーカイブされました。
  13. ^ 「データセンター伝送制御プロトコル(DCTCP)(Windows Server 2012)」2017年8月26日にオリジナルからアーカイブされました。
  14. ^ 「tcp(4)-インターネット伝送制御プロトコル」FreeBSDカーネルインターフェースマニュアル2020年4月3日取得
  15. ^ 「NetBSD4.0の発表」2007-12-19。2014-10-31にオリジナルからアーカイブされました2014年10月13日取得
  16. ^ マイケルルーカス(2013)。Absolute OpenBSD:実用的なパラノイドのためのUNIXISBN 97815932747642014年3月22日取得
  17. ^ 「Linuxカーネル2.4.20のネットワークコードのマップ、テクニカルレポートDataTAG-2004-1、FP5 / IST DataTAGプロジェクト」(PDF)datatag.web.cern.ch2004年3月。2015年10月27日のオリジナルからアーカイブ(PDF)2015年9月1日取得
  18. ^ "Documentation / network / ip-sysctl.txt:/ proc / sys / net / ipv4 / *変数"kernel.org2016年3月5日にオリジナルからアーカイブされました2016年2月15日取得
  19. ^ IPへの明示的輻輳通知(ECN)の追加2001年9月。doi10.17487 / RFC3168RFC3168 _ 2016年2月15日取得
  20. ^ 「Linuxのマニュアルページ」man7.org2015-12-05。2016-02-16にオリジナルからアーカイブされました2016年2月15日取得
  21. ^ 「TCP / IPのECN(明示的輻輳通知)」2012年6月19日にオリジナルからアーカイブされました。
  22. ^ 「macOS10.12Sierra:ArsTechnicaレビュー」ArsTechnica2016年9月20日。2018年4月26日のオリジナルからアーカイブ2018年4月25日取得
  23. ^ Inc.、Apple。「現代のインターネットのためのネットワーキング-WWDC2016-ビデオ-アップルデベロッパ」AppleDeveloper2018年4月18日にオリジナルからアーカイブされました2018年4月18日取得
  24. ^ Bhooma、Padma(2017年3月)。「TCPECN—インターネット上でECNを有効にした経験」(PDF)2018-05-09のオリジナルからアーカイブ(PDF)2017年5月3日取得
  25. ^ Inc.、Apple。「ネットワーキングの進歩、パート1-WWDC2017-ビデオ-AppleDeveloper」AppleDeveloper2018年1月31日にオリジナルからアーカイブされました2018年4月18日取得
  26. ^ "ipadm(8)"Oracle Solaris11.4情報ライブラリOracle 2021年5月6日取得
  27. ^ 「TCPECN機能を使用したOracle®Solaris11.4でのTCP / IPネットワーク、IPMP、およびIPトンネルの管理」Oracle Solaris11.4情報ライブラリOracle 2021年5月6日取得
  28. ^ Høiland-Jørgensen、Toke; Täht、Dave; モートン、ジョナサン(2018)。「PieceofCAKE:ホームゲートウェイ用の包括的なキュー管理ソリューション」。arXiv1804.07617v2 [ cs.NI ]。
  29. ^ 「DummynetAQMバージョン0.2.1(CoDel、FQ-CoDel、PIE、およびFQ-PIE)をFreeBSD11にインポートします」FreeBSDプロジェクト、FreeBSDr300779 2016年8月5日取得
  30. ^ データセンターTCP(DCTCP):データセンターのTCP輻輳制御土井10.17487 / RFC8257RFC8257 _ 2021年8月21日取得
  31. ^ a b 明示的輻輳通知(ECN)フィードバックの精度を高めるための問題ステートメントと要件2015年8月26日。doi10.17487 / RFC7560RFC7560 _ 2021年8月21日取得

外部リンク