天天看點

利用TCP/IP參考模型分析資料傳輸過程

紅茶三杯(http://weibo.com/vinsoney)原創技術博文,版權歸作者所有,轉載請注明出處。

TCP/IP參考模型是一個非常基礎,而且也非常重要的基礎架構,要想入門數通這是個必須掌握的基本概念,本文檔通過一個簡單的示例,結合參考模型來分析一下數通的基本過程。

網絡環境非常簡單,如下圖所示,我們現在來分析一下PC去通路Webserver的WEB服務,整個資料通信過程是如何發生的,為了簡化描述,我們這裡暫時忽略DNS、ARP、幀校驗等等機制的工作細節,隻考慮較為宏觀的層面。

利用TCP/IP參考模型分析資料傳輸過程

1)PC通路WebServer的WEB服務,實際上是通路Webserver的HTTP服務。這個過程對于人來說,就是在PC浏覽器裡輸入了Webserver的IP位址或域名,這個行為在PC的應用層面将觸發本地的HTTP程序産生一些資料,我們把這些資料成為DATA,它是HTTP的有效荷載:

利用TCP/IP參考模型分析資料傳輸過程

2)數通的最終任務是,要幫助PC把這個HTTP的有效荷載傳遞到Webserver上的HTTP程序中。這是一個看起來簡單的任務,但是實際上,這份資料卻要翻山越嶺。PC的應用層将這份HTTP的有效荷載交給“傳輸層”(我們這裡忽略TCP三向交握等内容),傳輸層會為應用層下來的這份資料封裝上一個封包頭部,由HTTP是基于TCP的應用,是以這裡壓上的是TCP的頭部,在這個頭部之中,有目的端口号80,這個端口号将在資料到達Webserver後告訴對端,我要通路你啥服務。當然,為了讓這份資料能夠可靠的被傳輸,TCP頭部裡還有其他重要的内容,這裡暫不贅述。

利用TCP/IP參考模型分析資料傳輸過程

3)好了,HTTP的荷載被封裝上了TCP的頭,為了讓這份資料能夠在IP網絡中進行傳輸,我們還需要一個“信封”,于是資料到了PC的“網際網路層”,在這一層,資料被封裝上了一個IP封包頭部,在IP標頭中,寫入了源和目的IP位址,源IP位址為PC的IP:192.168.1.1,而目的IP位址是WebServer的IP:192.168.2.1。IP標頭中的另一個重要的字段是協定号,這裡寫入的值為6,這個值對應着IP頭後面封裝的協定,也就是TCP。好了,有了IP頭這個信封,我們這份資料,就能夠在IP網絡中被從源傳遞到目的地:

利用TCP/IP參考模型分析資料傳輸過程

4)然而光有信封還是不夠的,至少,我們要把這個信件一段鍊路一段鍊路的搬運過去,而不能一下就從源直接穿越到目的地去吧,也不是兲朝的穿越劇不是?那咋辦,我們還需要一個資料鍊路層的頭部,由于這裡是以太網的環境、以太網的鍊路,是以上層下來的資料,又被封裝上了一個以太網幀頭,這是為了使得PC能夠将這份資料傳遞到同在鍊路上的網關R1(的F0/0口)。由于PC設定的網關位址為192.168.1.254,也就是R1的F0/0口IP位址,是以,當通路Webserver 192.168.2.1這個非本地網絡的IP時,PC要求助于它的網關,是以再資料鍊路層面上,PC要資料傳遞到網關,它将封裝上去的以太網頭部中寫入源MAC也就是自己的MAC:00DD.F800.0001,同時寫入目的MAC也就是路由器R1的F0/0口的MAC:000.AAAA.0001,當然如果此刻PC沒有網關IP對應的MAC,那麼它會發送ARP消息去請求。

以太網幀頭中還有一個重要的字段,是類型字段,類型字段用于描述我這個以太網的幀頭後面被封裝的是什麼封包,這裡寫入的值是0x0800,表示後面是一個IP封包:紅茶三杯(http://weibo.com/vinsoney)原創技術博文,版權歸作者所有,轉載請注明出處。

利用TCP/IP參考模型分析資料傳輸過程

5)費了好大的勁兒,層層加料,終于,這份資料最終做好了傳輸的準備,從PC傳輸到了同在鍊路上的R1,距離目的地又更近了一點,當然,在資料在傳輸過程中,是不可能像我們圖畫的這麼文藝的,它應該是一些電氣化的資訊,例如1010101神馬的,不鳥他了,反正是這一坨東西是傳到了R1:

利用TCP/IP參考模型分析資料傳輸過程

6)R1的F0/0口收到了這份東西,先把它還原成資料幀,檢視幀頭,發現目的MAC位址正是自己F0/0口的MAC位址,高興壞了,以為是誰寫給自己的情書呢,于是結合檢視類型字段,發現是0800,于是知道上層被封裝的是一個IP包,它将以太網幀頭剝去,将裡頭的IP封包交上去給IP協定棧處理:

利用TCP/IP參考模型分析資料傳輸過程

7)接下去是R1的網際網路層的工作了,他收到下層傳遞夠來的IP包,檢視IP包的目的IP位址,發現目的地是192.168.2.1,我艹,原來不是給我的是給别人的,沒辦法,R1拿着這個位址去自己的地圖--路由表中去查找,發現有個目的地192.168.2.0/24的網絡,出口是自己的FA1/0口,下一跳位址是192.168.12.2也就是R2:

利用TCP/IP參考模型分析資料傳輸過程

8)發現資料包目的IP位址不是自己的R1,找到将資料送到目的地的路徑,是交給離目的地更近的192.168.12.2,而為了将資料較給同在鍊路上的192.168.12.2,又得将資料重新封裝上以太網的幀頭,這次幀頭中的源MAC填寫的是R1的FA1/0口的MAC位址,而目的MAC寫的是R2的F0/0口的MAC位址:

利用TCP/IP參考模型分析資料傳輸過程

9)妥妥兒的,資料又被R1傳遞給了R2:

利用TCP/IP參考模型分析資料傳輸過程

10)R2收到這個資料後,同樣的是先還原成資料幀,然後檢視幀頭,結果發現目的MAC是自己的MAC,也挺高興,将資料幀丢給上層的IP協定去處理:紅茶三杯(http://weibo.com/vinsoney)原創技術博文,版權歸作者所有,轉載請注明出處。

利用TCP/IP參考模型分析資料傳輸過程

11)結果一樣的,丫一看IP頭中的目的IP位址,擦類又不是給自己的,咦,為什麼要說又字?不管了,反正不是給自己的就對了:

利用TCP/IP參考模型分析資料傳輸過程

12)于是查路由表,發現目的IP位址192.168.2.1就是在自己FA1/0口直連的網絡192.168.2.0/24中的一個IP位址,好辦了,緣來是家門口的人啊。于是它将資料再封裝上以太網幀頭,源MAC是自己Fa1/0口的MAC位址,目的MAC是Webserver的MAC,如果沒有Webserver的192.168.2.1對應的MAC,同樣的,還是發送ARP消息去請求:

利用TCP/IP參考模型分析資料傳輸過程

13)資料有上路了,傳遞給了Webserver:

利用TCP/IP參考模型分析資料傳輸過程

14)說好的宏觀分析的,說着說着有變成微觀的了。Webserver收到這個資料幀後,檢視幀頭,目的MAC是自己的網卡MAC,而且類型字段為0800:

利用TCP/IP參考模型分析資料傳輸過程

15)于是将這個幀頭拆開,将裡頭的IP封包交給IP協定去處理。接着IP協定分析這個IP包,檢視標頭中的目的IP位址,發現正是自己的網卡IP沒跑兒了,又發現IP頭中的協定号是6,說明這IP頭裡包裹着的是一個TCP的封包:

利用TCP/IP參考模型分析資料傳輸過程

16)知道IP頭後面包裹的是一個TCP封包後,它将IP頭剝去,将裡頭的TCP包拿出來,發現TCP頭部中目的端口号是80,這是一個well-known衆所周知的端口号:

利用TCP/IP參考模型分析資料傳輸過程
下一篇: git 認識

繼續閱讀