TCP/IP 基礎知識總結

      網友投稿 562 2025-04-02

      我把自己以往的文章匯總成為了 Github ,歡迎各位大佬 star


      https://github.com/crisxuan/bestJavaer

      已提交此篇文章

      要說我們接觸計算機網絡最多的協議,那勢必離不開 TCP/IP 協議了,TCP/IP 協議同時也是互聯網中最為著名的協議,下面我們就來一起聊一下 TCP/IP 協議。

      TCP/IP 的歷史背景

      最初還沒有 TCP/IP 協議的時候,也就是在 20 世紀 60 年代,許多國家和地區認識到通信技術的重要性。美國國防部希望能夠研究一種即使通信線路被破壞也能夠通過其他路線進行通信的技術。為了實現這種技術,出現了分組網絡。

      即使在兩個節點通信的過程中,幾個節點遭到破壞,卻依然能夠通過改變線路等方式達使兩個節點之間進行通信。

      這種分組網絡促進了 ARPANET(Advanced Research Projects Agency Network) 的誕生。ARPANET 是第一個具有分布式控制的廣域包分t組交換網絡,也是最早實現 TCP/IP 協議的前身。

      ARPANET 其實是由 美國國防部高級研究計劃局 計劃建立。

      所以,計算機網絡的出現在最一開始是因為軍事研究目的。

      20 世紀 90 年代,IOS 開展了 OSI 這一國際標準化的進程,然而卻沒有取得實質性的進展,但是卻使 TCP/IP 協議得到了廣泛使用。

      這種致使 TCP/IP 協議快速發展的原因可能是由于 TCP/IP 的標準化。也就是說 TCP/IP 協議中會涉及到 OSI 所沒有的標準,而這種標準將是我們接下來主要探討的內容。

      這里我們先來認識一下 TCP/IP 協議,TCP/IP 協議說的不僅僅只是 TCP 和 IP 這兩種協議,實際上,TCP/IP 指的是協議簇,協議簇是啥呢?簡單來說就是一系列協議的綜合,如果下次再問你 TCP/IP 協議有哪些的話,可以把下面這張圖甩給他

      以上的協議匯總起來,就是 TCP/IP 協議簇。

      TCP/IP 標準

      TCP/IP 相較于其他協議的標準,更注重兩點:開放性 和 實用性,即標準化能否被實際使用。

      開放性說的是 TCP/IP 是由 IETF 討論制定的,而 IETF 本身就是一個允許任何人加入進行討論的組織。

      實用性說的是就拿框架來說,如果只浮于理論,而沒有落地的實踐,那么永遠成為不了主流。

      TCP/IP 的標準協議就是我們所熟知的 RFC 文檔,當然你可以在網絡上看到。RFC 不僅規范了協議標準,還包含了協議的實現和使用信息。

      關于更多 RFC 協議,你可以看一下官方文檔 https://www.rfc-editor.org/rfc-index.html

      這里我們不再詳細展開介紹了,我們這篇文章的重點要放在對 TCP/IP 的研究上。

      TCP/IP 協議簇

      下面我們就開始聊一聊 TCP/IP 協議簇。

      TCP/IP 協議是我們程序員接觸最多的協議,OSI 模型共有七層,從下到上分別是物理層、數據鏈路層、網絡層、運輸層、會話層、表示層和應用層。但是這顯然是有些復雜的,所以在 TCP/IP 協議中,它們被簡化為了四個層次

      下面我們從通信鏈路層開始介紹一下這些層以及與層之間的協議。

      通信鏈路層

      如果非要細分的話,通信鏈路層也可以分為 物理層 和 數據鏈路層。

      物理層是 TCP/IP 的最底層是負責傳輸的硬件,這種硬件就相當于是以太網或電話線路等物理層的設備。

      另外一層是數據鏈路層,數據鏈路層位于物理層和網絡層中間,數據鏈路層定義了在單個鏈路上如何傳輸數據。

      網絡層

      網絡層主要使用 IP協議,IP 協議基于 IP 地址轉發分包數據。

      IP 協議的主要作用就是將分組數據包發送到目標主機

      TCP/IP 分層中的互聯網層與傳輸層的功能通常由操作系統提供。

      IP 還隱含著數據鏈路層的功能,通過 IP 協議,相互通信的主機之間不論經過怎樣的底層數據鏈路,都能夠實現相互通信。

      雖然 IP 也是一種分組交換協議,但是 IP 卻不具備重發機制。即使數據沒有到達另一端也不會進行重發,所以 IP 屬于非可靠性協議。

      網絡層還有一種協議就是 ICMP,因為 IP 在數據包的發送過程中可能會出現異常,當 IP 數據包因為異常而無法到達目標地址時,需要給發送端發送一個異常通知,ICMP 的主要功能就在于此了。鑒于此情況,ICMP 也可以被用來診斷網絡情況。

      傳輸層

      我們上面剛介紹完 TCP/IP 協議最重要的 IP 協議后,下面我們來介紹一下傳輸層協議,TCP 協議時傳輸層協議的一種。

      傳輸層就好像高速公路一樣,連接兩個城市的道路。下面是互聯網的邏輯通道,你可以把它想象成為高速公路。

      傳輸層最主要的功能就是讓應用層的應用程序之間完成通信和數據交換。在計算機內部運行著很多應用程序,每個應用程序都對應一個端口號,我們一般使用端口號來區分這些應用程序。

      傳輸層的協議主要分為面向有連接的協議 TCP 和面向無連接的協議 UDP

      TCP

      TCP 是一種可靠的協議,它能夠保證數據包的可靠性交付,TCP 能夠正確處理傳輸過程中的丟包、傳輸順序錯亂等異常情況。此外,TCP 還提供擁塞控制用于緩解網絡擁堵。

      UDP

      UDP 是一種不可靠的協議,它無法保證數據的可靠交付,相比 TCP ,UDP 不會檢查數據包是否到達、網絡是否阻塞等情況,但是 UDP 的效率比較高。

      UDP 常用于分組數據較少或者廣播、多播等視頻通信和多媒體領域。

      應用層

      在 TCP/IP 協議簇中,將 OSI 標準模型中的會話層、表示層都歸為了應用層。應用層的架構大多屬于客戶端/服務端模型,提供服務的程序叫做服務端、接受服務的程序叫做客戶端。在這種架構中,服務端通常會提前部署到服務器上,等待客戶端的連接,從而提供服務。

      數據包的發送歷程

      下面我們來介紹一下一個數據包是如何經過應用層、運輸層、網絡層和通信鏈路層把一個數據包發送給另外一個數據包的。

      數據包結構

      我們首先先來認識一下數據包的結構,這里 cxuan 只是給你簡單介紹一下,后面的文章會更加詳細的介紹。

      在上面的每個分層中,都會對所發送的數據增加一個 首部,這個首部中包含了該層必要的信息。每一層都會對數據進行處理并在數據包中附上這一層的必要信息。下面我們就來聊一聊數據包的發送過程。

      數據包發送歷程

      假設主機 A 和主機 B 進行通信,主機 A 想要向主機 B 發送一個數據包,都會經歷哪些奇特的操作?

      應用層的處理

      主機 A 也就是用戶點擊了某個應用或者打開了一個聊天窗口輸入了cxuan,然后點擊了發送,那么這個 cxuan 就作為一個數據包遨游在了網絡中,等下還沒完呢,應用層還需要對這個數據包進行處理,包括字符編碼、格式化等等,這一層其實是 OSI 中表現層做的工作,只不過在 TCP/IP 協議中都歸為了應用層。

      數據包在發送的那一刻建立 TCP 連接,這個連接相當于通道,在這之后其他數據包也會使用通道傳輸數據。

      傳輸層的處理

      為了描述信息能準確的到達另一方,我們使用 TCP 協議來進行描述。TCP 會根據應用的指示,負責建立連接、發送數據和斷開連接。

      TCP 會在應用數據層的前端附加一個 TCP 首部字段,TCP 首部包含了源端口號 和 目的端口號,這兩個端口號用于表明數據包是從哪里發出的,需要發送到哪個應用程序上;TCP 首部還包含序號,用以表示該包中數據是發送端整個數據中第幾個字節的序列號;TCP 首部還包含 校驗和,用于判斷數據是否損壞,隨后將 TCP 頭部附加在數據包的首部發送給 IP。

      網絡層的處理

      網絡層主要負責處理數據包的是 IP 協議,IP 協議將 TCP 傳過來的 TCP 首部和數據結合當作自己的數據,并在 TCP 首部的前端加上自己的 IP 首部。因此,IP 數據包后面會緊跟著 TCP 數據包,后面才是數據本身。IP 首部包含目的和源地址,緊隨在 IP 首部的還有用來判斷后面是 TCP 還是 UDP 的信息。

      IP 包生成后,會由路由控制表判斷應該發送至哪個主機,IP 修飾后的數據包繼續向下發送給路由器或者網絡接口的驅動程序,從而實現真正的數據傳輸。

      如果不知道目標主機的 IP 地址,可以利用 ARP(Address Resolution Protocol) 地址解析協議進行查找。

      通信鏈路層的處理

      經由 IP 傳過來的數據包,以太網會給數據附上以太網首部并進行發送處理。以太網首部包含接收端的 MAC 地址、發送端的 MAC 地址以及標志以太網類型的以太網數據協議等。

      下面是完整的處理過程和解析過程。

      TCP/IP 基礎知識總結

      如上圖所示,左側是數據的發送處理過程,應用層的數據經過層層處理后會變為可以發送的數據包,經過物理介質發送至指定主機中。

      數據包的接收流程是發送流程的逆序過程,數據包的解析同樣也會經過下面這幾步。

      通信鏈路的解析

      目標主機收到數據包后,首先會從以太網的首部找到 MAC 地址判斷是否是發給自己的數據包,如果不是發給自己的數據包則會丟棄該數據包。

      如果收到的數據包是發送給自己的,就會查找以太網類型判斷是哪種協議,如果是 IP 協議就會扔給 IP 協議進行處理,如果是 ARP 協議就會扔給 ARP 協議進行處理。如果協議類型是一種無法識別的協議,就會將該數據包直接丟棄。

      網絡層的解析

      經過以太網處理后的數據包扔給網絡層進行處理,我們假設協議類型是 IP 協議,那么,在 IP 收到數據包后就會解析 IP 首部,判斷 IP 首部中的 IP 地址是否和自己的 IP 地址匹配,如果匹配則接收數據并判斷上一層協議是 TCP 還是 UDP;如果不匹配則直接丟棄。

      注意:在路由轉發的過程中,有的時候 IP 地址并不是自己的,這個時候需要借助路由表協助處理。

      傳輸層的處理

      在傳輸層中,我們默認使用 TCP 協議,在 TCP 處理過程中,首先會計算一下 校驗和,判斷數據是否被損壞。然后檢查是否按照序號接收數據,最后檢查端口號,確定具體是哪個應用程序。

      數據被完整的識別后,會傳遞給由端口號識別的應用程序進行處理。

      應用程序的處理

      接收端指定的應用程序會處理發送方傳遞過來的數據,通過解碼等操作識別出數據的內容,然后把對應的數據存儲在磁盤上,返回一個保存成功的消息給發送方,如果保存失敗,則返回錯誤消息。

      上面是一個完整的數據包收發過程,在上面的數據收發過程中,涉及到不同層之間的地址、端口號、協議類型等,那么我們現在就來剖析一下。

      數據包經過每層后,該層協議都會在數據包附上包首部,一個完整的包首部圖如下所示

      在數據包的發送過程中,各層以此對數據包添加了首部信息,每個首部都包含發送端和接收端地址以及上一層的協議類型。以太網會使用 MAC 地址、IP 會使用 IP 地址、TCP/UDP 則會用端口號作為識別兩端主機的地址。

      此外,每個分層中的包首部還包含一個識別位,它是用來標識上一層協議的種類信息。

      總結

      這一篇文章 cxuan 還是在和你聊一些基礎知識,這些基礎知識是為下面文章提前預熱準備的,下一篇文章我們會聊到數據鏈路層的相關知識,敬請期待。

      你好,我是 cxuan,一枚技術人。我一共寫了六本 PDF

      《Java 核心技術總結》

      《HTTP 核心總結》

      《程序員必知的基礎知識》

      《操作系統核心總結》

      《Java 核心基礎 2.0》

      《Java 面試題總結》

      現在我把百度鏈接給大家放出來了,大家可以點擊下方的鏈接領取

      鏈接: https://pan.baidu.com/s/1mYAeS9hIhdMFh2rF3FDk0A 密碼: p9rs

      TCP/IP 網絡

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:例8:C語言實現輸入一個數,輸出相應result
      下一篇:linux環境下使用Monte Carlo計算π
      相關文章
      亚洲国产精品无码久久久秋霞2| 亚洲精品成人无限看| 亚洲av乱码一区二区三区香蕉| 亚洲成人免费网站| 精品国产亚洲一区二区三区在线观看| 亚洲AV一宅男色影视| 亚洲成a人片在线观看天堂无码| 婷婷精品国产亚洲AV麻豆不片| 国产成人综合亚洲| 91亚洲精品自在在线观看| 亚洲精品国产字幕久久不卡| 久久亚洲AV无码西西人体| 亚洲午夜理论片在线观看| 久久av无码专区亚洲av桃花岛| 亚洲精品网站在线观看不卡无广告| 亚洲国产成人va在线观看网址| 亚洲国产亚洲片在线观看播放| 亚洲国产视频一区| 国产精品亚洲片在线va| 2022年亚洲午夜一区二区福利| 日韩亚洲Av人人夜夜澡人人爽| 国产亚洲成人久久| 亚洲国产精品一区二区成人片国内| 亚洲高清国产拍精品26U| 精品亚洲综合在线第一区| 亚洲电影一区二区三区| 亚洲精品无码专区在线在线播放| 久久99国产亚洲高清观看首页| 亚洲av日韩av不卡在线观看| 亚洲高清视频在线播放| 亚洲人成网站在线观看播放动漫| 亚洲色图激情文学| 亚洲va精品中文字幕| 亚洲一区二区三区丝袜| 亚洲?V无码乱码国产精品| 亚洲欧洲日本在线观看| 亚洲av成人一区二区三区观看在线 | 亚洲成av人在片观看| 伊人久久亚洲综合| 亚洲一区二区三区免费| 亚洲国产成人久久笫一页|