DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)是IETF為實現IP的自動配置而設計的協議,它可以為客戶機自動分配IP地址、子網掩碼以及缺省網關、DNS服務器的IP地址等TCP/IP參數。了解DHCP工作過程可以幫助我們排除有關DHCP服務遇到的問題。DHCP 協議是基於UDP層(這也就是說在snort檢測過程中,只能看UDP的包)之上的應用,dhcp使用udp攜帶報文,udp封裝在ip數據包中發送。我們先來看下dhcp報文格式
OP:若是client送給server的封包,設為1,反向為2;
Htype:硬件類別,ethernet為1;
Hlen:硬件長度,ethernet為6;
Hops:若數據包需經過router傳送,每站加1,若在同一網內,為0;
Transaction ID:事務ID,是個隨機數,用於客戶和服務器之間匹配請求和相應消息;
Seconds:由用戶指定的時間,指開始地址獲取和更新進行后的時間;
Flags:從0-15bits,最左1bit為1時表示server將以廣播方式傳送封包給 client,其余尚未使用;
Ciaddr:用戶IP地址;
Yiaddr:客戶IP地址;
Siaddr:用於bootstrap過程中的IP地址;
Giaddr:轉發代理(網關)IP地址;
Chaddr:client的硬件地址;
Sname:可選server的名稱,以0x00結尾;
File:啟動文件名;
Options:,廠商標識,可選的參數字段
下面我們主要說下客戶機從dhcpserver獲取ip的過程,它處於6中狀態分別是初始狀態,選擇狀態,請求狀態,綁定狀態,重新獲取狀態,重新綁定狀態。我們就結合我下面畫的這張圖好好說下
1.主機啟動,dhcp處於INI狀態為了獲取ip地址,DHCP客戶機初始化TCP/IP,通過UDP端口67向網絡中發送一個DHCPDISCOVER廣播包,請求租用IP地址。該廣播包中的源IP地址為0.0.0.0,目標IP地址為255.255.255.255;包中還包含客戶機的MAC地址和計算機名,本地所有的dhcpserver會收到這個報文,數據包中的目標端口設為BOOTP67端口。這時dhcp會處於select狀態。
2.處於select狀態的主機會接受dhcpserver發來的dhcpoffer報文,每個報文中會包含為客戶機配置的信息以及server為客戶機提供的租用ip,一般主機會受到零個或者多個offer報文(一般主機會響應第一個offer報文),並與server協商相關事宜,為此主機會發送一個dhcpquest報文,並進入request狀態。
3.dhcpserver會給客戶機一個ack的確認信息,這時一個dhcp獲取過程結束。主機進入BIND穩定狀態。
4.假如主機不需要ip地址或者需要換個ip,這時主機會發送一個dhcprelease報文向dhcpserver,這時主機重新處於初始狀態。
5.一般服務器給客戶機的ip地址都有租期,時間長短不等,而dhcp主機會有3個計時器,當擇期過半50%,這時主機會發送一個 dhcprequest報文要求續租進入renew狀態,serverdhcp會響應這個報文發送ack確認信息,這時dhcp會重新進入BOND狀態。
6.假如dhcpserver沒有響應主機的請求,等租期到了87.5%這時主機會重新發送dhcprequest報文要求續租,主機進入 rebind狀態,假如這時候dhcpserver不高興(ip地址不夠用)發送來一個否確認信息,這時主機會重新進入初始狀態再次按照1——4步驟重新申請ip。假如收到ack老大的確認續租成功,說明這個ip我們還可以繼續使用。沒有響應,我們的主機只有等到我們ip租期耗盡,重新進入初始狀態重新獲取。
報文類型:
1)DHCPDISCOVER(0x01),此為Client開始DHCP過程的第一個報文
2)DHCPOFFER(0x02),此為Server對DHCPDISCOVER報文的響應
3)DHCPREQUEST(0x03),此報文是Client開始DHCP過程中對server的DHCPOFFER報文的回應,或者是Client續延IP地址租期時發出的報文
4)DHCPDECLINE(0x04),當Client發現Server分配給它的IP地址無法使用,如IP地址沖突時,將發出此報文,通知Server禁止使用IP地址
5)DHCPACK(0x05),Server對Client的DHCPREQUEST報文的確認響應報文,Client收到此報文后,才真正獲得了IP地址和相關的配置信息。
6)DHCPNAK(0x06),Server對Client的DHCPREQUEST報文的拒絕響應報文,Client收到此報文后,一般會重新開始新的DHCP過程。
7)DHCPRELEASE(0x07),Client主動釋放server分配給它的IP地址的報文,當Server收到此報文后,就可以回收這個IP地址,能夠分配給其他的Client。
8)DHCPINFORM(0x08),Client已經獲得了IP地址,發送此報文,只是為了從DHCP SERVER處獲取其他的一些網絡配置信息,如route ip,DNS Ip等,這種報文的應用非常少見。
如:運行IPCONFIG/RELEASE后,PC會發出釋放IP的報文,DHCP Message Type是7,他的作用是主動釋放server分配給它的IP地址的報文,Server收到此報文后,就可以回收這個IP地址,能夠分配給其他的Client。
如果一台客戶機未從該DHCP服務器獲取過地址,或者它獲得的地址已過期,那么它將需要經過全部四個步驟才能得到一個IP地址。