網際網路協議入門(二)

2022-05-10 15:02:32 字數 4468 閱讀 4338

這是從設計者的角度看問題,今天我想切換到使用者的角度,看看使用者是如何從上至下,與這些協議互動的。

網際網路協議入門(二)

(接上文)

七、乙個小結

先對前面的內容,做乙個小結。

我們已經知道,網路通訊就是交換資料報。電腦a向電腦b傳送乙個資料報,後者收到了,回覆乙個資料報,從而實現兩台電腦之間的通訊。資料報的結構,基本上是下面這樣:

* 對方的mac位址

* 對方的ip位址

有了這兩個位址,資料報才能準確送到接收者手中。但是,前面說過,mac位址有侷限性,如果兩台電腦不在同乙個子網路,就無法知道對方的mac位址,必須通過閘道器(gateway)**。

上圖中,1號電腦要向4號電腦傳送乙個資料報。它先判斷4號電腦是否在同乙個子網路,結果發現不是(後文介紹判斷方法),於是就把這個資料報發到閘道器a。閘道器a通過路由協議,發現4號電腦位於子網路b,又把資料報發給閘道器b,閘道器b再**到4號電腦。

場景資料報位址

同乙個子網路

對方的mac位址,對方的ip位址

非同乙個子網路

閘道器的mac位址,對方的ip位址

傳送資料報之前,電腦必須判斷對方是否在同乙個子網路,然後選擇相應的mac位址。接下來,我們就來看,實際使用中,這個過程是怎麼完成的。

八、使用者的上網設定

8.1 靜態ip位址

你買了一台新電腦,插上網線,開機,這時電腦能夠上網嗎?

通常你必須做一些設定。有時,管理員(或者isp)會告訴你下面四個引數,你把它們填入作業系統,計算機就能連上網了:

* 本機的ip位址

* 子網掩碼

* 閘道器的ip位址

* dns的ip位址

下圖是windows系統的設定視窗。

這四個引數缺一不可,後文會解釋為什麼需要知道它們才能上網。由於它們是給定的,計算機每次開機,都會分到同樣的ip位址,所以這種情況被稱作"靜態ip位址上網"。

但是,這樣的設定很專業,普通使用者望而生畏,而且如果一台電腦的ip位址保持不變,其他電腦就不能使用這個位址,不夠靈活。出於這兩個原因,大多數使用者使用"動態ip位址上網"。

8.2 動態ip位址

所謂"動態ip位址",指計算機開機後,會自動分配到乙個ip位址,不用人為設定。它使用的協議叫做dhcp協議。

這個協議規定,每乙個子網路中,有一台計算機負責管理本網路的所有ip位址,它叫做"dhcp伺服器"。新的計算機加入網路,必須向"dhcp伺服器"傳送乙個"dhcp請求"資料報,申請ip位址和相關的網路引數。

前面說過,如果兩台計算機在同乙個子網路,必須知道對方的mac位址和ip位址,才能傳送資料報。但是,新加入的計算機不知道這兩個位址,怎麼傳送資料報呢?

dhcp協議做了一些巧妙的規定。

8.3 dhcp協議

首先,它是一種應用層協議,建立在udp協議之上,所以整個資料報是這樣的:

(2)後面的"ip標頭",設定發出方的ip位址和接收方的ip位址。這時,對於這兩者,本機都不知道。於是,發出方的ip位址就設為0.0.0.0,接收方的ip位址設為255.255.255.255。

(3)最後的"udp標頭",設定發出方的埠和接收方的埠。這一部分是dhcp協議規定好的,發出方是68埠,接收方是67埠。

這個資料報構造完成後,就可以發出了。乙太網是廣播傳送,同乙個子網路的每台計算機都收到了這個包。因為接收方的mac位址是ff-ff-ff-ff-ff-ff,看不出是發給誰的,所以每台收到這個包的計算機,還必須分析這個包的ip位址,才能確定是不是發給自己的。當看到發出方ip位址是0.0.0.0,接收方是255.255.255.255,於是dhcp伺服器知道"這個包是發給我的",而其他計算機就可以丟棄這個包。

接下來,dhcp伺服器讀出這個包的資料內容,分配好ip位址,傳送回去乙個"dhcp響應"資料報。這個響應包的結構也是類似的,乙太網標頭的mac位址是雙方的網絡卡位址,ip標頭的ip位址是dhcp伺服器的ip位址(發出方)和255.255.255.255(接收方),udp標頭的埠是67(發出方)和68(接收方),分配給請求端的ip位址和本網路的具體引數則包含在data部分。

新加入的計算機收到這個響應包,於是就知道了自己的ip位址、子網掩碼、閘道器位址、dns伺服器等等引數。

8.4 上網設定:小結

* 本機的ip位址

* 子網掩碼

* 閘道器的ip位址

* dns的ip位址

有了這幾個數值,電腦就可以上網"衝浪"了。接下來,我們來看乙個例項,當使用者訪問網頁的時候,網際網路協議是怎麼運作的。

九、乙個例項:訪問網頁

9.1 本機引數

這意味著,瀏覽器要向google傳送乙個網頁請求的資料報。

9.2 dns協議

dns協議可以幫助我們,將這個**轉換成ip位址。已知dns伺服器為8.8.8.8,於是我們向這個位址傳送乙個dns資料報(53埠)。

然後,dns伺服器做出響應,告訴我們google的ip位址是172.194.72.105。於是,我們知道了對方的ip位址。

9.3 子網掩碼

接下來,我們要判斷,這個ip位址是不是在同乙個子網路,這就要用到子網掩碼。

已知子網掩碼是255.255.255.0,本機用它對自己的ip位址192.168.1.100,做乙個二進位制的and運算(兩個數字都為1,結果為1,否則為0),計算結果為192.168.1.0;然後對google的ip位址172.194.72.105也做乙個and運算,計算結果為172.194.72.0。這兩個結果不相等,所以結論是,google與本機不在同乙個子網路。

因此,我們要向google傳送資料報,必須通過閘道器192.168.1.1**,也就是說,接收方的mac位址將是閘道器的mac位址。

9.4 應用層協議

瀏覽網頁用的是http協議,它的整個資料報構造是這樣的:

http部分的內容,類似於下面這樣:

我們假定這個部分的長度為4960位元組,它會被嵌在tcp資料報之中。

9.5 tcp協議

tcp資料報需要設定埠,接收方(google)的http埠預設是80,傳送方(本機)的埠是乙個隨機生成的1024-65535之間的整數,假定為51775。

tcp資料報的標頭長度為20位元組,加上嵌入http的資料報,總長度變為4980位元組。

9.6 ip協議

然後,tcp資料報再嵌入ip資料報。ip資料報需要設定雙方的ip位址,這是已知的,傳送方是192.168.1.100(本機),接收方是172.194.72.105(google)。

ip資料報的標頭長度為20位元組,加上嵌入的tcp資料報,總長度變為5000位元組。

9.7 乙太網協議

最後,ip資料報嵌入乙太網資料報。乙太網資料報需要設定雙方的mac位址,傳送方為本機的網絡卡mac位址,接收方為閘道器192.168.1.1的mac位址(通過arp協議得到)。

乙太網資料報的資料部分,最大長度為1500位元組,而現在的ip資料報長度為5000位元組。因此,ip資料報必須分割成四個包。因為每個包都有自己的ip標頭(20位元組),所以四個包的ip資料報的長度分別為1500、1500、1500、560。

9.8 伺服器端響應

經過多個閘道器的**,google的伺服器172.194.72.105,收到了這四個乙太網資料報。

根據ip標頭的序號,google將四個包拼起來,取出完整的tcp資料報,然後讀出裡面的"http請求",接著做出"http響應",再用tcp協議發回來。

本機收到http響應以後,就可以將網頁顯示出來,完成一次網路通訊。

這個例子就到此為止,雖然經過了簡化,但它大致上反映了網際網路協議的整個通訊過程。

(完)

網際網路協議入門(二)

這是從設計者的角度看問題,今天我想切換到使用者的角度,看看使用者是如何從上至下,與這些協議互動的。網際網路協議入門 二 接上文 七 乙個小結 先對前面的內容,做乙個小結。我們已經知道,網路通訊就是交換資料報。電腦a向電腦b傳送乙個資料報,後者收到了,回覆乙個資料報,從而實現兩台電腦之間的通訊。資料報...

網際網路協議入門

網路層傳輸層 應用層 每層叫什麼名字其實不重要,只需要知道網際網路分成若干層就可以。實體層元件網路第一件事情就是要把電腦連線起來,可以用多種方式實現 光纜,電纜,雙絞線,無線電波等 實體層就是把電腦連線起來的物理手段,負責傳輸 0 和 1 的訊號。鏈路層 單純的 0 和 1 沒有任何意義。必須規定解...

網際網路協議(二)

接上文 七 乙個小結 先對前面的內容,做乙個小結。我們已經知道,網路通訊就是交換資料報。電腦a向電腦b傳送乙個資料報,後者收到了,回覆乙個資料報,從而實現兩台電腦之間的通訊。資料報的結構,基本上是下面這樣 對方的mac位址 對方的ip位址 有了這兩個位址,資料報才能準確送到接收者手中。但是,前面說過...