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

"
"
重學計算機網絡(三) - 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 & 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 & IP的'孽緣'


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

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

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

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

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

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

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

"
重學計算機網絡(三) - 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 & IP的'孽緣'


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

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

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

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

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

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

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

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

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 & 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 & IP的'孽緣'


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

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

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

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

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

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

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

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

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 & IP的'孽緣'

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

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

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

"
重學計算機網絡(三) - 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 & IP的'孽緣'


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

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

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

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

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

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

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

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

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 & IP的'孽緣'

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

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

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

重學計算機網絡(三) - DHCP & 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
{
\toption routers 192.168.1.1;
\toption subnet-mask 255.255.255.0;
\toption time-offset -18000;
\tdefault-lease-time 21600;
\tmax-lease-time 43200;
\trange dynamic-bootp 192.168.1.240 192.168.1.250;
\tfilename "pxelinux.0";
\tnext-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的'孽緣'

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 & IP的'孽緣'


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

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

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

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

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

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

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

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

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 & IP的'孽緣'

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

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

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

重學計算機網絡(三) - DHCP & 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
{
\toption routers 192.168.1.1;
\toption subnet-mask 255.255.255.0;
\toption time-offset -18000;
\tdefault-lease-time 21600;
\tmax-lease-time 43200;
\trange dynamic-bootp 192.168.1.240 192.168.1.250;
\tfilename "pxelinux.0";
\tnext-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協議主要是用來給客戶租用IP地址,和房產中介很像,要商談、簽約、續租,廣播還不能“搶單”;

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

參考

  • 趣談網絡協議
"

相關推薦

推薦中...