PHY以太网自动协商原理
?????????? 自協(xié)商是通過一種叫做快速連接脈沖(Fast Link Pulse)的信號實現(xiàn)的,簡稱FLP。自協(xié)商的雙方通過FLP來交換數(shù)據(jù)。
?????? 在具備自協(xié)商能力的端口沒有Link的情況下,端口一直發(fā)送FLP,在FLP中包含著自己的連接能力信息,包括支持的速率能力、雙工能力、流控能力等。這個連接能力是從自協(xié)商能力寄存器中得到的(Auto-Negotiation Advertisement Register ,PHY標(biāo)準(zhǔn)寄存器地址4 )。FLP中的編碼方式如圖。依靠脈沖位置編碼攜帶數(shù)據(jù)。一個FLP突發(fā)包含33個脈沖位置。17個奇數(shù)位置脈沖為時鐘脈沖,時鐘脈沖總是存在的;16個偶數(shù)位置脈沖用來表示數(shù)據(jù):此位置有脈沖表示1,此位置沒有脈沖表示0。這樣1個FPL的突發(fā)就可以傳輸16bit的數(shù)據(jù)。自協(xié)商交互數(shù)據(jù)就這樣通過物理線路被傳輸。
?????? 如果兩端都支持自協(xié)商,則都會接收到對方的FLP,并且把FLP中的信息解碼出來。得到對方的連接能力。并且把對端的自協(xié)商能力值記錄在自協(xié)商對端能力寄存器中(Auto-Negotiation Link Partner Ability Register , PHY標(biāo)準(zhǔn)寄存器地址5 )。同時把狀態(tài)寄存器(PHY標(biāo)準(zhǔn)寄存器地址1)的自協(xié)商完成bit(bit5)置成1。在自協(xié)商未完成的情況下,這個bit一直為0。然后各自根據(jù)自己和對方的最大連接能力,選擇最好的連接方式Link。比如,如果雙方都即支持10M也支持100M,則速率按照100M連接;雙方都即支持全雙工也支持半雙工,則按照全雙工連接。一定連接建立后,FLP就停止發(fā)送。直到鏈路中斷,或者得到自協(xié)商Restart命令時,才會再次發(fā)送FLP。
并行檢測
為了保證在對端不能支持自協(xié)商的情況下也能連接,引入了被稱為并行檢測(Parallel Detection)的機(jī)制。在一端打開自協(xié)商,另一端關(guān)閉自協(xié)商的情況下,連接的建立就依靠并行檢測功能實現(xiàn)。
并行檢測機(jī)制是這樣的:在具有自協(xié)商能力的設(shè)備端口上,如果接收不到FLP,則檢測是否有10M鏈路的特征信號或100M鏈路的特征信號。
?????? 1) 如果設(shè)備是10M設(shè)備,不支持自協(xié)商,則在鏈路上發(fā)送普通連接脈沖(Normal Link Pulse)簡稱NLP。NLP僅僅表示設(shè)備在位,不包含其它的額外信息。
?????? 2) 如果是100M設(shè)備,不支持自協(xié)商,則在沒有數(shù)據(jù)的情況下,在鏈路上一直發(fā)送4B/5B編碼的Idle符號。
并行檢測機(jī)制如果檢測到NLP,則知道對方支持10M速率;如果檢測到4B/5B編碼的Idle符號,則知道對方支持100M速率。但是對方是否支持全雙工、是否支持流控幀這些信息是無法得到的。因此在這種情況下,認(rèn)為對方只支持半雙工,不支持全雙工,且不支持流控幀。
?????? 基于以上原理,在對端不打開自協(xié)商時,打開自協(xié)商的一方只能協(xié)商成半雙工模式。
?????? 802.3協(xié)議規(guī)定,通過并行檢測建立連接后,PHY的狀態(tài)寄存器(PHY標(biāo)準(zhǔn)寄存器地址1)的自協(xié)商完成bit(bit5)依然要置位成1,盡管鏈路上并非使用了真正的自協(xié)商操作。同時規(guī)定在自協(xié)商完成bit為1的情況下,本地自協(xié)商能力寄存器(PHY標(biāo)準(zhǔn)寄存器地址4)和對端自協(xié)商能力寄存器(PHY標(biāo)準(zhǔn)寄存器地址5)是有意義的。所以,要把寄存器5中的數(shù)據(jù)更新。如果建立的連接為10M,則寄存器5的10M能力bit(bit5)置1,其它bit置0,表示對端只能支持10M半雙工;如果建立的連接為100M,則寄存器5的100M能力bit(bit7)置1,其它bit置0,表示對端只能支持100M半雙工。
千兆光口自協(xié)商:
?????? 千兆光口可以工作在強(qiáng)制和自協(xié)商兩種模式。802.3規(guī)范中千兆光口只支持1000M速率,支持全雙工(Full)和半雙工(Half)兩種雙工模式。
千兆光口自協(xié)商過程:
1) 兩端都設(shè)置為自協(xié)商模式
??????? 雙方互相發(fā)送/C/碼流,如果連續(xù)接收到3個相同的/C/碼且接收到的碼流和本端工作方式相匹配,則返回給對方一個帶有Ack應(yīng)答的/C/碼,對端接收到Ack信息后,認(rèn)為兩者可以互通,設(shè)置端口為UP狀態(tài)
2) 一端設(shè)置為自協(xié)商,一端設(shè)置為強(qiáng)制
?????? 自協(xié)商端發(fā)送/C/碼流,強(qiáng)制端發(fā)送/I/碼流,強(qiáng)制端無法給對端提供本端的協(xié)商信息,也無法給對端返回Ack應(yīng)答,故自協(xié)商端DOWN。但是強(qiáng)制端本身可以識別/C/碼,認(rèn)為對端是與自己相匹配的端口,所以直接設(shè)置本端端口為UP狀態(tài)
3) 兩端均設(shè)置為強(qiáng)制模式
?????? 雙方互相發(fā)送/I/碼流,一端接收到/I/碼流后,認(rèn)為對端是與自己相匹配的端口,直接設(shè)置本端端口為UP狀態(tài)
注意:
?????? 以太網(wǎng)交換機(jī)的兩個千兆電口對接時,如果一端配置成強(qiáng)制千兆全雙工模式,那么協(xié)商結(jié)果很可能是千兆全雙工模式。這個結(jié)果和常識相悖。正常情況下,一端強(qiáng)制一端自協(xié)商的話,協(xié)商結(jié)果應(yīng)該是半雙工模式。
之所以出現(xiàn)上面的情況,是因為這里的強(qiáng)制模式是假象,實際上端口依然工作在自協(xié)商模式,只是取消了千兆全雙工以外的能力。這樣,兩個自協(xié)商模式的端口對接,協(xié)商出全雙工模式也就是意料之中的事了。如果再深入一點(diǎn)點(diǎn),就會產(chǎn)生一個疑問——為什么交換機(jī)要這樣設(shè)定呢?這要從千兆電口的工作原理說起。
兩個千兆電口對接時,一端要工作在master模式,另一端則工作在slave模式。Slave一端不使用自己的時鐘,而是從接收到的信號中恢復(fù)時鐘,自己發(fā)送信號時就使用恢復(fù)出來的時鐘。這樣,可以有效保證雙方的同步。但是,誰當(dāng)master,誰又當(dāng)slave呢?這就要通過自協(xié)商功能做出裁決。正是因為這個原因,IEEE 802.3ab-1999標(biāo)準(zhǔn)規(guī)定,自協(xié)商功能是1000BASE-T以太網(wǎng)的必選項。
總結(jié)
以上是生活随笔為你收集整理的PHY以太网自动协商原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ubuntu16.04安装配置Caffe
- 下一篇: spring depends-on 不