網際網路協議(二)

2022-02-12 11:47:48 字數 3664 閱讀 2974

(接上文)

七、乙個小結

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

我們已經知道,網路通訊就是交換資料報。電腦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響應以後,就可以將網頁顯示出來,完成一次網路通訊。

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

網際網路協議

常見的應用層協議使用的埠號 http tcp 80 http協議使用的tcp協議的80埠,下同 共享資料夾 tcp 445 smtp tcp 25 pop3 tcp 110 telnet tcp 23 sql tcp 1433 dns udp 53 服務和應用層協議之間的關係 通過目標埠識別計算機相...

網際網路協議

爭取做乙個懂點網路概念且有趣的程式設計師。tcp ip是網際網路採用的協議標準,它是乙個協議系列,包含了100多個協議,用來將各種計算機和資料通訊裝置組成計算機網路,tcp和ip是最基本 最重要的兩個核心協議,因此,通常用tcp ip協議來代表整個網際網路協議系列 即tcp ip的定義 tcp ip...

網際網路協議

tcp協議 arp協議屬於網路層協議。用途是根據ip位址計算出mac位址。主機傳送資訊時將包含目標ip位址的arp請求廣播到網路上的所有主機,並接收返回訊息,以此確定目標的實體地址 收到返回訊息後將該ip位址和實體地址存入本機arp快取中並保留一定時間,下次請求時直接查詢arp快取以節約資源。位址解...