如果您喜歡這裡的內容,記得分享到您的Facebook和Twitter上面所有的朋友們吧!

2009年5月26日 星期二

為何 IP Multicast 位址的 MAC address 必須擠到23 位元裡面 ?

應該各位在讀到 BSCI 教材中, 有關 IP Multicast 位址要對應到適當的 MAC address 來傳送這段時, 都會注意到: 好麻煩喔, 為什麼要設計成這樣, 硬是將數目比較多的 IP Multicast 位址, 以 "32比1" 的方式, 擠到比較小的 MAC Address 範圍內? 而且還是僅保留低位元的 "後23位元" 這麼奇怪怪的數字, 害我們這麼辛苦, 要去記對照規則!

其實這是有一段小故事的!

據說當年 IP Multicast 之父 Steve Deering 在還是研究生的時候, 為了要實作 IP Multicast 的驗證雛型, 必然也需要專用的 MAC 位址來給 IP Multicast 封包, 在 LAN 上面傳輸時使用.

各位應該知道, IP Multicast 的位址範圍, 是在 224.0.0.0 ~ 239.255.255.255 間的 D 等級網段. 如果要讓每一個IP Multicast 位址都有專有的 MAC 位址, 一共需要 2^28 個 MAC 位址, 也就是, 需要 16 個 OUI 的範圍才夠.

我們從二進位來看, 就會比較清楚:


    33          2          1          0
    1098765.43210987.65432109.876543210
    -------------------------------------

    (  224  .   0    .   0    .   0   )
    11100000.00000000.00000000.00000000

    11101111.11111111.11111111.11111111
    (  239  .  255   .  255   .  255  )

各位應該還記得我前一篇有關 MAC 位址的費用, 現在每一個 OUI 要 US$ 1,650, 當年要價也要 US$ 1,000. 換句話說, Steve 當年需要想辦法來支付 US$ 16,000 (相當於新台幣50多萬元) 給 IEEE, 才夠他完全的一對一來分配唯一的 MAC 位址給每個 IP Multicast 位址專用.

很不幸, 經費沒有那麼多, 只夠他申請一組 OUI, 也就是最多只有 2^24 個 MAC 可以使用. 這組得來不易的 OUI 當然也要省著用, 所以要先保留一個位元不能用, 所以只剩下 23 個位元, 也就是 2^23 個 MAC 位址才可以給 IP Multicast 位址使用.

這個當初 Steve 申請到的 OUI "01-00-5E(註1), 就成了我們今天 IP Multicast 專用的 MAC 位址的 OUI !

所以各位看到訊框的目的地 MAC 位址, 都會長成這個模樣:


                            |<        23 bits      >|
00000001-00000000-01011110-0XXXXXXX-XXXXXXXX-XXXXXXXX
   01   -   00   -   5E   -(00~7F) -(00~FF) - (00~FF)

所以這個故事也讓我們學到一件事: 錢還是很重要的!

[參考資料]


註1: 比較正確一點地說, 應該 Steve 註冊到的 OUI 是 "00-00-5E" 才對. 但是載送 IP Multicast 封包的訊框上第一個 Octet 的 multicast bit 一定是打開的, 所以使用類似 Wireshark 看到的時候外觀都會是 "01-00-5E".
如果您喜歡這篇文章,不考慮試試Email訂閱嗎?


Related Posts with Thumbnails

5 則留言:

  1. 真的沒有看到這篇文章我還從來沒想過原來是這樣,學習到新知識啦!

    回覆刪除
  2. "如果要讓每一個IP Multicast 位址都有專有的 MAC 位址, 一共需要 2^28 個 MAC 位址, 也就是, 需要 16 個 OUI 的範圍才夠"
    後面說
    "只夠他申請一組 OUI, 也就是最多只有 2^24 個 MAC 可以使用"
    這樣不是也才不夠2^4,為什麼會要16個OUI?

    回覆刪除
    回覆
    1. 您好!我的計算方式是,全部的 IP Multicast 總共可能的地址有 2^28 個,一個OUI提供 2^24 個地址,因此總共需要這麼多個 OUI: (2^28) / (2^24) = 2^(28-24) = 2^4 = 16。

      刪除

小技巧:也可以 匿名 留言!

經典熱門文章