自協商功能原理及工作過程
自協商是通過一種叫做快速連線脈衝(Fast Link Pulse)的訊號實現的,簡稱FLP。自協商的雙方通過FLP來交換資料。
在具備自協商能力的埠沒有Link的情況下,埠一直髮送FLP,在FLP中包含著自己的連線能力資訊,包括支援的速率能力、雙工能力、流控能力等。這個連線能力是從自協商能力暫存器中得到的(Auto-Negotiation Advertisement Register ,PHY標準暫存器地址4 )。FLP中的編碼方式如圖。依靠脈衝位置編碼攜帶資料。一個FLP突發包含33個脈衝位置。17個奇數位置脈衝為時鐘脈衝,時鐘脈衝總是存在的;16個偶數位置脈衝用來表示資料:此位置有脈衝表示1,此位置沒有脈衝表示0。這樣1個FPL的突發就可以傳輸16bit的資料。自協商互動資料就這樣通過物理線路被傳輸。
如果兩端都支援自協商,則都會接收到對方的FLP,並且把FLP中的資訊解碼出來。得到對方的連線能力。並且把對端的自協商能力值記錄在自協商對端能力暫存器中(Auto-Negotiation Link Partner Ability Register , PHY標準暫存器地址5 )。同時把狀態暫存器(PHY標準暫存器地址1)的自協商完成bit(bit5)置成1。在自協商未完成的情況下,這個bit一直為0。然後各自根據自己和對方的最大連線能力,選擇最好的連線方式Link。比如,如果雙方都即支援10M也支援100M,則速率按照100M連線;雙方都即支援全雙工也支援半雙工,則按照全雙工連線。一定連線建立後,FLP就停止傳送。直到鏈路中斷,或者得到自協商Restart命令時,才會再次傳送FLP。
並行檢測
為了保證在對端不能支援自協商的情況下也能連線,引入了被稱為並行檢測(Parallel Detection)的機制。在一端開啟自協商,另一端關閉自協商的情況下,連線的建立就依靠並行檢測功能實現。
並行檢測機制是這樣的:在具有自協商能力的裝置埠上,如果接收不到FLP,則檢測是否有10M鏈路的特徵訊號或100M鏈路的特徵訊號。
1) 如果裝置是10M裝置,不支援自協商,則在鏈路上傳送普通連線脈衝(Normal Link Pulse)簡稱NLP。NLP僅僅表示裝置在位,不包含其它的額外資訊。
2) 如果是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半雙工。
千兆光口自協商:
千兆光口可以工作在強制和自協商兩種模式。802.3規範中千兆光口只支援1000M速率,支援全雙工(Full)和半雙工(Half)兩種雙工模式。
千兆光口自協商過程:
1) 兩端都設定為自協商模式
雙方互相傳送/C/碼流,如果連續接收到3個相同的/C/碼且接收到的碼流和本端工作方式相匹配,則返回給對方一個帶有Ack應答的/C/碼,對端接收到Ack資訊後,認為兩者可以互通,設定埠為UP狀態
2) 一端設定為自協商,一端設定為強制
自協商端傳送/C/碼流,強制端傳送/I/碼流,強制端無法給對端提供本端的協商資訊,也無法給對端返回Ack應答,故自協商端DOWN。但是強制端本身可以識別/C/碼,認為對端是與自己相匹配的埠,所以直接設定本端埠為UP狀態
3) 兩端均設定為強制模式
雙方互相傳送/I/碼流,一端接收到/I/碼流後,認為對端是與自己相匹配的埠,直接設定本端埠為UP狀態
注意:
乙太網交換機的兩個千兆電口對接時,如果一端配置成強制千兆全雙工模式,那麼協商結果很可能是千兆全雙工模式。這個結果和常識相悖。正常情況下,一端強制一端自協商的話,協商結果應該是半雙工模式。
之所以出現上面的情況,是因為這裡的強制模式是假象,實際上埠依然工作在自協商模式,只是取消了千兆全雙工以外的能力。這樣,兩個自協商模式的埠對接,協商出全雙工模式也就是意料之中的事了。如果再深入一點點,就會產生一個疑問——為什麼交換機要這樣設定呢?這要從千兆電口的工作原理說起。
兩個千兆電口對接時,一端要工作在master模式,另一端則工作在slave模式。Slave一端不使用自己的時鐘,而是從接收到的訊號中恢復時鐘,自己傳送訊號時就使用恢復出來的時鐘。這樣,可以有效保證雙方的同步。但是,誰當master,誰又當slave呢?這就要通過自協商功能做出裁決。正是因為這個原因,IEEE 802.3ab-1999標準規定,自協商功能是1000BASE-T乙太網的必選項。