由于IP數據包都是封裝在物理網絡層的數據幀中進行傳輸的,接收方的IP也只有在底層的物理網絡接收了數據幀后才能從物理網絡層協議取得該數據包。所以IP層要將數據進行廣播,必須通知物理網絡將數據包進行廣播。所以物理層也需要有廣播地址的表示方法,要有廣播數據的發送和接收技術。

圖1 物理層廣播數據包
大多數物理網絡技術都有表示廣播地址的方法。例如在以太網中,每個以太網地址長48位,所有位都為1的地址就表示廣播地址。即FF.FF.FF.FF.FF.FF.以 太網的網卡可以接收兩種數據幀,一種就是目的地址是本網卡物理地址的數據幀,另一種就是目的地址是廣播地址的數據幀。
物理網絡中廣播數據幀的發送技術也各不相同。例如在以太網這樣的總線型廣播式網絡中,廣播可以通過發送一個數據幀實現,因為所有網絡中的網卡都會收到該數據幀。而在一些點到點連接的非廣播型網絡中,要發送一個廣播數據幀必須向網絡中每個系統單獨發送一個數據幀。
具體應用:比如ARP協議的實現,當兩臺計算機第一次進行通信時,要知道對方的MAC(物理地址),就發送一個MAC目的地址為FF.FF.FF.FF.FF.FF,IP目的地址為對方IP的廣播數據包,如圖1所示。
IP協議的廣播地址就是將網絡標識或主機標識設為特定值來表示的。
受限的廣播地址是255.255.255.255。這個地址用來表示本網絡內廣播地址。這個地址對于IP地址自動分配技術很有用,因為系統在啟動根本無法知道本地網絡的標識。此時,主機可能還不知道它所在網絡的網絡掩碼,甚至連它的IP地址也不知道。它就是用該地址發送一個廣播數據包并等待地址分配服務器的響應。
路由器接收到目的地址為該地址的數據包是不會將其進行轉發的,路由器不允許通過它,所以“受限”。因此使用該地址的廣播數據包是不會擴散到本地網絡之外的,這樣的數據包僅出現在本地網絡中。
具體應用:比如在一個DHCP服務的網絡中,當客戶端第一次啟動獲取IP時,因為它還沒有IP,也不知道網絡DHCP的服務器,所以就要向本網絡內廣播查找DHCP服務了,如圖2所示。
直接廣播地址是主機號為全1的地址。它用來表示特定網絡的廣播,這個地址中網絡標識部分指定了該廣播數據包應該在其中進行廣播的網絡,該網絡可以不是本地網絡。它是允許通過路由器的,當然不是所有的路由器,傻瓜式路由器是默認阻止直接廣播的。
比 如IP地 址 位172.16.20.1/24的 主機也可以發送廣播到172.16.10.0/24這個網絡上的。

圖2 網絡層受限廣播

圖3 網絡層直接廣播

圖4 本地MAC-IP緩存表

圖5 ICMP應答數據包
一個路由器必須轉發指向網絡的廣播,但它也必須有一個不進行轉發的選擇。
具體應用:比如在一個局域網的工作組(網上鄰居)環境中,當計算機啟動時,要向自己所在的網絡廣播進行注冊。當計算機正常關機時,也要向所在網絡廣播進行注銷。如圖3所示。
另類妙用:探測網絡中的路由設備。比如我們所在網絡為172.16.20.0(24),網 絡 廣 播 地 址 為172.16.20.255。
當我們PING該廣播地址,會發現如圖4所示。
從上圖4得知,發送了一個ICMP協議數據包,結果顯示超時沒有收到應答數據包,通過檢測MAC緩存表,也沒有發現有什么有價值的信息,除了網關172.16.20.254的MAC地址。
但是通過抓包發現有5個ICMP應答數據包,如圖5所示。
從后面的源物理地址可以看出這分別是三個TP-LINK路由器和兩個水星路由器的信息,實際上也是如此,本網段有5個無線路由器了。
這里有兩個疑惑:一是回應數據包在PING命令后面沒有顯示出來,因為它后面的目的地址是廣播地址,沒有具體到哪個客戶機(但在Windows XP上好像可以回應了,可能是Windows 10在此做了改進了);二是既然抓包收到了回應包,為什么沒有MAC地址表?
筆者推測因為目的地址是指向廣播數據包,所以該網段的所有設備都收到了,只有路由器直接回應了,就不存在IP與MAC的解析了。
子網廣播與直接廣播類似,只是借用了常規分類地址中的網絡號來作為主機部分的地址。指向子網的廣播地址是主機號為全1且有特定子網號的地址。作為子網直接廣播地址的IP地址需要了解子網的掩碼。
例如,如果路由器收到發往172.16.2.255的數據包,如果是常規網絡分類應該是B類網絡,默認子網掩碼是255.255.0.0,那它就是一個直接廣播172.16.0.0,如果子網掩碼設為255.255.255.0時,該地址就是指向子網172.16.2.0的廣播地址;但如該子網掩碼為255.255.254.0,該地址就不是指向子網的廣播地址。
指向所有子網的廣播也需要了解目的網絡的子網掩碼,以便與指向網絡的廣播地址區分開。指向所有子網的廣播地址的子網號及主機號為全1。
例如,如果目的子網掩碼為255.255.255.0,那么IP地址172.16.255.255是一個指向所有子網172.16.0.0--172.16.255.255的廣播地址。然而,如果網絡沒有劃分子網,這就是一個指向網絡172.16.0.0的廣播。
如果是本網絡內的廣播,它應該將目的IP地址設直接廣播地址或子網廣播地址,然后要求底層物理網絡將該數據包廣播出去。
如果是外部網絡的廣播,它就應該將目的IP地址設為外網廣播地址,但不能要求物理網絡廣播該數據包。而是將數據包以單播形式發送給路由器。路由器在處理這種廣播數據包時,先與單播數據包一樣查找路由表確定下一站。
如果下一站是另個路由器,那它的處理方式就和單播數據包一樣,將它轉發給下一站路由器。
如果發現下一站是直接連接,即目的網絡是直接連接在該路由器上的,這時路由器就要求相應端口的物理網絡層以廣播的形式將數據發送到相應的網絡上,同時路由器還需要將該數據包提交給路由器的相應上層協議處理,因為路由器也是該網絡中的一個系統。對于廣播包的接收和單播包的接收過程相同。
網絡中正常的廣播包是網絡暢通運行的必要保證,但如果因為設備故障、配置失誤或其它原因導致網絡中長時間出現大量的廣播包,就會出現所謂的“廣播風暴”。
廣播風暴就是網絡長時間被大量的廣播數據包所占用,正常的點對點通信無法正常進行,外在表現為網絡速度奇慢無比、網絡丟包、響應遲緩和時斷時通等。
通過對以上各種廣播數據包的分析梳理,當出現廣播風暴時就會作出精準的判斷哪些是正常的廣播數據包了。