Java EE(15)——網絡原理——TCP協議解析一

一.確認應答/(確認)序列號

接收方接收到數據后,向發送方返回一個確認信號(ack),告訴發送方數據被成功接收。ACK報文段只是作為確認使用的,一般來說不攜帶應用層數據(載荷),也就是說只有報頭部分。但有可能和其他的數據進行合并,這個是后話
在這里插入圖片描述
另外,TCP將每個字節的數據都進行了編號,叫做序列號,保證數據到達接收方時不會混亂
其次,每個ACK報文也有一個確認序列號,例如ACK(1001),其一是告訴發送方1000之前的數據我以及收到了;其二是讓發送方從1001開始發送
在這里插入圖片描述
問題:當后發的數據(1001~2000)先到達服務器時,ACK是否會返回ACK(2001)?

其實服務器不會返回ACK2001),因為數據(1~1000)還沒到達,也就是說ACK1001)
都還沒返回給客戶端,憑什么返回ACK2001)。
那么此時又引出一個問題,既然ACK1001)沒返回,客戶端為什么可以發送數據(1001 ~2000)?
這是因為TCP協議發送數據時,不是一條一條發送的,這個到后面講滑動窗口時再細講

二.超時重傳

之前便說過,TCP雖然號稱可靠傳輸,但實際上數據不可能100%傳輸到對端,這光靠代碼是無法解決的
在這里插入圖片描述
遇到上述情況時,會觸發TCP的超時重傳機制
發送方等待一段時間后,沒有收到服務器返回的ACK,那么就會默認該數據丟包了,會再次發送該數據,如果依然沒有收到ACK,會再次重發,但每次重發的時間間隔會拉長,達到一定次數后就不再重重發。
如果數據成功達到了,但是ACK丟包了,怎么辦?
雖然客戶端會重發數據,但是服務器緩沖區會對接收的數據進行檢查,相同序列號的數據不會接收的

三.連接管理/狀態轉換

3.1三次握手

在這里插入圖片描述
(1)SYN:客戶端發起連接請求
(2)ACK:服務器表示你的請求我收到了,但到底要不要連接,ACK無法決定;SYN:服務器決定與服務器建立連接(一般來說服務器不會拒絕連接請求,除非服務器繁忙,所以ACK和SYN一般是同步返回給客戶端的)
(3)ACK:客戶端告訴服務器,你的ACK+SYN我也收到了
這就是三次揮手建立連接的過程
問題:兩次揮手能不能建立連接?四次揮手又那不能?
答案:兩次不行,四次多余。
我舉例說明,此時張三和李四開黑,因為不在同一個地方,所以要開麥交流,那么在開黑之前需要確定雙方的麥克風和聽筒都沒問題

在這里插入圖片描述
至于四次握手沒必要我上面以及已經說過了,服務器的ACK和SYN是可以合并發送的,能一次發送就不兩次

3.2三次握手的狀態轉換

1.服務器和客戶端都沒啟動
在這里插入圖片描述
2.服務器啟動,客戶端為啟動
在這里插入圖片描述
3.服務器和客戶端都啟動
在這里插入圖片描述

3.3四次揮手&狀態轉換

在這里插入圖片描述
(1)FIN:客戶端調用close(也可能是服務器)并發送斷連請求
(2)ACK:服務器收到FIN后返回ACK告訴客戶端:我收到了你的斷連請求,并進入CLOSE_WAIT狀態
(3)FIN:服務器進入CLOSE_WAIT狀態后需要處理完之前的數據,再調用close并向客戶端發送FIN確認斷連。然后進入LAST_ACK狀態,等待客戶端發送最后的ACK
(4)ACK:客戶端收到FIN后進入TIME_WAIT狀態,同時發送ACK

當服務器收到ACK之后,就進入CLOSED狀態徹底關閉連接;
而客戶端會等待一段時間后才進入CLOSED狀態,為了確保服務器收到ACK

問題:服務器的ACK和FIN能不能合并?
答案是:不能,因為ACK和FIN發送的時間大概率不同步,服務器需要處理完之前的數據才能發送FIN;如果正好處理完畢,ACK和FIN也有可能同步發送。但是一般來說ACK和FIN是不同步的,所以一般叫做四次揮手

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

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

相關文章

node-ddk,electron 組件, 打開新窗口

node-ddk 打開新窗口 https://blog.csdn.net/eli960/article/details/146207062 也可以下載demo直接演示 http://linuxmail.cn/go#node-ddk 本文講解如何在渲染進程發起創建新窗口, 包括 window.open 在主進程定義窗口類型 import main, { NODEDDK } from "node-ddk…

git管理時keil項目忽略文件列表

在使用 Git 管理 Keil MDK(μVision 5)工程時,需要忽略編譯生成的臨時文件、調試文件、用戶配置等非必要內容。以下是忽略文件的詳細列表及說明,可直接保存為 .gitignore 文件: Keil MDK 工程的 .gitignore 文件 giti…

C#單例模式

單例模式 (Singleton),保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。通常我們可以讓一個全局變量使得一個對象被訪問,但它不能防止你實例化對個對象,一個最好的辦法就是,讓類自身負責保護它的唯一實例。這個類可以保證沒…

ZYNQ的cache原理與一致性操作

在Xilinx Zynq SoC中,Cache管理是確保處理器與外部設備(如FPGA邏輯、DMA控制器)之間數據一致性的關鍵。Zynq的ARM Cortex-A9處理器包含L1 Cache(指令/數據)和L2 Cache,其刷新(Flush/Invalidate&…

Linux NFS、自動掛載與系統啟動管理指南

1. NFS客戶端掛載導出的目錄的方式 NFS(網絡文件系統) 允許將遠程服務器的目錄掛載到本地,像訪問本地文件一樣操作遠程文件。掛載方式主要有兩種: 手動掛載:使用 mount 命令(臨時生效,重啟后丟…

NO.55十六屆藍橋杯備戰|排序|插入|選擇|冒泡|堆|快速|歸并(C++)

插?排序 插?排序(Insertion Sort)類似于玩撲克牌插牌過程&#xff0c;每次將?個待排序的元素按照其關鍵字??插?到前?已排好序的序列中&#xff0c;按照該種?式將所有元素全部插?完成即可 #include <iostream> using namespace std; const int N 1e5 10; …

【Oracle資源損壞類故障】:詳細了解壞塊

目錄 1、物理壞塊與邏輯壞塊 1.1、物理壞塊 1.2、邏輯壞塊 2、兩個壞塊相關的參數 2.1、db_block_checksum 2.2、db_block_checking 3、檢測壞塊 3.1、告警日志 3.2、RMAN 3.3、ANALYZE 3.4、數據字典 3.5、DBVERIFY 4、修復壞塊 4.1、RMAN修復 4.2、DBMS_REPA…

計算機網絡高頻(二)TCP/IP基礎

計算機網絡高頻(二)TCP/IP基礎 1.什么是TCP/IP?? TCP/IP是一種網絡通信協議,它是互聯網中最常用的協議之一。TCP/IP有兩個基本的協議:TCP(傳輸控制協議)和IP(互聯網協議)。 TCP(Transmission Control Protocol,傳輸控制協議)是一種可靠的、面向連接的協議。它負…

【大模型算法工程】大模型應用工具化、忠誠度以及知識庫場景下PDF雙欄解析問題的討論

1. 大模型時代應用工具化以及無忠誠度現象討論 接觸大模型久了&#xff0c;也慢慢探到一些大模型能力表現非常自然和突出的場景&#xff0c;比如AI搜索&#xff08;依賴大模型的理解總結能力&#xff09;、AI對話&#xff08;即chat&#xff0c;依賴大模型的生成能力&#xff0…

Java EE(13)——網絡編程——UDP/TCP回顯服務器

前言 本文主要介紹UDP和TCP相關的API&#xff0c;并且基于這兩套API實現回顯服務器 UDP和TCP UDP和TCP屬于網絡五層模型中傳輸層的協議 特點&#xff1a; UDP&#xff1a;無連接&#xff0c;不可靠&#xff0c;面向數據包&#xff0c;全雙工 TCP&#xff1a;有連接&#xff…

【藍橋杯】12111暖氣冰場(多源BFS 或者 二分)

思路 這題可以用BFS做&#xff0c;也可以用二分來做。 用二分這里只提供一個思路&#xff1a;對時間來二分查找&#xff0c;check函數就是檢查在特定的時間 t 0 t_0 t0?內每一個暖氣爐的傳播距離能否覆蓋所有格子。 用BFS做&#xff1a; 由幾個點開始向外擴散&#xff0c;知道…

使用bat批量獲取WORD中包含對應字符的段落,段落使用回車換行

get_word_paragraphs.vbs 獲取命令行參數 If WScript.Arguments.Count 0 ThenWScript.Quit 1 End If 獲取 Word 文檔路徑 docPath WScript.Arguments(0) 創建 Word 應用程序對象 Set objWord CreateObject("Word.Application") objWord.Visible False 打開 Word …

DeepSeek自學手冊:《從理論(模型訓練)到實踐(模型應用)》|73頁|附PPT下載方法

導 讀INTRODUCTION 今天分享是由ai呀蔡蔡團隊帶來的DeepSeek自學手冊&#xff1a;《從理論&#xff08;模型訓練&#xff09;到實踐&#xff08;模型應用&#xff09;》&#xff0c;這是一篇關于DeepSeek模型訓練、應用場景及替代方案的綜合指南文章&#xff0c;主要介紹了Deep…

WEB API 設計規范

REST API 簡介 REST 是 Representational State Transfer 的縮寫&#xff0c;它將資源作為核心概念&#xff0c;通過 HTTP 方法對資源進行操作。其本身是一套圍繞資源進行操作的架構規范。在實際應用中&#xff0c;更多的是體現在 API 的設計上。 企業在進行產品設計開發時&a…

QT軟件匠心開發,塑造卓越設計服務

在當今這個數字化飛速發展的時代&#xff0c;軟件已經成為我們生活中不可或缺的一部分。而QT&#xff0c;作為一款跨平臺的C圖形用戶界面應用程序開發框架&#xff0c;憑借其強大的功能和靈活性&#xff0c;在眾多軟件開發工具中脫穎而出。我們深知&#xff0c;在軟件開發領域&…

標貝科技入選2025年市級數據要素市場化配置改革“揭榜掛帥”名單

近日&#xff0c;山東省大數據局、青島市大數據局公布2025年數據要素市場化配置改革“揭榜掛帥”名單。標貝科技聯合嶗山區電子政務和大數據中心申報的“政務熱線通話錄音數據價值挖掘與權益保護”項目成功入選。這一成果不僅彰顯了標貝科技在數據領域的創新實力&#xff0c;更…

Flutter TextField 從入門到精通:掌握輸入框的完整指南

目錄 1. 引言 2. TextField 的基本用法 3. 主要屬性 4. 自定義 TextField 樣式 4.1 自定義邊框與提示文本 4.2 增加前綴/后綴圖標 4.3 只允許輸入數字 4.4 表單驗證系統 4.5 動態樣式修改 4.6 防抖搜索&#xff08;Debounce&#xff09; 5. 結論 相關推薦 1. 引言…

藍橋杯備賽 背包問題

背包問題 ![[背包問題.png]] 01背包 1.題意概要&#xff1a;有 n n n個物品和一個容量為 V V V的背包&#xff0c;每個物品有重量 w i w_i wi?和價值 v i v_i vi? 兩種屬性&#xff0c;要求選若干物品放入背包使背包中物品的總價值最大且背包中物品的總重量不超過背包的容…

MyBatis-Plus 自動填充:優雅實現創建/更新時間自動更新!

目錄 一、什么是 MyBatis-Plus 自動填充&#xff1f; &#x1f914;二、自動填充的原理 ??三、實際例子&#xff1a;創建時間和更新時間字段自動填充 ?四、注意事項 ??五、總結 &#x1f389; &#x1f31f;我的其他文章也講解的比較有趣&#x1f601;&#xff0c;如果喜歡…

arduino R4 SD卡讀寫測試

使用買來的 st7789LCD 顯示器背面就帶著一個 tf 卡槽&#xff0c;可以直接連接 tf 卡。使用 Sdfat 庫就可以實現對 sd 卡的讀寫操作。這里嘗試測試 sd 卡的讀寫功能。 LCD 顯示器的初始化 //定義LCD的對象 Adafruit_ST7789 tft Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);tf…