當網絡接口收到一個數據幀時,若數據幀的目的地址==廣播地址 || 數據幀的目的地址 == 組播地址 || 目的地址==當前接口地址 || 當前接口工做在混雜模式下,則接受該數據幀,而後檢驗檢驗和,若正確則交付給網絡接口的設備驅動程序。設備驅動程序再進一步執行過濾,並將未過濾掉的幀交付給下一層協議,...網絡
首先IP地址 == 網絡號+子網號+主機號,因此: spa
當主機號全爲1時,是一個廣播地址.code
當主機號,子網號均爲1時,是一個廣播地址.接口
當主機號,子網號,網絡號均爲1時,即255.255.255.255;此時也是一個廣播地址,稱爲受限的廣播地址,即路由器不會轉發目的地址爲255.255.255.255的IP數據包!進程
設路由器D上有網絡接口A(廣播地址爲 ip1),B(廣播地址爲 ip2),C(廣播地址爲 ip3);當D接受一個目的地址爲ip的IP數據包時,若ip!=ip1&&ip!=ip2&&ip!=ip3,則查詢路由表,而後轉發該IP數據包,不然假設ip==ip1,則路由器會以該IP數據包爲數據生成一個廣播數據幀而後經過接口A發送.這就是廣播數據包的轉發.ip
主機在每個接口上都維護着一張表(表A),表中記錄着至少含有一個進程的多播組,以及多播組中進程個數.以下:路由
[接口A] 多播組地址,多播組中進程個數
網絡接口的設備驅動程序進行多播過濾來檢測該主機是否屬於多播地址說明的多播組,實現多是,主機的每個多播接口都維護着一張表(表B),表中記錄着容許的多播MAC地址,當接口接收到一個多播數據幀時,若該幀的目的地址在表中存在,則接受該數據幀,不然丟棄該數據幀.class
路由器在每個接口上維護着一張表(表C),表中記錄着至少含有一個主機的多播組地址.路由器
進程在主機的一個給定接口I上加入一個給定的多播組G,此時通過大概以下:程序
若G在接口I的表A中已經存在,則更新相應的'進程個數'字段便可.
若G在接口I的表A中不存在,則在接口I的表A中新建一項,該項的'多播組地址'字段設爲G,'多播組中進程個數'字段設爲1,而且將G添加到接口I的表B中.
該組地址被稱爲全部主機組地址,它涉及在一個物理網絡中的全部具有多播能力的主機和路由器.
具備多播能力的接口在初始化以後會將 224.0.0.1 對應的MAC地址添加到該接口的表B上,同時將224.0.0.1添加到該接口的表A上.
版本,用於說明IGMP協議的版本,取值爲1;
類型,若值爲1,代表該IGMP報文是查詢報文,此時'32位組地址'爲0,若值爲2,代表該IGMP報文是報告報文,此時'32位組地址'爲相應的組地址.
由多播路由器按期發送,而且多播路由器必須向每一個接口發送一個 IGMP 查詢報文,此時發送的幀的格式以下:
幀首部:01:00:5e:00:00:01(即224.0.0.1對應的MAC地址);發送接口的MAC地址;
IP首部: TTL=1;目的地址=224.0.0.1;源地址=發送接口的IP地址;
IGMP 報文,依據IGMP報文格式填充.
假設該IGMP報文被主機H的多播接口I接受到,則I的設備驅動程序根據I的表B決定接受該數據幀,以及IP層根據I的表A決定接受該IP數據包,最終上交給IGMP層.
IGMP 層對I的表A上的每個多播組G都生成一個 IGMP 報告報文,而後經過接口I發送該IGMP報文,此時發送的幀格式以下:
幀首部:目的地址=G對應的MAC地址 ;源地址=接口I的MAC地址.
IP首部:TTL=1,目的地址=G;源地址=接口I的IP地址;
IGMP: 32位的多播組地址=G.
多播路由器必須接收在它全部接口上的全部多播數據報,所以多播路由器能夠接收到上述發送的承載着IGMP報告報文的數據幀(假設該數據幀被接口J收到),而且會把它交付多播路由器的IGMP層,此時
若多播組地址G在接口J的表C上不存在,則將多播組地址G添加到接口J的表C上.
若已經存在,則不進行任何操做,由於多播路由器並不關心有多少主機屬於該組,而只關心該組是否還至少擁有一個主機.
爲何目的地址=G/G對應的MAC地址,能夠參見TCP/IP詳解卷-P114-13.3.3.
TTL爲0的多播數據報將被限制在同一主機,即若主機上某進程產生了TTL=0的UDP多播數據包,則該數據包會直接交付該主機的UDP層,而後按照UDP端點交付給主機上相應的進程.
TTL爲1的多播數據報僅侷限在同一物理網絡內傳送,即多播路由器不會轉發該多播數據包.所以該多播數據包僅被同一物理網絡中相應主機接收到.
僅當TTL>1而且目的地址不屬於[224.0.0.0-224.0.0.255]的多播數據包纔會被路由器轉發.
若該多播數據包的目的地址M在多播路由器的接口I的表C中存在,則向接口I發送該多播數據包,發送的數據幀格式以下:
幀首部: 目的地址=M對應的MAC地址;源地址=接口I的MAC地址;
IP數據包
不然,根據多播路由器的路由表來轉發該多播數據包,多播路由器的路由表可能以下: