文榮,李凱達(dá),王志謙
(北京郵電大學(xué)網(wǎng)絡(luò)技術(shù)研究院,北京,100876)
DHCP Client按Option60分流的研究與實(shí)現(xiàn)
文榮,李凱達(dá),王志謙
(北京郵電大學(xué)網(wǎng)絡(luò)技術(shù)研究院,北京,100876)
動(dòng)態(tài)主機(jī)配置協(xié)議(DHCP)主要用來(lái)動(dòng)態(tài)提供配置參數(shù)給因特網(wǎng)上的主機(jī),一方面從DHCP服務(wù)器傳送主機(jī)特定的協(xié)議配置參數(shù)到主機(jī),另一方面自動(dòng)分配網(wǎng)絡(luò)地址給主機(jī)。目前本地局域網(wǎng)大多使用高速公共因特網(wǎng)接入技術(shù)和高速調(diào)制器, 并使用動(dòng)態(tài)主機(jī)配置協(xié)議分配用戶(hù)的主機(jī)地址。然而, 隨著數(shù)字電視等業(yè)務(wù)的發(fā)展,用戶(hù)家庭需要分配IP地址的設(shè)備越來(lái)越多,如何將用戶(hù)不同設(shè)備的DHCP請(qǐng)求分流至特定的服務(wù)器就成為日益迫切需要解決的問(wèn)題。本文針對(duì)目前在局域網(wǎng)普遍使用的DHCP及其為解決分流問(wèn)題而引進(jìn)的Option60機(jī)制進(jìn)行簡(jiǎn)單的描述, 并具體闡述其實(shí)現(xiàn)方式。
動(dòng)態(tài)主機(jī)配置協(xié)議;可選域60;中繼代理;分流
Abstract:The Dynamic Host Configuration Protocol (DHCP) is mainly used to provide configuration parameters for hosts on the Internet. On the one hand, it transmit host-specific configuration parameters from the DHCP server to the client host, and on the other hand, it assign network addresses for the client host. Currently, most of the local area networks access Internet via high-speed public Internet access technologies and high-speed modulator. And use DHCP to distribute host address for the user's devices. However, with the development of digital television services, more and more devices need ip addresses to be assigned. How to user requests for different devices diverted to a particular DHCP server has become increasingly it’s a urgent problem to be solved that how to divert DHCP request from different user devices to specific server. This paper describes both the Option60 mechanism aiming at the DHCP commonly used in LAN and its diverting problems, and the implementation in detail.
Key words:Dynamic Host Configuration Protocol, Optional Field 60, Relay Agent, Diversion
在現(xiàn)今的網(wǎng)絡(luò)中,IP地址的分配方式大多采取的是DHCP的方式。隨著廣電運(yùn)營(yíng)商為用戶(hù)提供服務(wù)的增多(如接入Internet、IPTV、數(shù)字電視等),用戶(hù)端的設(shè)備(如cablemodem、機(jī)頂盒等)也隨之增多,對(duì)為這些設(shè)備提供IP地址的DHCP服務(wù)器而言,其壓力越來(lái)越大,而且同時(shí)也不方便網(wǎng)絡(luò)管理人員的管理。
因此,運(yùn)營(yíng)商們希望能實(shí)現(xiàn)如下場(chǎng)景:一個(gè)DHCP客戶(hù)端從由某一廠商提供的一臺(tái)特定的DHCP服務(wù)器上取得訪問(wèn)公網(wǎng)的IP地址,而觀看數(shù)字電視又從另一廠商提供的DHCP服務(wù)器上獲取設(shè)備的IP地址。也就是說(shuō),用特定的DHCP服務(wù)器為用戶(hù)的設(shè)備(cablemodem、機(jī)頂盒等)分配IP地址這一需求日益突顯出來(lái)。
本文針對(duì)上述問(wèn)題進(jìn)行研究并提出了一種實(shí)現(xiàn)方式。
DHCP是通過(guò)DHCP服務(wù)器向提出申請(qǐng)的網(wǎng)絡(luò)主機(jī)分配IP地址等網(wǎng)絡(luò)配置參數(shù)。
如果要分配一個(gè)新的網(wǎng)絡(luò)地址,DHCP服務(wù)器與客戶(hù)間的協(xié)議交互如下:
客戶(hù)在本地子網(wǎng)廣播DHCPDISCOVER消息,若DHCP服務(wù)器與客戶(hù)端不在一個(gè)子網(wǎng),則由DHCP中繼代理(relay agent)傳遞消息到服務(wù)器。
服務(wù)器端在收到DHCPDISCOVER后,以帶有客戶(hù)請(qǐng)求的網(wǎng)絡(luò)地址yiaddr的DHCPOFFER響應(yīng),假如服務(wù)器發(fā)現(xiàn)DHCPDISCOVER來(lái)自relay agent,則將DHCPOFFER直接單播送至relay agent,由其單播送至客戶(hù),反之,則在本地子網(wǎng)廣播。
客戶(hù)從一個(gè)或多個(gè)服務(wù)器接收到一個(gè)或多個(gè)DHCPOFFER后選擇其中一個(gè)獲得配置參數(shù),并將帶有標(biāo)識(shí)選中服務(wù)器的DHCPREQUEST在本地子網(wǎng)廣播經(jīng)由relay agent轉(zhuǎn)發(fā)。若客戶(hù)在規(guī)定時(shí)間內(nèi)未收到DHCPOFFER,則重發(fā)DHCPDISCOVER。所有服務(wù)器將接收到DHCPREQUEST消息,根據(jù)DHCPREQUEST內(nèi)的服務(wù)器標(biāo)識(shí),被選用的服務(wù)器根據(jù)客戶(hù)的硬件地址chaddr和yiaddr唯一確認(rèn)客戶(hù)后,發(fā)送DHCPACK至客戶(hù)端。若服務(wù)器不能滿(mǎn)足客戶(hù)在DHCPREQUEST內(nèi)的配置請(qǐng)求,則響應(yīng)DHCPNAK。若服務(wù)器在一定時(shí)間未從客戶(hù)接收到DHCPREQUEST,則直接回復(fù)DHCPACK。
客戶(hù)從服務(wù)器接收DHCPACK后,首先核對(duì)消息內(nèi)的配置參數(shù)(如ARP,租用時(shí)間等) ,若不一致,則發(fā)DHCPDECLINE至服務(wù)器,如果一致則進(jìn)行配置,之后客戶(hù)與服務(wù)器間可以直接交互。當(dāng)客戶(hù)從服務(wù)器處接收DHCPNAK,則重新啟動(dòng)配置過(guò)程。一旦客戶(hù)在規(guī)定時(shí)間內(nèi)未收到服務(wù)器的響應(yīng),重傳DCHPREQUEST消息,若10次重傳后,仍未收到服務(wù)器的響應(yīng),則通知用戶(hù)并回到配置初始化階段重新開(kāi)始。
當(dāng)客戶(hù)想釋放由服務(wù)器提供的網(wǎng)絡(luò)地址,可發(fā)送標(biāo)識(shí)客戶(hù)硬件地址chaddr 和網(wǎng)絡(luò)地址ciaddr DHCPRELEASE。
DHCP 消息從客戶(hù)經(jīng)relay agent(可選) 至服務(wù)器,通常為廣播包,但若客戶(hù)已知服務(wù)器的網(wǎng)絡(luò)地址,可直接發(fā)送單播包給服務(wù)器。relay agent將處理所有的廣播包,首先檢查消息內(nèi)的網(wǎng)關(guān)地址giaddr,若不為零,說(shuō)明在此relay agent之前,已有一代理對(duì)消息進(jìn)行處理,giaddr不會(huì)被修改;若為零,relay agent將自己的網(wǎng)絡(luò)地址填入消息內(nèi)的giaddr 作為網(wǎng)關(guān)地址,同時(shí)將廣播包轉(zhuǎn)為單播包送至目的地DHCP 服務(wù)器。倘若消息本來(lái)就為單播包,則relay agent 不做任何處理。
一旦DHCP 服務(wù)器構(gòu)造一個(gè)合適的DHCP響應(yīng)包后,先檢查giaddr域,假如此域的值不為零,服務(wù)器將響應(yīng)包送至giaddr標(biāo)識(shí)的relay agent的端口67。若giaddr 為零,而表示客戶(hù)的網(wǎng)絡(luò)地址ciaddr非零,說(shuō)明客戶(hù)已經(jīng)有一個(gè)當(dāng)前的網(wǎng)絡(luò)地址,故可直接將響應(yīng)包送至網(wǎng)絡(luò)地址ciaddr。如若giaddr、ciaddr均為零并且廣播標(biāo)志位被設(shè)置為1,則服務(wù)器廣播DHCP響應(yīng)包DHCPOFFERPDHCPACK,若廣播標(biāo)志位未被設(shè)置,則服務(wù)器發(fā)送DHCPOFFERPDHCPACK至硬件地址為chaddr網(wǎng)絡(luò)地址為yiaddr 的客戶(hù)。對(duì)于DHCPNAK包,只要giaddr為零,服務(wù)器將其廣播。
DHCP relay agent只接收單播的DHCP 響應(yīng)包,其首先檢查giaddr、yiaddr、chaddr、htype和hlen域,根據(jù)這些域值,relay agent能將DHCP消息送至客戶(hù)。注意,relay agent不能修改消息包內(nèi)的任何DHCP 域值,應(yīng)該保持消息的完整性。
通常DHCP服務(wù)器和DHCP relay agent可利用硬件地址chaddr網(wǎng)絡(luò)地址yiaddr將DHCP響應(yīng)包送回至客戶(hù),但是有些客戶(hù)在yiaddr未被正式配置時(shí),不承認(rèn)yiaddr 標(biāo)識(shí)的網(wǎng)絡(luò)地址,此時(shí)客戶(hù)應(yīng)該設(shè)置廣播標(biāo)志位為1 ,這樣服務(wù)器和agent會(huì)廣播此響應(yīng)包而非發(fā)送DHCPOFFERPDHCPACK 至硬件地址為chaddr網(wǎng)絡(luò)地址為yiaddr的客戶(hù),造成死鎖。
目前本地局域網(wǎng)大多使用高速公共因特網(wǎng)接入技術(shù)和高速調(diào)制器,并使用動(dòng)態(tài)主機(jī)配置協(xié)議分配用戶(hù)的主機(jī)地址。然而,大量DHCP客戶(hù)端設(shè)備的使用,也會(huì)引入標(biāo)識(shí)如何標(biāo)識(shí)客戶(hù)端設(shè)備的問(wèn)題。這個(gè)問(wèn)題可以通過(guò)引進(jìn)DHCP vendor class identifier 的信息域也就是所謂的Option60來(lái)解決。
通常,Option60是由客戶(hù)端設(shè)備在形成DHCP報(bào)文時(shí)寫(xiě)入的,用以標(biāo)識(shí)設(shè)備的屬性。Option60包含n字節(jié)的信息,這些信息是由DHCP服務(wù)器解析的。設(shè)備供應(yīng)商可以選擇定義特定的一類(lèi)標(biāo)識(shí)符來(lái)傳達(dá)特定的配置或其他有關(guān)識(shí)別客戶(hù)身份信息。例如,標(biāo)識(shí)符可能包含客戶(hù)端設(shè)備的硬件配置信息。如果服務(wù)器不具備解析Option60字段的功能,那么服務(wù)器必須將其忽略。
4.1 解決方案
為解決本文所提出的問(wèn)題,我們?nèi)鐖D1設(shè)計(jì)系統(tǒng)邏輯結(jié)構(gòu):
標(biāo)準(zhǔn)一級(jí)relay的功能十分簡(jiǎn)單,負(fù)責(zé)將CPE發(fā)出的DHCP報(bào)文轉(zhuǎn)發(fā)至二級(jí)relay,再將二級(jí)relay轉(zhuǎn)發(fā)的DHCP服務(wù)器的報(bào)文發(fā)給CPE。
在標(biāo)準(zhǔn)的一級(jí)relay與DHCP服務(wù)器之間加上我們?cè)O(shè)計(jì)并實(shí)現(xiàn)的二級(jí)relay。二級(jí)relay用于檢查DHCP報(bào)文中的Option60字段,根據(jù)Option60字段值的不同將報(bào)文轉(zhuǎn)發(fā)至不同的DHCP服務(wù)器。簡(jiǎn)化的二級(jí)relay功能如下:
維護(hù)配置文件:二級(jí)relay會(huì)維護(hù)一個(gè)由我們定義規(guī)則,由用戶(hù)來(lái)寫(xiě)入數(shù)據(jù)的配置文件。二級(jí)relay會(huì)根據(jù)配置文件的內(nèi)容來(lái)轉(zhuǎn)發(fā)一級(jí)relay的DHCP報(bào)文。配置文件的格式如下:
設(shè)備屬性標(biāo)識(shí)符@DHCP Server ip:DHCP Server ip:
‘@’符號(hào)之前的為設(shè)備屬性標(biāo)識(shí)符,用于標(biāo)識(shí)某一類(lèi)的設(shè)備。標(biāo)識(shí)符支持正則表達(dá)式,所以設(shè)備標(biāo)識(shí)符可以是一個(gè)具體的值串,也可是帶有通配符的正則表達(dá)式。
圖1 系統(tǒng)邏輯結(jié)構(gòu)
‘@’標(biāo)識(shí)符之后的是DHCP Server的IP地址,為某一類(lèi)設(shè)備分配IP地址的服務(wù)器可能是一臺(tái)也可能是多臺(tái)。因此,‘@’之后可能是一個(gè)IP地址也可能是多個(gè)IP地址。
在配置文件的最后會(huì)加上一行默認(rèn)屬性的標(biāo)識(shí)符,格式如下:
對(duì)于可能不帶標(biāo)識(shí)符或之前匹配都未成功的設(shè)備,就采用這行規(guī)則提供的DHCP服務(wù)器的IP地址對(duì)一級(jí)relay的報(bào)文進(jìn)行轉(zhuǎn)發(fā)。
上行中繼:所有從標(biāo)準(zhǔn)一級(jí)relay轉(zhuǎn)發(fā)來(lái)的廣播或者單播DHCP消息都被此agent截取。然后對(duì)報(bào)文消息進(jìn)行分析,取出報(bào)文的Option60字段的值,并參照配置文件的規(guī)則進(jìn)行匹配。如果匹配成功,取出規(guī)則中DHCP 服務(wù)器的IP地址,再將報(bào)文轉(zhuǎn)發(fā)至這些DHCP服務(wù)器。若不成功,則采用配置文件的默認(rèn)規(guī)則對(duì)報(bào)文進(jìn)行轉(zhuǎn)發(fā)。從而達(dá)到了分流的目的,實(shí)現(xiàn)了特定的DHCP服務(wù)器對(duì)某一類(lèi)網(wǎng)絡(luò)接入設(shè)備分配IP地址的需求。
下行中繼:接收從服務(wù)器過(guò)來(lái)的所有DHCP消息,并透?jìng)鹘o標(biāo)準(zhǔn)一級(jí)relay。也就是說(shuō)二級(jí)relay對(duì)DHCP服務(wù)器發(fā)來(lái)的消息不做任何處理就轉(zhuǎn)發(fā)給標(biāo)準(zhǔn)一級(jí)relay。
以上詳細(xì)論述了解決方案和系統(tǒng)邏輯結(jié)構(gòu),二級(jí)relay處理DHCP client端報(bào)文的代碼流程如下:
4.2 實(shí)際應(yīng)用
下面以廣電網(wǎng)絡(luò)接入網(wǎng)部分為例,在接入網(wǎng)處部署、應(yīng)用我們的二級(jí)relay以實(shí)現(xiàn)分流的要求。網(wǎng)絡(luò)拓?fù)鋱D如圖2。
從之前的論述中,我們知道在二級(jí)relay的配置文件里會(huì)有一系列規(guī)則。這些規(guī)則規(guī)定了某一類(lèi)設(shè)備的DHCP服務(wù)器的IP地址。如圖2所示,我們假定配置文件中規(guī)定了DHCP Server1是為PC、機(jī)頂盒分配IP地址的服務(wù)器,DHCP Server2是為cable modem分配IP地址的服務(wù)器,而DHCP Server3是為其他網(wǎng)絡(luò)接入設(shè)備分配IP地址的。也就是說(shuō),對(duì)這些在配置文件中沒(méi)有特定的規(guī)則與其相對(duì)應(yīng)的設(shè)備,它們的DHCP請(qǐng)求都由二級(jí)relay轉(zhuǎn)發(fā)至DHCP Server3。
在如圖2的網(wǎng)絡(luò)拓?fù)渲?,客?hù)端從服務(wù)器得到網(wǎng)絡(luò)配置的基本流程如下:
圖2 實(shí)際應(yīng)用網(wǎng)絡(luò)
1. 客戶(hù)端廣播發(fā)送DHCPDISCOVER報(bào)文,CMTS在偵聽(tīng)到后轉(zhuǎn)發(fā)給二級(jí)relay;
2. 二級(jí)relay提取出報(bào)文的Option60字段,并與配置文件中的規(guī)則進(jìn)行匹配,如果是PC、機(jī)頂盒類(lèi)的設(shè)備則將報(bào)文轉(zhuǎn)發(fā)給DHCP Server1,如果是cablemodem則轉(zhuǎn)發(fā)給DHCP Server2,如果是配置文件中沒(méi)有規(guī)則對(duì)應(yīng)的設(shè)備,則將它們的報(bào)文都轉(zhuǎn)發(fā)給DHCP Server3;
3. 相應(yīng)的DHCP服務(wù)器在收到DHCPDISCOVER報(bào)文后,會(huì)回復(fù)DHCPOFFER報(bào)文給二級(jí)relay,二級(jí)relay透?jìng)鹘oCMTS,再由CMTS透?jìng)鹘o客戶(hù)端;
4. 收到DHCPOFFER報(bào)文后,客戶(hù)端發(fā)出DHCPREQUEST報(bào)文,CMTS轉(zhuǎn)發(fā)給二級(jí)relay,之后的處理等同步驟2;
5. 相應(yīng)的服務(wù)器回復(fù)DHCPACK報(bào)文,對(duì)客戶(hù)端的DHCPREQUEST報(bào)文予以確認(rèn),并透?jìng)髦量蛻?hù)端;
6. 客戶(hù)端收到DHCPACK后應(yīng)再次檢查配置參數(shù)( 如通過(guò)ARP探測(cè)分配的IP地址) ,如果合法則此次配置即告完成,否則回到步驟1再進(jìn)行一次配置。
在實(shí)際應(yīng)用后發(fā)現(xiàn),按上述流程對(duì)客戶(hù)端進(jìn)行網(wǎng)絡(luò)配置,能很好地緩解服務(wù)器的壓力,并便于運(yùn)營(yíng)商管理為不同接入設(shè)備提供配置的DHCP服務(wù)器。
現(xiàn)今,家庭用戶(hù)需要IP地址的設(shè)備越來(lái)越多,而對(duì)這類(lèi)設(shè)備多采用DHCP的方式配置網(wǎng)絡(luò)參數(shù)。這也意味著DHCP客戶(hù)端的報(bào)文流量在逐漸增加。本文提出并實(shí)現(xiàn)了一種加入解析Option60字段功能的中繼代理。通過(guò)在實(shí)際應(yīng)用中的檢驗(yàn),這種中繼代理能很好地起到為客戶(hù)端報(bào)文分流的功能。
[1] Droms R. Dynamic Host Configuration Protocol [M]. RFC 2131, 1997.3.
[2] Alexander S, Droms R.DHCP Options and BOOTP Vendor Extensions [M].RFC 2132, 1997.3.
[3] Patrick M.DHCP Relay Agent Information Option [M].RFC 3046, 2001.1.
[4] Wimer W. Clarifications and Extensions for the Bootstrap Protocol [M]. RFC 1542, 1993.10.