重學計算機網絡(三) - DHCP & IP的"孽緣"

和其他機器通訊,就需要一個通訊地址,要給網卡配置這麼一個地址。

1 配置IP地址

可以使用ifconfig,也可以使用ip addr。設置好了以後,用這兩個命令,將網卡up一下,就可以開始工作了。

1.1 net-tools

$ sudo ifconfig eth1 10.0.0.1/24
$ sudo ifconfig eth1 up

1.2 iproute2

$ sudo ip addr add 10.0.0.1/24 dev eth1
$ sudo ip link set up eth1

如果配置的是一個和誰都不搭嘎的地址呢?

例如,旁邊的機器都是192.168.1.x,我非得配置一個16.158.23.6,會出現什麼現象呢?

不會出現任何現象,就是包發不出去唄

爲什麼發不出去呢?

192.168.1.6 就在你這臺機器的旁邊,甚至在同一交換機,而你把機器的地址設爲 16.158.23.6

在這臺機器上,你企圖去ping _192.168.1.6_,覺得只要將包發出去,同一個交換機的另一臺機器馬上就能收到,是嘛?

可Linux不是這樣的,沒你想得那麼智能

你用肉眼看到那臺機器就在旁邊,它則需要根據自己的邏輯處理

只要是在網絡上跑的包,都是完整的,可以有下層沒上層,絕對不可能有上層沒下層

所以,它有自己的源IP地址 _16.158.23.6_,也有目標IP地址 _192.168.1.6_,但包發不出去,這是因爲MAC層還沒填

自己的MAC地址自己知道,但目標MAC填啥呢?

是不是填 192.168.1.6 機器的MAC地址呢?

當然不是!

Linux會判斷要去的這個地址和我是一個網段嗎,或者和我的一個網卡是同一網段嗎?

只有是一個網段的,它纔會發送ARP請求,獲取MAC地址

如果發現不是呢?

Linux默認的邏輯,如果這是一個跨網段的調用,它不會直接將包發送到網絡上,而是將包發送到網關

如果配置了網關,Linux會獲取網關的MAC地址,然後將包發出去

對於 192.168.1.6 機器,雖然路過家門的這個包,目標IP是它,但是無奈MAC地址不是它的,所以它的網卡是不會把包收進去的

如果沒有配置網關呢

那包壓根就發不出去

如果將網關配置爲 192.168.1.6 呢?

不可能,Linux不會讓你配置成功

因爲 網關要和當前的網絡至少一個網卡是同一個網段

怎能允你16.158.23.6的網關是192.168.1.6呢?

所以,當你需要手動配置一臺機器的網絡IP時,一定要好好問問你的網管

如果在機房裏面,要去網管那申請,讓他給你分配一段正確的IP地址

當然,真正配置的時候,一定不是直接用命令配置的,而是放在一個配置文件裏面

不同系統的配置文件格式不同,但是無非就是CIDR、子網掩碼、廣播地址和網關地址

2 DHCP - 動態主機配置協議

配置IP後一般不能變,配置一個服務端的機器還可以,但如果是客戶端的機器呢?

我抱着一臺筆記本電腦在公司裏走來走去,或者白天來晚上走,每次使用都要配置IP地址,那可怎麼辦?還有人事、行政等非技術人員,如果公司所有的電腦都需要IT人員配置,肯定忙不過來啊。

需要有一個自動配置的協議,即動態主機配置協議(Dynamic Host Configuration Protocol),簡稱DHCP

那網管就輕鬆多了。只需要配置一段共享的IP地址

每一臺新接入的機器都通過DHCP協議,來這個共享的IP地址裏申請,然後自動配置好就可

等用完了,還回去,這樣其他的機器也能用。

**數據中心裏面的服務器,IP一旦配置好,基本不會變

這就相當於買房自己裝修。DHCP的方式就相當於租房。你不用裝修,都是幫你配置好的。你暫時用一下,用完退租就可以了。**

3 DHCP的工作方式

當一臺機器新加入一個網絡的時候,肯定啥情況都不知道,只知道自己的MAC地址

怎麼辦?先吼一句,我來啦,有人嗎?這時候的溝通基本靠“吼”

這一步,我們稱爲DHCP Discover。

新來的機器使用IP地址 0.0.0.0 發送了一個廣播包,目的IP地址爲 255.255.255.255

廣播包封裝了UDP,UDP封裝了BOOTP

其實DHCP是BOOTP的增強版,但是如果去抓包的話,很可能看到的名稱還是BOOTP協議

在廣播包裏,新人大喊:我是新來的(Boot request),我的MAC地址是這個,我還沒有IP,誰能給租給我個IP地址!

  • 格式就像

如果一個網管在網絡裏面配置了DHCP Server,他就相當於這些IP的管理員

立刻能知道來了一個“新人”

這個時候,我們可以體會MAC地址唯一的重要性了

當一臺機器帶着自己的MAC地址加入一個網絡的時候,MAC是它唯一的身份,如果連這個都重複了,就沒辦法配置了。

只有MAC唯一,IP管理員才能知道這是一個新人,需要租給它一個IP地址,這個過程我們稱爲DHCP Offer

同時,DHCP Server爲此客戶保留爲它提供的IP地址,從而不會爲其他DHCP客戶分配此IP地址。

DHCP Offer的格式就像這樣,裏面有給新人分配的地址。

DHCP Server 仍然使用廣播地址作爲目的地址

因爲,此時請求分配IP的新人還沒有自己的IP

DHCP Server回覆說,我分配一個可用的IP給你,你看如何?

除此之外,服務器還發送了子網掩碼、網關和IP地址租用期等信息。

新來的機器很開心,它的“吼”得到了回覆,並且有人願意租給它一個IP地址了,這意味着它可以在網絡上立足了

當然更令人開心的是,如果有多個DHCP Server,這臺新機器會收到多個IP地址,簡直受寵若驚!!!

它會選擇其中一個DHCP Offer,一般是最先到達的那個,並且會向網絡發送一個DHCP Request廣播數據包,包中包含客戶端的MAC地址、接受的租約中的IP地址、提供此租約的DHCP服務器地址等,並告訴所有DHCP Server它將接受哪一臺服務器提供的IP地址,告訴其他DHCP服務器,謝謝你們的接納,並請求撤銷它們提供的IP地址,以便提供給下一個IP租用請求者

還沒得到DHCP Server的最後確認,客戶端仍然使用0.0.0.0爲源IP地址、255.255.255.255爲目標地址進行廣播

在BOOTP裏面,接受某個DHCP Server的分配的IP。

當DHCP Server接收到客戶機的DHCP request之後,會廣播返回給客戶機一個DHCP ACK消息包,表明已經接受客戶機的選擇,並將這一IP地址的合法租用信息和其他的配置信息都放入該廣播包,發給客戶機,歡迎它加入網絡大家庭

最終租約達成的時候,還是需要廣播一下,讓大家都知道。

IP地址的收回和續租

既然是租房子,就是有租期的。租期到了,管理員就要將IP收回。

如果不用的話,收回就收回了。就像你租房子一樣,如果還要續租的話,不能到了時間再續租,而是要提前一段時間給房東說

DHCP也是這樣

客戶機會在租期過去50%的時候,直接向爲其提供IP地址的DHCP Server發送DHCP request消息包

客戶機接收到該服務器迴應的DHCP ACK消息包,會根據包中所提供的新的租期以及其他已經更新的TCP/IP參數,更新自己的配置

這樣,IP租用更新就完成了。

網絡管理員不僅能自動分配IP地址,還能幫你自動安裝操作系統!

預啓動執行環境(PXE)

數據中心裏面的管理員可能一下子就拿到幾百臺空的機器,一個個安裝操作系統,會累死的。

所以管理員希望的不僅僅是自動分配IP地址,還要自動安裝系統。裝好系統之後自動分配IP地址,直接啓動就能用了

安裝操作系統,應該有個光盤吧。數據中心裏不能用光盤吧,想了一個辦法就是,可以將光盤裏面要安裝的操作系統放在一個服務器上,讓客戶端去下載

但是客戶端放在哪裏呢?它怎麼知道去哪個服務器上下載呢?客戶端總得安裝在一個操作系統上呀,可是這個客戶端本來就是用來安裝操作系統的呀?

其實,這個過程和操作系統啓動的過程有點兒像。

  • 首先,啓動BIOS,讀取硬盤的MBR啓動扇區,將GRUB啓動起來
  • 然後將權力交給GRUB,GRUB加載內核、加載作爲根文件系統的initramfs文件
  • 再將權力交給內核
  • 最後內核啓動,初始化整個操作系統。

安裝操作系統的過程,只能插在BIOS啓動之後了

因爲沒安裝系統之前,連啓動扇區都沒有。因而這個過程叫做預啓動執行環境 (Pre-boot Execution Environment),PXE

PXE協議分爲客戶端和服務器端,由於還沒有操作系統,只能先把客戶端放在BIOS裏面

當計算機啓動時,BIOS把PXE客戶端調入內存裏面,就可以連接到服務端做一些操作了。

首先,PXE客戶端自己也需要有個IP地址

因爲PXE的客戶端啓動起來,就可以發送一個DHCP的請求,讓DHCP Server給它分配一個地址。PXE客戶端有了自己的地址,那它怎麼知道PXE服務器在哪裏呢?對於其他的協議,都好辦,要麼人告訴他

例如,告訴瀏覽器要訪問的IP地址,或者在配置中告訴它;例如,微服務之間的相互調用。

但是PXE客戶端啓動的時候,啥都沒有

好在DHCP Server除了分配IP地址以外,還可以做一些其他的事情。這裏有一個DHCP Server的一個樣例配置:

ddns-update-style interim;
ignore client-updates;
allow booting;
allow bootp;
subnet 192.168.1.0 netmask 255.255.255.0
{
    option routers 192.168.1.1;
    option subnet-mask 255.255.255.0;
    option time-offset -18000;
    default-lease-time 21600;
    max-lease-time 43200;
    range dynamic-bootp 192.168.1.240 192.168.1.250;
    filename "pxelinux.0";
    next-server 192.168.1.180;
}

按照上面的原理,默認的DHCP Server是需要配置的,無非是我們配置IP的時候所需要的IP地址段、子網掩碼、網關地址、租期等

如果想使用PXE,則需要配置next-server,指向PXE服務器的地址,另外要配置初始啓動文件filename

這樣PXE客戶端啓動之後,發送DHCP請求之後,除了能得到一個IP地址,還可以知道PXE服務器在哪裏,也可以知道如何從PXE服務器上下載某個文件,去初始化操作系統。

解析PXE的工作過程

啓動PXE客戶端

通過DHCP協議告訴DHCP Server,我,窮b,打錢!

DHCP Server便租給它一個IP地址,同時也給它PXE服務器的地址、啓動文件pxelinux.0

初始化機器

PXE客戶端知道要去PXE服務器下載這個文件後,就可以初始化機器

便開始下載(TFTP協議),還需要有一個TFTP服務器

PXE客戶端向TFTP服務器請求下載這個文件,TFTP服務器說好啊,於是就將這個文件傳給它

執行文件

然後,PXE客戶端收到這個文件後,就開始執行這個文件

這個文件會指示PXE客戶端,向TFTP服務器請求計算機的配置信息pxelinux.cfg

TFTP服務器會給PXE客戶端一個配置文件,裏面會說內核在哪裏、initramfs在哪裏。PXE客戶端會請求這些文件。

啓動Linux內核

一旦啓動了操作系統,以後就啥都好辦了

總結

DHCP協議主要是用來給客戶租用IP地址,和房產中介很像,要商談、簽約、續租,廣播還不能“搶單”;

DHCP協議能給客戶推薦“裝修隊”PXE,能夠安裝操作系統,這個在雲計算領域大有用處。

參考

  • 趣談網絡協議
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章