オートネゴシエーション（、A/N、オートネゴ）は、イーサネットにおけるケーブル接続時の自動設定機能。特にLANケーブルの接続において、通信速度を2つの機器間で互いに送り合って最適値を選択するものを指す。1000BASE-Tや10GBASE-Tなどの規格で必須となっている。

100Mbps以下の接続でオートネゴシエーションが有効な機器とそうでない機器を直接接続すると、設定によってはスループットが大幅に低下するなどのネットワーク障害の原因になるため、ネットワーク管理者は十分に注意する必要がある。詳細は#運用上の注意の節を参照のこと。

概要 
具体例として、以下のような対応規格を持つ2台の機器のLANケーブル接続を考える。
 機器A 対応規格: 10BASE-T 半二重、100BASE-TX 半二重
 機器B 対応規格: 10BASE-T 全二重・半二重、100BASE-TX 全二重・半二重、1000BASE-T 全二重
この例では、オートネゴシエーション機能により、両者で共通のプロトコルのうち速度が最高となる「100BASE-TX 半二重」で自動的にリンクを確立し通信を開始する。

一般にLANケーブル接続ポートでは、複数の通信速度、異なる二重通信モード（半二重/全二重）、異なる規格をサポートすることが可能であり、オートネゴシエーションは主にそのような接続ポートを持つ機器で使われる。各機器は自身の対応機能(technology abilities)をお互いに通知し、両者が使用可能なものの中から最良の動作モードが選択される。低速度より高速度のもの、半二重よりも全二重の方が優先される。

オートネゴシエーション可能な機器とそうでない機器を接続することもできる。これは例えば、一方の機器がオートネゴシエーションに対応していなかったり、管理上オートネゴシエーションが無効に設定されていたりする場合が当てはまる。接続時には、オートネゴシエーション可能な機器による並列検出により、相手側に速度を合わせることができる。しかしこの組み合わせの場合、二重通信モードを自動で決定できないため、常に半二重であると仮定され、全二重通信が事実上できない。これは運用上問題となることがある(次節後述)。

オートネゴシエーションでは、通信速度と二重通信モード以外にも、フロー制御・マルチポート対応・マスター/スレーブ設定・EEEなどのパラメタなどがやりとりされる。

OSI参照モデルでは、オートネゴシエーションは物理層に属する。

運用上の注意 

家庭用・業務用の多くのネットワーク機器がオートネゴシエーションに対応しており、デフォルトで有効化されている。さらに安価な機器ではそもそもオートネゴシエーションを解除して通信モードを手動で設定できないことが多い。そのため、オートネゴシエーションを意識せずに利用しているユーザは多い。しかし、オートネゴシエーションは、誤った使い方をしたり、不用意に解除すると、ネットワーク障害の原因になる。

以下のような2つの機器を直接接続する場合に問題となる。
 機器A: オートネゴシエーション設定
 機器B: 10BASE-Tまたは100BASE-TXの全二重モードで固定動作するもの

このとき、機器Aはオートネゴシエーションの仕様上、半二重として自動設定されるため、A-B間で二重通信モードが不一致となる。この状態でもネットワークは不安定ながら動作するため、pingによる疎通確認試験では問題を認知することができない。しかし、大量のパケット破棄が発生し、スループットが大幅に低下する。

一般に、100Mbps以下のLANケーブル通信では、両者でオートネゴシエーションの有効・無効を揃えておく必要がある。基本的には有効にすることが推奨されるが、古い機器や安価な機器などで10BASE-Tにしか対応しないような機器との接続はそもそもオートネゴシエーション機能に対応していないため、接続側のオートネゴシエーションを無効にしなければならない場合もある。

二重通信モードの不一致 

2つの機器のうち、片方が全二重、片方が半二重で動作している場合、両者が同時にフレームを送信しようとすると、非常に低いスループットの接続となる。これは、全二重モードではデータを両方向に同時に送受信できるが、半二重モードでは一度に一方向にしか送信できないためである。その結果、全二重の機器で受信中にデータを送信する場合、半二重の機器は送信中のデータ受信を衝突（コリジョン）として検知し、送信中のフレームを再送信しようとする。一方で、全二重の機器では衝突を検出せず、相手側が衝突によって破損しているとして廃棄した場合でも、フレームを再送信しない。このようなフレームの再送・破損が頻発することでスループットの低下を招く。

一見ユーザからは片方向のみの通信に見える場合でもパケット損失が発生することがある。これはTCP通信など、送信側の送ったパケットを受信側が確認応答する環境である場合、実際のデータが一方向にのみ送信されている場合でも、逆方向に送信される確認応答パケットとの衝突が発生していることがありえるためである。

このような二重通信モードの不一致を見つける方法として、両機器の統計情報を用いることができる。全二重の機器では、受信フレームが衝突検出によって切り捨てられることはないため、半二重の機器が送信しようとして打ち切られたフレームからFCSエラーを報告できる。半二重の機器では、タイミングによってはレイト・コリジョン(64バイト以上送ったときに発生する衝突)を検出することがあり、これはCSMA/CDでハードエラーとして解釈されてフレームを再送信しない場合もある。半二重の機器によるレイト・コリジョンと全二重の機器によるFCSエラーの組み合わせは、このような問題のある接続の検出に利用できる。

規格 

オートネゴシエーションは、IEEE 802.3の以下の節で規定されている。

 Clause 28: ツイストペア規格用 (100BASE-TX, 1000BASE-T, 2.5GBASE-T, 5GBASE-T, 10GBASE-T など)
 Clause 37: 光ファイバ規格用 (1000BASE-SX, 1000BASE-LX など)
 Clause 73: バックプレーン規格用 (1000BASE-KX, 10GBASE-KR, 25GBASE-KR/CR など)
 Clause 98: シングルペア規格用 (1000BASE-T1 など)

1995年に100メガビット・イーサネットとしてIEEE 802.3u規格が標準化されたときに、そのオプション機能として初めてオートネゴシエーションの仕様が規定された。この仕様は、ナショナル セミコンダクターによるNWayと呼ばれる特許技術が元になっており、一度ライセンス料を支払うだけで誰でもこのシステムを使えることを保証する文面が公開されている。他メーカはその特許の利用権を購入して実装した。

IEEE 802.3uの初版では仕様に不十分な点があったため、メーカの実装にばらつきがあり、異なるメーカの機器間ではオートネゴシエーションが失敗することがあった。初期仕様で議論の余地があった箇所は、1998年の802.3改版時に削除された。

1999年にギガビット・イーサネットとしてIEEE 802.3abが標準化され、この中で従来オプション機能だったオートネゴシエーションが1000BASE-Tでは必須であると規定された。
以降、後発の10GBASE-Tや2.5GBASE-Tなどもすべて必須と規定されている。

優先度 
接続された2つの機器は、お互いに相手側機器の対応機能を受信すると、両者で共通対応しているもののうちから最良の規格を決定する。802.3の2018年版が規定しているツイストペア規格の優先順位は次の通りであり、機器が共通対応しているもののうちこの一覧の上位にある通信速度が適用される。

 40GBASE-T 全二重
 25GBASE-T 全二重
 10GBASE-T 全二重
 5GBASE-T 全二重
 2.5GBASE-T 全二重
 1000BASE-T 全二重
 1000BASE-T 半二重
 100BASE-T2 全二重
 100BASE-TX 全二重
 100BASE-T2 半二重
 100BASE-T4 半二重
 100BASE-TX 半二重
 10BASE-T 全二重
 10BASE-T 半二重

データ構成

電気信号 

オートネゴシエーションは10BASE-Tの接続確立の方式に基づいているため、初めに10BASE-Tの方式について概説する。10BASE-Tでは他の機器接続の存在を検出するために一定間隔でパルスを送信しており、機器がフレームのデータ送信していないときはこのパルスを送信する。10BASE-Tでは50〜150ミリ秒間このパルスもフレームも受信できないとリンクダウンを検出する。

オートネゴシエーションでは、同様のパルスを2ミリ秒以内に最大33個連続して送る。この連続パルスをFLP (fast link pulse)バーストと呼ぶ。

1回のFLPバーストでは全体で16ビットを表現しており、オートネゴシエーションの各種パラメタが含まれる。

FLPバーストは17個のクロックパルスとその間に挿入される最大16個のビットパルスから成る。クロックパルスは125(±14)マイクロ秒間隔で必ず送られ、その中間に（すなわちクロックパルスの62.5マイクロ秒後に）挿入されるビットパルスの有無で1/0を表現する。

FLPバーストの16ビットを「ページ」または「リンクコードワード」(LCW: link codeword)と呼ぶ。ビット0はFLPバーストの最初のビットパルスに対応し、ビット15は最後のビットパルスに対応する。

ベースページ
FLPバーストは16ビットずつデータを送信する。接続時の最初の送信データはベースページ(base page)またはベースLCW (base link codeword)と呼び、以下のような内容を送る。

ビット14にあたる確認応答は、相手のベースページを正しく受信したことを知らせるために使う。相手のベースページを同じ内容で最低3回受信したときに1を示し、以降はこのビットを1に保持したままベースページを6～8回送信する。

ビット12・15にあたる追加ページありビットは、次節の追加ページを送信しようとしているときに1に設定される。ベースページのこのビットが1になったものを両方の機器が受信した場合にのみ、以降の追加ページが送信される。

追加ベージ 

追加ページ(Next Pages)を使用すると、前節のパラメタ以外にさらに他のパラメタを通知することができる。例えば上記ベースページに含まれない1000BASE-Tやそれ以上の通信速度の場合にこのページが用いられる。

追加ページには以下の4種類がある。16ビット版を使うときはベースページのビット15を1に、48ビット拡張版を使うときはベースページのビット12を1にする。

 メッセージページ (message page): 16ビット
 自由書式ページ (unformatted page): 16ビット 
 メッセージページ拡張版 (extended message page): 48ビット
 自由書式ページ拡張版 (extended unformatted page): 48ビット 

これらはメッセージページ、自由書式ページの順で送付される。先行のメッセージページではデータ種別のみを通知し、後発の自由書式ページではデータ種別に応じてその内容やページ数が変化する。
いずれも以下のような形式でデータをやりとりする。

一例として、1000BASE-Tの場合は以下のように全部で4ページが用いられる。ベースページ、メッセージページを送ったあとに自由書式ページを2ページ分送付する方式が規定されている。

1Gbpsを超える規格対応の例では、以下のように48ビット拡張版の追加ページを用いる。

特許 
オートネゴシエーションは、以下の特許により保護されている。

 
 
 
 

 971,018 (filed 1992-11-02)
 146,729 (filed 1993-11-01)
 430,143 (filed 1995-04-26)
 欧州特許出願 SN 93308568.0 (DE, FR, GB, IT, NL)
 韓国特許 No. 286791
 台湾特許 No. 098359
 日本特許 No. 3705610
 日本特許 4234. 特許出願 SN H5-274147
 韓国特許出願 SN 22995/93
 台湾特許出願 SN 83104531

その他の伝送媒体 

オートネゴシエーションはLANケーブル接続以外の規格にも転用されているものがある。

光ファイバ 

1000BASE-Xの各種光ファイバ規格にオプションとして実装されており、8b/10bの特殊シンボルを用いて以下の16ビットのベースページをやりとりする。

バックプレーン・ダイレクトアタッチケーブル 

156.25Mbps (6.4ナノ秒/bit)の差動マンチェスタ符号により、以下の48ビットのベースページをやりとりする。

シングルペアケーブル 
差動マンチェスタ符号により半二重で48ビットのベースページをやりとりする。信号速度は2種類ある。

 高速モード: 16+2/3 Mbps (60ナノ秒/bit)
 低速モード: 625 kbps (1.6マイクロ秒/bit, 10BASE-T1L用)

シングルペア規格においても1ポートで複数の規格をサポートすることができ、以下の優先度が規定されている。

 10GBASE-T1
 5GBASE-T1
 2.5GBASE-T1
 1000BASE-T1
 100BASE-T1
 10BASE-T1S 全二重
 10BASE-T1S 半二重
 10BASE-T1L

関連項目 
 Auto MDI-X  - ストレート・クロスケーブル接続の自動設定

脚注

出典

外部リンク
 Ethernet Autonegotiation Best Practices
 Gigabit Ethernet autonegotiation
 What is autonegotiation?
 Cisco Catalyst Config Guide
 How does Autonegotiation work
 Autoneg Timing

イーサネット
通信プロトコル