星巴克氣氛組電腦是如何獲取IP的
前言
上一篇說了一下瀏覽器發(fā)起http請求后的大致流程,數(shù)據(jù)報如何進行層層封裝之后發(fā)出去,以及接收到數(shù)據(jù)報之后如何進行解析。
今天來看一下動態(tài)iP是如何獲取的,以及根據(jù)ip如何獲取網(wǎng)絡(luò)號、主機號以及子網(wǎng)掩碼。
動態(tài)主機配置協(xié)議DHCP
個人電腦的網(wǎng)絡(luò)設(shè)置都是默認為自動獲取IP
當(dāng)需要對網(wǎng)絡(luò)隨連隨用,無需手動配置靜態(tài)IP時候,就需要這個DHCP。
咖啡廳里面的氣氛組電腦,就不能設(shè)置為靜態(tài)IP,設(shè)置了之后在咖啡廳里面連了wifi無法上網(wǎng)可咋整!

只需配置一段共享的IP地址,每次有新機器接入都通過DHCP協(xié)議,向這個共享的IP地址申請,然后進行自動配置,用完即還,相當(dāng)于是一個IP池。
DHCP的工作流程
類似于一個人走到一堆出租車面前說要打車,那么會有很多司機過來拉客,但是一般會選擇第一個過來拉客的司機,此時司機會牽著你走,給大家說這個人我拉走了,你們別想了。

詳細流程如下:
(1)當(dāng)機器新加入一個網(wǎng)絡(luò)時,只知道自身的MAC地址,就會發(fā)送一個廣播數(shù)據(jù)包,這一步稱為「DHCP Discover」,新機器使用0.0.0.0的IP發(fā)送一個廣播包,目標IP時255.255.255.255。
廣播包封裝了UDP,UDP封裝了BOOTP。

(2)如果配置了DHCP Server(相當(dāng)于IP管理員),收到廣播包會立刻知道來了一個新機器
只有 MAC 唯一,IP 管理員才能知道這是一個新人,需要租給它一個 IP 地址,這個過程我們稱為「DHCP Offer」。同時,DHCP Server 為此客戶保留為它提供的 IP 地址,從而不會為其他 DHCP 客戶分配此 IP 地址。

DHCP Server仍然使用廣播地址作為目的地址,因為此時新機器還沒有IP。服務(wù)器還發(fā)送了子網(wǎng)掩碼、網(wǎng)關(guān)和IP地址租用期等信息。
(3)如果新機器收到多個DHCP Offer,一般會選擇最先收到的哪個,并向網(wǎng)絡(luò)發(fā)送一個「DHCP Request」廣播數(shù)據(jù)包,包含客戶端的MAC地址、接受的IP地址、對應(yīng)的DHCP Server地址等,并告訴所有DHCP Server它將接受哪臺服務(wù)器提供的IP地址,請求撤銷他們提供的IP地址。
此時,由于還沒有得到 DHCP Server 的最后確認,客戶端仍然使用 0.0.0.0 為源 IP 地址、255.255.255.255 為目標地址進行廣播。在 BOOTP 里面,接受某個 DHCP Server 的分配的 IP。

(4)當(dāng) DHCP Server 接收到客戶機的 DHCP request 之后,會廣播返回給客戶機一個 「DHCP ACK」 消息包,表明已經(jīng)接受客戶機的選擇,并將這一 IP 地址的合法租用信息和其他的配置信息都放入該廣播包,發(fā)給客戶機。

「IP地址的收回和續(xù)租:」
客戶機會在租期過去 50% 的時候,直接向為其提供 IP 地址的 DHCP Server 發(fā)送 DHCP request 消息包??蛻魴C接收到該服務(wù)器回應(yīng)的 DHCP ACK 消息包,會根據(jù)包中所提供的新的租期以及其他已經(jīng)更新的 TCP/IP 參數(shù),更新自己的配置。這樣,IP 租用更新就完成了。
無類型域間選路(CIDR)
將32位的IP地址一分為二,前面是網(wǎng)絡(luò)號,后面是主機號。
例如一個IP地址 10.100.122.2/24,后面有一個斜杠,斜杠后面有個數(shù)字24,這種地址表示形式,就是CIDR。
后面24的意思就是在32位的IP地址中,前24位是網(wǎng)絡(luò)號,后8位是主機號。
伴隨著CIDR存在的,一個是「廣播地址」,10.100.122.255,如果發(fā)送這個地址,所有10.100.122網(wǎng)絡(luò)里的機器都可以收到,另一個是子網(wǎng)掩碼,255.255.255.0。
「將子網(wǎng)掩碼和IP地址按位進行AND計算,就是網(wǎng)絡(luò)號」
例如,IP是10.100.122.2,子網(wǎng)掩碼是255.255.255.0,那么網(wǎng)絡(luò)號就是10.100.122.0。

「如何根據(jù)CIDR求網(wǎng)絡(luò)第一個地址,子網(wǎng)掩碼和廣播地址?」
比如一個CIDR是 16.158.165.91/22,那么如何求網(wǎng)絡(luò)第一個地址,子網(wǎng)掩碼和廣播地址呢?
那么16.158.165.91轉(zhuǎn)換成二進制為:
「00010000.10011110.10100101.01011011」
那么22位網(wǎng)絡(luò)號就是:
「00010000.10011110.101001」
10位主機號就是:
「01.01011011」
那么子網(wǎng)掩碼就是:
22位網(wǎng)絡(luò)號全為1,10位主機號全為0
「11111111.11111111.11111100.00000000」
轉(zhuǎn)換成IP也就是:255.255.252.0
網(wǎng)絡(luò)的第一個地址為:
22位網(wǎng)絡(luò)號不變,10位主機號最后一位是1,其它全為0
「00010000.10011110.10100100.00000001」
也即是:16.158.164.1
廣播地址為:
22位網(wǎng)絡(luò)號不變,10位主機號全為1
「00010000.10011110.10100111.11111111」
也即是:16.158.167.255
往期推薦下期見
上古偽神
一個分享Java后端學(xué)習(xí)日志和健身的公眾號
歡迎大家點個在看
分享至朋友圈
