本文摘錄於TCP 協議詳解 (史上最全)-CSDN 部落格
TCP/IP 協議與七層 ISO 模型的對應關係
-
TCP/IP 和 ISO 的區別
OSI 參考模型注重“通訊協議必要的功能是什麼”,而 TCP/IP 則更強調“在計算機上實現協議應該開發哪種程式”。
網路傳輸
零碎的一些概念
MAC 地址
每個裝置(包括電腦,交換機,路由等)的唯一的標識號
乙太網
透過交換機傳輸組成的小範圍網路
物理層(使用 MAC 解決裝置的身份證問題)
集線器
將電訊號轉發到所有出口(廣播),不做任何處理
資料鏈路層(使用交換機解決 MAC 地址對映問題)
交換機
交換機內部維護一張 MAC 地址表,記錄著每一個 MAC 地址的裝置,連線在其哪一個埠上。
-
當 MAC 地址表不為空的時候
如圖例子
資料包到達交換機時,交換機內部透過自己維護的 MAC 地址表,發現目標機器 B 的 MAC 地址 bb-bb-bb-bb-bb-bb 對映到了埠 1 上,於是把資料從 1 號埠發給了 B
MAC 地址 埠 bb-bb-bb-bb-bb-bb 1 cc-cc-cc-cc-cc-cc 3 aa-aa-aa-aa-aa-aa 4 dd-dd-dd-dd-dd-dd 5 -
當 MAC 地址表為空的時候
-
傳送同樣的資料包,由於這個包從埠 4 進入的交換機,所以此時交換機就可以在 MAC 地址表記錄第一條資料:
MAC:aa-aa-aa-aa-aa-aa-aa
埠:4 -
交換機看目標 MAC 地址(bb-bb-bb-bb-bb-bb)在地址表中並沒有對映關係,於是將此包發給了所有埠,也即發給了所有機器。
-
之後,只有機器 B 收到了確實是發給自己的包,於是做出了響應,響應資料從埠 1 進入交換機,於是交換機此時在地址表中更新了第二條資料:
MAC:bb-bb-bb-bb-bb-bb
埠:1
經過該網路中的機器不斷地通訊,交換機最終將 MAC 地址表建立完畢~
-
傳輸層(IP 地址和路由器)
網路層
網路層(IP 協議)本身沒有傳輸包的功能,包的實際傳輸是委託給資料鏈路層(乙太網中的交換機)來實現的。
ip 地址
- IP 地址是軟體層面上的,可以根據規劃的網路拓撲結構來調整,MAC 地址一般是無法修改的。
路由器
為了減少交換機的 MAC 地址表而產生,專門負責 IP 地址的尋找。
- 作為一臺獨立的擁有 MAC 地址的裝置,並且可以幫我把資料包做一次轉發。
- 注意,路由器的每一個埠,都有獨立的 MAC 地址
子網
- 如果源 IP 與目的 IP 處於一個子網,直接將包透過交換機發出去。
- 如果源 IP 與目的 IP 不處於一個子網,就交給路由器去處理。
子網掩碼
-
假如某臺機器的子網掩碼定為 255.255.255.0
這表示,將源 IP 與目的 IP 分別同這個子網掩碼進行與運算,相等則是在一個子網,不相等就是在不同子網
-
比如
A 電腦:192.168.0.1 & 255.255.255.0 = 192.168.0.0
B 電腦:192.168.0.2 & 255.255.255.0 = 192.168.0.0
C 電腦:192.168.1.1 & 255.255.255.0 = 192.168.1.0
D 電腦:192.168.1.2 & 255.255.255.0 = 192.168.1.0
那麼 A 與 B 在同一個子網,C 與 D 在同一個子網,但是 A 與 C 就不在同一個子網,與 D 也不在同一個子網,以此類推。
-
-
子網掩碼的另外一種表示方式
由於子網掩碼其實就表示前多少位表示子網的網段,所以如 192.168.0.0(255.255.255.0) 也可以簡寫為 192.168.0.0/24
預設閘道器
- 就是使用者在自己電腦裡配置的一個 IP 地址,以便在發給不同子網的機器時,發給這個 IP 地址。
路由表
-
路由器收到的資料包有目的 IP ,需要轉化成從自己的哪個埠出去,很容易想到,應該有個表,就像 MAC 地址表一樣。不同於 MAC 地址表的是,路由表並不是一對一這種明確關係,我們下面看一個路由表的結構。
目的地址 下一跳 埠 192.168.0.0/24 0 192.168.0.254/32 0 192.168.1.0/24 1 192.168.1.254/32 1 路由表就表示,192.168.0.xxx 這個子網下的,都轉發到 0 號埠,192.168.1.xxx 這個子網下的,都轉發到 1 號埠。
arp 協議
-
作用:把 IP 地址對應的 MAC 地址找到
-
電腦裡會有一個 arp 快取表(開始是空的)記錄 IP 和 MAC 地址的關係
IP 地址 MAC 地址 192.168.0.2 BBBB 例如 A 向 B 傳輸資訊,B 的 IP 是 192.168.0.2.
一開始的時候這個表是空的,電腦 A 為了知道電腦 B(192.168.0.2)的 MAC 地址,將會廣播一條 arp 請求,B 收到請求後,帶上自己的 MAC 地址給 A 一個響應。此時 A 便更新了自己的 arp 表。
透過不斷廣播 arp 請求,最終所有電腦裡面都將 arp 快取表更新完整。
路由器把包準確轉發給指定裝置過程:
如下圖
現在兩個裝置之間傳輸,除了加上資料鏈路層的頭部之外,還要再增加一個網路層的頭部。
假如 A 給 B 傳送資料,由於它們直接連著交換機,所以 A 直接發出如下資料包即可,其實網路層沒有體現出作用。
但假如 A 給 C 傳送資料,A 就需要先轉交給路由器,然後再由路由器轉交給 C。由於最底層的傳輸仍然需要依賴乙太網,所以資料包是分成兩段的。
A - > 路由器這段的包如下:
路由器 -> C 這段的包如下:
完整過程如下
網路層涉及的三張表
- 交換機中有 MAC 地址表用於對映 MAC 地址和它的埠
- 路由器中有路由表用於對映 IP 地址(段)和它的埠
- 電腦和路由器中都有 arp 快取表用於快取 IP 和 MAC 地址的對映關係
這三張表是怎麼來的
- MAC 地址表是透過乙太網內各節點之間不斷透過交換機通訊,不斷完善起來的。
- 路由表是各種路由演算法 + 人工配置逐步完善起來的。
- arp 快取表是不斷透過 arp 協議的請求逐步完善起來的。
HTTP報文傳輸
傳輸原理
利用TCP/IP進行網路通訊時,資料包會按照分層順序與對方進行通訊。傳送端從應用層往下走,接收端從鏈路層往上走。從客戶端到伺服器的資料,每一幀資料的傳輸的順序都為:應用層->運輸層->網路層->鏈路層->鏈路層->網路層->運輸層->應用層。
傳輸過程
資料封裝和分用
資料透過網際網路傳輸的時候不可能是光禿禿的不加標識,如果這樣資料就會亂。所以資料在傳送的時候,需要加上特定標識,加上特定標識的過程叫做資料的封裝,在資料使用的時候再去掉特定標識,去掉特定標識的過程就叫做分用。TCP/IP協議的資料封裝和分用過程,大致如下圖所示:
在傳輸層封裝時,新增的報文首部時要存入一個應用程式的識別符號,無論TCP和UDP都用一個16位的埠號來表示不同的應用程式,並且都會將源埠和目的埠存入報文首部中。
在網路層封裝時,IP首部會標識處理資料的協議型別,或者說標識出網路層資料幀所攜帶的上層資料型別,如TCP、UDP、ICMP、IP、IGMP等等。
具體來說,會在IP首部中存入一個長度為8位的數值,稱作協議域:
1表示為ICMP協議、2表示為IGMP協議、6表示為TCP協議、17表示為UDP協議、等等。IP首部還會標識傳送方地址(源IP)和接收方地址(目標IP)。
在鏈路層封裝時,網路介面分別要傳送和接收IP、ARP和RARP等多種不同協議的報文,因此也必須在乙太網的幀首部中加入某種形式的標識,以指明所處理的協議型別,為此,乙太網的報文幀的首部也有一個16位的型別域,標識出乙太網資料幀所攜帶的上層資料型別,如IPv4、ARP、IPV6、PPPoE等等。
資料封裝和分用的過程大致為:傳送端每透過一層會增加該層的首部,接收端每透過一層則刪除該層的首部。
總體來說,TCP/IP分層管理、資料封裝和分用的好處:分層之後若需改變相關設計,只需替換變動的層。各層之間的介面部分規劃好之後,每個層次內部的設計就可以自由改動。層次化之後,設計也變得相對簡單:各個層只需考慮分派給自己的傳輸任務。