我們每天使用互連網,你是否想過,它是如何?的?
全世界幾十億台電腦,串連在一起,兩兩通訊。上海的某一塊網卡送出訊號,洛杉磯的另一塊網卡居然就收到了,兩者實際上根本不知道對方的物理位置,你不覺得這是很神奇的事情嗎?
互連網的核心是一系列協議,總稱為"互連網協議"(Internet Protocol Suite)。它們對電腦如何串連和組網,做出了詳盡的規定。理解了這些協議,就理解了互連網的原理。
下面就是我的學習筆記。因為這些協議實在太複雜、太龐大,我想整理一個簡潔的架構,協助自己從總體上把握它們。為了保證簡單易懂,我做了大量的簡化,有些地方並不全面和精確,但是應該能夠說清楚互連網的原理。
一、概述
1. 1 五層模型
互連網的實現,分成好幾層。每一層都有自己的功能,就像建築物一樣,每一層都靠下一層支援。
使用者接觸到的,只是最上面的一層,根本沒有感覺到下面的層。要理解互連網,必須從最下層開始,自下而上理解每一層的功能。
如何分層有不同的模型,有的模型分七層,有的分四層。我覺得,把互連網分成五層,比較容易解釋。
如所示,最底下的一層叫做"實體層"(Physical Layer),最上面的一層叫做"應用程式層"(Application Layer),中間的三層(自下而上)分別是"連結層"(Link Layer)、"網路層"(Network Layer)和"傳輸層"(Transport Layer)。越下面的層,越靠近硬體;越上面的層,越靠近使用者。
它們叫什麼名字,其實並不重要。只需要知道,互連網分成若干層就可以了。
1. 2 層與協議
每一層都是為了完成一種功能。為了實現這些功能,就需要大家都遵守共同的規則。
大家都遵守的規則,就叫做"協議"(protocol)。
互連網的每一層,都定義了很多協議。這些協議的總稱,就叫做"互連網協議"(Internet Protocol Suite)。它們是互連網的核心,下面介紹每一層的功能,主要就是介紹每一層的主要協議。
二、實體層(Physical Layer)
我們從最底下的一層開始。
電腦要組網,第一件事要幹什嗎?當然是先把電腦連起來,可以用光纜、電纜、雙絞線、無線電波等方式。
這就叫做"實體層",它就是把電腦串連起來的物理手段。它主要規定了網路的一些電氣特性,作用是負責傳送 0 和 1 的電訊號。
三、連結層(Link Layer)
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 位址、廣播的發送方式,"連結層"就可以在多台電腦之間傳送資料了。
四、網路層(Network Layer)
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 位址,可以把資料包發送到任意一台主機之上了。
五、傳輸層(Transport Layer)
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 資料包不必再分割。
六、應用程式層(Application Layer)
應用程式收到"傳輸層"的資料,接下來就要進行解讀。由於互連網是開放架構,資料來源五花八門,必須事先規定好格式,否則根本無法解讀。
"應用程式層"的作用,就是規定應用程式的資料格式。
舉例來說,TCP 協議可以為各種各樣的程式傳遞資料,比如 Email、WWW、FTP 等等。那麼,必須有不同協議規定電子郵件、網頁、FTP 資料的格式,這些應用程式協議就構成了"應用程式層"。
這是最高的一層,直接面對使用者。它的資料就放在 TCP 資料包的"資料"部分。因此,現在的乙太網路的資料包就變成下面這樣。
至此,整個互連網的五層結構,自下而上全部講完了。這是從系統的角度,解釋互連網是如何構成的。下一次,我反過來,從使用者的角度,自上而下看看這個結構是如何發揮作用,完成一次網路資料交換的。
七、一個小結
先對前面的內容,做一個小結。
我們已經知道,網路通訊就是交換資料包。電腦A向電腦B發送一個資料包,後者收到了,回複一個資料包,從而實現兩台電腦之間的通訊。資料包的結構,基本上是下面這樣:
發送這個包,需要知道兩個地址:
對方的 MAC 位址
對方的 IP 位址
有了這兩個地址,資料包才能準確送到接收者手中。但是,前面說過,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)會告訴你下面四個參數,你把它們填入作業系統,電腦就能連上網了:
原生 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 協議之上,所以整個資料包是這樣的:
(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 位址",電腦上網的首要步驟,是確定四個參數。這四個值很重要,值得重複一遍:
原生 IP 位址
子網路遮罩
網關的 IP 位址
DNS 的 IP 位址
有了這幾個數值,電腦就可以上網"衝浪"了。接下來,我們來看一個執行個體,當使用者訪問網頁的時候,互連網協議是怎麼運作的。
九、一個執行個體:訪問網頁
9. 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 發送一個網頁請求的資料包。
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,否則為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 部分的內容,類似於下面這樣:
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 資料包之中。
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://kb.cnblogs.com/page/144577/