TCP/IP 中的OSI分層模型詳解

奧卡姆剃鬚刀發表於2019-02-26

一 連線人與人的計算機網路

      計算機網路最初的目的是連續一個個獨立的計算機, 使他們組成一個個更強有力的計算環境。簡而言之,就是為了提高生產力。從批處理時代到計算機網路時代, 毋庸置疑,都體現了這一目的。然而,現在卻似乎有了微妙的變化。
      現代計算機網路的首要目的之一,可以說是連結人與人。置身於世界各地的人們可以通過網路建立聯絡、相互溝通、交流思想
      在計算機網路與資訊通訊領域裡,人們經常提及“協議”一詞。網際網路中常用的具有代表性的協議有IP, TCP,HTTP等而 LAN(區域網)中常用的協議有 IPX/SPX等
      “計算機網路體系結構” 將這些網路協議進行了系統的歸納。TCP/IP就是IP、TCP、HTTP等協議的組合。現在 很多裝置都支援TCP/IP。除此之外,還有很多其他型別的網路體系結構。例如,Novell公司的IPX/SPX、蘋果公司的AppleTalk(僅限蘋果公司使用)、IBM 公司開發的用於構建大規模的網路的SNA 以及前DEC公司開發的DECnet等。

網路體系結構 協議 主要用途
TCP/IP IP,ICMP, TCP, UDP, HTTP, TELNET, SNMP, SMTP….. 網際網路、區域網
IPX/SPX IPX,SPX, NPC… 個人電腦區域網
AppleTalk DDP、RTMP、AEP、ATP、ZIP 蘋果公司現有產品的區域網
OSI FTAM,MOTIS, VT,
XNS IDP、SPP、PEP….. 施樂公司網路

二 CPU 與 OS

      CPU 又叫中央處理器。它如同一臺計算機的心臟,每個程式實際上都由他排程執行的。 CPU的效能很大程度上也決定著一臺計算機的處理效能。 因此人們常說計算機的發展史實際上就是CPU的發展史。
      目前人們常用的CPU有 Intel Core、 Intela Tom以及 ARM Cortex等產品
      OS 譯作作業系統,是一種基礎軟體。它集合了CPU管理,記憶體管理、計算機外圍裝置管理以及程式執行管理等重要功能,一個CPU通常在同一時間只能執行一個程式。為了讓多個程式同時執行,作業系統採用 CPU時間片輪轉機制,在多個程式之間進行切換,合理排程。 這種方式叫做多工排程。

三 協議的分層

      OSI 參考模型中,將通訊協議中必要的功能 分成了7層。通過這些分層,使得 那些比較複雜的網路協議更加簡單化。
      這一模型中, 每個分層都接受由他下一層所提供的特定服務,並且負責為自己的上一層提供特定的服務。上下層之間進行互動時所遵循的約定叫做“介面”。同一層 之間的互動所遵循的約定叫做“協議”。
      協議分層就如同計算機軟體中的模組化開發。OSI 參考模型的建議是比較理想化的。他希望實現從第一層到第七次的模組,並將它們組合起來實現網路通訊。分層可以將每個分層獨立使用,即使系統中某些分層發生變化,也不會波及整個系統。因此可以構建一個擴充套件性和靈活性都很強的系統。 通過分層能夠細分通訊功能,更易於單獨實現每個分層的協議,並界定每個分層的具體責任和義務。這些都屬於分層的優點。
      而分層的劣勢可能就在於過分模組化,是處理變得更加沉重以及每個模組都不得不實現相似的處理邏輯等問題

image.png

四 OSI參考模型

      OSI參考模型將這樣一個複雜的協議整理並分為了易於理解的七層分層

分層名稱 功能
應用層 為應用程式提供服務並規定應用程式中通訊相關的細節
表示層 將應用層處理的資訊轉換為適合網路傳輸的格式,或將來自下一層的資料轉換為上層能夠處理的格式。因此它主要負責資料格式的轉換。 具體來說,就是將裝置固有的資料抓換為網路標準傳輸格式。不同的裝置對同一位元流解釋的結果可能不同。因此,使他們保持一致是這一層的主要作用
會話層 負責建立和斷開通訊連線(資料流動的邏輯通路)以及資料的分割等資料傳輸相關的管理
傳輸層 起著可靠傳輸的作用,只在通訊雙方結點上進行處理,而無需在路由器上處理
網路層 將資料傳輸到目標地址。目標地址可以是多個網路通過路由器連線而成的某個地址。因此這一層主要負責定址和路由選擇
資料鏈路層 負責物理層面上互聯、節點之間的通訊傳輸。例如與1 個乙太網相連的2個節點之間的通訊
物理層 負責 0、1鼻涕流與電壓的高低,光的閃滅之間的互換

網路層與傳輸層的關係:
在不同的網路體系結構下,網路層有時也不能保證資料的可達性。例如 在相當於TCPIP 網路層的IP協議中,就不能保證資料一定會傳送到對端地址。因此,資料傳送過程中出現資料丟失、順序混亂等問題可能性會大大增加。像這樣的沒有可靠性傳輸要求的網路層中,可以有傳輸層負責提供“正確傳輸資料的處理” TCP/IP中,網路層與傳輸層相互協做以確保資料包能夠傳送到世界各地,實現可靠傳輸。

五 TCP/IP 中的 OSI

      從字面意義上講,有人可能會認為 TCP/IP 是指 TCP與IP兩種協議。實際生活當中有時也確實是指著兩種協議。然後再很多情況下,他只是利用了IP進行通訊時所必須用到的協議群的統稱。具體來說,IP或ICMP、TCP與UDP 、HTTP等等都屬於TCP/IP的協議。他們與TCP或IP的關係緊密,是網際網路必不可少的組成部分。TCP/IP 一詞泛指這些協議,因此,有時也稱TCP/IP 為國際協議族。

      我們上邊寫到的OSI參考模型中各個分層的作用,TCP/IP 誕生以來的各種協議其實也能對應到OSI參考模型中。如下圖

image.png
5.1 硬體(物理層)

      TCP/IP 的最底層是負責資料傳輸的硬體。這種硬體就相當於乙太網或電話線路等物理層的裝置。關於他的內容一直無法統一定義。因為只要人們在物理層面上所使用的傳輸媒介不同,網路的寬頻、可靠性、安全性、延遲等都會有所不同,而在這些方面又沒有一個既定的標準。總之,TCP/IP 是在網路互連的裝置之間能夠通訊的前提下才被提出的協議。

5.2 網路介面層(資料鏈路層)

      網路介面層利用乙太網中的資料鏈路層進行通訊,因此屬於介面層。也就是說把它當做 NIC 起作用的 “驅動程式”也無妨。驅動程式是在作業系統與硬體之間起橋樑作用的軟體。計算機的外圍附加裝置或擴充套件卡,不是直接插到電腦上或電腦的擴充套件槽上就能馬上使用的,還需要響應的驅動程式的支援。例如換了一個NIC網路卡,不僅需要硬體,還需要軟體才能真正投入使用。因此,人們常常還需要在作業系統的基礎上安裝一些驅動軟體以便使用這些附加硬體。

5.3 網際網路層(網路層)

      網際網路層使用IP協議,它相當於OSI 模型中的第三層網路層。IP協議基於IP地址轉發分包資料。
      TCP/IP 協議 分層中的網際網路層與傳輸層的功能通常有作業系統提供。尤其是路由器,他必須實現通過網際網路層轉發分組資料包的功能。此外 連結網際網路的所有主機跟路由器必須實現IP的功能。其他連結網際網路的網路裝置就沒必要一定實現IP或TCP的功能。
      IP 是跨越網路傳送資料包,使整個網際網路都能收到資料的協議。IP協議使資料能夠傳送到地球的另一端,這期間他使用IP 地址作為主機的標識。 IP還隱藏著資料鏈路層的功能。 通過IP 相互通訊的主機之間不論經過怎樣的底層資料鏈路都能實現通訊。 雖然IP 也是分組交換的一種協議,但是他不具有重發機制。即使分組資料包未能到達對端主機也不會重發。因此 屬於非可靠傳輸協議

5.4 傳輸層

      TCP/IP 的傳輸層有兩個具有代表性的協議。該層的功能本身與OSI 參考模型中的傳輸層類似。
      傳輸層最主要的功能就是能夠讓應用程式之間實現通訊。計算機內部,通常同一時間執行著多個程式。為此 必須分清是哪些程式與哪些程式 在進行通訊。識別 這些應用程式的是埠號

  • TCP
          TCP 是一種 面向有連結的傳輸層協議。他可以保證兩端通訊主機之間的通訊可達。 TCP 能夠正確處理在傳輸過程中丟包、傳輸順序亂掉等異常情況。 此外,TCP 還能夠 有效利用寬頻,緩解網路擁堵。 然而為了 建立與斷開連線,有時他需要至少7次的發包收包,導致網路流量的浪費。此外 為了提高網路的利用率,TCP 協議中 定義了各種各樣複雜的規範,因此不利於視訊會議等場合使用。
  • UDP
          UDP 有別於TCP, 他是一種面向無連線的傳輸層協議,UDP 不會關注對端是否真的收到傳送過去的資料, 如果需要檢查對端是否收到分組資料包,或者對端是否連線到網路,則需要在應用程式中實現。 UDP 常用於分組資料較少或多播、廣通播信以及視訊通訊等多媒體領域。
5.5 應用層(會話層以上的分層)

      TCP/IP 的分層中,將OSI 參考模型中的會話層、表示層和應用層的功能都集中到了應用程式中實現。這些功能有時由一個單一的程式實現,有時也可能會由多個程式實現。因此 細看TCP/IP 的應用程式功能會實現,他不僅實現OSI模型中應用層的內容,還要實現會話層與表示層的功能。
      TCP/IP 應用的架構絕大多數屬於客戶端/服務端模型。提供服務的程式叫服務端,接受服務的程式叫客戶端。在這種通訊模式中, 提供服務的程式會預先被部署在主機上,等待接收任何時刻客戶可能傳送的請求。客戶端可以隨時傳送請求給服務端, 有時服務端 可能會處理異常、超出負載等情況,這時客戶端可以在等待片刻後重發一次請求。
      瀏覽器與服務端之間通訊所用的協議是HTTP。所傳輸的資料的主要格式是HTML,WWW中的HTTP屬於OSI應用層的協議, 而HTML 屬於表示層。

六 TCP分層模型與 通訊示例。

TCP/IP 到底如果在媒介上進行傳輸的呢

6.1 資料包首部

      每個分層中都會對所傳送的資料附加一個首部,在這個首部中包含了該層必要的資訊,如傳送的目標地址以及協議相關資訊。通常,為協議提供的資訊為包首部,所要傳送的內容為資料。如圖,在下一層的角度看,從上一分層收到的包全部都被認為是本層的資料。

image.png
6.2 發動資料包

      從TCP/IP 通訊上看,甲給乙傳送一封郵件, 我們用過這個例子來降價一個TCP/IP 通訊的過程。

  • ① 應用程式處理
          啟動應用程式新建郵件,然後點選傳送按鈕就開始TCP/IP 的通訊了。 首先,應用程式會進行編碼處理。編碼轉化後,應用在傳送郵件的那一刻建立TCP/IP 連結, 從而利用這個TCP 連結傳送資料。她的過程首先是將應用的資料傳送給下一層的TCP,在做實際的轉發處理。
  • ② TCP模組的處理
          TCP根據應用的指示,負責建立連結、傳送資料以及斷開連結。TCP提供將應用層發來的資料順利傳送至對端的可靠傳輸。
    為了實現TCP的這一個功能,需要在應用層的資料的前端附加一個TCP首部。TCP首部包括源埠號和目標埠號、序號以及校驗和。隨後將附加了TCP首部的包在傳送給IP
  • ③ IP模組的處理
          IP將TCP傳過來的TCP首部和TCP 資料合起來當做自己的資料,並在TCP首部的前端在加上自己的IP首部。因此,IP資料包中IP首部後面緊跟著TCP首部,然後才是應用的資料首部和資料本身。IP首部中包含接收端IP地址以及傳送端IP地址。緊隨IP首部的還有用來判斷其後面資料是TCP還是UDP的資訊。
          IP包生成後,參考路由控制表決定接受此IP包的路由或主機。隨後,IP包將被髮送給連結這些路由器或主機網路介面的驅動程式,以實現真正的傳送資料。
          如果尚不知道接收端的MAC地址,可以利用ARP查詢,只要知道了對端的MAC地址,就可以將MAC地址和IP地址交給乙太網的驅動程式,實現資料傳輸
  • ④ 網路介面的處理
          從IP傳過來的IP包,對於乙太網驅動來說不過就是資料。給這些資料附加上乙太網首部並進行傳送處理。乙太網首部中包含接收端的MAC地址、傳送端MAC地址以及標誌乙太網型別的資料的協議。根據以上資訊產生的乙太網資料包將通過物理層傳輸給接收端。傳送處理中的FCS 由硬體計算, 新增到包的最後。設定FCS的目的是為了判斷資料包是否由於噪聲而被破壞。
TCP/IP 各層對郵件的收發處理.png
6.3 經過資料鏈路的包
分層中包的結構.png

      分組資料包經過乙太網的資料鏈路時的大致流程如上圖,不過該圖對各個包首部做了簡化。
      包流動的時,從前往後依次被附加了乙太網首部、IP包首部、TCP包首部以及應用自己的包首部和資料。而包的最後則追加了乙太網包尾。
      每個包首部中至少都會包含兩個資訊:一個是傳送端和接收端,另一個是上一層的協議型別。
      經過每個協議分層時,都必須有識別包傳送端和接收端的資訊。乙太網會用MAC地址,IP會用IP地址,而TCP/UDP 則會用埠號作為識別兩端主機的地址。即使是在應用程式中,像電子郵件地址這樣的資訊也是一種地址標識。這些地址資訊都在每個包經由各個分層,附加到協議對應的包首部裡邊。
      此外,每個分層的包首部中還包含一個識別位,它是用來標識上一層協議的種類資訊,例如 乙太網的包首部中的乙太網型別,IP 中的協議型別以及TCP/UDP 中的兩個埠的埠號等都起著識別協議型別的作用。

6.4 資料包接收處理

包的接收流程是傳送流程的逆序過程

  • ⑤ 網路介面的處理
          主機收到乙太網包以後,首先從乙太網的包首部找到MAC 地址判斷是否為發給自己的包,如果接收到的包切好是發給自己的包,就查詢乙太網包首部中的型別域從而確定乙太網協議所傳送過來的資料。在這個例子中資料型別顯然是IP包,因為再將資料傳給處理IP的子程式。
  • ⑥ IP模組的處理
          IP模組收到IP包首部及後面的資料部分以後,也做類似的處理。如果判斷的出包首部中的IP地址與自己的IP地址匹配,則可接受資料並從中查詢上一層的協議。如果上一層是TCP就將IP包首部之後的部分傳給TCP處理;如果是UDP則將IP包首部後面的部分傳給UDP處理。對於有路由器的情況下,接收端地址往往不是自己的地址,此時,需要藉助路由控制表,在調查應該送達的主機或路由器以後再轉發資料
  • ⑦ TCP模組的處理
    在TCP模組中,首先會計算一下校驗和,判斷資料是否被破壞。最後檢查是否按照序號接收資料。最後檢查埠號,確定具體的應用程式。資料接收完畢後,接收端則傳送一個“確認回執”給傳送單。資料被完整的接收以後,會傳給由埠號識別的應用程式。
  • ⑧ 應用程式的處理
          接收端應用程式會直接接收傳送端傳送的資料。通過解析資料可以獲得郵件的收件人地址是乙的地址。如果主機B上沒有乙的郵件信箱,那麼主機B返回給傳送端一個“無效收件地址”的報錯資訊。
          但在這個例子中,主機B上恰好有乙的收件箱,所以主機B和收件人乙能夠收到電子郵件的正文。郵件會被儲存到本機的硬碟上。如果儲存也能正常進行,那麼接收端會返回一個“處理正常”的回執給傳送端。反之,一旦出現磁碟滿、郵件未能儲存成功等問題,就會傳送一個處理異常的的回執給傳送端。

相關文章