[故障現象]
單位為了資料共享便組建了局域網,由于電腦多而雜,為了減輕工作量,于是便在服務器上開通了DHCP服務。這樣一來,我們網管的工作量確實小了不少,可是有一天單位的同事報告說大多數電腦突然無法與局域網連接了,他們不能取得其他電腦上的資料,所以就沒法工作。
診斷過程
筆者立即去檢查,首先查看電腦的相關屬性(見上圖),發現能正常工作的電腦無論是使用指定IP還是使用通過DHCP自動獲取IP地址,都獲得了正確的IP地址。而那些不能正常工作的電腦,是使用DHCP服務自動獲得IP地址的,它們的IP地址是169.254開頭的地址。這顯然不對,正常工作的電腦應使用192開頭的C類地址。而這些出問題的電腦用的卻是B類地址。由于169與192開頭的電腦不處在同一網段,又沒有其他跨網段的手段,當然也就無法互通了。
于是,找到出問題的電腦,記下它的計算機名(例如PC1),目前獲得的IP地址(例如192.168.0.42)備用。另找一臺能正常上網的電腦,從這臺電腦ping剛剛我們記下的那個IP地址“ping 192.168.0.42”,發現不通。再試著ping那臺電腦的計算機名“ping PC1”,當然也不會通。但是卻發現了一個意外的情況——計算機能夠被解析成IP地址,但這個地址192.168.0.57顯然不是我們剛剛記下的那個IP地址,這又是怎么回事?即便是重啟電腦后故障依舊。
這時,突然想起以前也曾經出現過這種情況,但不像今天這樣一下子壞了這么多電腦,而且過了兩天它自己就好了,所以就沒怎么在意。想到這里,筆者感覺可能是DHCP中的某個環節出現問題了。現在就讓我們先來看看DHCP的工作原理。
DHCP(動態主機配置協議)是一種動態的機制,它允許客戶機在啟動引導時向DHCP服務器請求一個地址,并且由DHCP服務器集中管理記錄了計算機名和IP地址對應關系的一個庫。
DHCP服務器中有一個地址池,里面有多個可供分配的IP地址,每個IP地址被分配給某個客戶機之后,DHCP服務器會記錄下該客戶機的計算機名與IP地址間的一個對應關系,并且指定一個時間間隔,它被稱為租用周期。租用周期通常是由網管設定的一個時間間隔,決定IP地址可以持續使用的時間。客戶機在啟動的過程中會發一個廣播消息,相當于大喊了一聲:“誰是DHCP服務器?”
DHCP服務器聽到(收到這個廣播消息)之后,就會給出應答:“我能提供DHCP服務。”由于此時客戶機還沒獲得地址,DHCP也是以廣播形式給出這個應答。如果網絡里有多個DHCP服務器,客戶機就會收到不止一個應答,客戶機會從這些應答當中選一個,于是直接向DHCP服務器發一個請求:“你好,給我分配一個IP地址吧。”
于是DHCP服務器會在應答中給出客戶機所需的配置信息,并確認IP地址的使用時間,客戶機也會把這次與DHCP會話所得的信息保存下來,以后在重啟的過程中只需驗證一下,客戶機就可以直接使用上一次保存在本地的信息了。
那么,為什么現在即便是系統重啟之后,客戶機仍無法上網呢?而且上次的那些客戶機又為什么過幾天自己就會好呢?
后來,我們發現這與客戶端信息的更新機制有關。客戶機會把它從DHCP服務器得到的IP地址和其他相關信息保存在本地硬盤里。這些信息里包括該IP地址的使用周期。當過了使用周期,客戶機就必須更新該申請。很顯然,由于重啟后客戶機仍認為擁有“最新”的數據,也就沒去與DHCP好好溝通一下,導致了數據的不一致。
那么,為什么某些電腦又獲得了形如169.254.*.*之類的IP地址呢?
這說明這些電腦根本未能獲得DHCP服務。如DHCP服務器太忙導致無法及時給客房機應答,使客戶機認為網絡里不存在DHCP服務器。這時,微軟的操作系統會自動查找一個形如169.254.*.*的IP地址分配給客戶機。
排除心得
經檢查,的確是DHCP服務器出問題所致,于是DHCP地址池中刪除那些不能上網的電腦的信息,釋放這些地址資源,再重啟DHCP服務器。重啟完成之后通知各客戶機用戶也重啟系統,至此故障排除。
當然,另一種解決辦法就是給客戶端分配固定的IP地址,在電腦數量較少的情況下,這個辦法顯得更好一些。