我想 Ethernet 恐怕是最佳的邏輯 bus 形態例子了﹐它也是現在最普遍的 LAN 類型。
這個邏輯 bus 形態是如何工作的呢﹖很簡單﹐就是每次只能有一個節點在網路上傳遞數據給其它節點﹐其形式是通過對整個網路進行廣播(broadcast)。然後其它接點收聽到廣播之後﹐就看看數據是否傳個自己的﹐如果是﹐則接收下來﹔如果不是﹐則略過。每一節點都有一個自己用的 48bit 的位址(也可以稱為Node ID﹐也就是在前面說的網卡硬體位址了)﹐每一個在網路中傳輸的數據都是以這個地址為傳送和接收依據的。
當任何一個節點進行廣播的時候﹐所有的其它節點都收聽得到,但真正接收的只有一個節點。其情形就像我們上課一樣﹐老師說﹕“第幾排第幾號同學出來拿作業﹗”雖然全班同學都聽得到﹐但卻只有一位同學可以拿到。Bus 形態也和這種形式很類似﹐當然具有更嚴謹的一套法則啦。在bus上面的數據都是以框包(frame)形式傳遞﹐框包送出來之後﹐會以電子信號同時向 bus 兩端廣播﹐當目的地接收到給它的框包﹐也不是據為己有的﹐而是複製一份給自己﹐而原來的框包則還是會繼續被送給下一個節點﹐直到封包抵達終端電阻才會被銷毀。
任何類型的數據要在這一網路上面傳遞的話﹐都必須嚴格的遵循既定的框包格式﹕Data Link Layer 作制定的格式﹐是給網路用來安排數據的。Ethernet 的 Data Link Layer Frame 看起來如圖﹕
序言 (Preamble)
| 目的地 硬體位址 (Destination)
| 來源 硬體位址 (Source)
| 信息類型 (Message Type)
| 數據 (Data)
| 封包監測資料 (Frame check sequence)
|
8 bytes
| 6 bytes
| 6 bytes
| 2 bytes
| 46-1500 bytes
| 4 bytes
|
每一個 frame 都不可以超過1518bytes﹐這樣就可以確保任何一個工作站都不會佔用網路太久。工作站對網路廣播之前﹐都會先傾聽一下有沒其它人在使用網路﹐如果聽起來很安靜﹐則它會發送廣播。但要是網路上仍然嘈嘈的呢﹖(這個情形就是 bus 形態最擔心的)﹐這時候工作站就需等待了。
假如節點 A 和節點 B 相隔得太遠的話﹐當他們傾聽的時候可能都還沒聽得到對方有話要說﹐就都同時把封包出去﹐這就是所謂的 碰撞(collision) 了。如果當一個碰撞發生了﹐就會在網線產生一個頻率漣漪(frequecy ripple)。如果第一個節點監測到有這樣的 ripple ﹐它就會發出一個高頻信號去清除所有其它信號。這個信號告訴所有節點碰撞已經發生﹐這樣全部節點都不會再發送封包了。這時候﹐每一個節點都會隨機的等待一段時間再重新進行廣播﹐總共可以進行 16 次嘗試大家才會最終放棄。不過其情形也不會好到哪裡﹐因為在大家等待之後﹐彼此都有封包要發送﹐誰都想先發送自己的封包﹐如果節點越多﹐距離越長﹐發生碰撞的機會也就越高。
情形就象上課時您要發言﹐得先看看有沒有其它同學在發言﹐如果已經有人在說話了﹐那你就先等他/她講完再舉手。要是兩個人都同時舉手﹐老師就會宣佈重新再舉手﹐這時候大家可以在一秒鐘之內再舉手﹔要是還是一樣﹐那麼可以再於兩秒之內任何時段舉手﹔再來就 4 秒、8 秒、16 秒....的延續下去﹐要試過 16 次都還一樣﹐沒辦法了﹐大家都不要說好了。
在網路上﹐我們稱這樣的方法為 CSMA/CD (Carrier-Sensing Multiple Access with Collision Detection)。要注意的是﹐所有這些處理過程都必須在 Ethernet 網卡上面進行﹐也就是說﹐如果您要選用 Ethernet 形態﹐那麼你就必須全部使用 Ethernet 網卡。
Ethernet 可以在 bus, star 等物理形態上面使用。10baseT 就是使用 star 的物理形態﹐但邏輯上卻是 bus 形態來的﹐同樣也是 Ethernet﹐使用的是 IEEE802.3 標準。
Token Ring 網路在物理上也和 100BaseT Ethernet 一樣使用 star 形態。只不過代替 hub 的是 MAU 而已﹐一個 MAU 可以連接八台電腦﹐然後還可以連接到另一個 MUA。一塊 Token Ring 網卡上面﹐其中有端會帶有一個 D-shell 類型的接頭﹐而另一端則有一個 odd-looking IBM 接頭。在 Token Ring 上面無需使用終端電阻﹐網線的一頭接到網卡﹐另一頭接在 MUA 就可以了。
我們還記得在 Ethernet 系統上面使用廣播形式傳送封包﹐然而在 Token Ring 裡面﹐每一個節點都只會得到其前面的一個節點送來的信息。Token Ring 的靈魂所在是一個叫做 Token Packet 的封包。這樣的設計可以避免碰撞發生﹐Token Ring 可以確保每次只能有一個工作站可以發送資料﹐它們使用 token packet (或曰 token stick)來達到這一目的。只有獲得這個 Token packet 的接點才可以發送資料。
舉個例子﹐同學們在班上為了避免同時有兩個人發言﹐於是就使用一個令牌﹐由一個同學傳給下一個同學﹐然後最後的同學傳回給最前面的同學。拿到令牌的同學﹐看看如果令牌是空的﹐就把說話寫在令牌上面(寫滿為止﹐如果不夠用﹐等下次再寫)﹐然後註明來源地址和目的地址﹐再將令牌傳給下一位同學。接到令牌的同學﹐會檢查目的地址﹐如果不是給自己的﹐就傳給下一位﹐如果地址是給自己的﹐則抄一份保存﹐原來的令牌照樣傳遞下去。因為令牌是繞著圓圈的傳遞﹐所以始終會到自己手上的。當那位原先發送信息的同學收回令牌﹐看到來源地址是自己的﹐就把令牌擦乾淨﹐然後把令牌交給下一位同學﹐就算他還有話要說﹐也要這樣做。如果下一位同學沒有東西要寫﹐就簡單的把令牌交給下再一位則可﹔如果有東西要寫﹐就重複剛才的規則。
Token Ring 上使用的是類似的方法﹐只是略有不同而已﹕當一個節點獲得 Token Packet 並完成了信息準備之後﹐它會傳給下一個節點﹐如果沒有人接下來﹐就再傳一次﹐如果第二次都沒有人要﹐則給整個網路發送一個 solicit successor fram 的常規請求﹐詢問“有誰想要這一個 Token 啊﹖”﹐如果有節點回應這個請求﹐它就把 Token 直接傳到該地址。
不過同是使用 Ring 形態的 FDDI 則略有不同﹐也拿剛才的例子說明﹕凡是拿到令牌的同學﹐先把要說的東西寫在紙條上面﹐也註明是誰寫給誰的﹐然後把紙條夾在令牌上傳給下一位﹔要是沒有話要說就把令牌直接傳給下一位即可。等收到令牌的時候﹐就看看信息是否給自己的﹐如果是就抄一份保存下來﹐如果同時還有信息要送呢﹐再按格式填寫紙條﹐也夾在令牌上面傳給下一位同學。等令牌在繞回來的時候﹐檢查上面的那些紙條﹐如果發現發信人是自己的話﹐就把紙條拿下來﹐然後撕掉就行了。
在羅輯形態上﹐我們稱這種方法做﹕Token Passing。