DHCP和PXE

上一節(jié)施籍,我們講了 IP 的一些基本概念居扒。如果需要和其他機器通訊,我們就需要一個通訊地址丑慎,我們需要給網(wǎng)卡配置這么一個地址喜喂。

如何配置 IP 地址?

那如何配置呢竿裂?如果有相關(guān)的知識和積累玉吁,你可以用命令行自己配置一個地址∧逡欤可以使用 ifconfig进副,也可以使用 ip addr。設(shè)置好了以后悔常,用這兩個命令影斑,將網(wǎng)卡 up 一下给赞,就可以開始工作了。

使用 net-tools:

$ sudo ifconfig eth1 10.0.0.1/24

$ sudo ifconfig eth1 up

使用 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膳汪,會出現(xiàn)什么現(xiàn)象呢唯蝶?

不會出現(xiàn)任何現(xiàn)象,就是包發(fā)不出去唄遗嗽。為什么發(fā)不出去呢粘我?我來舉例說明。

192.168.1.6 就在你這臺機器的旁邊痹换,甚至是在同一個交換機上征字,而你把機器的地址設(shè)為了 16.158.23.6。在這臺機器上娇豫,你企圖去 ping192.168.1.6匙姜,你覺得只要將包發(fā)出去,同一個交換機的另一臺機器馬上就能收到冯痢,對不對氮昧?

可是 Linux 系統(tǒng)不是這樣的,它沒你想的那么智能浦楣。你用肉眼看到那臺機器就在旁邊袖肥,它則需要根據(jù)自己的邏輯進行處理。

還記得我們在第二節(jié)說過的原則嗎振劳?只要是在網(wǎng)絡(luò)上跑的包椎组,都是完整的,可以有下層沒上層历恐,絕對不可能有上層沒下層庐杨。

所以,你看著它有自己的源 IP 地址 16.158.23.6夹供,也有目標(biāo) IP 地址 192.168.1.6灵份,但是包發(fā)不出去,這是因為 MAC 層還沒填哮洽。

自己的 MAC 地址自己知道填渠,這個容易。但是目標(biāo) MAC 填什么呢?是不是填 192.168.1.6 這臺機器的 MAC 地址呢氛什?

當(dāng)然不是莺葫。Linux 首先會判斷,要去的這個地址和我是一個網(wǎng)段的嗎枪眉,或者和我的一個網(wǎng)卡是同一網(wǎng)段的嗎捺檬?只有是一個網(wǎng)段的,它才會發(fā)送 ARP 請求贸铜,獲取 MAC 地址堡纬。如果發(fā)現(xiàn)不是呢?

Linux 默認的邏輯是蒿秦,如果這是一個跨網(wǎng)段的調(diào)用烤镐,它便不會直接將包發(fā)送到網(wǎng)絡(luò)上,而是企圖將包發(fā)送到網(wǎng)關(guān)棍鳖。

如果你配置了網(wǎng)關(guān)的話炮叶,Linux 會獲取網(wǎng)關(guān)的 MAC 地址,然后將包發(fā)出去渡处。對于 192.168.1.6 這臺機器來講镜悉,雖然路過它家門的這個包,目標(biāo) IP 是它医瘫,但是無奈 MAC 地址不是它的积瞒,所以它的網(wǎng)卡是不會把包收進去的。

如果沒有配置網(wǎng)關(guān)呢登下?那包壓根就發(fā)不出去。

如果將網(wǎng)關(guān)配置為 192.168.1.6 呢叮喳?不可能被芳,Linux 不會讓你配置成功的,因為網(wǎng)關(guān)要和當(dāng)前的網(wǎng)絡(luò)至少一個網(wǎng)卡是同一個網(wǎng)段的馍悟,怎么可能 16.158.23.6 的網(wǎng)關(guān)是 192.168.1.6 呢畔濒?

所以,當(dāng)你需要手動配置一臺機器的網(wǎng)絡(luò) IP 時锣咒,一定要好好問問你的網(wǎng)絡(luò)管理員侵状。如果在機房里面,要去網(wǎng)絡(luò)管理員那里申請毅整,讓他給你分配一段正確的 IP 地址趣兄。當(dāng)然,真正配置的時候悼嫉,一定不是直接用命令配置的艇潭,而是放在一個配置文件里面。不同系統(tǒng)的配置文件格式不同,但是無非就是 CIDR蹋凝、子網(wǎng)掩碼鲁纠、廣播地址和網(wǎng)關(guān)地址。

動態(tài)主機配置協(xié)議(DHCP)

原來配置 IP 有這么多門道兒啊鳍寂。你可能會問了改含,配置了 IP 之后一般不能變的,配置一個服務(wù)端的機器還可以迄汛,但是如果是客戶端的機器呢捍壤?我抱著一臺筆記本電腦在公司里走來走去,或者白天來晚上走隔心,每次使用都要配置 IP 地址白群,那可怎么辦?還有人事硬霍、行政等非技術(shù)人員帜慢,如果公司所有的電腦都需要 IT 人員配置,肯定忙不過來啊唯卖。

因此粱玲,我們需要有一個自動配置的協(xié)議,也就是動態(tài)主機配置協(xié)議(Dynamic Host Configuration Protocol)拜轨,簡稱 DHCP抽减。

有了這個協(xié)議计技,網(wǎng)絡(luò)管理員就輕松多了酝碳。他只需要配置一段共享的 IP 地址智绸。每一臺新接入的機器都通過 DHCP 協(xié)議英上,來這個共享的 IP 地址里申請秕豫,然后自動配置好就可以了矢否。等人走了蛮艰,或者用完了怕吴,還回去拒垃,這樣其他的機器也能用停撞。

所以說,如果是數(shù)據(jù)中心里面的服務(wù)器悼瓮,IP 一旦配置好戈毒,基本不會變,這就相當(dāng)于買房自己裝修横堡。DHCP 的方式就相當(dāng)于租房埋市。你不用裝修,都是幫你配置好的命贴。你暫時用一下恐疲,用完退租就可以了腊满。

解析 DHCP 的工作方式

當(dāng)一臺機器新加入一個網(wǎng)絡(luò)的時候,肯定一臉懵培己,啥情況都不知道碳蛋,只知道自己的 MAC 地址。怎么辦省咨?先吼一句肃弟,我來啦,有人嗎零蓉?這時候的溝通基本靠“吼”笤受。這一步,我們稱為 DHCP Discover敌蜂。

新來的機器使用 IP 地址 0.0.0.0 發(fā)送了一個廣播包箩兽,目的 IP 地址為 255.255.255.255。廣播包封裝了 UDP章喉,UDP 封裝了 BOOTP汗贫。其實 DHCP 是 BOOTP 的增強版,但是如果你去抓包的話秸脱,很可能看到的名稱還是 BOOTP 協(xié)議落包。

在這個廣播包里面,新人大聲喊:我是新來的(Boot request)摊唇,我的 MAC 地址是這個咐蝇,我還沒有 IP,誰能給租給我個 IP 地址巷查!

格式就像這樣:

如果一個網(wǎng)絡(luò)管理員在網(wǎng)絡(luò)里面配置了 DHCP Server 的話有序,他就相當(dāng)于這些 IP 的管理員。他立刻能知道來了一個“新人”岛请。這個時候旭寿,我們可以體會 MAC 地址唯一的重要性了。當(dāng)一臺機器帶著自己的 MAC 地址加入一個網(wǎng)絡(luò)的時候髓需,MAC 是它唯一的身份,如果連這個都重復(fù)了房蝉,就沒辦法配置了僚匆。

只有 MAC 唯一,IP 管理員才能知道這是一個新人搭幻,需要租給它一個 IP 地址咧擂,這個過程我們稱為 DHCP Offer。同時檀蹋,DHCP Server 為此客戶保留為它提供的 IP 地址松申,從而不會為其他 DHCP 客戶分配此 IP 地址云芦。

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

DHCP Server 仍然使用廣播地址作為目的地址舅逸,因為,此時請求分配 IP 的新人還沒有自己的 IP皇筛。DHCP Server 回復(fù)說琉历,我分配了一個可用的 IP 給你,你看如何水醋?除此之外旗笔,服務(wù)器還發(fā)送了子網(wǎng)掩碼、網(wǎng)關(guān)和 IP 地址租用期等信息拄踪。

新來的機器很開心蝇恶,它的“吼”得到了回復(fù),并且有人愿意租給它一個 IP 地址了惶桐,這意味著它可以在網(wǎng)絡(luò)上立足了撮弧。當(dāng)然更令人開心的是,如果有多個 DHCP Server耀盗,這臺新機器會收到多個 IP 地址想虎,簡直受寵若驚。

它會選擇其中一個 DHCP Offer叛拷,一般是最先到達的那個舌厨,并且會向網(wǎng)絡(luò)發(fā)送一個 DHCP Request 廣播數(shù)據(jù)包,包中包含客戶端的 MAC 地址忿薇、接受的租約中的 IP 地址裙椭、提供此租約的 DHCP 服務(wù)器地址等,并告訴所有 DHCP Server 它將接受哪一臺服務(wù)器提供的 IP 地址署浩,告訴其他 DHCP 服務(wù)器揉燃,謝謝你們的接納,并請求撤銷它們提供的 IP 地址筋栋,以便提供給下一個 IP 租用請求者炊汤。

此時,由于還沒有得到 DHCP Server 的最后確認弊攘,客戶端仍然使用 0.0.0.0 為源 IP 地址抢腐、255.255.255.255 為目標(biāo)地址進行廣播。在 BOOTP 里面襟交,接受某個 DHCP Server 的分配的 IP迈倍。

當(dāng) DHCP Server 接收到客戶機的 DHCP request 之后,會廣播返回給客戶機一個 DHCP ACK 消息包捣域,表明已經(jīng)接受客戶機的選擇啼染,并將這一 IP 地址的合法租用信息和其他的配置信息都放入該廣播包宴合,發(fā)給客戶機,歡迎它加入網(wǎng)絡(luò)大家庭迹鹅。

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

IP 地址的收回和續(xù)租

既然是租房子逐样,就是有租期的。租期到了打肝,管理員就要將 IP 收回脂新。

如果不用的話,收回就收回了粗梭。就像你租房子一樣争便,如果還要續(xù)租的話,不能到了時間再續(xù)租断医,而是要提前一段時間給房東說滞乙。DHCP 也是這樣。

客戶機會在租期過去 50% 的時候鉴嗤,直接向為其提供 IP 地址的 DHCP Server 發(fā)送 DHCP request 消息包斩启。客戶機接收到該服務(wù)器回應(yīng)的 DHCP ACK 消息包醉锅,會根據(jù)包中所提供的新的租期以及其他已經(jīng)更新的 TCP/IP 參數(shù)兔簇,更新自己的配置。這樣硬耍,IP 租用更新就完成了垄琐。

好了,一切看起來完美经柴。DHCP 協(xié)議大部分人都知道狸窘,但是其實里面隱藏著一個細節(jié),很多人可能不會去注意坯认。接下來翻擒,我就講一個有意思的事情:網(wǎng)絡(luò)管理員不僅能自動分配 IP 地址,還能幫你自動安裝操作系統(tǒng)牛哺!

預(yù)啟動執(zhí)行環(huán)境(PXE)

普通的筆記本電腦陋气,一般不會有這種需求。因為你拿到電腦時荆隘,就已經(jīng)有操作系統(tǒng)了恩伺,即便你自己重裝操作系統(tǒng)赴背,也不是很麻煩的事情椰拒。但是晶渠,在數(shù)據(jù)中心里就不一樣了。數(shù)據(jù)中心里面的管理員可能一下子就拿到幾百臺空的機器燃观,一個個安裝操作系統(tǒng)褒脯,會累死的。

所以管理員希望的不僅僅是自動分配 IP 地址缆毁,還要自動安裝系統(tǒng)番川。裝好系統(tǒng)之后自動分配 IP 地址,直接啟動就能用了脊框,這樣當(dāng)然最好了颁督!

這事兒其實仔細一想,還是挺有難度的浇雹。安裝操作系統(tǒng)沉御,應(yīng)該有個光盤吧。數(shù)據(jù)中心里不能用光盤吧昭灵,想了一個辦法就是吠裆,可以將光盤里面要安裝的操作系統(tǒng)放在一個服務(wù)器上,讓客戶端去下載烂完。但是客戶端放在哪里呢试疙?它怎么知道去哪個服務(wù)器上下載呢?客戶端總得安裝在一個操作系統(tǒng)上呀抠蚣,可是這個客戶端本來就是用來安裝操作系統(tǒng)的呀祝旷?

其實,這個過程和操作系統(tǒng)啟動的過程有點兒像柱徙。首先缓屠,啟動 BIOS。這是一個特別小的小系統(tǒng)护侮,只能干特別小的一件事情敌完。其實就是讀取硬盤的 MBR 啟動扇區(qū),將 GRUB 啟動起來羊初;然后將權(quán)力交給 GRUB滨溉,GRUB 加載內(nèi)核、加載作為根文件系統(tǒng)的 initramfs 文件长赞;然后將權(quán)力交給內(nèi)核晦攒;最后內(nèi)核啟動,初始化整個操作系統(tǒng)得哆。

那我們安裝操作系統(tǒng)的過程脯颜,只能插在 BIOS 啟動之后了。因為沒安裝系統(tǒng)之前贩据,連啟動扇區(qū)都沒有栋操。因而這個過程叫做預(yù)啟動執(zhí)行環(huán)境(Pre-boot Execution Environment)闸餐,簡稱 PXE。

PXE 協(xié)議分為客戶端和服務(wù)器端矾芙,由于還沒有操作系統(tǒng)舍沙,只能先把客戶端放在 BIOS 里面。當(dāng)計算機啟動時剔宪,BIOS 把 PXE 客戶端調(diào)入內(nèi)存里面拂铡,就可以連接到服務(wù)端做一些操作了。

首先葱绒,PXE 客戶端自己也需要有個 IP 地址感帅。因為 PXE 的客戶端啟動起來,就可以發(fā)送一個 DHCP 的請求地淀,讓 DHCP Server 給它分配一個地址留瞳。PXE 客戶端有了自己的地址,那它怎么知道 PXE 服務(wù)器在哪里呢骚秦?對于其他的協(xié)議她倘,都好辦,要有人告訴他作箍。例如硬梁,告訴瀏覽器要訪問的 IP 地址,或者在配置中告訴它胞得;例如荧止,微服務(wù)之間的相互調(diào)用。

但是 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 地址段猪半、子網(wǎng)掩碼兔朦、網(wǎng)關(guān)地址、租期等磨确。如果想使用 PXE沽甥,則需要配置 next-server,指向 PXE 服務(wù)器的地址乏奥,另外要配置初始啟動文件 filename摆舟。

這樣 PXE 客戶端啟動之后,發(fā)送 DHCP 請求之后,除了能得到一個 IP 地址恨诱,還可以知道 PXE 服務(wù)器在哪里歇式,也可以知道如何從 PXE 服務(wù)器上下載某個文件,去初始化操作系統(tǒng)胡野。

解析 PXE 的工作過程

接下來我們來詳細看一下 PXE 的工作過程。

首先痕鳍,啟動 PXE 客戶端硫豆。第一步是通過 DHCP 協(xié)議告訴 DHCP Server,我剛來笼呆,一窮二白熊响,啥都沒有。DHCP Server 便租給它一個 IP 地址诗赌,同時也給它 PXE 服務(wù)器的地址汗茄、啟動文件 pxelinux.0。

其次铭若,PXE 客戶端知道要去 PXE 服務(wù)器下載這個文件后洪碳,就可以初始化機器。于是便開始下載叼屠,下載的時候使用的是 TFTP 協(xié)議瞳腌。所以 PXE 服務(wù)器上,往往還需要有一個 TFTP 服務(wù)器镜雨。PXE 客戶端向 TFTP 服務(wù)器請求下載這個文件嫂侍,TFTP 服務(wù)器說好啊,于是就將這個文件傳給它荚坞。

然后挑宠,PXE 客戶端收到這個文件后,就開始執(zhí)行這個文件颓影。這個文件會指示 PXE 客戶端各淀,向 TFTP 服務(wù)器請求計算機的配置信息 pxelinux.cfg。TFTP 服務(wù)器會給 PXE 客戶端一個配置文件诡挂,里面會說內(nèi)核在哪里揪阿、initramfs 在哪里。PXE 客戶端會請求這些文件咆畏。

最后南捂,啟動 Linux 內(nèi)核。一旦啟動了操作系統(tǒng)旧找,以后就啥都好辦了溺健。

小結(jié)

好了,這一節(jié)就到這里了。我來總結(jié)一下今天的內(nèi)容:

DHCP 協(xié)議主要是用來給客戶租用 IP 地址鞭缭,和房產(chǎn)中介很像剖膳,要商談、簽約岭辣、續(xù)租吱晒,廣播還不能“搶單”;

DHCP 協(xié)議能給客戶推薦“裝修隊”PXE沦童,能夠安裝操作系統(tǒng)仑濒,這個在云計算領(lǐng)域大有用處。

最后偷遗,學(xué)完了這一節(jié)墩瞳,給你留兩個思考題吧。

PXE 協(xié)議可以用來安裝操作系統(tǒng)氏豌,但是如果每次重啟都安裝操作系統(tǒng)喉酌,就會很麻煩。你知道如何使得第一次安裝操作系統(tǒng)泵喘,后面就正常啟動嗎泪电?

現(xiàn)在上網(wǎng)很簡單了,買個家用路由器纪铺,連上 WIFI歪架,給 DHCP 分配一個 IP 地址,就可以上網(wǎng)了霹陡。那你是否用過更原始的方法自己組過簡單的網(wǎng)呢和蚪?說來聽聽。

歡迎你留言和我討論烹棉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末攒霹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子浆洗,更是在濱河造成了極大的恐慌催束,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伏社,死亡現(xiàn)場離奇詭異抠刺,居然都是意外死亡,警方通過查閱死者的電腦和手機摘昌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門速妖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人聪黎,你說我怎么就攤上這事罕容。” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵锦秒,是天一觀的道長露泊。 經(jīng)常有香客問我,道長旅择,這世上最難降的妖魔是什么惭笑? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮生真,結(jié)果婚禮上沉噩,老公的妹妹穿的比我還像新娘。我一直安慰自己汇歹,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布偿凭。 她就那樣靜靜地躺著产弹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弯囊。 梳的紋絲不亂的頭發(fā)上痰哨,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天,我揣著相機與錄音匾嘱,去河邊找鬼斤斧。 笑死,一個胖子當(dāng)著我的面吹牛霎烙,可吹牛的內(nèi)容都是我干的撬讽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼悬垃,長吁一口氣:“原來是場噩夢啊……” “哼游昼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起尝蠕,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤烘豌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后看彼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體廊佩,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年靖榕,在試婚紗的時候發(fā)現(xiàn)自己被綠了标锄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡茁计,死狀恐怖鸯绿,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤瓶蝴,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布毒返,位于F島的核電站,受9級特大地震影響舷手,放射性物質(zhì)發(fā)生泄漏拧簸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一男窟、第九天 我趴在偏房一處隱蔽的房頂上張望盆赤。 院中可真熱鬧,春花似錦歉眷、人聲如沸牺六。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淑际。三九已至,卻和暖如春扇住,著一層夾襖步出監(jiān)牢的瞬間春缕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工艘蹋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锄贼,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓女阀,卻偏偏與公主長得像宅荤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子浸策,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容