TCP基礎篇(一)

文章目錄

      • 1.TCP 是如何保證可靠性的?
      • 2. 滑動窗口機制
      • 3 超時重傳
      • 4.TCP 報文格式
      • 5. 什么是 TCP 協議
        • 5.1 如何唯一確定一個 TCP 連接
      • 6.TCP 三次握手過程
        • 6.1 可以兩次握手嗎?
      • 7.TCP 的四次揮手
        • 7.1 為什么客戶端要等待2MSL?
      • 8.linux 中查看 TCP 的連接
      • 9.TCP 為什么要有最后一次 ACK 報文(美團面試)
      • 10.TCP 和 UDP 的區別

1.TCP 是如何保證可靠性的?

1. 三次握手連接建立連接 , 2. 序列號與確認應答 ,3. 數據包重傳,4. 滑動窗口機制 ,5. 擁塞控制等方面來考慮 TCP 保證連接的可靠性的。

  1. 連接建立 TCP 通過三次SYN-ACK 確認機制保證了雙方都具有發送和接受的能力,結束的時候通過四次揮手保證雙方都結束發送。

  2. 面向字節流的,每次都是發送一段字節過去,包在網絡中是無序的,有的先抵達了,有的后抵達,通過序列號和應答,,保證了數據的有序性。

  3. 超時重傳機制:如果發送方長時間沒有收到確認報文,會觸發超時重傳機制,重傳丟失的報文。

  4. 滑動窗口機制 Tcp 有流量控制的機制,發送方會根據接收方的接受窗口來發送數據報文,避免接收方無法接收數據報文,導致報文丟失

  5. 擁塞控制:通過慢啟動 ,擁塞避免 ,快重傳和快恢復算法調整發送速率來避免網絡擁塞.

這幾個地方都可以繼續往下挖,能深挖到的東西還是很多的。

2. 滑動窗口機制

滑動窗口機制允許發送方和接收方之間實現流量控制和可靠性傳輸,發送方可以持續發送數據而不需要等待每一個數據段的確認,從而提高傳輸效率. 接受方可以根據自身的處理能力和緩沖區調整窗口大小,從而控制發送方窗口大小.

https://blog.csdn.net/qq_46631497/article/details/137253124

3 超時重傳

https://blog.csdn.net/u010429831/article/details/119389928

4.TCP 報文格式

需要重點掌握的是 序號和確認號, seq 和 ack****,在三次握手和四次揮手中作用:

對于控制位需要有了解,了解這些控制位的作用.

seq 和 ack 用來解決網絡包亂序問題和解決丟包問題。

5. 什么是 TCP 協議

tcp 是一種 1. 面向連接的 ,2. 基于字節流的,3. 可靠的傳輸協議。 一共三個點都需要說清楚了

5.1 如何唯一確定一個 TCP 連接

通過四元組可以唯一確定 TCP 的連接.源地址,源端口,目的地址 ,目的端口.

6.TCP 三次握手過程

6.1 可以兩次握手嗎?

如果第一次的 SYN 數據包在網絡中阻塞,發送方進行了重傳,重傳數據包到達接收方,接收方返回 SYN-ACK. 然后第一次 SYN 數據包到達了接收方,接收方任務又是一次連接,就向接收方發送一個 ACK.這個時候接收方進入等待,但是發送方不會接收這個報文,浪費接收端的資源連接

7.TCP 的四次揮手

7.1 為什么客戶端要等待2MSL?

主要原因是為了保證客戶端發送那個的第一個ACK報文能到到服務器,因為這個ACK報文可能丟失,并且2MSL(是任何報文在網絡上存在的最長時間),超過這個時間報文將被丟棄,這樣新的連接中不會出現舊連接的請求報文。

8.linux 中查看 TCP 的連接

netstat -ant

查看具體端口的連接

通過 netstat -ant 顯示 tcp, 通過 grep 過濾出來已經建立鏈接的,再通過 wc -l 來統計數量。

netstat -ant | grep ESTABLISHED | wc -l

9.TCP 為什么要有最后一次 ACK 報文(美團面試)

本質上是在問 tcp 的三次握手的過程,為什么不能是兩次握手的過程

假設 A 向 B 發送了一個連接報文請求,SYN=1,ACK=1,但是由于網絡的阻塞,A 一直沒有收到響應報文就快速重傳了第二個報文,B 收到第二個報文回復 A 一個 SYN =1 和 ACK=1 的報文。

等到原來的請求報文到達 B 的時候,B 以為是另一個報文,響應 A 一個報文,但是 A 并不會響應 B,B 就會一直等待 A,浪費系統的資源,如果大量這樣的連接被浪費,那么很快就會消耗系統的資源。發送最后一個 ack,可以保證雙方都有接收和發送的能力。

10.TCP 和 UDP 的區別

TCP 和 UDP 都是傳輸層的兩個協議,實現端到端傳輸的。、

連接方式、可靠性、數據順序、傳輸效率、應用場景。

畫板

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

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

相關文章

【Axure元件分享】時間范圍選擇器

時間范圍選擇器下拉選擇開始時間和結束時間,實現效果如下。 源文件截圖: 元件獲取方式:

大模型學習一:deepseek api 調用實戰以及參數介紹

一、說明 DeepSeek(杭州深度求索人工智能基礎技術研究有限公司)是一家專注于大語言模型(LLM)研發的中國創新型科技公司,成立于2023年7月17日,由幻方量化孵化。其核心產品包括開源推理模型DeepSeek-R1、多模…

【Linux網絡與網絡編程】03.UDP Socket編程

一、UDP Socket編程接口 // 創建套接字 int socket(int domain, int type, int protocol); // 參數: // domain:域(協議家族),這里使用 AF_INET 表示進行網絡編程 // type:網絡通信傳輸的類型&#xff0…

linux gcc

一、常用編譯選項 ?基本編譯 gcc [input].c -o [output] ?示例: gcc hello.c -o hello # 將 hello.c 編譯為可執行文件 hello ./hello # 運行程序 ?分步編譯 預處理:-E(生成 .i 文件) gcc -E hello.c -o hello…

若依框架二次開發——RuoYi-AI 集成本地大模型

文章目錄 前提條件1. RuoYi-AI 已成功部署并運行2. Ollama 本地大模型已安裝1. 配置本地大模型2. 切換至本地模型3. 開始對話總結本文將詳細介紹如何在 RuoYi-AI 中集成本地 Ollama 大模型,使系統能夠在 離線環境 下提供智能對話能力。 前提條件 在開始集成本地大模型之前,…

Flask學習筆記 - 模板渲染

Flask 模板渲染 模板是包含占位符的 HTML 文件 Flask 使用 Jinja2 模板引擎來處理模板渲染。模板渲染允許你將動態內容插入到 HTML 頁面中,使得應用能夠生成動態的網頁內容。 創建模板:將 HTML 文件放在 templates 文件夾中,使用 Jinja2 占…

解碼 from XXX import * - 導入的真相

文章目錄 前言一、 什么是 from XXX import *?二、基本用法:導入的實際效果三、默認行為:無 __all__ 的情況四、與直接運行 XXX.py 的對比示例模塊使用 from XXX import *直接運行 python example.py關鍵差異五、為什么需要注意 from XXX import *?最佳實踐六、實際應用場景…

JavaScript 中常見的鼠標事件及應用

JavaScript 中常見的鼠標事件及應用 在 JavaScript 中,鼠標事件是用戶與網頁進行交互的重要方式,通過監聽這些事件,開發者可以實現各種交互效果,如點擊、懸停、拖動等。 在 JavaScript 中,鼠標事件類型多樣&#xff0…

Nacos注冊中心AP模式核心源碼分析(單機模式)

文章目錄 概述一、客戶端啟動主線流程源碼分析1.1、客戶端與Spring Boot整合1.2、注冊實例(服務注冊)1.3、發送心跳1.4、拉取服務端實例列表(服務發現) 二、服務端接收請求主線流程源碼分析2.1、接收注冊請求2.1.1、初始化注冊表2…

prism WPF 模塊

模塊 DLL ModuleA 和 ModuleB 都要安裝 Prism.Unity 引用方式1 項目引用 直接 在引用中添加項目引用 App.xaml.cs 添加模塊 ConfigureModuleCatalog using ModuleA; using ModuleB; using Prism.Ioc; using Prism.Modularity; using Prism.Unity; using PrismWpfApp.ViewMo…

CSS:換行與不換行

一、CSS 不允許換行 在 CSS 中,有幾種方法可以控制文本不換行: 1. 使用 white-space 屬性 .no-wrap {white-space: nowrap; } white-space: nowrap; 會強制文本在一行顯示,不換行。 2. 使用 overflow 和 text-overflow 通常與 white-sp…

JavaScript BOM、事件循環

目錄 BOM(瀏覽器對象模型) 一、window 對象 1. 窗口控制 2. 定時器 二、location 對象 三、navigator 對象 四、history 對象 五、screen 對象 六、本地存儲 1. localStorage 2. sessionStorage 七、BOM 應用場景 八、總結 JavaScript 執行…

k8s運維面試總結(持續更新)

一、你使用的promethues監控pod的哪些指標? CPU使用率 內存使用率 網絡吞吐量 磁盤I/O 資源限制和配額:Prometheus可以監控Pod的資源請求和限制,確保它們符合預設的配額,防止資源過度使用。具體指標如container_spec_cpu_quota用于…

ubuntu20.04升級成ubuntu22.04

命令行 sudo do-release-upgrade 我是按提示輸入y確認操作,也可以遇到配置文件沖突時建議選擇N保留當前配置

Cortex-M? 函數調用的入棧與出棧操作

在 ARM Cortex-M 系列單片機中,普通C函數調用的入棧(壓棧)和出棧操作通常由編譯器編譯后生成的代碼管理,而硬件僅負責部分關鍵操作。以下是詳細分析: 1. 函數調用與返回的核心機制 (1) 硬件自動完成的部分 返回地址的保存: 當通過 BL(Branch with Link)或 BLX 指令調用…

DeepSeek能否用于對話系統(Chatbot)?技術解析與應用實例!

引言:Chatbot 的進化與挑戰 你有沒有發現,現在的AI聊天機器人越來越聰明了?無論是客服助手、智能語音設備,還是社交媒體上的自動回復,Chatbot(對話系統)已經滲透到我們生活的方方面面。但問題是…

多表查詢的多與一

1.查尋表需要的條件 1.1.首先我們要了解查詢表有哪些 1.1.1.多對一 多對一就是一個年表擁有例外一個表的多條數據 一個表對應立一個表的多條數據,另一個表對應這個表的多條數據 這個點被稱為多對一 1.1.2.多對多 多對多簡單來說就是需要一個中間商 中間商就…

配置文件、Spring日志

SpringBoot配置?件 SpringBoot?持并定義了配置?件的格式, 也在另?個層?達到了規范其他框架集成到SpringBoot的 ?的. 很多項?或者框架的配置信息也放在配置?件 中, ?如: 項?的啟動端? 數據庫的連接信息(包含??名和密碼的設置) 第三?系統的調?密鑰等信息 ?…

嵌入式——Linux系統的使用以及編程練習

目錄 一、Linux的進程、線程概念 (一)命令控制進程 1、命令查看各進程的編號pid 2、命令終止一個進程pid 二、初識Linux系統的虛擬機內存管理 (一)虛擬機內存管理 (二)與STM32內存管理對比 三、Lin…

Springcache+xxljob實現定時刷新緩存

目錄 SpringCache詳解 SpringCache概述 核心原理 接口抽象與多態 AOP動態代理 核心注解以及使用 公共屬性 cacheNames KeyGenerator:key生成器 key condition:緩存的條件,對入參進行判斷 注解 xxl-job詳解 SpringcacheRedis實現…