網絡原理(TCP協議—協議格式,性質(上),狀態)

目錄

1.TCP協議段格式。

2.TCP協議傳輸時候的性質。

2.1確認應答。

2.2超時重傳。

2.3連接管理。

2.3.1 三次握手。

2.3.2四次揮手。

3.TCP常見的狀態。


?

1.TCP協議段格式。

TCP協議段是由首部和數據兩部分構成的。首部包含了TCP通信所需要的各種控制信息,而數據部分則是實際要傳輸的應用層數據。

下面小編通過圖片給大家進行描述:
?

?下面解釋下上述協議段里面各部分的含義(下述所說的長度都是以比特為單位):


1.源端口號:16位。用于標識發送方應用程序使用的端口號。

2.目的端口號:16位。用于標識接收方應用程序使用的端口號。

3.序列號:32位。對字節流進行編號,用于保證數據的有序傳輸和檢測數據丟失。第一個自己的序列號由發送方隨機生成。

4.確認序列號:32位。接收方期望收到發送方下一個報文段的第一個數據字節的序列號。用于確認數據是否傳輸成功。

5.數據偏移:4位。表示該TCP頭部有多少個32位bit(4字節為單位)

?6.保留位:6位。當前先保留著,防止后面要使用。

7.控制位:6位。

URG:緊急指針有效標志。

ACK:確認號是否有效。

PSH:提示接收方應盡快將數據交付給應用層。

RST:重置連接標志。

SYN:同步序列號標志,用于建立連接,我們把攜帶SYN標識的稱為同步報?段。

FIN:結束標志,用于關閉連接,我們稱攜帶FIN標識的為結束報?段

8.窗口大小:16位。表示發送方的接受窗口大小,用于流量控制。

9.校驗和:16位。對傳輸的數據進行傳輸前后計算并進行對比,確保數據傳輸的完整性。

10.緊急指針:16位。當URG標志置為1時有效,指出緊急數據的末尾在報文段中的位置。

11.選項:可變。提供額外的功能,如:最大報文段長度,窗口擴大因子等。

2.TCP協議傳輸時候的性質。

2.1確認應答。

?我們觀察下面的圖:

我們每次從一個主機上面傳輸信息傳給另外一個主機的時候,我們會先傳輸一次,之后接收方會給發送方返回自己收到了,并且下一次傳輸從哪里開始。

2.2超時重傳。

?我們觀察下面的圖片:

圖1:

我們觀察圖一,發現我們丟包的現象是在傳輸數據的時候丟失的,我們的TCP對等待一定自己設置的時間,要是發送方還是沒有接受到接受方所返回的確認應答操作,就會讓主機1再次發送信息,重新進行操作。

但是我們觀察上述的流程,我們會發現還有一種可能,是應為確認應答沒有返回回來。

圖2:

上述圖片展示的就是我們的第二種可能,是在接受方傳輸確認應答的時候,出現了問題。

我們會發現主機2會接收到重復的信息,TCP協議就會給我們識別出來重復的信息,之后將重復的丟棄掉。我們就通過我們前面所提到的序列號進行解決,很容易就達到去重的效果。

那么還有一個問題值得我們考慮,就是我們中間等待的時間?

我們等待的時間就是我們 單趟路程*2 的總時間,但是在實際情況中,TCP為了保證無論在任何環境下都能比較?性能的通信, 因此會動態計算這個最?超時時間。

2.3連接管理。

在連接管理的階段,TCP會進行三次握手建立連接四次揮手斷開連接,我們的的連接管理是虛擬的,只保存雙方關鍵的信息。

2.3.1 三次握手。

下面我先通過TCP在代碼中的運行過程給大家說明下:

我們觀察上述的圖片,我們可以輕易的看到客戶端給服務器先發送了一次信息,之后服務器給客戶端發送了兩次信息,最后客戶端給服務器再次發送了一條信息。

可能會有同學提出疑問,上述圖片中我們明明傳輸了四次,為什么說的是三次握手?

之所以我們說的是三次握手,是因為我們中間的兩次服務器給客戶端發消息的過程,可以合并為一處,之所以可以合并為一處是因為SYN和ACK是內核控制的,和代碼沒有沒有關系,所以可以合并。

這里呢我們進行的三次握手,是是能由客戶端發起的。

握手的意義:

1.驗證鏈路是否暢通。

2.發送和接受能力是否正常。

3.讓通信雙方協商關鍵信息。

我們所進行的握手和生活中是一樣的。例子:當我們長時間不回家的話,我們過年回家的時候就會很大可能碰到我們的老朋友,我們見面了指定會進行一下寒暄的,當然了我們也是會進行握手的,我們進行握手就好比我們進行了雙方信息的確認。還有就是為啥要進行驗證鏈路是否正常,因為我們只有正常的話才會可能進行信息的正確傳遞。例子:相比大家都做過地鐵,我們每天早上進行的第一趟地鐵運行的話,都會進行一趟空車的跑動,就是為了防止后面要是在載著一車的顧客的情況下出現問題,我們跑一趟之后就知道是否可以正常運行,這樣我們后面就可以進行及時的修改。

2.3.2四次揮手。

我們進行揮手的最終目的就是為了釋放沒有再運行的空間。

圖片:

我們觀察上圖,大家可能觀察到和之前的三次握手好像沒有什么區別,無非就是將每次進行的控制位進行了更改,那這為什么就成了四次揮手了呢!

大家觀察前面的三次握手,是因為中間的兩次是可以進行合并的,那這叫做四次揮手,就是中間的兩次不會每次都能進行合并。我們要想夠清楚為什么是不一定能夠進行合并的原因是什么?那是因為我們最后在進行揮手的時候進行的是Fin,這個主要是由我們在程序里面的代碼進行控制的——close() ,當我們在主程序執行完了之后再finally里面,close()前面有大片的代碼需要進行執行的時候,就會記性長時間的等待,所以中間兩次的ACK(確認信息)首先進行返回,最后后面的Fin在記性返回,這就將中間的兩次進行了分離。

前面我們說了我們為什么不能進行合并的原因,那么我們要是能進行合并的時候,辦法也是非常顯而易見的,就是Fin觸發close()之間的時間是本身不長的并且ACK可以往后面拖一段時間,這樣我們就可以將中間的兩次進行合并,這就是我們的四次揮手。

3.TCP常見的狀態。

1.CLOSE:默認狀態。這是TCP連接的最初和最終的狀態,意味著沒有任何連接的存在。在JAVA里,當SOCKET對象還沒有進行創建的時候,或者連接關閉的時候,就處于該狀態。

2.LISTEN:隨時可以進行連接。

3.ESTABLISHED:客戶端和服務器的連接已經建立好。客戶端收到服務器的SYN+ACK報文后,發送ACK報文,之后客戶端和服務端都進入ESTABLISHED 狀態,此時TCP連接成功建立,雙方可以進行數據傳輸。在JAVA里面,當SOCKET連接成功后,就處于該狀態。

4.CLOSE_WAIT:被動斷開連接的一方的狀態。接受Fin 報文的乙方接收到 Fin 報文后,發送 ACK 報文,然后進入?CLOSE_WAIT 狀態。此時是關閉等待狀態,需要調用close() 方法進行關閉連接,發送FIN 報文。

5.TIME_WAIT:等待連接徹底釋放。發送 FIN 報文的一方收到對方的 ACK 報文后,進入 TIME_WAIT 狀態,等待一段時間后,才會進入 CLOSED 狀態。中間的等待時間是為了最后一個ACK 報文能夠到達到達對方。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902322.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902322.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902322.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

XAML 標記擴展

# XAML 標記擴展詳解 標記擴展(Markup Extensions)是XAML中一種特殊的語法結構,允許在XAML屬性中嵌入動態值或引用,而不是簡單的靜態值。它們使用花括號{}作為標識,是XAML強大功能的核心組成部分。 ## 基本語法結構 所有標記擴展都遵循以下…

DeepSeek+Cursor+Devbox+Sealos項目實戰

黑馬程序員DeepSeekCursorDevboxSealos帶你零代碼搞定實戰項目開發部署視頻教程,基于AI完成項目的設計、開發、測試、聯調、部署全流程 原視頻地址視頻選的項目非常基礎,基本就是過了個web開發流程,但我在實際跟著操作時,ai依然會…

Ethan獨立開發產品日報 | 2025-04-20

1. Checklist GG 基于人工智能的清單管理工具 checklist.gg是一個基于人工智能的清單管理工具,旨在幫助組織確保每次都能正確完成任務。 關鍵詞:AI驅動, 檢查清單, 管理工具, 任務管理, 效率提升, 組織管理, 工作流程, 自動化工具, 清單管理, 協作工具…

第十四屆藍橋杯 2023 C/C++組 冶煉金屬

目錄 題目: 題目描述: 題目鏈接: 思路: 核心思路: 思路詳解: 代碼: 代碼詳解: 題目: 題目描述: 題目鏈接: 藍橋云課 冶煉金屬 洛谷 P92…

【數字圖像處理】彩色圖像處理(1)

研究彩色圖像處理的原因 1:利用顏色信息,可以簡化目標物的區分,以及從場景中提取出目標物 2:人眼對顏色非常敏感,可以分辨出來幾千種顏色色調和亮度,卻只能分別出幾十種灰度 彩色圖像分類 偽彩色圖像處理&…

pytest自動化中關于使用fixture是否影響用例的獨立性

第一個問題:難道使用fixture 會影響用例獨立嗎? ? 簡單回答: 使用 fixture ≠ 不獨立。 只要你的 fixture 是每次測試都能自己運行、自己產生數據的,那么測試用例依然是“邏輯獨立”的。 ? 怎么判斷 fixture 是否影響獨立性&a…

C++計算 n! 中末尾零的數量

* 詳細說明* 給定一個整數作為輸入。目標是找出該數的階乘結果中末尾零的數量。 一個數 N 的階乘是范圍 [1, N] 內所有數的乘積。* * 我們知道,只有當一個數是 10 的倍數或者有因數對 (2, 5) 時,才會產生末尾零。 在任何大于 5 的數的階乘中,…

推薦系統/業務,相關知識/概念2

一、漫畫庫更新大量新作品,如何融入推薦系統? 參考答案: 快速提取新作品特征:除基礎屬性外,利用自然語言處理技術提取漫畫簡介關鍵詞等豐富特征向量,分析情節、角色設定等深層次特征結合物品畫像體系分類…

# 手寫數字識別:使用PyTorch構建MNIST分類器

手寫數字識別:使用PyTorch構建MNIST分類器 在這篇文章中,我將引導你通過使用PyTorch框架構建一個簡單的神經網絡模型,用于識別MNIST數據集中的手寫數字。MNIST數據集是一個經典的機器學習數據集,包含了60,000張訓練圖像和10,000張…

強化學習筆記(三)——表格型方法(蒙特卡洛、時序差分)

強化學習筆記(三)——表格型方法(蒙特卡洛、時序差分) 一、馬爾可夫決策過程二、Q表格三、免模型預測1. 蒙特卡洛策略評估1) 動態規劃方法和蒙特卡洛方法的差異 2. 時序差分2.1 時序差分誤差2.2 時序差分方法的推廣 3. 自舉與采樣…

c++_csp-j算法 (4)

迪克斯特拉() 介紹 迪克斯特拉算法(Dijkstra算法)是一種用于解決單源最短路徑問題的經典算法,由荷蘭計算機科學家艾茲赫爾迪克斯特拉(Edsger W. Dijkstra)于1956年提出。迪克斯特拉算法的基本思想是通過逐步擴展已經找到的最短路徑集合,逐步更新節點到源節點的最短路…

(13)VTK C++開發示例 --- 透視變換

文章目錄 1. 概述2. CMake鏈接VTK3. main.cpp文件4. 演示效果 更多精彩內容👉內容導航 👈👉VTK開發 👈 1. 概述 在VTK(Visualization Toolkit)中,vtkPerspectiveTransform 和 vtkTransform 都是…

深入探索Qt異步編程--從信號槽到Future

概述 在現代軟件開發中,應用程序的響應速度和用戶體驗是至關重要的。尤其是在圖形用戶界面(GUI)應用中,長時間運行的任務如果直接在主線程執行會導致界面凍結,嚴重影響用戶體驗。 Qt提供了一系列工具和技術來幫助開發者實現異步編程,從而避免這些問題。本文將深入探討Qt…

基于Python的圖片/簽名轉CAD小工具開發方案

基于Python的圖片/簽名轉CAD工具開發方案 一、項目背景 傳統設計流程中,設計師常常需要將手寫簽名或掃描圖紙轉換為CAD格式。本文介紹如何利用Python快速開發圖像矢量化工具,實現: 📷 圖像自動預處理?? 輪廓精確提取?? 參數…

【倉頡 + 鴻蒙 + AI Agent】CangjieMagic框架(17):PlanReactExecutor

CangjieMagic框架:使用華為倉頡編程語言編寫,專門用于開發AI Agent,支持鴻蒙、Windows、macOS、Linux等系統。 這篇文章剖析一下 CangjieMagic 框架中的 PlanReactExecutor。 1 PlanReactExecutor的工作原理 #mermaid-svg-OqJUCSoxZkzylbDY…

一文了解相位陣列天線中的真時延

本文要點 真時延是寬帶帶相位陣列天線的關鍵元素之一。 真時延透過在整個信號頻譜上應用可變相移來消除波束斜視現象。 在相位陣列中使用時延單元或電路板,以提供波束控制和相移。 市場越來越需要更快、更可靠的通訊網絡,而寬帶通信系統正在努力滿…

Java中 關于編譯(Compilation)、類加載(Class Loading) 和 運行(Execution)的詳細區別解析

以下是Java中 編譯(Compilation)、類加載(Class Loading) 和 運行(Execution) 的詳細區別解析: 1. 編譯(Compilation) 定義 將Java源代碼(.java文件&#x…

【KWDB 創作者計劃】_深度學習篇---松科AI加速棒

文章目錄 前言一、簡介二、安裝與配置硬件連接驅動安裝軟件環境配置三、使用步驟初始化設備調用SDK接口檢測設備狀態:集成到AI項目四、注意事項兼容性散熱固件更新安全移除五、硬件架構與技術規格核心芯片專用AI處理器內存配置接口類型物理接口虛擬接口能效比散熱設計六、軟件…

如何清理Windows系統中已失效或已刪除應用的默認打開方式設置

在使用Windows系統的過程中,我們可能會遇到一些問題:某些已卸載或失效的應用程序仍然出現在默認打開方式的列表中,這不僅顯得雜亂,還可能影響我們快速找到正確的程序來打開文件。 如圖,顯示應用已經被geek強制刪除&am…

NFC碰一碰發視頻推廣工具開發注意事項丨支持OEM搭建

隨著線下門店短視頻推廣需求的爆發,基于NFC技術的“碰一碰發視頻”推廣工具成為商業熱點。集星引擎在開發同類系統時,總結出六大核心開發注意事項,幫助技術團隊與品牌方少走彎路,打造真正貼合商戶需求的實用型工具: 一…