一篇讲组播MAC和各类IP地址的文章
轉自:http://www.cnblogs.com/lifan3a/articles/6650936.html
組播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組播地址對應的二層組播地址)。
完整的列表見http://standards.ieee.org/develop/regauth/grpmac/public.html
??? 之所以大部分組播地址都以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.0~239.255.255.255
?
D類地址是從224.0.0.0到239.255.255.255之間的IP地址
其中224.0.0.0到224.0.0.255是被保留的地址
224.0.0.1表示子網中所有的組播組
224.0.0.2表示子網中的所有路由器
224.0.0.5表示OSPF(Open 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換算成1101,0111,1001,0001,1110,0110,取最后23位放到MAC地址中的23位可以計算得出答案是A。
????顯然有32個IP地址(有5個y可以不一樣)對應一個MAC地址,所以要避免在同一網絡中使用的多個組播IP地址對應一個MAC地址。
各類地址:
一、127.0.0.1<span "="">
127是一個保留地址,該地址是指電腦本身,主要作用是預留下作為測試使用,用于網絡軟件測試以及本地機進程間通信。在Windows系統下,該地址還有一個別名叫“localhost”,無論是哪個程序,一旦使用該地址發送數據,協議軟件會立即返回,不進行任何網絡傳輸,除非出錯,包含該網絡號的分組是不能夠出現在任何網絡上的。<span "="">
二、10.*.*.*,172.16.*.*――172.31.*.*,192.168.*.*<span "="">
上面三個網段是私有地址,可以用于自己組網使用,這些地址主要用于企業內部網絡中,但不能夠在Internet網上使用,Internet網沒有這些地址的路由,而使用這三個網段的計算機要上網必須要通過地址翻譯(NAT),將私有地址翻譯成公用合法的IP地址。一些帶寬路由器或是其它的網絡設備,往往使用192.168.1.1作為缺省的地址,由于私有個人網絡不會與外部互連,所以可以使用隨意的IP地址,保留這三個網段的IP?地址使其使用,是為了避免以后接入公網時引起地址混亂。<span "="">
三、0.0.0.0<span "="">
嚴格意義上來說,0.0.0.0已經不是真正意義上的ip地址了。它表示的是這樣一個集合,所有不清楚的主機和目的網絡。這里的不清楚是指在本機的路由表里沒有特定條目指明如何到達。對本機來說,它就是一個收容所,所有不認識的三無人員,一律送進去。如果你在網絡設置中設置了缺省網關,那么windows系統就會自動產生一個目的地址為0.0.0.0的缺省路由。<span "="">
四、255.255.255.255<span "="">
受限制的廣播地址,對本機來說,這個地址指本網段內(同一個廣播域)的所有主機,該地址用于主機配置過程中IP數據包的目的地址,這時主機可能還不知道它所在網絡的網絡掩碼,甚至連它的IP地址也還不知道。在任何情況下,路由器都會禁止轉發目的地址為受限的廣播地址的數據包,這樣的數據包僅會出現在本地網絡中。<span "="">
五、224.0.0.0—239.255.255.255<span "="">
這是一組組播地址,需要注意它與廣播地址的區別,其中224.0.0.1特指所有的主機,224.0.0.2特指所有的路由器,224.0.0.5指所有的OSPF路由器地址,224.0.0.13指PIMV2路由器的地址。另外從224.0.0.0――224.0.0.255只能用于局域網中路由器是不會轉發的,239.0.0.0――239.255.255.255是私有地址?(與192.168. *.*功能一樣),224.0.1.0—238.255.255.255可以用于Internet上。如果你的主機開啟了IRDp(Internet路由發現協議,使用組播功能)功能,那么你的主機路由表中應該會有這樣的一條路由。<span "="">
六、169.254.*.*<span "="">
如果你的主機使用了DHCP功能自動獲得一個ip地址,那么當你的DHCP服務器發生故障或響應時間太長而超出系統規定的一個時間,windows系統會為你分配這樣一個地址。如果你發現你的主機ip地址是個諸如此類的地址,很不幸,十有八九是你的網絡不能正常運行了
總結
以上是生活随笔為你收集整理的一篇讲组播MAC和各类IP地址的文章的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序使用vant-weapp自定义
- 下一篇: 越狱中的项目管理(转载)