最近在寫個陽春型的DHCP Client
依照慣例..就記一下吧
[運作方式]
一開始Client沒有ip資料
.DHCPDISCOVER
Client發出DHCPDISCOVER廣播封包(UDP port 67),尋找DHCP Server。
.DHCPOFFER
Client開始監聽UDP port 68
(任何)DHCP Server收到DHCPDISCOVER封包後,會發出DHCPOFFER廣播封包(UDP port 68),內含提供的ip資料。使用廣播封包是因為此時Client端還沒有配置ip。
.DHCPREQUEST
Client收到可能來自多個Server的DHCPOFFER封包後,從其中挑選一筆來回應(通常就直接使用最早收到的一筆)。這時仍是使用廣播方式,向所有Server發出DHCPREQUEST(UDP port 67),內含挑選使用的DHCP Server IP,確定使用提供的資料,並提出其它選項需求(如netmask/gateway..etc)。而其它未選用的DHCP Server也可籍此廣播封包瞭解工作已完成。
.DHCPACK
Client繼續監聽UDP port 68
選定的DHCP Server收到DHCPREQUEST封包後瞭解Client已確認使用,即發出DHCPACK封包(仍為廣播封包,UDP port 68),內含所有Client要求的選項資料。Client接收到此封包後即可依其內容配置IP資訊,完成DHCP請求。
[DHCPDISCOVER等待時間]
為防止網路狀況不佳或沒有DHCP Server存在,必需設立等待時間。 以Windows的DHCP Client為例,預設等待時間為1/9/13/16秒,四次等待都失敗時即宣告DHCPDISCOVER失敗。
[租約期限]
在租約期限1/2時向Server再次發出DHCPREQUEST,Server確認後則可繼續持有IP,若在租約期限3/4仍無法取得Server確認,則必需釋放IP/重新取得。
[參考資料]
http://www.ietf.org/rfc/rfc2131.txt
http://www.study-area.org/network/network_ip_dhcp.htm
http://www.cc.ncnu.edu.tw/net/server/2008/system/dhcp/dhcp.htm
http://paching.myweb.hinet.net/lesson13.htm
--
現在還在寫blog分享資訊的人越來越少,如果覺得文章對您有幫助,歡迎在底下留言,這樣我也比較有動力繼續寫下去,謝啦!