網絡層TCP機制

1.確認應答機制

由于發送信息的距離可能較遠,可能出現后發的信息先到的情況,怎么辦?

TCP將每個字節的數據都進行了編號,即為序列號

如何分辨一個數據包是普通數據還是應答數據呢

2.超時重傳

由于丟包是一個隨機的事件,因此在上述tcp傳輸的過程中,丟包就存在兩種情況

但是在發送方的角度,無法區分這兩種情況

無論出現哪種情況,發送方都會進行"重新傳輸"

所以udp一般延遲比較低

如果a給b發了消息,而b回復的數據丟了,那a就會超時重傳一條一樣的數據過去

3.連接管理機制

3.1 建立連接,TCP三次握手

TCP在建立連接的過程中,需要通信雙方一共"打三次招呼",才能發完成連接建立的

ack和syn同時為一,此時就是三次握手了

3.2 連接斷開,四次揮手

建立連接一般是客戶端主動發起

斷開連接,客戶端和服務器都可以主動發起

和三次握手不同,此處的四次握手,不一定能把中間的兩次交互合并

不能的原因:ack和第二個fin的觸發時機是不同的

ack是內核響應,b收到fin,就會立即返回ack

第二個fin是應用程序的代碼觸發,b這邊調用了close方法才會觸發fin

可以的原因:

3.3?問題

3.3.1 怎么判斷報文是不是同步報文段?

3.3.2 三次握手要解決什么問題? (核心作用)

這種設定,是避免前朝的劍斬本朝的官

3.3.3 兩次,三次握手是否可行?

兩次不行,四次可以,但沒必要,兩個數據合并成一個數據更高效\

4.滑動窗口機制

4.1丟包如何重傳

??

這種情況不用任何重傳,因為有確認序號機制

TCP前提是可靠性,在可靠性的前提上,再提高傳輸效率

5.流量控制

站在接收方的角度,反向制約發送方的傳輸速率

6.擁塞控制

6.1過程

在指數增長的過程中,如果達到閾值,就從指數增長,變成線性增長

線性增長也是增長,如果傳輸速率越來越快增長到一定程度,網絡上就可能會出現丟包了(網絡堵塞)

一旦觸發丟包,就把窗口大小縮小,重新進行前面的慢開始 - 指數增長 - 線性增長

并且會根據當前丟包的窗口大小,重新指定線性增長閾值(為了避免指數增長一下就達到丟包閾值)

這是經典版本的擁塞控制,后面tcp又進行了改進

最終時機發送的窗口大小,是取流量控制和擁塞控制中窗口的較小值

7.延時應答

8.捎帶應答

在延時應答的基礎上,進一步提高效率

9.面向字節流

相比之下,UDP這樣的面向數據報的通信方式就沒有這樣的問題

如何解決粘包問題?

前面寫的回顯服務器,就是這樣的方式

10.異常情況處理

10.1 進程崩潰

10.2 主機關機(正常流程)

10.3 主機掉電

10.4 網線斷開

11.TCP的心跳機制

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

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

相關文章

【一起來學AI大模型】微調技術:LoRA(Low-Rank Adaptation) 的實戰應用

LoRA(Low-Rank Adaptation) 的實戰應用,使用 Hugging Face 的 peft (Parameter-Efficient Fine-Tuning) 庫對大型語言模型進行高效微調。LoRA 因其顯著降低資源消耗(顯存和計算)同時保持接近全量微調性能的特點&#x…

RedisJSON 內存占用剖析與調優

一、基礎內存模型指針包裝 所有 JSON 值(標量、對象、數組、字符串等)至少占用 8 字節,用于存儲一個帶類型標記的指針。標量與空容器 null、true、false、小整數(靜態緩存)、空字符串、空數組、空對象 均不分配額外內存…

【LeetCode 熱題 100】23. 合并 K 個升序鏈表——(解法一)逐一合并

Problem: 23. 合并 K 個升序鏈表 題目:給你一個鏈表數組,每個鏈表都已經按升序排列。 請你將所有鏈表合并到一個升序鏈表中,返回合并后的鏈表。 文章目錄整體思路完整代碼時空復雜度時間復雜度:O(K * N)空間復雜度:O(1…

垃圾收集器-Serial Old

第一章 引言1.1 JVM 中垃圾收集的簡要概述JVM(Java Virtual Machine)作為 Java 程序的運行時環境,負責將字節碼加載至內存并執行,同時也承擔著內存管理的重任。垃圾收集(Garbage Collection,簡稱 GC&#x…

Docker(02) Docker-Compose、Dockerfile鏡像構建、Portainer

Docker-Compose 1、Docker Desktop 在Windows上安裝Docker服務,可以使用Docker Desktop這個應用程序。 下載并安裝這樣的一個安裝包 安裝好后:執行命令 docker --version 從Docker Hub提取hello-world映像并運行一個容器: docker run h…

大數據時代UI前端的用戶體驗設計新思維:以數據為驅動的情感化設計

hello寶子們...我們是艾斯視覺擅長ui設計和前端數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言:從 “經驗設計” 到 “數據共情” 的體驗革命傳統 UI 設計常陷入 “設計師主觀經…

TypeScript 學習手冊

1.TypeScript 概念 TypeScript(簡稱 TS,靜態類型)是微軟公司開發的一種基于 JavaScript (簡稱 JS,動態類型)語言的編程語言。TypeScript 可以看成是 JavaScript 的超集(superset)&a…

掌握現代CSS:變量、變形函數與動態計算

CSS近年來發展迅速,引入了許多強大的功能,如變量、高級變形函數和動態計算能力。本文將深入探討如何在CSS中設置并使用變量,以及如何有效利用translate3d、translateY和translateX等變形方法。我們還將解析var()和calc()函數的關鍵作用。一、…

貝爾量子實驗設想漏洞

1 0 1 0 1 1 0 1 0 1 1 1 0 0 1 0 帶墨鏡如果先上下交換再左右交換,很可能不一樣的概率是2%,但是因為交換誕生了一個與之前序列相同的所以不一樣概率變成1%,我們在測的時候不能這么測啊,你得看序列完…

在 Android 庫模塊(AAR)中,BuildConfig 默認不會自動生成 VERSION_CODE 和 VERSION_NAME 字段

為什么AAR庫模塊的 BuildConfig 沒有 versionCode 和 versionName? aar庫模塊的 BuildConfig 默認不包含版本信息 應用模塊(com.android.application)會自動生成 versionCode 和 versionName 到 BuildConfig。但庫模塊(com.androi…

強化學習 (11)隨機近似

計算均值的新方法有兩種方法。第一種方法很直接,即收集所有樣本后計算平均值;但這種方法的缺點是,若樣本是在一段時間內逐個收集的,我們必須等到所有樣本都收集完畢。第二種方法可避免此缺點,因為它以增量迭代的方式計…

PHP `implode` 深度解析:從基礎到高階實戰指南

文章目錄一、基礎語法與底層原理執行過程解析:二、性能關鍵:避免隱含陷阱1. 類型轉換黑盒2. 大數組內存優化3. 關聯數組處理三、高階應用場景1. SQL語句安全構建2. CSV文件生成3. 模板引擎實現四、多維數組處理方案1. 遞歸降維2. JSON轉換橋接五、性能對…

開發語言中關于面向對象和面向過程的筆記

開發語言中關于面向對象和面向過程的筆記市面主流語言分類面向過程面向對象市面主流語言分類 面向過程編程(Procedural Programming):C語言;面向對象編程語言(Object-Oriented Programming, OOP) &#xf…

AI產品經理面試寶典第3天:技術分層、邊界與市場全景系列面試題

面試指導 面試官:請從技術實現效果的角度,解釋AI技術分層。 你的回答: AI技術分為三層。 第一層是認知層:通過圖像處理、語音識別、自然語言理解等技術,讓機器感知環境。比如攝像頭識別行人動作,麥克風捕捉用戶指令。 第二層是預測層:基于行為數據預判下一步需求。例如…

Intel英特爾ICH7R/ICH8R/ICH9R/ICH10R系列下載地址--intel_msm_8961002 下載 Version 8.9.6.1002

Intel英特爾ICH7R/ICH8R/ICH9R/ICH10R系列下載地址intel_msm_8961002 下載 Version 8.9.6.1002https://xiazai.zol.com.cn/detail/66/653449.shtml通過網盤分享的文件:intel_msm_8961002.zip 鏈接: https://pan.baidu.com/s/13N9ZLXWkaWaEHQ5P90Jt0g?pwd3790 提取碼…

AI(學習筆記第五課) 使用langchain進行AI開發 load documents(web)

文章目錄AI(學習筆記第五課) 使用langchain進行AI開發 load documents(web)學習內容:1.load documents(web)1.1 學習url1.2 提前安裝python的package1.2 使用WebBaseLoader進行webpage的load1.3 使用BeautifulSoup4進行webpage的部分截取1.4 …

使用macvlan實現容器的跨主機通信

使用環境: 兩臺運行docker的服務器 A機器網段:192.168.86.61 B機器網段:192.168.86.62 運行的容器需裝有ping指令, 實驗參數解釋: -d macvlan 指定創建網絡驅動類型 --subnet 指定子網范圍 -gateway 指定網關地址 -o p…

深度學習_全連接神經網絡

1.什么是神經網絡神經網絡中信息只向一個方向移動,即從輸入節點向前移動,通過隱藏節點,再向輸出節點移 動,網絡中沒有循環或者環。其中的基本構件是: 輸入層:即輸入x的那一層 輸出層:即輸出y的那…

OpenLayers使用

初學ol,實現了高德地圖不同圖層的切換、交互性地圖飛行以及加載本地JSON數據。說一下不同圖層切換的想法:1.對于標準地圖和衛星地圖:二者最初便掛載到map上,兩個圖層是疊加顯示的;當點擊按鈕時,其實是使用 …

day4--上傳圖片、視頻

1. 分布式文件系統 1.1 什么是分布式文件系統 文件系統是負責管理和存儲文件的系統軟件,操作系統通過文件系統提供的接口去存取文件,用戶通過操作系統訪問磁盤上的文件。 下圖指示了文件系統所處的位置: 常見的文件系統:FAT16/FA…