應用層DHCP介紹 - daniel-qa/Network GitHub Wiki

應用層DHCP介紹

  • DHCP 在 OSI 模式的第七層

  • 左邊是 DHCP Client,右邊是 DHCP Server

電腦在開機時,會透過廣播,找到 DHCP Server,並要求 ip address

為什麼不用 TCP 點對點去找到這台 TCP Server?

假如要用 TCP 點對點,大前提,這台電腦必須要先有 IP,因為它目前沒有 IP, 所以不能用 TCP 點對對

DCHP 收到要求,回應一個預先定義範圍內,且沒有被使用的 IP,且包含 Subnet Mask, Default Gateway,DNS 相關的參數

  • Discover : 發出 Discover 的封包,去找有沒有 DHCP Server,可不可以給我一個 IP

  • Offer : 假如一台 DHCP Server 收到這個封包,就會回一個 Offer 的封包; Offer 封包內容包含我要給你什麼IP,Subnet mask,Default Gateway,DSN 等參數,還有我要租你這個IP多久

  • Request : 左邊的 DHCP Client 假如收到多台的 DHCP 都要租 IP給它,那它就會選擇其中一台DHCP Server 發出 Request,我就是要跟你租用這個 IP

  • ACK : 右邊的 DHCP Server 收到之後,就回一個 ACK 給左邊的 Client,這個 IP 就租給你,它會把這個 IP Mark 起來,在租約時間之內,就不能再租給別人

    透過這4個封包,左邊這個 DHCP Client 就可以租到一個浮動 IP


  • 實務上,我們不想為了DHCP 的服務還要浪費一台電腦,所以我們常常會把 DHCP 的角色設在 Router 上面

假設我們這個 Router 有兩個介面,兩個網段,這兩個網段的廣播,我們這台 Router 都會收到,

左邊的介面 IP是 10.1,右邊這個介面,IP 是 20.1

我們在 Router 上面就會規劃1個 10 的網段 IP 範圍,和 20 的網段的 IP 範圍,來租 IP 給 Client 端

  • 左邊的電腦會不會租用到 20 這個網段的 IP 範圍? 答案是不會,因為左邊這個電腦發出的 DHCP 的廣播,只有10.1這個介面會收到,20.1這個介面是收不到的

因為是 10.1 這個介面收到廣播,所以它會從 10 這個網段,分配1個 IP 給左邊的電腦,所以左邊的電腦就不會拿到 20 的 IP

家中如果有使用 IP 分享器,或 WIFI AP,它本身就是一台 Router,同時它還會扮演 DHCP Server 的角色,配IP給家中內部的設備。

  • DEMO 抓 DHCP 封包

ipconfig / release

ipconfig / renew

ipconfig release ,IP 會釋放掉,網路會斷線

  • 網路卡設定自動取得 IP

  • 打開 Wireshark 開始抓網路卡的封包

  • 用 ipconfig / release 把我的 IP釋放掉

  • 用 ipconfig / renew,重新要一個 IP

  • 用 Wireshark 的 Protocol 排序,抓 DHCP 封包

可以看到 Discover, Offer, Request, ACK,這4個DHCP 封包

  • 查看 Offer 封包

因為是 DHCP Server 傳給 Client,哪一個 IP 和相關參數,因為是 DHCP Server要傳給 Client,所以我們知道 DHCP Server 用的是 UDP 67, DHCP Client 用的是 UDP 68 port

  • DHCP Offer 封包的相關參數

Client IP,DHCP Server IP, Lease Time (租用時間), Subnet mask,

Router IP , 和兩台 DNS Server