1. 程式人生 > >《Linux網路程式設計》: 網路協議入門

《Linux網路程式設計》: 網路協議入門

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


全世界幾十億臺電腦,連線在一起,兩兩通訊。北京的某一塊網絡卡送出訊號,深圳的另一塊網絡卡居然就收到了,兩者實際上根本不知道對方的物理位置,你不覺得這是很神奇的事情嗎?

為了使各種不同的計算機之間可以互聯,ARPANet指定了一套計算機通訊協議,即TCP/IP協議( 族 ),它們對電腦如何連線和組網,做出了詳盡的規定。理解了這些協議,就理解了網路的原理。

因為這些協議實在太複雜、太龐大,這裡只是整理一個簡潔的框架,幫助大家從總體上把握它們。

 

一、概述

1.1 模型
為了減少協議設計的複雜性,大多數網路模型均採用分層的方式來組織

。每一層都有自己的功能,就像建築物一樣,每一層都靠下一層支援。每一層利用下一層提供的服務來為上一層提供服務,本層服務的實現細節對上層遮蔽。

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

如何分層有不同的模型,有的模型分七層( 不常用 ),有的分四層( 現在就是用這種 ),如下圖:

 

為了方便理解,我們把它分成五層:

 

越下面的層,越靠近硬體;越上面的層,越靠近使用者。至於每一層叫什麼名字,其實並不重要(面試的時候,面試官可能會問每一層的名字)。只需要知道,網際網路分成若干層即可。

 

1.2 層與協議

每一層都是為了完成一種功能。為了實現這些功能,就需要大家都遵守共同的規則。大家都遵守這規則,就叫做“協議”(protocol)。

網路的每一層,都定義了很多協議。這些協議的總稱,叫“TCP/IP協議”它是Internet最基本的協議、Internet國際網際網路絡的基礎,由網路層的IP協議和傳輸層的TCP協議組成。這裡需要注意,TCP/IP協議是一個大家族,不僅僅只有TCP和IP協議,它還包括其它的協議,如下圖:

 

二、物理層

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

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

這就叫做“物理層”,它就是把電腦連線起來的物理手段。它主要規定了網路的一些電氣特性,作用是負責傳送 0 和 1 的電訊號。

 

三、連結層

3.1 定義

單純的 0 和 1 沒有任何意義,必須規定解讀方式:多少個電訊號算一組?每個訊號位有何意義?這就是“連結層”的功能,它在“物理層”的上方,確定了 0 和 1 的分組方式。

3.2 乙太網協議
早期的時候,每家公司都有自己的電訊號分組方式。逐漸地,一種叫做“乙太網”(Ethernet)的協議,佔據了主導地位。

乙太網規定,一組電訊號構成一個數據包,叫做“幀”(Frame)。每一幀分成兩個部分:標頭(Head)和資料(Data)

“標頭”包含資料包的一些說明項,比如傳送者、接受者、資料型別等等;"資料"則是資料包的具體內容。

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

 

3.3 MAC 地址

上面提到,乙太網資料包的“標頭”,包含了傳送者和接受者的資訊。那麼,傳送者和接受者是如何標識呢?

 

乙太網規定,連入網路的所有裝置,都必須具有“網絡卡”介面。資料包必須是從一塊網絡卡,傳送到另一塊網絡卡。通過網絡卡能夠使不同的計算機之間連線,從而完成資料通訊等功能。網絡卡的地址,就是資料包的傳送地址和接收地址,這叫做 MAC 地址。

 

MAC地址,用於標識網路裝置,類似於身份證號。每塊網絡卡出廠的時候,都有一個全世界獨一無二的 MAC 地址(理論上全球唯一),長度是 48 個二進位制位,通常用 12 個十六進位制數表示。

有了 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,並且1和0分別連續。

 

比如,IP 地址 172.16.254.1,如果已知網路部分是前 24 位,主機部分是後 8 位,那麼子網路掩碼就是 11111111.11111111.11111111.00000000,寫成十進位制就是 255.255.255.0。

 

我們可以通過“子網掩碼”來區分哪部分是子網 ID,哪部分為主機 ID。IP 地址和子網掩碼中 1 相與“&”即可得到子網 ID,IP 地址和子網掩碼中 0 相或 “|”,即可得到主機 ID。

 

知道“子網掩碼”,我們就能判斷,任意兩個 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 資料包的“資料”部分。因此,現在的乙太網的資料包就變成下面這樣。

傳送這個包,需要知道兩個地址:

  * 對方的MAC地址

  * 對方的IP地址

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

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

1號電腦把資料包發到閘道器A,必須知道閘道器A的MAC地址。所以,資料包的目標地址,實際上分成兩種情況:

場景 資料包地址
同一個子網路 對方的MAC地址,對方的IP地址
非同一個子網路 閘道器的MAC地址,對方的IP地址

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

 

七、使用者的上網設定

7.1 靜態IP地址

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

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

  * 本機的IP地址
  * 子網掩碼
  * 閘道器的IP地址
  * DNS的IP地址

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

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

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

7.2 動態IP地址

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

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

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

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

7.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伺服器等等引數。

7.4 上網設定:小結

這個部分,需要記住的就是一點:不管是"靜態IP地址"還是"動態IP地址",電腦上網的首要步驟,是確定四個引數。這四個值很重要,值得重複一遍:

  * 本機的IP地址
  * 子網掩碼
  * 閘道器的IP地址
  * DNS的IP地址

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

 

八、一個例項:訪問網頁

8.1 本機引數

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

  * 本機的IP地址:192.168.1.100
  * 子網掩碼:255.255.255.0
  * 閘道器的IP地址:192.168.1.1
  * DNS的IP地址:8.8.8.8

然後他開啟瀏覽器,想要訪問Google,在位址列輸入了網址:www.google.com。

這意味著,瀏覽器要向Google傳送一個網頁請求的資料包。

8.2 DNS協議

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

DNS協議可以幫助我們,將這個網址轉換成IP地址。已知DNS伺服器為8.8.8.8,於是我們向這個地址傳送一個DNS資料包(53埠)。

然後,DNS伺服器做出響應,告訴我們Google的IP地址是172.194.72.105。於是,我們知道了對方的IP地址。

8.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地址。

8.4 應用層協議

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

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

  GET / HTTP/1.1
  Host: www.google.com
  Connection: keep-alive
  User-Agent: Mozilla/5.0 (Windows NT 6.1) ......
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  Accept-Encoding: gzip,deflate,sdch
  Accept-Language: zh-CN,zh;q=0.8
  Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
  Cookie: ... ...

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

8.5 TCP協議

TCP資料包需要設定埠,接收方(Google)的HTTP埠預設是80,傳送方(本機)的埠是一個隨機生成的1024-65535之間的整數,假定為51775。

TCP資料包的標頭長度為20位元組,加上嵌入HTTP的資料包,總長度變為4980位元組。

8.6 IP協議

然後,TCP資料包再嵌入IP資料包。IP資料包需要設定雙方的IP地址,這是已知的,傳送方是192.168.1.100(本機),接收方是172.194.72.105(Google)。

IP資料包的標頭長度為20位元組,加上嵌入的TCP資料包,總長度變為5000位元組。

8.7 乙太網協議

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

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

8.8 伺服器端響應

經過多個閘道器的轉發,Google的伺服器172.194.72.105,收到了這四個乙太網資料包。

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

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

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

 

參考:

《TCP/IP協議族》:ARP協議

《TCP/IP協議族》:TCP/IP協議頭部結構體

《TCP/IP協議族》:HTTP報文頭解析