天天看點

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

原文連結:http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html

我們每天使用網際網路,你是否想過,它是如何實作的?

全世界幾十億台電腦,連接配接在一起,兩兩通信。上海的某一塊網卡送出信号,洛杉矶的另一塊網卡居然就收到了,兩者實際上根本不知道對方的實體位置,你不覺得這是很神奇的事情嗎?

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

網際網路的核心是一系列協定,總稱為”網際網路協定”(Internet Protocol Suite)。它們對電腦如何連接配接群組網,做出了詳盡的規定。了解了這些協定,就了解了網際網路的原理。

下面就是我的學習筆記。因為這些協定實在太複雜、太龐大,我想整理一個簡潔的架構,幫助自己從總體上把握它們。為了保證簡單易懂,我做了大量的簡化,有些地方并不全面和精确,但是應該能夠說清楚網際網路的原理。

一、概述

1.1 五層模型

網際網路的實作,分成好幾層。每一層都有自己的功能,就像建築物一樣,每一層都靠下一層支援。

使用者接觸到的,隻是最上面的一層,根本沒有感覺到下面的層。要了解網際網路,必須從最下層開始,自下而上了解每一層的功能。

如何分層有不同的模型,有的模型分七層,有的分四層。我覺得,把網際網路分成五層,比較容易解釋。

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

如上圖所示,最底下的一層叫做”實體層”(Physical Layer),最上面的一層叫做”應用層”(Application Layer),中間的三層(自下而上)分别是”連結層”(Link Layer)、”網絡層”(Network Layer)和”傳輸層”(Transport Layer)。越下面的層,越靠近硬體;越上面的層,越靠近使用者。

它們叫什麼名字,其實并不重要。隻需要知道,網際網路分成若幹層就可以了。

1.2 層與協定

每一層都是為了完成一種功能。為了實作這些功能,就需要大家都遵守共同的規則。

大家都遵守的規則,就叫做”協定”(protocol)。

網際網路的每一層,都定義了很多協定。這些協定的總稱,就叫做”網際網路協定”(Internet Protocol Suite)。它們是網際網路的核心,下面介紹每一層的功能,主要就是介紹每一層的主要協定。

二、實體層

我們從最底下的一層開始。

電腦要組網,第一件事要幹什麼?當然是先把電腦連起來,可以用光纜、電纜、雙絞線、無線電波等方式。

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

這就叫做”實體層”,它就是把電腦連接配接起來的實體手段。它主要規定了網絡的一些電氣特性,作用是負責傳送0和1的電信号。

三、連結層

3.1 定義

單純的0和1沒有任何意義,必須規定解讀方式:多少個電信号算一組?每個信号位有何意義?

這就是”連結層”的功能,它在”實體層”的上方,确定了0和1的分組方式。

3.2 以太網協定

早期的時候,每家公司都有自己的電信号分組方式。逐漸地,一種叫做“以太網”(Ethernet)的協定,占據了主導地位。

以太網規定,一組電信号構成一個資料包,叫做”幀”(Frame)。每一幀分成兩個部分:标頭(Head)和資料(Data)。

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

“标頭”包含資料包的一些說明項,比如發送者、接受者、資料類型等等;”資料”則是資料包的具體内容。

“标頭”的長度,固定為18位元組。”資料”的長度,最短為46位元組,最長為1500位元組。是以,整個”幀”最短為64位元組,最長為1518位元組。如果資料很長,就必須分割成多個幀進行發送。

3.3 MAC位址

上面提到,以太網資料包的”标頭”,包含了發送者和接受者的資訊。那麼,發送者和接受者是如何辨別呢?

以太網規定,連入網絡的所有裝置,都必須具有”網卡”接口。資料包必須是從一塊網卡,傳送到另一塊網卡。網卡的位址,就是資料包的發送位址和接收位址,這叫做MAC位址。

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

每塊網卡出廠的時候,都有一個全世界獨一無二的MAC位址,長度是48個二進制位,通常用12個十六進制數表示。

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

前6個十六進制數是廠商編号,後6個是該廠商的網卡流水号。有了MAC位址,就可以定位網卡和資料包的路徑了。

3.4 廣播

定義位址隻是第一步,後面還有更多的步驟。

首先,一塊網卡怎麼會知道另一塊網卡的MAC位址?

回答是有一種ARP協定,可以解決這個問題。這個留到後面介紹,這裡隻需要知道,以太網資料包必須知道接收方的MAC位址,然後才能發送。

其次,就算有了MAC位址,系統怎樣才能把資料包準确送到接收方?

回答是以太網采用了一種很”原始”的方式,它不是把資料包準确送到接收方,而是向本網絡内所有計算機發送,讓每台計算機自己判斷,是否為接收方。

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

上圖中,1号計算機向2号計算機發送一個資料包,同一個子網絡的3号、4号、5号計算機都會收到這個包。它們讀取這個包的”标頭”,找到接收方的MAC位址,然後與自身的MAC位址相比較,如果兩者相同,就接受這個包,做進一步處理,否則就丢棄這個包。這種發送方式就叫做”廣播”(broadcasting)。

有了資料包的定義、網卡的MAC位址、廣播的發送方式,”連結層”就可以在多台計算機之間傳送資料了。

四、網絡層

4.1 網絡層的由來

以太網協定,依靠MAC位址發送資料。理論上,單單依靠MAC位址,上海的網卡就可以找到洛杉矶的網卡了,技術上是可以實作的。

但是,這樣做有一個重大的缺點。以太網采用廣播方式發送資料包,所有成員人手一”包”,不僅效率低,而且局限在發送者所在的子網絡。也就是說,如果兩台計算機不在同一個子網絡,廣播是傳不過去的。這種設計是合理的,否則網際網路上每一台計算機都會收到所有包,那會引起災難。

網際網路是無數子網絡共同組成的一個巨型網絡,很像想象上海和洛杉矶的電腦會在同一個子網絡,這幾乎是不可能的。

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

是以,必須找到一種方法,能夠區分哪些MAC位址屬于同一個子網絡,哪些不是。如果是同一個子網絡,就采用廣播方式發送,否則就采用”路由”方式發送。(”路由”的意思,就是指如何向不同的子網絡分發資料包,這是一個很大的主題,本文不涉及。)遺憾的是,MAC位址本身無法做到這一點。它隻與廠商有關,與所處網絡無關。

這就導緻了”網絡層”的誕生。它的作用是引進一套新的位址,使得我們能夠區分不同的計算機是否屬于同一個子網絡。這套位址就叫做”網絡位址”,簡稱”網址”。

于是,”網絡層”出現以後,每台計算機有了兩種位址,一種是MAC位址,另一種是網絡位址。兩種位址之間沒有任何聯系,MAC位址是綁定在網卡上的,網絡位址則是管理者配置設定的,它們隻是随機組合在一起。

網絡位址幫助我們确定計算機所在的子網絡,MAC位址則将資料包送到該子網絡中的目标網卡。是以,從邏輯上可以推斷,必定是先處理網絡位址,然後再處理MAC位址。

4.2 IP協定

規定網絡位址的協定,叫做IP協定。它所定義的位址,就被稱為IP位址。

目前,廣泛采用的是IP協定第四版,簡稱IPv4。這個版本規定,網絡位址由32個二進制位組成。

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

習慣上,我們用分成四段的十進制數表示IP位址,從0.0.0.0一直到255.255.255.255。

網際網路上的每一台計算機,都會配置設定到一個IP位址。這個位址分成兩個部分,前一部分代表網絡,後一部分代表主機。比如,IP位址172.16.254.1,這是一個32位的位址,假定它的網絡部分是前24位(172.16.254),那麼主機部分就是後8位(最後的那個1)。處于同一個子網絡的電腦,它們IP位址的網絡部分必定是相同的,也就是說172.16.254.2應該與172.16.254.1處在同一個子網絡。

但是,問題在于單單從IP位址,我們無法判斷網絡部分。還是以172.16.254.1為例,它的網絡部分,到底是前24位,還是前16位,甚至前28位,從IP位址上是看不出來的。

那麼,怎樣才能從IP位址,判斷兩台計算機是否屬于同一個子網絡呢?這就要用到另一個參數”子網路遮罩”(subnet mask)。

所謂”子網路遮罩”,就是表示子網絡特征的一個參數。它在形式上等同于IP位址,也是一個32位二進制數字,它的網絡部分全部為1,主機部分全部為0。比如,IP位址172.16.254.1,如果已知網絡部分是前24位,主機部分是後8位,那麼子網絡掩碼就是11111111.11111111.11111111.00000000,寫成十進制就是255.255.255.0。

知道”子網路遮罩”,我們就能判斷,任意兩個IP位址是否處在同一個子網絡。方法是将兩個IP位址與子網路遮罩分别進行AND運算(兩個數位都為1,運算結果為1,否則為0),然後比較結果是否相同,如果是的話,就表明它們在同一個子網絡中,否則就不是。

比如,已知IP位址172.16.254.1和172.16.254.233的子網路遮罩都是255.255.255.0,請問它們是否在同一個子網絡?兩者與子網路遮罩分别進行AND運算,結果都是172.16.254.0,是以它們在同一個子網絡。

總結一下,IP協定的作用主要有兩個,一個是為每一台計算機配置設定IP位址,另一個是确定哪些位址在同一個子網絡。

4.3 IP資料包

根據IP協定發送的資料,就叫做IP資料包。不難想象,其中必定包括IP位址資訊。

但是前面說過,以太網資料包隻包含MAC位址,并沒有IP位址的欄位。那麼是否需要修改資料定義,再添加一個欄位呢?

回答是不需要,我們可以把IP資料包直接放進以太網資料包的”資料”部分,是以完全不用修改以太網的規格。這就是網際網路分層結構的好處:上層的變動完全不涉及下層的結構。

具體來說,IP資料包也分為”标頭”和”資料”兩個部分。

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

“标頭”部分主要包括版本、長度、IP位址等資訊,”資料”部分則是IP資料包的具體内容。它放進以太網資料包後,以太網資料包就變成了下面這樣。

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

IP資料包的”标頭”部分的長度為20到60位元組,整個資料包的總長度最大為65,535位元組。是以,理論上,一個IP資料包的”資料”部分,最長為65,515位元組。前面說過,以太網資料包的”資料”部分,最長隻有1500位元組。是以,如果IP資料包超過了1500位元組,它就需要分割成幾個以太網資料包,分開發送了。

4.4 ARP協定

關于”網絡層”,還有最後一點需要說明。

因為IP資料包是放在以太網資料包裡發送的,是以我們必須同時知道兩個位址,一個是對方的MAC位址,另一個是對方的IP位址。通常情況下,對方的IP位址是已知的(後文會解釋),但是我們不知道它的MAC位址。

是以,我們需要一種機制,能夠從IP位址得到MAC位址。

這裡又可以分成兩種情況。第一種情況,如果兩台主機不在同一個子網絡,那麼事實上沒有辦法得到對方的MAC位址,隻能把資料包傳送到兩個子網絡連接配接處的”網關”(gateway),讓網關去處理。

第二種情況,如果兩台主機在同一個子網絡,那麼我們可以用ARP協定,得到對方的MAC位址。ARP協定也是發出一個資料包(包含在以太網資料包中),其中包含它所要查詢主機的IP位址,在對方的MAC位址這一欄,填的是FF:FF:FF:FF:FF:FF,表示這是一個”廣播”位址。它所在子網絡的每一台主機,都會收到這個資料包,從中取出IP位址,與自身的IP位址進行比較。如果兩者相同,都做出回複,向對方報告自己的MAC位址,否則就丢棄這個包。

總之,有了ARP協定之後,我們就可以得到同一個子網絡内的主機MAC位址,可以把資料包發送到任意一台主機之上了。

五、傳輸層

5.1 傳輸層的由來

有了MAC位址和IP位址,我們已經可以在網際網路上任意兩台主機上建立通信。

接下來的問題是,同一台主機上有許多程式都需要用到網絡,比如,你一邊浏覽網頁,一邊與朋友線上聊天。當一個資料包從網際網路上發來的時候,你怎麼知道,它是表示網頁的内容,還是表示線上聊天的内容?

也就是說,我們還需要一個參數,表示這個資料包到底供哪個程式(程序)使用。這個參數就叫做”端口”(port),它其實是每一個使用網卡的程式的編号。每個資料包都發到主機的特定端口,是以不同的程式就能取到自己所需要的資料。

“端口”是0到65535之間的一個整數,正好16個二進制位。0到1023的端口被系統占用,使用者隻能選用大于1023的端口。不管是浏覽網頁還是線上聊天,應用程式會随機選用一個端口,然後與伺服器的相應端口聯系。

“傳輸層”的功能,就是建立”端口到端口”的通信。相比之下,”網絡層”的功能是建立”主機到主機”的通信。隻要确定主機和端口,我們就能實作程式之間的交流。是以,Unix系統就把主機+端口,叫做”套接字”(socket)。有了它,就可以進行網絡應用程式開發了。

5.2 UDP協定

現在,我們必須在資料包中加入端口資訊,這就需要新的協定。最簡單的實作叫做UDP協定,它的格式幾乎就是在資料前面,加上端口号。

UDP資料包,也是由”标頭”和”資料”兩部分組成。

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

“标頭”部分主要定義了發出端口和接收端口,”資料”部分就是具體的内容。然後,把整個UDP資料包放入IP資料包的”資料”部分,而前面說過,IP資料包又是放在以太網資料包之中的,是以整個以太網資料包現在變成了下面這樣:

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

UDP資料包非常簡單,”标頭”部分一共隻有8個位元組,總長度不超過65,535位元組,正好放進一個IP資料包。

5.3 TCP協定

UDP協定的優點是比較簡單,容易實作,但是缺點是可靠性較差,一旦資料包發出,無法知道對方是否收到。

為了解決這個問題,提高網絡可靠性,TCP協定就誕生了。這個協定非常複雜,但可以近似認為,它就是有确認機制的UDP協定,每發出一個資料包都要求确認。如果有一個資料包遺失,就收不到确認,發出方就知道有必要重發這個資料包了。

是以,TCP協定能夠確定資料不會遺失。它的缺點是過程複雜、實作困難、消耗較多的資源。

TCP資料包和UDP資料包一樣,都是内嵌在IP資料包的”資料”部分。TCP資料包沒有長度限制,理論上可以無限長,但是為了保證網絡的效率,通常TCP資料包的長度不會超過IP資料包的長度,以確定單個TCP資料包不必再分割。

六、應用層

應用程式收到”傳輸層”的資料,接下來就要進行解讀。由于網際網路是開放架構,資料來源五花八門,必須事先規定好格式,否則根本無法解讀。

“應用層”的作用,就是規定應用程式的資料格式。

舉例來說,TCP協定可以為各種各樣的程式傳遞資料,比如Email、WWW、FTP等等。那麼,必須有不同協定規定電子郵件、網頁、FTP資料的格式,這些應用程式協定就構成了”應用層”。

這是最高的一層,直接面對使用者。它的資料就放在TCP資料包的”資料”部分。是以,現在的以太網的資料包就變成下面這樣。

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

至此,整個網際網路的五層結構,自下而上全部講完了。這是從系統的角度,解釋網際網路是如何構成的。下一篇,我反過來,從使用者的角度,自上而下看看這個結構是如何發揮作用,完成一次網絡資料交換的。

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

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

七、一個小結

先對前面的内容,做一個小結。

我們已經知道,網絡通信就是交換資料包。電腦A向電腦B發送一個資料包,後者收到了,回複一個資料包,進而實作兩台電腦之間的通信。資料包的結構,基本上是下面這樣:

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

發送這個包,需要知道兩個位址:

有了這兩個位址,資料包才能準确送到接收者手中。但是,前面說過,MAC位址有局限性,如果兩台電腦不在同一個子網絡,就無法知道對方的MAC位址,必須通過網關(gateway)轉發。

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

上圖中,1号電腦要向4号電腦發送一個資料包。它先判斷4号電腦是否在同一個子網絡,結果發現不是(後文介紹判斷方法),于是就把這個資料包發到網關A。網關A通過路由協定,發現4号電腦位于子網絡B,又把資料包發給網關B,網關B再轉發到4号電腦。

1号電腦把資料包發到網關A,必須知道網關A的MAC位址。是以,資料包的目标位址,實際上分成兩種情況:

場景資料包位址

同一個子網絡對方的MAC位址,對方的IP位址

非同一個子網絡網關的MAC位址,對方的IP位址

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

八、使用者的上網設定

8.1 靜态IP位址

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

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

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

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

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

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

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

8.2 動态IP位址

所謂”動态IP位址”,指計算機開機後,會自動配置設定到一個IP位址,不用人為設定。它使用的協定叫做DHCP協定。

這個協定規定,每一個子網絡中,有一台計算機負責管理本網絡的所有IP位址,它叫做”DHCP伺服器”。新的計算機加入網絡,必須向”DHCP伺服器”發送一個”DHCP請求”資料包,申請IP位址和相關的網絡參數。

前面說過,如果兩台計算機在同一個子網絡,必須知道對方的MAC位址和IP位址,才能發送資料包。但是,新加入的計算機不知道這兩個位址,怎麼發送資料包呢?

DHCP協定做了一些巧妙的規定。

8.3 DHCP協定

首先,它是一種應用層協定,建立在UDP協定之上,是以整個資料包是這樣的:

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

(1)最前面的”以太網标頭”,設定發出方(本機)的MAC位址和接收方(DHCP伺服器)的MAC位址。前者就是本機網卡的MAC位址,後者這時不知道,就填入一個廣播位址:FF-FF-FF-FF-FF-FF。

(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位址”,電腦上網的首要步驟,是确定四個參數。這四個值很重要,值得重複一遍:

有了這幾個數值,電腦就可以上網”沖浪”了。接下來,我們來看一個執行個體,當使用者通路網頁的時候,網際網路協定是怎麼運作的。

九、一個執行個體:通路網頁

9.1 本機參數

我們假定,經過上一節的步驟,使用者設定好了自己的網絡參數:

然後他打開浏覽器,想要通路Google,在位址欄輸入了網址:www.google.com。

網際網路協定之入門基礎 一、概述 二、實體層 三、連結層 四、網絡層 五、傳輸層 六、應用層 七、一個小結 八、使用者的上網設定 九、一個執行個體:通路網頁

這意味着,浏覽器要向Google發送一個網頁請求的資料包。

9.2 DNS協定

我們知道,發送資料包,必須要知道對方的IP位址。但是,現在,我們隻知道網址www.google.com,不知道它的IP位址。

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://blog.csdn.net/peace1213/article/details/47068995

         網際網路協定入門深入:http://blog.csdn.net/peace1213/article/details/47084973

繼續閱讀