TCP相關問題 第一篇

TCP相關問題1

1.TCP主動斷開連接方為什么需要等待2MSL

在這里插入圖片描述

如上圖所示:在被動鏈接方調用close,發送FIN時進入LAST_ACK狀態,但未收到主動連接方的ack確認,需要被動連接方重新發送一個FIN,而為什么是2MSL,一般認為丟失ack在網絡中生存的時間是1MSL,重傳FIN也需要1MSL,所以需要等待2MSL時間。

2.SYN什么時候被丟棄?
  • TCP的半連接隊列和全連接隊列滿了,造成SYN被丟棄

  • 開啟tcp_tw_recycle參數,并且在NAT環境下,造成SYN被丟棄

a.TCP中linux 內核維持兩個隊列,半連接隊列和全連接隊列

三次握手過程 :

  1. 服務端收到客戶端SYN請求請求后,內核會把該連接存儲到半連接隊列,并向客戶端響應SYN+ACK。
  2. 接著客戶端會返回ACK,服務端收到第三次握手的ACK后,內核會把連接從半連接隊列(listen)移除。
  3. 然后創建新的完全連接,并將其添加到accept完全隊列,等待進程調用accept函數時把連接取出來。

在這里插入圖片描述

  • 半連接隊列滿了:大量SYN同時道道服務端,導致SYN被丟棄,會造成SYN泛洪攻擊。

    • 解決方案:

      ? 1.增加半連接隊列。

      ? 2.開啟tcp_syncookies

      ? 3.減少syn+ack重傳次數

  • 全連接隊列滿了:在服務端并發處理大量請求,如果accept隊列過小時或者應用程序accept不及時,會造成accept隊列滿了,這是之后的連接會被丟棄,這樣會造成服務端請求數量上不去的問題。

    • 解決方案:

      ? 1.調大accept隊列最大長度,通過accept 的backlog參數以及samaconnect參數

      ? 2.檢查系統或者程序代碼為什么accept不及時。

b.開啟tcp_tw_recycle參數,并且在NAT環境下,造成SYN被丟棄

? 2.前因

? TCP四次揮手過程中主動斷開方會有一個TIME_WAIT狀態,這個狀態會有2MSL等待時間變為CLOSE狀態。

在這里插入圖片描述

  • 前因1:在linux操作系統中,TIME_WAIT等待時間2MSL為60s。主動斷開方需要等待2MSL時間端口才能被釋放。

  • 前因2:客戶端主動斷開連接并且大量主動斷開連接。客戶端一直占用連接,2MSL時間內端口一直被占用,一般開啟的端口號為32768~61000,資源有限。如果客戶端發起大量連接,并且斷開進入TIME_WAIT狀態,端口被占用導致后面其他客戶端無端口可用。

    小結:TCP要解決當前沒有端口可用,客戶端還要建立連接,所以誕生了tcp_tw_recycle

  • 前因3:

    • tcp_tw_recycle,如果選項開啟的話,允許處于TIME_WAIT狀態的連接被快速回收。
    • tcp_tw_reuse,如果選項開啟的話,在調用connect函數時,如果內核選擇到的端口已經被相同的四元組占用時,就會判斷是否處于TIME_WAIT狀態,如果狀態處于TIME_WAIT,并且狀態持續時間超過了1s,那么就會重用這個連接,然后可以正常使用這個端口了,只使用于連接發起方
  • 前因4:開啟了recycle和timestamp選項,觸發PAWS機制(per-host的PAWS機制)

    • 作用防止TCP中的序號發生繞回

      使用tcp協議進行數據傳輸時,tcp都包含一個32位的序號,用于表示報文段中的數據在整個數據流中的位置,TCP序號的最大值為2^32,是一個無符號整數,到達最大值時序號會循環變為0,這個現象叫做"序號繞回"

在這里插入圖片描述

  • 經過同一NAT轉換來自不同的client的數據流,在服務端看來是于同一host打交道

    客戶端用的NAT網關,不同客戶端經過同一NAT之后,轉換為同一個公網IP,在服務端看來好像跟同一個客戶端打交道

  • 雖然經過同一個NAT轉化,但不同客戶端各自攜帶自己的timestamp,經過NAT轉換后無法保證數據包帶的timestamp值嚴格遞增。

  • 當服務端的per-host PAWS機制被觸發后,會丟棄timestamp值不符合遞增條件的包。

    例如:

    ? a.當客戶端A經過NAT網關和服務端建立TCP連接,然后服務端主動關閉并快速回收TIME_WAIT狀態連接后,客戶端B 也通過NAT和服務器建立連接,由于客戶端A和B經過同一個NAT轉換,所以相同的IP地址服務端認為是一個客戶端發送過來的,客戶端B發送的timestamp較小,由于服務端的PAWS機制,服務端會丟棄客戶端B發送的較小timestap的SYN包

  • tcp_tw_recyle在linux4.12版本后,直接取消了這一參數。

mestap的SYN包

  • tcp_tw_recyle在linux4.12版本后,直接取消了這一參數。

參考連接:https://www.bilibili.com/video/BV1Pw411U7TA?spm_id_from=333.788.videopod.sections&vd_source=4a32de7f18a719e139c5f65d7ba504d1

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

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

相關文章

STM32啟動文件學習(startup_stm32f40xx.s)

原代碼 ;******************** (C) COPYRIGHT 2016 STMicroelectronics ******************** ;* File Name : startup_stm32f40xx.s ;* Author : MCD Application Team ;* version : V1.8.0 ;* date : 09-November-2016 ;* Desc…

uni-app學習筆記二十三--交互反饋showToast用法

showToast部分文檔位于uniapp官網-->API-->界面:uni.showToast(OBJECT) | uni-app官網 uni.showToast(OBJECT) 用于顯示消息提示框 OBJECT參數說明 參數類型必填說明平臺差異說明titleString是提示的內容,長度與 icon 取值有關。iconString否圖…

【Ragflow】26.RagflowPlus(v0.4.0):完善解析邏輯/文檔撰寫模式全新升級

概述 在歷經半個月的間歇性開發后,RagflowPlus再次迎來一輪升級,正式發布v0.4.0。 開源地址:https://github.com/zstar1003/ragflow-plus 更新方法 下載倉庫最新代碼: git clone https://github.com/zstar1003/ragflow-plus.…

【論文解讀】Toolformer: 語言模型自學使用工具

1st author: ?Timo Schick? - ?Google Scholar? paper: Toolformer: Language Models Can Teach Themselves to Use Tools | OpenReview NeurIPS 2023 oral code: lucidrains/toolformer-pytorch: Implementation of Toolformer, Language Models That Can Use Tools, by…

Spring 官方推薦構造函數注入

1. 依賴關系明確 構造函數注入可以清晰地聲明類的依賴關系,所有必需的依賴項都通過構造函數參數傳遞,使得代碼的可讀性更高。這種方式讓類的使用者能夠直觀地了解類的依賴,而不需要通過注解或反射來猜測。 2. 增強代碼健壯性 構造函數注入…

[深度學習]搭建開發平臺及Tensor基礎

一、實驗目的 1. 掌握Windows下PyTorch 深度學習環境的配置 2. 掌握一種PyTorch開發工具 3. 理解張量并掌握Tensor的常用操作(創建、調整形狀、加、減、乘、除、取絕對值、比較操作、數理統計操作 4. 掌握Tensor與Numpy的互相轉換操作 5. 掌握Tensor 的降維和…

【Zephyr 系列 14】使用 MCUboot 實現 BLE OTA 升級機制:構建安全可靠的固件分發系統

??關鍵詞:Zephyr、MCUboot、OTA 升級、BLE DFU、雙分區、Bootloader、安全固件管理 ??面向讀者:希望基于 Zephyr 為 BLE 設備加入安全 OTA 升級功能的開發者 ??預計字數:5200+ 字 ?? 前言:為什么你需要 OTA? 隨著設備部署數量增多與產品生命周期延長,遠程升級(…

App Search 和 Workplace Search 獨立產品現已棄用

作者:來自 Elastic The Search Product Team App Search 和 Workplace Search 的核心功能已集成到 Elasticsearch 和 Kibana 中。 我們宣布在 9.0 版本中棄用 App Search 和 Workplace Search。 如果你是 Elastic 的客戶,當前正在使用 App Search 和 Wo…

Spring Boot + OpenAI 構建基于RAG的智能問答系統

一、技術架構設計 1.1 系統架構圖 [前端]│▼ (HTTP/REST) [Spring Boot Controller]│▼ (Service Call) [問答處理服務層]├─? [知識庫檢索模塊] ──? [向量數據庫]└─? [OpenAI集成模塊] ──? [OpenAI API]│▼ [結果組裝與返回] 1.2 技術選型 組件技術棧版本要求…

Oracle實用參考(13)——Oracle for Linux物理DG環境搭建(2)

13.2. Oracle for Linux物理DG環境搭建 Oracle 數據庫的DataGuard技術方案,業界也稱為DG,其在數據庫高可用、容災及負載分離等方面,都有著非常廣泛的應用,對此,前面相關章節已做過較為詳盡的講解,此處不再贅述。 需要說明的是, DG方案又分為物理DG和邏輯DG,兩者的搭建…

【論文閱讀29】區間預測CIPM(2025)

這篇論文主要研究的是滑坡位移的區間預測方法,提出了一種新型的預測模型,叫做復合區間預測模型(CIPM),并以三峽庫區的白家堡滑坡為案例進行了應用和驗證。論文的核心內容和貢獻包括: 背景與問題 滑坡位移預…

Linux 文件系統底層原理筆記:磁盤結構、ext2 文件系統與軟硬鏈接解析

文章目錄 一、理解硬件1.1 磁盤、服務器、機柜、機房1.2 磁盤物理結構1.3 磁盤的存儲結構1.4 磁盤的邏輯結構1.4.1 理解過程1.4.2 真實過程 1.5 CHS && LBA地址 二、引入文件系統2.1 引入"塊"概念2.2 引入"分區"概念2.3 引入"inode"概念…

75Qt窗口_Qt窗口概覽

Qt 窗? 是通過 QMainWindow類 來實現的。 QMainWindow 是?個為??提供主窗?程序的類,繼承? QWidget 類,并且提供了?個預定義的布局。 QMainWindow 包含 ?個菜單欄(menu bar)、多個?具欄(tool bars)、多個浮動窗?&#x…

Appium+python自動化(九)- 定位元素工具

簡介 環境搭建好了,其他方面的知識也準備的差不多了,那么就開始下一步元素定位,元素定位主要介紹如何使用uiautomatorviewer,通過定位到頁面上的元素,然后進行相應的點擊等操作. 此外在介紹另一款工具:Insp…

apipost將token設置為環境變量

右上角 可以新增或者是修改當前的環境 環境變量增加一個token,云端值和本地值可以不用寫 在返回token的接口里設置后執行操作,通常是登錄的接口 右側也有方法提示 //設置環境變量 apt.environment.set("token", response.json.data.token); 在需要傳t…

【Docker 02】Docker 安裝

🌈 一、各版本的平臺支持情況 ? 1. Server 版本 Server 版本的 Docker 就只有個命令行,沒有界面。 Platformx86_64 / amd64arm64 / aarch64arm(32 - bit)s390xCentOs√√Debian√√√Fedora√√Raspbian√RHEL√SLES√Ubuntu√√√√Binaries√√√ …

青少年編程與數學 01-011 系統軟件簡介 08 Windows操作系統

青少年編程與數學 01-011 系統軟件簡介 08 Windows操作系統 1. Windows操作系統的起源與發展1.1 早期版本(1985-1995)1.2 Windows 9x系列(1995-2000)1.3 Windows NT系列(1993-2001)1.4 Windows XP及以后版…

微服務架構的性能優化:鏈路追蹤與可觀測性建設

📋 目錄 引言:微服務性能挑戰微服務架構性能瓶頸分析可觀測性體系概述鏈路追蹤技術深度解析性能監控指標體系日志聚合與分析分布式追蹤系統實現性能優化策略與實踐自動化性能調優故障診斷與根因分析最佳實踐與案例研究未來發展趨勢 引言 隨著微服務架…

ubuntu屏幕復制

在ubnuntu20中沒有辦法正常使用鏡像功能,這里提供一下復制屏幕的操作. 使用xrandr查看所有的顯示器情況 這里我發現自己的電腦沒有辦法直接設置分辨率,但是外接的顯示器可以設置,從命令行來說就是設置: xrandr --output HDMI-0 --mode 1920x1080那怎么樣才能將原生電腦屏幕換…

Android 線性布局中常見的沖突屬性總結

1. gravity vs layout_gravity 沖突原因:兩者作用對象不同,混用會導致行為異常。 區別: android:gravity:父容器的屬性,控制子元素在容器內的對齊方式。android:layout_gravity:子元素的屬性,控…