1. 程式人生 > >組播MAC地址和各類IP地址

組播MAC地址和各類IP地址

MAC地址是乙太網二層使用的一個48bit(6位元組十六進位制數)的地址,用來標識裝置位置。MAC地址分成兩部分,前24位是組織唯一識別符號(OUI, Organizationally unique identifier),後24位由廠商自行分配。

    MAC地址有單播、組播、廣播之分。單播地址(unicast address)表示單一裝置、節點,多播地址或者組播地址(multicast address、group address)表示一組裝置、節點,廣播地址(broadcast address)是組播的特例,表示所有地址,用全F表示:FF-FF-FF-FF-FF-FF。當然,三層的IP地址也有單播、組播、廣播之分。

    48bit的MAC地址一般用6位元組的十六進位制來表示,如XX-XX-XX-XX-XX。IEEE 802.3規定:乙太網的第48bit(2012-04-11修改為The first bit) 用於表示這個地址是組播地址還是單播地址。如果這一位是0,表示此MAC地址是單播地址,如果這位是1,表示此MAC地址是多播地址。見IEEE 802.3 3.2.3 Address fields:“The first bit (LSB) shall be used in the Destination Address field as an address type designation bit to identify the Destination Address either as an individual or as a group address. If this bit is 0, it shall indicate that the address field contains an individual address. If this bit is 1, it shall indicate that the address field contains a group address that identifies none, one or more, or all of the stations connected to the LAN. In the Source Address field, the first bit is reserved and set to 0.”

    乙太網線路上按“Big Endian”位元組序傳送報文(也就是最高位元組先傳送,關於位元組序請參考相關文件),而位元序是”Little Endian”(也就是最低位先傳送)。一個十六進位制表示法表示的MAC地址01-80-C2-00-00-00,傳送時的bit順序就是:1000 0000 0000 0001 0100 0011 0000 0000 0000 0000 0000 0000,如下面的圖(從最左邊開始傳送):

    注意圖上的第47bit(2012-04-11修改為The second bit),這一位表示MAC地址是全球唯一地址還是本地地址,0表示全球唯一地址,1表示本地唯一地址。這一位也叫G/L位。

    對於網路裝置上固化的MAC地址,因為它唯一標識這個裝置,所以只能是單播地址,也就是MAC幀裡面的Source地址第48位(

2012-04-11修改為The first bit)只能為0。     

    我們常說有2的48次方個MAC地址可供網路裝置使用,這些地址可以多到給地球上每一粒沙子分配一個地址,其實這個數量要打折扣的,因為MAC地址雖然有這麼多,但真正用在網絡卡上並且全球唯一的只有2的46次方個:第48bit一定是0,第47bit一定是0。

    這也就引出了一個有意思的現象:隨便找一臺PC,觀察一下它的網絡卡地址,第1位元組的十六進位制數一般是4的倍數;檢視一下IEEE分配的OUI(http://standards.ieee.org/develop/regauth/oui/oui.txt),第1位元組的十六進位制數也一般是4的倍數(早期乙太網沒有本地地址的概念,所以分配的OUI裡面G/L bit也可能是1),這種情況下就不是4的倍數了,但肯定是2的倍數,因為第48位只能是0。

    關於組播地址,有這麼個誤解:MAC地址第1位元組必須是0x01才表示組播地址,連TCP/IP詳解上也這麼說(見中文版12.4.2第一段)。IEEE 802.3裡面已經明確說明了只要第48bit是1就表示組播地址,所以無論MAC地址第1位元組是0x01、0xC1或者是0x33都表示這個MAC地址 是組播地址(以0x33開頭的表示IPV6對應的二層組播地址)。之所以有這樣的誤解,是因為到目前為止,大部分組播MAC地址的第1位元組都是0x01。 如:

01-80-C2-00-00-00(STP協議使用)

01-80-C2-00-00-01(MAC Control的PAUSE幀使用)

01-80-C2-00-00-02(Slow Protocol: 802.3ah OAM/ LACP 協議都用這個地址,這個地址很有故事,有多少軟體處理這個地址會出問題啊!)

01-00-5E-xx-xx-xx(IP組播地址對應的二層組播地址)。

    之所以大部分組播地址都以01-80-C2和01-00-5E開頭,那是因為使用這些組播地址的協議都是帶頭大哥IEEE和IANA名下的,它們的OUI 分別是00-80-C2和00-00-5E是,變成組播地址就是01-80-C2和01-00-5E了,當然,除了帶頭大哥霸佔的這些組播地址,還有 01-00-0C-CC-CC-CC這樣的地址,這個地址是Cisco霸佔的,Cisco的OUI是00-00-0C。

1、802.3標準上說明某個bit時都是按照網路傳送順序來說的,所以我文章裡也按這個順序來說明,而不是十六進位制表示法中的bit位置,所以有了48bit的說法,為了防止誤解,還是遵從標準使用"The first bit". 
十六進位制表示法的01-80-C2-00-00-00,其中的"第40位"標識是否是組播地址,但傳送時bit順序是這樣的:
1000 0000 0000 0001 0100 0011 0000 0000 0000 0000 0000 0000
所以傳送過程中最先發送的一位(上面最左邊一位)標識是否是組播地址
2、00000001b傳的時候從1開始傳,然後再傳7個0。網路上傳送資料也是以位元為單位的,在網線上抓波形看不就是一個個方波嗎?物理層也沒辦法一個波形帶走8bit資料啊。
1、先總的來看ip地址分類

A類 :00000000×××——01111111××× 
                0.0.0.0 —— 127.255.255.255 
B類 :10000000,00000000×××——10111111,11111111××× 
               128.0.0.0——191.255.255.255
C類 :11000000,00000000,0000000×××——11011111,1111111,1111111××× 
               192.0.0.0——223.255.255.255
D類 :11100000××——111011111××××
            224.0.0.0——239.255.255.255 (組播地址)
E類 :11110000×××——11110111×××  
            240.0.0.0——247.255.255.255 (科學實驗)

IP組播和單播的目的地址不同,IP組播的目的地址是組地址——D類地址.

組播IP地址是本地管理組播地址:239.0.0.0239.255.255.255

D類地址是從224.0.0.0239.255.255.255之間的IP地址

其中224.0.0.0224.0.0.255是被保留的地址

224.0.0.1表示子網中所有的組播組

224.0.0.2表示子網中的所有路由器

224.0.0.5表示OSPFOpen Shortest Path First)路由器

224.0.0.6表示OSPF指定路由器

224.0.0.12表示DHCP(Dynamic Host Configuration Protocol)伺服器.

2層的MAC地址是如何與3層的IP地址進行對映的呢?通過將MAC地址的前25位強行規定位0100.5E,而後23位對應IP地址的後23位,而組播IP地址的前4位均相同如:
 IP
地址:1110yyyy.yxxxxxxx.xxxxxxx.xxxxxxxx
MAC
地址:00000001.00000000.01011110.0xxxxxxx.xxxxxxx.xxxxxxxx
例如:組播IP地址224.215.145.230應該對映到下列哪個組播MAC地址?( )

(A)01-00-5e-57-91-e6(B)01-00-5e-d7-91-e6

(C)01-00-5e-5b-91-e6(D)01-00-5e-55-91-e6

用二進位制來換算,將215.145.230換算成110101111001000111100110,取最後23位放到MAC地址中的23位可以計算得出答案是A
    顯然有32IP地址(有5y可以不一樣)對應一個MAC地址,所以要避免在同一網路中使用的多個組播IP地址對應一個MAC地址

各類地址:

一、Windows系統下,該地址還有一個別名叫二、172.16.*.*――172.31.*.*上面三個網段是私有地址,可以用於自己組網使用,這些地址主要用於企業內部網路中,但不能夠在Internet網沒有這些地址的路由,而使用這三個網段的計算機要上網必須要通過地址翻譯IP地址。一些頻寬路由器或是其它的網路裝置,往往使用IP地址,保留這三個網段的三、嚴格意義上來說,ip地址了它表示的是這樣一個集合,所有不清楚的主機和目的網路。這裡的不清楚是指在本機的路由表裡沒有特定條目指明如何到達。對本機來說,它就是一個收容所,所有不認識的三無人員,一律送進去。如果你在網路設定中設定了預設閘道器,那麼0.0.0.0的預設路由。255.255.255.255(同一個廣播域IP資料包的目的地址,這時主機可能還不知道它所在網路的網路掩碼,甚至連它的五、這是一組組播地址,需要注意它與廣播地址的區別,其中224.0.0.2特指所有的路由器,OSPF路由器地址,PIMV2路由器的地址。另外從239.0.0.0――239.255.255.255是私有地址 192.168. *.*功能一樣224.0.1.0—238.255.255.255可以用於IRDp(Internet路由發現協議,使用組播功能六、如果你的主機使用了ip地址,那麼當你的windows系統會為你分配這樣一個地址。如果你發現你的主機<span font-size:16px;"="" style="word-wrap: break-word; ">ip地址是個諸如此類的地址,很不幸,十有八九是你的網路不能正常運行了。