TCP-IP網絡模型


對於同⼀台設備上的進程間通信,有很多種⽅式,⽐如有管道、消息隊列、共享內存、信號等⽅式,⽽對於不同設備上的進程間通信,就需要⽹絡通信,⽽設備是多樣性的,所以要兼容多種多樣的設備,就協商出了⼀套通⽤的⽹絡協議
這個⽹絡協議是分層的,每⼀層都有各⾃的作⽤和職責,接下來就分別對每⼀層進⾏介紹。

應用層

最上層的,也是我們能直接接觸到的就是應⽤層(Application Layer),我們電腦或⼿機使⽤的應⽤軟件都是在應⽤層實現。那么,當兩個不同設備的應⽤需要通信的時候,應⽤就把應⽤數據傳給下⼀層,也就是傳輸層。

所以,應⽤層只需要專注於為⽤戶提供應⽤功能,不⽤去關⼼數據是如何傳輸的,就類似於,我們寄快遞的時候,只需要把包裹交給快遞員,由他負責運輸快遞,我們不需要關⼼快速是如何被運輸的。
⽽且應⽤層是⼯作在操作系統中的⽤戶態,傳輸層及以下則⼯作在內核態。

傳輸層

應⽤層的數據包會傳給傳輸層,傳輸層(Transport Layer)是為應⽤層提供⽹絡⽀持的。
image

在傳輸層會有兩個傳輸協議,分別是 TCP 和 UDP。
應⽤需要傳輸的數據可能會⾮常⼤,如果直接傳輸就不好控制,因此當傳輸層的數據包⼤⼩超過 MSS(TCP 最⼤報⽂段⻓度) ,就要將數據包分塊,這樣即使中途有⼀個分塊丟失或損壞了,只需要重新發送這⼀個分塊,⽽不⽤重新發送整個數據包。在 TCP 協議中,我們把每個分塊稱為⼀個 TCP 段(TCP Segment)。
image

當設備作為接收⽅時,傳輸層則要負責把數據包傳給應⽤,但是⼀台設備上可能會有很多應⽤在接收或者傳輸數據,因此需要⽤⼀個編號將應⽤區分開來,這個編號就是端⼝
⽐如 80 端⼝通常是 Web 服務器⽤的,22 端⼝通常是遠程登錄服務器⽤的。⽽對於瀏覽器(客戶端)中的每個標簽欄都是⼀個獨⽴的進程,操作系統會為這些進程分配臨時的端⼝號。
由於傳輸層的報⽂中會攜帶端⼝號,因此接收⽅可以識別出該報⽂是發送給哪個應⽤。

TCP

TCP 的全稱叫傳輸層控制協議(Transmission Control Protocol),⼤部分應⽤使⽤的正是 TCP 傳輸層協議,⽐如 HTTP 應⽤層協議。TCP 相⽐ UDP 多了很多特性,⽐如流量控制、超時重傳、擁塞控制等,這些都是為了保證數據包能可靠地傳輸給對⽅。

UDP

UDP 就相對很簡單,簡單到只負責發送數據包,不保證數據包是否能抵達對⽅,但它實時性相對更好,傳輸效率也⾼。當然,UDP 也可以實現可靠傳輸,把 TCP 的特性在應⽤層上實現就可以,不過要實現⼀個商⽤的可靠 UDP傳輸協議,也不是⼀件簡單的事情。

網絡層

傳輸層可能⼤家剛接觸的時候,會認為它負責將數據從⼀個設備傳輸到另⼀個設備,事實上它並不負責。
實際場景中的⽹絡環節是錯綜復雜的,中間有各種各樣的線路和分叉路⼝,如果⼀個設備的數據要傳輸給另⼀個設備,就需要在各種各樣的路徑和節點進⾏選擇,⽽傳輸層的設計理念是簡單、⾼效、專注,如果傳輸層還負責這⼀塊功能就有點違背設計原則了。

也就是說,我們不希望傳輸層協議處理太多的事情,只需要服務好應⽤即可,讓其作為應⽤間數據傳輸的媒介,幫助實現應⽤到應⽤的通信,⽽實際的傳輸功能就交給下⼀層,也就是⽹絡層(Internet Layer)

IP協議

⽹絡層最常使⽤的是 IP 協議(Internet Protocol),IP 協議會將傳輸層的報⽂作為數據部分,再加上 IP 包頭組裝成 IP 報⽂,如果 IP 報⽂⼤⼩超過 MTU(以太⽹中⼀般為 1500 字節)就會再次進⾏分⽚,得到⼀個即將發送到⽹絡的 IP 報⽂。
image

網絡層負責將數據從一個設備傳輸到另一個設備,世界上那么多設備,又該如何找到對方呢?因此,網絡層需要有區分設備的編號。
我們一般用 IP 地址給設備進行編號,對於 IPv4 協議, IP 地址共 32 位,分成了四段,每段是 8 位。只有一個單純 的 IP 地址雖然做到了區分設備,但是尋址起來就特別麻煩,全世界那么多台設備,難道一個一個去匹配?這顯然 不科學。

因此,需要將 IP 地址分成兩種意義:

  • 一個是網絡號,負責標識該 IP 地址是屬於哪個子網的;
  • 一個是主機號,負責標識同一子網下的不同主機;

配合子網掩碼才能算出 IP 地址 的網絡號和主機號。那么在尋址的過程中,先匹配到相同的網
絡號,才會去找對應的主機

除了尋址能力, IP 協議還有另一個重要的能力就是路由。實際場景中,兩台設備並不是用一條網線連接起來的, 而是通過很多網關、路由器、交換機等眾多網絡設備連接起來的,那么就會形成很多條網絡的路徑,因此當數據包到達一個網絡節點,就需要通過算法決定下一步走哪條路徑

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

數據鏈路層

實際場景中,網絡並不是一個整體,所以數據不僅可以在同一個網絡中設備間進行傳輸,也可以跨網絡進行傳輸。

一旦數據需要跨網絡傳輸,就需要有一個設備同時在兩個網絡當中,這個設備一般是路由器,路由器可以通過路由 表計算出下一個要去的 IP 地址

那問題來了,路由器怎么知道這個 IP 地址是哪個設備的呢?

於是,就需要有一個專⻔的層來標識網絡中的設備,讓數據在一個鏈路中傳輸,這就是數據鏈路層(Data Link Layer),它主要為網絡層提供鏈路級別傳輸的服務。

每一台設備的網卡都會有一個 MAC 地址,它就是用來唯一標識設備的。路由器計算出了下一個目的地 IP 地址,再通過ARP 協議找到該目的地的 MAC 地址,這樣就知道這個 IP 地址是哪個設備的了

物理層

當數據准備要從設備發送到網絡時,需要把數據包轉換成電信號,讓其可以在物理介質中傳輸,這一層就是物理層 (Physical Layer),它主要是為數據鏈路層提供二進制傳輸的服務。

總結

綜上所述,網絡協議通常是由上到下,分成 5層,分別是應用層,傳輸層,網絡層,數據鏈路層和物理層。根據細分的不同分為OSI七層網絡模型 和 TCP/IP四層網絡模型
image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM