自協商技術
摘要:本文介紹了自協商的基本原理和工作模式,以及自協商相關細節介紹。
縮略語:
FLP:快速連接脈沖
NLP:普通連接脈沖
CSMA/CD:載波監聽多路訪問/沖突檢測
PCS:物理編碼子層
OSI :開放式系統互聯參考模型
關鍵詞:
自協商,FLP,NLP,CSMA/CD,PCS,全雙工,半雙工,并行檢測
1.概述
1.1 產生背景
最早的以太網都是10M 半雙工的,所以需要CSMA/CD 等一系列機制保證系統的穩定性。隨著技術的發展,出現了全雙工,接著又出現了100M,以太網的性能大大改善。但是隨之而來的問題是:如何保證原有以太網絡和新以太網的兼容?
于是,提出了自動協商技術來解決這種矛盾。自動協商的主要功能就是使物理鏈路兩端的設備通過交互信息自動選擇同樣的工作參數。自動協商的內容主要包括雙工模式、運行速率以及流控等參數。一旦協商通過,鏈路兩端的設備就鎖定在同樣的雙工模式和運行速率。
1.2 技術優點
自協商功能允許一個網絡設備能夠將自己所支持的工作模式信息傳達給網絡上的對端,并接受對方可能傳遞過來的相應信息,從而解決雙工和10M/100M 速率自協商問題。自協商功能完全由物理層芯片設計實現,因此并不使用專用數據包或帶來任何高層協議開銷。
2.自協商介紹
2.1 概念及原理
802.3 標準中的第28條是這樣定義自動協商功能的:它允許一個設備向鏈路遠端的設備通告自己所運行的工作方式,并且偵測遠端通告的相應的運行方式。自動協商的目的是給共享一條鏈路的兩臺設備提供一種交換信息的方法,并自動配置它們工作在最優能力下。
照字面上來講,自動協商就是一種在兩臺設備間達到可能的最大傳輸速率的方式。它允許設備用一種方式“討論”可能的傳輸速率,然后選擇雙方可接受的最佳速率。它們使用叫做快速鏈路脈沖的FLP 交換各自傳輸能力的通告。FLP 可以讓對端知道源端的傳輸能力是怎樣的。當交換FLP 時,兩個站點根據以下從高到低的優先級偵測雙方共有的最佳方式。
• 1000M 全雙工 注:左邊從上到下優先級依次遞減
• 1000M 半雙工
• 100M 全雙工
• 100M 半雙工
• 10M 全雙工
• 10M 半雙工
自協商功能的基本機制是:每個網絡設備在上電、管理命令發出、或是用戶干預時發出FLP(快速連接脈沖),協商信息封裝在這些FLP 序列中。FLP 中包含有時鐘/數字序列,將這些數據從中提取出來就可以得到對端設備支持的工作模式,以及一些用于協商握手機制的其他信息。
當一個設備不能對FLP 作出有效反應,而僅返回一個NLP(普通連接脈沖)時,它被作為一個10BASE-T 兼容設備。快速鏈路脈沖FLP 和普通鏈路脈沖NLP 都僅使用于非屏蔽雙絞線上,而不能應用在光纖媒體。
電口和光口自協商主要區別是在OSI 中它們所處的位置不同。對于電口來說,協商發生在鏈路信號傳輸之前;對于光口來說,自協商機制與PCS(物理編碼子層)在同一層,這意味著光口的協商必須先建立鏈路同步以后才可以進行協商。
2.2 相關術語
2.2.1 全雙工和半雙工概念
全雙工是在微處理器與外圍設備之間采用發送線和接受線各自獨立的方法,可以使數據在兩個方向上同時進行傳送操作。指在發送數據的同時也能夠接收數據,兩者同步進行,這好像我們平時打電話一樣,說話的同時也能夠聽到對方的聲音。
所謂半雙工就是指一個時間段內只有一個動作發生,舉個簡單例子,一條窄窄的馬路,同時只能有一輛車通過,當有兩輛車對開,這種情況下就只能一輛先過,等到頭后另一輛再開,這個例子就形象的說明了半雙工的原理。早期的對講機、以及早期集線器等設備都是基于半雙工的產品。隨著技術的不斷進步,現在制造的網卡、交換機、路由器都支持全雙工模式。半雙工的網絡設備已經逐漸退出歷史舞臺。
2.2.2 全雙工和半雙工以太網的特點
1.半雙工以太網
①任意時刻只能接收數據或者發送數據
②采用CSMA/CD 訪問機制
③有最大傳輸距離的限制
2.全雙工以太網
①同一時刻可以接收和發送數據
②傳輸數據幀的效率大大提高,最大吞吐量達到雙倍速率
③全雙工從根本上解決了以太網的沖突問題,以太網從此告別CSMA/CD
④消除了半雙工的物理距離限制
2.2.3 協商脈沖FLP
自協商是通過一種叫做快速連接脈沖(Fast Link Pulse)的信號實現的,簡稱FLP。自協商的雙方通過FLP 來交換數據。FLP 的編碼方式如下圖
(1)FLP脈沖波形
(2)FLP編碼方式
在具備自協商能力的端口沒有Link 的情況下,端口一直發送FLP,在FLP 中包含著自己的連接能力信息,包括支持的速率能力、雙工能力、流控能力等。這個連接能力是從自協商能力寄存器中得到的(PHY 標準寄存器地址4),依靠脈沖位置編碼攜帶數據。
一個FLP 突發包含33 個脈沖位置。17 個奇數位置脈沖為時鐘脈沖,時鐘脈沖總是存在的;
16 個偶數位置脈沖用來表示數據:此位置有脈沖表示1,此位置沒有脈沖表示0。這樣1 個FLP的突發就可以傳輸16bit 的數據。自協商交互數據就這樣通過物理線路被傳輸。
如果兩端都支持自協商,則都會接收到對方的FLP,并且把FLP中的信息解碼出來。得到對方的連接能力。并且把對端的自協商能力值記錄在自協商對端能力寄存器中(Auto-Negotiation Link Partner Ability Register , PHY 標準寄存器地址5 )。同時把狀態寄存器(PHY 標準寄存器地址1)的自協商完成bit(bit5)置成1。在自協商未完成的情況下,這個bit一直為0。
然后各自根據自己和對方的最大連接能力,選擇最好的連接方式。比如,如果雙方都即支持10M 也支持100M,則速率按照100M連接;雙方都即支持全雙工也支持半雙工,則按照全雙工連接。一旦連接建立后,FLP就停止發送。直到鏈路中斷,或者得到自協商Restart命令時,才會再次發送FLP。
2.2.4 并行檢測
為了保證在對端不能支持自協商的情況下也能連接,引入了被稱為并行檢測(Parallel Detection)的機制。在一端打開自協商,另一端關閉自協商的情況下,連接的建立就依靠并行檢測功能實現。
并行檢測機制是這樣的:在具有自協商能力的設備端口上,如果接收不到FLP,則檢測是否有10M鏈路的特征信號或100M鏈路的特征信號。
如果設備是10M設備,不支持自協商,則在鏈路上發送普通連接脈沖(Normal Link Pulse)簡稱NLP。NLP僅僅表示設備在位,不包含其它的額外信息。NLP脈沖如圖:
如果是 100M 設備,不支持自協商,則在沒有數據的情況下,在鏈路上一直發送4B/5B編碼的Idle符號。
并行檢測機制如果檢測到NLP,則知道對方支持10M速率;如果檢測到4B/5B編碼的Idle符號,則知道對方支持100M 速率。但是對方是否支持全雙工、是否支持流控幀這些信息是無法得到的。因此在這種情況下,認為對方只支持半雙工,不支持全雙工,且不支持流控幀。
基于以上原理,在對端不打開自協商時,打開自協商的一方只能協商成半雙工模式。
802.3 協議規定,通過并行檢測建立連接后,PHY 的狀態寄存器(PHY標準寄存器地址1)的自協商完成bit(bit5)依然要置位成1,盡管鏈路上并非使用了真正的自協商操作。同時規定在自協商完成bit 為1 的情況下,本地自協商能力寄存器(PHY 標準寄存器地址4)和對端自協商能力寄存器(PHY 標準寄存器地址5)是有意義的。所以,要把寄存器5 中的數據更新。如果建立的連接為10M,則寄存器5 的10M能力bit(bit5)置1,其它bit置0,表示對端只能支持10M半雙工;如果建立的連接為100M,則寄存器5 的100M能力bit(bit7)置1,其它bit置0,表示對端只能支持100M半雙工。
2.3 以太網電口自協商
1.以太網口的兩端工作模式(10M半雙工、10M全雙工、100M半雙工、100M全雙工、自協商)必須設置一致。
2.如果一端是固定模式(無論是10M、100M),另外一端是自協商模式,即便能夠協商成功,自協商的那一端也將只能工作在半雙工模式。
3.如果一端工作在全雙工模式,另外一端工作在半雙工模式(包括自協商出來的半雙工,也一樣處理),Ping是沒有問題的,流量小的時候也沒有任何問題,流量達到約15%以上時,就會出現沖突、錯包,最終影響了工作性能!
4.對于兩端工作模式都是自協商,最后協商成的結果是“兩端都支持的工作模式中優先級最高的那一類”。
5. 如果A端自協商,B端設置為100M全雙工,A協商為100M半雙工后,再強制將B改為10M全雙工,A端也會馬上向下協商到10M半雙工;如果A端自協商,B端設置為10M全雙工,A協商為10M半雙工后,再強制將B改為100M全雙工,會出現協商不成功,連接不上!這個時候,如果插拔一下網線,又會重新協商在100M半雙工。
2.4 千兆光口自協商
千兆光口可以工作在強制和自協商兩種模式。802.3規范中千兆光口只支持1000M速率,支持全雙工(Full)和半雙工(Half)兩種雙工模式。
自協商和強制最根本的區別就是兩者再建立物理鏈路時發送的碼流不同,自協商模式發送的是/C/碼,也就是配置(Configuration)碼流,而強制模式發送的是/I/碼,也就是idle碼流。
千兆光口自協商過程:
1.兩端都設置為自協商模式
雙方互相發送/C/碼流,如果連續接收到3個相同的/C/碼且接收到的碼流和本端工作方式相匹配,則返回給對方一個帶有Ack應答的/C/碼,對端接收到Ack信息后,認為兩者可以互通,設置端口為UP狀態
2.一端設置為自協商,一端設置為強制
自協商端發送/C/碼流,強制端發送/I/碼流,強制端無法給對端提供本端的協商信息,也無法給對端返回Ack應答,故自協商端DOWN。但是強制端本身可以識別/C/碼,認為對端是與自己相匹配的端口,所以直接設置本端端口為UP狀態
3.兩端均設置為強制模式
雙方互相發送/I/碼流,一端接收到/I/碼流后,認為對端是與自己相匹配的端口,直接設置本端端口為UP狀態
2.5 自協商注意事項
有關自動協商的大多數問題是由于有一方沒有工作在自動協商方式。當一個站點工作在自動協商方式而另一方沒有時,只有一方發送快速鏈路脈沖。另一方已經設定在特定的速率和雙工方式下,這樣就不會跟對端進行協商。他已經被強行設定,就不會再考慮他連接端的工作方式。
由于強行設定的站點不會告訴正在協商的站點自己的速率和單雙工方式,自動協商的站點就必須自己決定合適的速率和單雙工方式來匹配對端,這叫做并行檢測。協商站點監聽從對端過來的鏈路脈沖能夠辨別通信速率。10,100和1000Mbs以太網使用不同的信號方式,所以協商站點能識別對端的工作速率。
然而,全半雙工又是另外一回事了。因為強行設定的站點不進行協商,協商站點沒有方法知道強行設定站點工作在哪種雙工方式下。協商站點為了避免全半雙工不匹配,根據802.3標準,它必需與強行設定的站點使用相同的速率,但是它工作在半雙工方式下。
不管速率如何(除了10Giga),半雙工是以太網的默認方式。在許多情況下,這會產生全半雙工不匹配問題。
如上面幾幅圖,為了兩端都達到全雙工方式,要么兩端都自動協商,要么兩端都強行設定。務必不要一端自動協商,另一端強行設定。這會導致雙工不匹配。建議把兩端設置留在自動協商以減少人為錯誤。
3.參考文獻
IEEE802.3ab
IEEE 802.3u
IEEE 802.3z
OSI