1. 程式人生 > >DHCP迴應報文廣播還是單播方式深度探究

DHCP迴應報文廣播還是單播方式深度探究

對DHCP伺服器迴應報文的抓包實驗探究
對於DHCP報文中的offer報文和ack報文,到底是以廣播還是單播的方式回覆給主機,一直存在爭議,現做如下抓包實驗,具體的來分析DHCP報文出現的“可疑點”。
一、 猜想
對於DHCP的回覆報文到底是廣播還是單播的方式回覆,這在之前的幾次用wireshark抓包實驗中都得到了驗證,結果是既有單播也有廣播,那麼我們不妨先假定DHCP的回覆方式是廣播。
二、 實驗設計
為了驗證我們的猜想,肯定需要通過抓包軟體抓取實際中的DHCP報文,但是僅僅抓取一次存在偶然性,那麼這裡先設計抓取報文3次,因為考慮到這跟連線的網路有關係,或者說可能會受到其他因素的影響,則只在很短一段時間內連續抓取三次,報文結果如下:
這裡寫圖片描述


這裡寫圖片描述
這裡寫圖片描述

這三次報文抓取是在教學樓,連線校園無線網路抓取的,三次抓取的結果都是單播的方式,但是僅僅靠這個實驗資料並不能下結論驗證說最開始的猜想是錯誤的。
因為之前的確抓取到過廣播的報文,報文的格式如下:
這裡寫圖片描述
這裡可以看到迴應的報文是廣播的方式,但是這個報文不是連線的學校網路,是連線家中的路由器。到這裡不得不思考的問題是,DHCP的迴應方式是跟身處的環境有關,還是跟電腦本身有關?並且控制廣播還是單播到底是由什麼引起的,單播和廣播的回覆報文包到底有什麼不同?
提出上面兩個問題後,開啟前後抓取到的不同的資料包進行觀察,結果如下:
這裡寫圖片描述
這裡寫圖片描述
這裡可以很明顯的觀察到bootp flags欄位的值不一樣,由此可以基本得到結論:DHCP伺服器的迴應報文跟bootstrap這層中的bootp flags欄位的值有關,當bootp flags為0x8000時,是廣播的方式;當bootp flags為0x0000時,是單播的方式。
同時,查詢了思科給予的官方解釋也是如此,這個結論是完全正確的。
但是,深入思考的話,不得不想到一個問題,廣播還是單播到底是由什麼決定的?是訪問的DHCP伺服器原本就是這麼設定的還是跟自身的主機有關?
首先來假設跟訪問的DHCP伺服器有關,可以做這樣的實驗,同時用多臺主機同時連線教學樓的無線網路,那麼可以肯定的是訪問的DHCP伺服器肯定是學校搭建的伺服器,不間斷的抓取DHCP報文,試試看到底能不能抓取到廣播的報文(之前抓取到的都是單播)。
注:這裡用多臺電腦的原因是提高抓取到的概率。
抓取後的結果如下:
這裡寫圖片描述


這個就是實驗主機抓到的在教學樓連線校園無線網的DHCP報文,是以廣播的方式傳送的,那麼這就已經可以說明一個問題,那就是DHCP伺服器迴應報文的方式與DHCP伺服器本身無關。
既然排除了這個可能,再驗證是不是與獲取IP地址的主機有關?因為在offer報文前,主機會廣播發送一個discover報文給DHCP伺服器,猜想可能問題出現在這個報文中,對比一下廣播報文和單播報文的區別,發現了下面的問題:
這裡寫圖片描述
這裡寫圖片描述
從中可以發現同樣在Bootstrap層中的Bootp flags欄位,如果為0x8000則為廣播,而為0x0000則為單播。由此可以得到結論:DHC伺服器迴應的方式與伺服器本身無關,只與主機廣播發送的discover報文中Bootp flags欄位的值有關,也就是說主機決定了DHCP報文迴應的方式。
DHCP迴應報文是廣播還是單播迴應?這個問題已經得到了結論,但是繼續往下深想,為什麼有些主機抓取的是廣播有些獲取到的是單播?
為了解決這個問題,我查看了RFC的文獻,得到了以一段的解說:
If the ‘giaddr’ field in a DHCP message from a client is non-zero,the server sends any return messages to the ‘DHCP server’ port on the BOOTP relay agent whose address appears in ‘giaddr’. If the ‘giaddr’ field is zero and the ‘ciaddr’ field is nonzero, then the server unicasts DHCPOFFER and DHCPACK messages to the address in ‘ciaddr’.If ‘giaddr’ is zero and ‘ciaddr’ is zero, and the broadcast bit is set, then the server broadcasts DHCPOFFER and DHCPACK messages to 0xffffffff. If the broadcast bit is not set and ‘giaddr’ is zero and ‘ciaddr’ is zero, then the server unicasts DHCPOFFER and DHCPACK messages to the client’s hardware address and ‘yiaddr’ address. In all cases, when ‘giaddr’ is zero, the server broadcasts any DHCPNAK messages to 0xffffffff.
翻譯:如果來自客戶機的DHCP訊息中的“giaddr”欄位是非零的,伺服器會將任何返回訊息傳送到BOOTP中繼代理的“DHCP伺服器”埠,其地址出現在“giaddr”中。如果“giaddr”欄位為零,“ciaddr”欄位為非零,則伺服器unicast DHCPOFFER和DHCPACK訊息到“ciaddr”中的地址。如果“giaddr”為零,“ciaddr”為零,廣播位被設定,則伺服器將DHCPOFFER和DHCPACK訊息廣播到0xffffffff。如果廣播位沒有設定,而“giaddr”為零,“ciaddr”為零,則伺服器unicast DHCPOFFER和DHCPACK訊息到客戶機的硬體地址和“yiaddr”地址。在所有情況下,當“giaddr”為零時,伺服器將任何DHCPNAK訊息廣播到0xffffffff。

  1. 當DHCP client啟動並進行DHCP初始化時,她會在本地網路廣播配置請求。
  2. 如果本地網路存在DHCP server,則可以直接進行DHCP配置,不需要DHCP relay。
  3. 如果本地網路沒有DHCP server,則與本地網路相連的劇透DHCP relay功能的網路裝置收到該廣播包後,將進行適當處理並轉發給指定的氣態網路上的DHCP server。
  4. DHCP server根據DHCP client提高的資訊進行相應的配置,並通過DHCP relay將配置資訊傳送給DHCP client,完成對DHCP client的動態配置。
    事實上,從開始到最終完成配置,需要多次這樣報文的互動過程。DHCP relay裝置修改DHCP訊息中的相擁欄位,把DHCP的廣播包改為單播包,並負責在伺服器與客戶機之間轉換。
    研究到這裡基本弄清楚了為什麼會出現單播的情況,同時還是有一個疑問沒有解決,那就是廣播的存在。如果還是解釋為,因為IP地址沒有分配採用廣播的轉發方式,這時候顯然已經說不通了。通過查閱資料發現,當主機發送discover報文不經過DHCP relay(DHCP 中繼器)時,主機將報文中的Bootp flags置為0x8000還是0x0000只要是根據以下的情況:
    在沒有中繼的情況下,首先看ciaddr域是否為零,如果不為零,就是單播,目的地址就是該ciaddr域中的地址;如果ciaddr域為零,再看其是否設定了broadcast bit位,如果設定了,就全F地址廣播,如果沒有設定,就是單播,目的地址是該client的硬體地址(L2)和yiaddr域中的地址(L3)。broadcast bit位是由client端決定的。
    到這裡已經很清楚的瞭解了DHCP的轉發方式,同時也清晰的明白了DHCP的轉發方式跟主機發送的discover報文有關,而這個報文中的欄位又是跟DHCP的中繼器和broadcast bit位有關,不得不說這次的探究實驗,真正明白了計算機網路龐大的複雜性。

相關推薦

DHCP迴應報文廣播還是方式深度探究

對DHCP伺服器迴應報文的抓包實驗探究 對於DHCP報文中的offer報文和ack報文,到底是以廣播還是單播的方式回覆給主機,一直存在爭議,現做如下抓包實驗,具體的來分析DHCP報文出現的“可疑點”。 一、 猜想 對於DHCP的回覆報文到底是廣播還是單播

DHCP伺服器回覆資料包是還是廣播的爭議

一:網路裝置上的DHCP回覆包都是單播. 二:微軟官方解釋: 預設情況下, Microsoft Windows NT 4.0 DHCP 伺服器 傳送所有的 DHCP 響應作為 IP 廣播到受限廣播地址 (255.255.255.255)。 但是,DHCP 伺服器

廣播、組、多

交換機 電子 orm 數據流 優點 網上 size qos 電視機 組播=多播 單播、組播、廣播是網絡中結點的3種通訊方式。 1、單播 1)定義: 主機之間一對一的通訊模式。網絡中的交換機和路由器對數據只轉發,不復制。網絡中的路由器和交換機根據目標地址選擇傳輸路徑。

圖說,組廣播,選和地域

ecif nic 技術分享 packet add ast software protoc cti 在計算機網絡之路由選擇中,單播(unicast),組播(multicast)和廣播(broadcast)可謂家喻戶曉,婦孺皆知。但其實播(cast)有5種,列舉如下: Rou

MAC地址(廣播、組、數據收發)

制造商 局域網 對比 地址 方式 傳輸 eid type 但是 MAC地址 網絡設備的MAC地址是全球唯一的。MAC地址長度為48比特,通常用十六進制表示。MAC地址包含兩部分:前24比特是組織唯一標識符(OUI,OrganizationallyUniqueIdent

廣播,組

個性 結構 數據 帶寬 能夠 時間 技術 網絡設備 都是 http://blog.csdn.net/cosmoslife/article/details/7616797 當前的網絡中有三種通訊模式:單播、廣播、組播(多播),其中的組播出現時間最晚但同時具備單播和廣播的優點,

,組(多),廣播以及任

pac 視頻 rsvp 使用 blank 缺點 ron ssa 處理 目錄 [+] 單播(unicast): 是指封包在計算機網絡的傳輸中,目的地址為單一目標的一種傳輸方式。它是現今網絡應用最為廣泛,通常所使用的網絡協議或服務大多采用單播傳輸,例如一切基於TCP的協議

、多(組)和廣播的區別

本文來自百度文庫的一篇文件,放在部落格供自己和各位朋友學習和了解 單播”(Unicast)、“多播”(Multicast)和“廣播”(Broadcast)這三個術語都是用來描述網路節點之間通訊方式的術語。那麼這些術語究竟是什麼意思?區別何在?    1.單播:網路節點之間的通

ZStack廣播具體操作與原理資料整理

// Register the endpoint description with the AF afRegister( &GenericApp_epDesc ); 3.在需要傳送資料的地方,執行如下程式碼: if ( AF_DataRequest( &GenericApp_DstAddr,

計算機網路的三種通訊模式(廣播,組)小結

1.單播(Unicast) 單播在傳送者和每一接收者之間實現點對點網路連線。 如果一臺傳送者同時給多個的接收者傳輸相同 的資料,也必須相應的複製多份的相同資料包。如果有大量主機希望獲得資料包的同一份拷貝時, 將 導致傳送者負擔沉重、延遲長、網路擁塞;為保證一定

LIVE555再學習 -- 、多廣播、直播、點播 都是個啥?

轉自:https://blog.csdn.net/qq_29350001/article/details/78086800 一、單播 簡介        Unicast,是客戶端與伺服器之間的點到點連線。“點到點”指每個客戶端都從伺服器接收遠端流。

通訊、主通訊和廣播通訊

單播 簡介 單播(unicast)是指封包在計算機網路的傳輸中,目的地址為單一目標的一種傳輸方式。每次只有兩個實體相互通訊,傳送端和接收端都是唯一確定的。它是現今網路應用最為廣泛,通常所使用的網路協議或服務大多采用單播傳輸,例如一切基於TCP的協議。 單播地址 在IPv4網路中

廣播、多的原理

Question 這是計算機網路非常基礎的概念,在這裡重點記錄它們的原理和實現方式。我最不能理解的是組播的實現。 基本概念 IP地址的分類 IP地址分為四個級別,A類、B類、C類、D類 A類是IP地址首位以“0”開始的地址,第1至

WIFI專案--【Java TCP/IP Socket】 — 廣播、組

在當前網路通訊中(TCP/IP也不例外)有三種通訊模式:單播、廣播、組播(又叫多播, 個人感覺叫多播描述的有點不恰當),其中多播出現的時間最晚,但同時具備單播和廣播的優點,最具有發展前景。 通訊方式分類: 1.單播:單臺主機與單臺主機之間的通訊;

(組廣播區分

單播 多播(組播) 廣播 Mac地址區分: 1.6個位元組全F廣播地址:FFFF-FFFF-FFFF 2.首個位元組低4位為奇數表示為組播地址:71XX-XXXX-XXXX,一般可通過mac_addr[0]&x01 來區分 3.除上述1、2以外的,為單播MAC地址

計算機網路三種通訊模式(廣播、組)小結

1、單播定義:單播在傳送者和每一接收者之間實現點對點網路連線。如果一臺傳送者同時給多個接收者傳輸相同的資料,也必須相應的複製多份的相同資料包。如果有大量主機希望獲得資料包的同一份拷貝時,將導致傳送者負擔沉重、延遲長、網路擁塞,為保證一定的服務質量需增加硬體和頻寬。單播優點:1

UDP廣播、多

在Linux中使用多播技術,與使用UDP給單個使用者傳送訊息,沒有多大的區別,只是你要使用一個特殊的多播IP地址,還有一些環境需要改變一下。   一般的網絡卡,都是支援多播技術的,但是作業系統不一定。Linux一般在預設狀態編譯時,可能都不支援Multicast,你需要從新配置和編譯你的核心,使它支援多播,然

Java UDP 、多(組)、廣播、任(未實現)

單播、組播、廣播、任播的定義 單播(unicast): 是指封包在計算機網路的傳輸中,目的地址為單一目標的一種傳輸方式。它是現今網路應用最為廣泛,通常所使用的網路協議或服務大多采用單播傳輸,例如一切基於TCP的協議。 組播(multicast

廣播、組

單播:   主機之間“一對一”的通訊模式,網路中的交換機和路由器對資料只進行轉發不進行復制。   單播的優點:   1. 伺服器及時響應客戶機的請求   2. 伺服器針對每個客戶不同請求傳送不同資料,容易實現個性化服務。   單播的缺點:   1. 在客戶數量大、每個客戶機流量大的流媒體應用中伺服器不堪重負。

linux udp 廣播實現

前面介紹的TCP/IP知識都是基於單播,即一對一的方式,本節介紹一對多的廣播方式。廣播是由一個主機發向一個網路上所有主機的操作方式。例如在一個區域網內進行廣播,同一子網內的所有主機都可以收到此廣播發送的資料。 11.2.1 廣播的IP地址 要使用廣播,需要了解IPv4特定的廣播