天天看點

TCP/IP 網絡模型有哪幾層?

作者:做好一個程式猿

問大家,為什麼要有 TCP/IP 網絡模型?

對于同一台裝置上的程序間通信,有很多種方式,比如有管道、消息隊列、共享記憶體、信号等方式,而對于不同裝置上的程序間通信,就需要網絡通信,而裝置是多樣性的,是以要相容多種多樣的裝置,就協商出了一套通用的網絡協定。

這個網絡協定是分層的,每一層都有各自的作用和職責,接下來就根據「 TCP/IP 網絡模型」分别對每一層進行介紹。

應用層

最上層的,也是我們能直接接觸到的就是應用層(Application Layer),我們電腦或手機使用的應用軟體都是在應用層實作。那麼,當兩個不同裝置的應用需要通信的時候,應用就把應用資料傳給下一層,也就是傳輸層。

是以,應用層隻需要專注于為使用者提供應用功能,比如 HTTP、FTP、Telnet、DNS、SMTP等。

應用層是不用去關心資料是如何傳輸的,就類似于,我們寄快遞的時候,隻需要把包裹交給快遞員,由他負責運輸快遞,我們不需要關心快遞是如何被運輸的。

而且應用層是工作在作業系統中的使用者态,傳輸層及以下則工作在核心态。

傳輸層

應用層的資料包會傳給傳輸層,傳輸層(Transport Layer)是為應用層提供網絡支援的。

TCP/IP 網絡模型有哪幾層?

在傳輸層會有兩個傳輸協定,分别是 TCP 和 UDP。

TCP 的全稱叫傳輸控制協定(Transmission Control Protocol),大部分應用使用的正是 TCP 傳輸層協定,比如 HTTP 應用層協定。TCP 相比 UDP 多了很多特性,比如流量控制、逾時重傳、擁塞控制等,這些都是為了保證資料包能可靠地傳輸給對方。

UDP 相對來說就很簡單,簡單到隻負責發送資料包,不保證資料包是否能抵達對方,但它實時性相對更好,傳輸效率也高。當然,UDP 也可以實作可靠傳輸,把 TCP 的特性在應用層上實作就可以,不過要實作一個商用的可靠 UDP 傳輸協定,也不是一件簡單的事情。

應用需要傳輸的資料可能會非常大,如果直接傳輸就不好控制,是以當傳輸層的資料包大小超過 MSS(TCP 最大封包段長度) ,就要将資料包分塊,這樣即使中途有一個分塊丢失或損壞了,隻需要重新發送這一個分塊,而不用重新發送整個資料包。在 TCP 協定中,我們把每個分塊稱為一個 TCP 段(TCP Segment)。

TCP/IP 網絡模型有哪幾層?

當裝置作為接收方時,傳輸層則要負責把資料包傳給應用,但是一台裝置上可能會有很多應用在接收或者傳輸資料,是以需要用一個編号将應用區分開來,這個編号就是端口。

比如 80 端口通常是 Web 伺服器用的,22 端口通常是遠端登入伺服器用的。而對于浏覽器(用戶端)中的每個标簽欄都是一個獨立的程序,作業系統會為這些程序配置設定臨時的端口号。

由于傳輸層的封包中會攜帶端口号,是以接收方可以識别出該封包是發送給哪個應用。

網絡層

傳輸層可能大家剛接觸的時候,會認為它負責将資料從一個裝置傳輸到另一個裝置,事實上它并不負責。

實際場景中的網絡環節是錯綜複雜的,中間有各種各樣的線路和分叉路口,如果一個裝置的資料要傳輸給另一個裝置,就需要在各種各樣的路徑和節點進行選擇,而傳輸層的設計理念是簡單、高效、專注,如果傳輸層還負責這一塊功能就有點違背設計原則了。

也就是說,我們不希望傳輸層協定處理太多的事情,隻需要服務好應用即可,讓其作為應用間資料傳輸的媒介,幫助實作應用到應用的通信,而實際的傳輸功能就交給下一層,也就是網絡層(Internet Layer)。

TCP/IP 網絡模型有哪幾層?

網絡層最常使用的是 IP 協定(Internet Protocol),IP 協定會将傳輸層的封包作為資料部分,再加上 IP 標頭組裝成 IP 封包,如果 IP 封包大小超過 MTU(以太網中一般為 1500 位元組)就會再次進行分片,得到一個即将發送到網絡的 IP 封包。

TCP/IP 網絡模型有哪幾層?

網絡層負責将資料從一個裝置傳輸到另一個裝置,世界上那麼多裝置,又該如何找到對方呢?是以,網絡層需要有區分裝置的編号。

我們一般用 IP 位址給裝置進行編号,對于 IPv4 協定, IP 位址共 32 位,分成了四段(比如,192.168.100.1),每段是 8 位。隻有一個單純的 IP 位址雖然做到了區分裝置,但是尋址起來就特别麻煩,全世界那麼多台裝置,難道一個一個去比對?這顯然不科學。

是以,需要将 IP 位址分成兩種意義:

  • 一個是網絡号,負責辨別該 IP 位址是屬于哪個「子網」的;
  • 一個是主機号,負責辨別同一「子網」下的不同主機;

怎麼分的呢?這需要配合子網路遮罩才能算出 IP 位址 的網絡号和主機号。

舉個例子,比如 10.100.122.0/24,後面的/24表示就是 255.255.255.0 子網路遮罩,255.255.255.0 二進制是「11111111-11111111-11111111-00000000」,大家數數一共多少個1?不用數了,是 24 個1,為了簡化子網路遮罩的表示,用/24代替255.255.255.0。

知道了子網路遮罩,該怎麼計算出網絡位址和主機位址呢?

将 10.100.122.2 和 255.255.255.0 進行按位與運算,就可以得到網絡号,如下圖:

TCP/IP 網絡模型有哪幾層?

将 255.255.255.0 取反後與IP位址進行進行按位與運算,就可以得到主機号。

大家可以去搜尋下子網路遮罩電腦,自己改變下「掩碼位」的數值,就能體會到子網路遮罩的作用了。

TCP/IP 網絡模型有哪幾層?

那麼在尋址的過程中,先比對到相同的網絡号(表示要找到同一個子網),才會去找對應的主機。

除了尋址能力, IP 協定還有另一個重要的能力就是路由。實際場景中,兩台裝置并不是用一條網線連接配接起來的,而是通過很多網關、路由器、交換機等衆多網絡裝置連接配接起來的,那麼就會形成很多條網絡的路徑,是以當資料包到達一個網絡節點,就需要通過路由算法決定下一步走哪條路徑。

路由器尋址工作中,就是要找到目标位址的子網,找到後進而把資料包轉發給對應的網絡内。

TCP/IP 網絡模型有哪幾層?

是以,IP 協定的尋址作用是告訴我們去往下一個目的地該朝哪個方向走,路由則是根據「下一個目的地」選擇路徑。尋址更像在導航,路由更像在操作方向盤。

網絡接口層

生成了 IP 頭部之後,接下來要交給網絡接口層(Link Layer)在 IP 頭部的前面加上 MAC 頭部,并封裝成資料幀(Data frame)發送到網絡上。

TCP/IP 網絡模型有哪幾層?

IP 頭部中的接收方 IP 位址表示網絡包的目的地,通過這個位址我們就可以判斷要将包發到哪裡,但在以太網的世界中,這個思路是行不通的。

什麼是以太網呢?電腦上的以太網接口,Wi-Fi接口,以太網交換機、路由器上的千兆,萬兆以太網口,還有網線,它們都是以太網的組成部分。以太網就是一種在「區域網路」内,把附近的裝置連接配接起來,使它們之間可以進行通訊的技術。

以太網在判斷網絡包目的地時和 IP 的方式不同,是以必須采用相比對的方式才能在以太網中将包發往目的地,而 MAC 頭部就是幹這個用的,是以,在以太網進行通訊要用到 MAC 位址。

MAC 頭部是以太網使用的頭部,它包含了接收方和發送方的 MAC 位址等資訊,我們可以通過 ARP 協定擷取對方的 MAC 位址。

是以說,網絡接口層主要為網絡層提供「鍊路級别」傳輸的服務,負責在以太網、WiFi 這樣的底層網絡上發送原始資料包,工作在網卡這個層次,使用 MAC 位址來辨別網絡上的裝置。

總結

綜上所述,TCP/IP 網絡通常是由上到下分成 4 層,分别是應用層,傳輸層,網絡層和網絡接口層。

TCP/IP 網絡模型有哪幾層?

再給大家貼一下每一層的封裝格式:

TCP/IP 網絡模型有哪幾層?

網絡接口層的傳輸機關是幀(frame),IP 層的傳輸機關是包(packet),TCP 層的傳輸機關是段(segment),HTTP 的傳輸機關則是消息或封包(message)。但這些名詞并沒有什麼本質的區分,可以統稱為資料包。

TCP/IP 網絡模型有哪幾層?