網絡:TCP三次握手、四次揮手

目錄

深刻理解三次握手

深刻理解四次揮手


深刻理解三次握手

  • 三次握手時,如果最后一個ACK包,服務器沒有收到,此時:

客戶端:認為已經建立鏈接

服務器:認為沒有建立鏈接,還在超時等待。

而此時客戶端已經開始發送數據TCP包,則服務器收到數據TCP包后丟棄,發送RST(reset)包,提示客戶端請重新建立鏈接,這個行為叫做重置。

客戶端收到RST包,關閉已經建立的鏈接,重新做三次握手。

  • 為什么建立鏈接是三次握手

如果客戶端發起一次請求,服務器就建立鏈接,這樣服務器很容易遭受攻擊,因為服務器維護鏈接是有成本的,而如果客戶端無窮無盡的發送包,服務器認為這些包都可以建立鏈接,大量的維護成本足以讓服務器死機。

客戶端發送大量請求鏈接的SYN包,稱為SYN洪水攻擊,特點是只需要一臺客戶端就可以做攻擊。

而三次握手,雖然也會遭受到SYN洪水攻擊,但相比一次、兩次握手,三次握手更加可靠許多,因為服務器要求客戶端發送ACK包,收到ACK包后,服務器才會建立鏈接,三次握手下,一定是客戶端先建立鏈接,再是服務器建立鏈接,這種關系可以保證服務器不會被一臺主機做SYN洪水攻擊。

  • 為什么通信前要三次握手?

1.需要保證網絡是通暢的,仔細觀察,在三次握手中,雙方都進行了一次收發操作,確認客戶端、服務器都是全雙工的。

2.確保雙方的TCP協議棧是健康的,在一次建立鏈接的過程中,客戶端發送SYN包,等待ACK,服務端也是發送SYN包,等待ACK,只不過服務器發送的ACK包做了捎帶應答,三次握手本質是四次握手捎帶成三次握手。

深刻理解四次揮手

  • 四次揮手

當客戶端不想再發送數據了,就調用close接口,此時TCP協議棧刷空發送緩沖區,發送FIN報頭,并接收ACK報頭。

  • 如果服務器在收到FIN報頭后,也準備關閉鏈接,則ACK+FIN做捎帶應答,只需三次揮手即可。
  • 客戶端在發送FIN報頭后,就已經調用close,那么當服務器發送FIN報頭后,客戶端是怎么接收的呢

1.TCP協議棧可以調用shutdown接口,使套接字做半雙工模式,可以只關閉發送模式,保留接收。

2.實際上,調用close后還需要等待應答,這個tcp套接字的狀態為TIME_WAIT,等待FIN報頭,響應后才會關閉鏈接。

  • 四次揮手的狀態

主要談TIME_WAIT,等待的時間為2個MSL,發起方一定會進入TIME_WAIT,發起方是率性完成四次揮手的。

  • 四次揮手的設計中,為什么要TIME_WAIT

1.客戶端發起FIN,收到ACK,其實已經可以關閉鏈接了,但在實際網絡中,往往存在一些遺留的歷史包的問題,這些包有極小的概率會影響新鏈接的通信,而客戶端進入TIME_WAIT,可能會等到那些遺留的包,避免歷史包的影響。

2.客戶端為什么等:在前兩次揮手中,如果包出錯了,可以重發補救,因為沒有任何一方關閉了鏈接。而在后兩次揮手中,客戶端如果已經關閉鏈接了,無法保證服務器能收到ACK響應。在客戶端TIME_WAIT的過程中,可以等到服務器的FIN包,保證服務器也完成四次揮手。

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

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

相關文章

MySQL 實戰 45 講 筆記 ----來源《極客時間》

01 | 基礎架構:一條SQL查詢語句是如何執行的? 1. MySQL 可以分為 Server層 和 存儲引擎層 兩部分。Server 層包括連接器、查詢緩存、分析器、優化器、執行器等。存儲引擎層支持 InnoDB、MyISAM等. (1) 連接器:管理連接,權限認證…

nextjs+supabase vercel部署失敗

1.不能含有<any> 改成unknown或者增加類(如圖) 2.檢查vecel是否配置環境變量&#xff08;即supabase的url和anon-key&#xff09;

數據庫Mysql_聯合查詢

或許自己的不完美才是最完美的地方&#xff0c;那些讓自己感到不安的瑕疵&#xff0c;最終都會變成自己的特色。 ----------陳長生. 1.介紹 1.1.為什么要進行聯合查詢 在數據設計的時候&#xff0c;由于范式的需求&#xff0c;會被分為多個表&#xff0c;但是當我們要查詢數據…

(37)VTK C++開發示例 ---紋理地球

文章目錄 1. 概述2. CMake鏈接VTK3. main.cpp文件4. 演示效果 更多精彩內容&#x1f449;內容導航 &#x1f448;&#x1f449;VTK開發 &#x1f448; 1. 概述 將圖片紋理貼到球體上&#xff0c;實現3D地球的效果。 該代碼使用了 VTK (Visualization Toolkit) 庫來創建一個紋理…

VMware-centOS7安裝redis分布式集群

1.部署redis包 1.1 在usr/local文件夾里創建文件夾 mkdir software 1.2 進入文件夾 cd /usr/local/software/ 下載redis wget http://download.redis.io/releases/redis-6.2.6.tar.gz解壓 tar zxvf redis-6.2.6.tar.gz重命名文件夾 mv redis-6.2.6 redis安裝gcc編譯器 yum i…

【RocketMQ Broker 相關源碼】- broker 啟動源碼(2)

文章目錄 1. 前言2. 創建 DefaultMessageStore3. DefaultMessageStore#load3.1 CommitLog#load3.2 loadConsumeQueue 加載 ConsumeQueue 文件3.3 創建 StoreCheckpoint3.4 indexService.load 加載 IndexFile 文件3.5 recover 文件恢復3.6 延時消息服務加載 4. registerProcesso…

認識含鹽褶皺和沖斷帶中的前造山運動蒸發巖變形

主要觀察結果的示意圖模型&#xff0c;并提出了三疊紀前造山蒸發巖變形的演化模型。&#xff08;a&#xff09; 蒸發巖的初始平緩隆起&#xff0c;在鹽枕和鹽背斜頂部有滑塌褶皺和同沉積伸展斷層。&#xff08;b&#xff09; 底辟形成&#xff0c;主動刺穿和拖動折疊長底辟&…

數據庫MySQL學習——day8(復習與鞏固基礎知識)

文章目錄 1. 數據庫基礎概念復習2. 常用SQL命令復習2.1 SELECT 查詢數據2.2 INSERT 插入數據2.3 UPDATE 更新數據2.4 DELETE 刪除數據 3. 表操作復習3.1 創建表3.2 修改表3.3 刪除表 4. 實踐任務4.1 創建樣例數據庫和表4.2 插入和更新數據4.3 使用WHERE、ORDER BY、LIMIT進行查…

TS 字面量類型

str是string類型l str2是常量&#xff0c;類型是字面量類型 用途&#xff1a;配合聯合類型確定更嚴謹精確的可選值利恩

【PostgreSQL數據分析實戰:從數據清洗到可視化全流程】1.3 客戶端工具選擇(psql/PGAdmin/DBeaver)

?? 點擊關注不迷路 ?? 點擊關注不迷路 ?? 點擊關注不迷路 文章大綱 1.3 客戶端工具選擇(psql/PGAdmin/DBeaver)1.3.1 工具定位與適用場景1.3.2 深度解析三大工具1.3.2.1 psql:命令行的終極掌控核心特性基礎操作示例優缺點分析1.3.2.2 PGAdmin:PostgreSQL 專屬管理平臺…

2023年第十四屆藍橋杯省賽B組Java題解【 簡潔易懂】

2023年第十四屆藍橋杯省賽B組Java 題解 比賽整體情況說明 第十四屆藍橋杯大賽省賽B組Java賽道共有10道題目&#xff0c;題型分布如下&#xff1a; 題目類型題量難度分布考察重點結果填空題53簡單 2中等基礎算法、數學邏輯、字符串處理編程大題52中等 3困難動態規劃、圖論、…

深度學習中的數據增強:提升食物圖像分類模型性能的關鍵策略

深度學習中的數據增強&#xff1a;提升食物圖像分類模型性能的關鍵策略 在深度學習領域&#xff0c;數據是模型訓練的基石&#xff0c;數據的數量和質量直接影響著模型的性能表現。然而&#xff0c;在實際項目中&#xff0c;獲取大量高質量的數據往往面臨諸多困難&#xff0c;…

jakarta.mail(javax.mail)包中關于SMTP協議支持的屬性參數配置

一、程序屬性配置 NO.NameTypeDescription1mail.smtp.userStringSMTP的默認用戶名。2mail.smtp.hostString要連接的SMTP服務器。3mail.smtp.portint如果 connect()方法未明確指定一個&#xff0c;則要連接的SMTP服務器端口。默認為25。4mail.smtp.connectiontimeoutint套接字連…

《解鎖SCSS算術運算:構建靈動樣式的奧秘》

SCSS作為CSS預處理器&#xff0c;算術運算功能猶如一顆璀璨明珠&#xff0c;賦予我們動態計算樣式屬性值的強大能力&#xff0c;讓網頁樣式不再是一成不變的刻板呈現&#xff0c;而是能夠根據各種條件和需求靈動變化。 在SCSS的世界里&#xff0c;算術運算絕非孤立的存在&…

Java 入門篇

文章目錄 一、注釋1、單行注釋2、多行注釋3、文檔注釋 二、字面量注意 三、變量四、標識符 一、注釋 1、單行注釋 // 同 C992、多行注釋 /* 同 C89和 C99 等 */3、文檔注釋 /** 文檔注釋&#xff0c;其內容是可以提取到一個程序說明文檔中去的*/二、字面量 同 C 常量 注意…

PowerShell安裝Chocolatey

文章目錄 環境背景安裝參考 環境 Windows 11 專業版PowerShell 7.5.1.NET Framework 4.0Chocolatey v2.4.3 背景 Chocolatey是Windows上的包管理工具&#xff0c;有點類似于Linux的 yum 和 apt 命令。比如&#xff0c;PowerShell里默認沒有 grep 命令&#xff0c;則可以通過…

將Airtable導入NocoDB

將Airtable導入NocoDB 0. 前提條件1. 詳細步驟 NocoDB提供了一種簡化流程&#xff0c;可在幾分鐘內將您的Airtable數據庫無縫轉移到各種數據庫管理系統&#xff0c;包括MySQL、Postgres和SQLite。此功能特別適合希望將Airtable數據庫遷移到更強大且可擴展的數據庫管理系統中的用…

微軟發布了最新的開源推理模型套件“Phi-4-Reasoning

每周跟蹤AI熱點新聞動向和震撼發展 想要探索生成式人工智能的前沿進展嗎&#xff1f;訂閱我們的簡報&#xff0c;深入解析最新的技術突破、實際應用案例和未來的趨勢。與全球數同行一同&#xff0c;從行業內部的深度分析和實用指南中受益。不要錯過這個機會&#xff0c;成為AI領…

Elasticsearch入門速通01:核心概念與選型指南

一、Elasticsearch 是什么&#xff1f; 一句話定義&#xff1a; 開源分布式搜索引擎&#xff0c;擅長處理海量數據的實時存儲、搜索與分析&#xff0c;是ELK技術棧&#xff08;ElasticsearchKibanaBeatsLogstash&#xff09;的核心組件。 核心能力&#xff1a; 近實時搜索&…

【angular19】入門基礎教程(三):關于angular里面的響應式數據入門使用

三個框架&#xff0c;都有響應式數據的概念。在angular里面有專門的叫法&#xff0c;響應式數據叫信號,英文名signal。其他兩個框架式沒有專門的名字的&#xff0c;統稱為動態數據。這點可以說&#xff0c;angular還是太細了&#xff0c;細節值得點贊&#xff01;&#xff01; …