TCP 連接的“三次握手”與“四次揮手”

目錄

什么是“三次握手” “四次揮手”?

三個標記位?

三次握手?

四次揮手?

為什么握手三次,揮手需要四次?

為什么要等2MSL?


什么是“三次握手” “四次揮手”?

三次握手(Three-way Handshake):其實就是指建立一個TCP連接時,需要客戶端和服務器總共發送3個包。進行三次握手的主要作用就是為了確認雙方的接收能力和發送能力是否正常、指定自己的初始化序列號為后面的可靠性傳送做準備。

四次揮手(Four-way handshake):TCP 連接的拆除需要發送四個包,因此稱為四次揮手。

三個標記位?

SYN(Synchronize):用于建立連接的初始握手。發送方發送一個SYN報文段給接收方,請求建立連接。

ACK(Acknowledgement):用于確認數據的傳輸。當成功接收到數據后,接收方發送一個帶有ACK標記的報文段回復發送方,確認已經收到了數據。?

FIN(Finish):用于關閉連接。當發送方發送完所有數據后,會發送一個帶有FIN標記的報文段,請求關閉連接。? 接收方在收到FIN報文段后,發送一個帶有ACK標記的報文段進行確認,并使用一個定時器在一段時間后關閉連接。

剛開始客戶端處于 Closed 的狀態,服務端處于 Listen 狀態。?

三次握手?

第一次握手:客戶端發送網絡包,服務端收到了。
這樣服務端就能得出結論:客戶端的發送能力、服務端的接收能力是正常的。
第二次握手:服務端發包,客戶端收到了。
這樣客戶端就能得出結論:服務端的接收、發送能力,客戶端的接收、發送能力是正常的。不過此時服務器并不能確認客戶端的接收能力是否正常。
第三次握手:客戶端發包,服務端收到了。
這樣服務端就能得出結論:客戶端的接收、發送能力正常,服務器自己的發送、接收能力也正常。?

? ? ? ? ?到此,三次握手的過程就算結束了。最后,當服務器收到客戶端的 ACK 報文之后,也處于 ESTABLISHED 狀態。此時,連接就已經建立成功了。?

四次揮手?

第一次揮手:客戶端向服務器發送一個FIN(結束)請求,表示客戶端不再發送數據。此時客戶端處于FIN_WAIT_1狀態。
第二次揮手:服務器收到請求后,回復客戶端一個ACK響應確認,但這個響應可能還攜帶有未傳輸完的數據。此時服務器處于CLOSE_WAIT狀態。注意,在第三次揮手之前,數據還是可以從服務器傳送到客戶端的。
第三次揮手:服務器完成數據傳輸后,向客戶端發送一個FIN請求,表示服務器也沒有數據要發送了。此時服務器狀態變為LAST_ACK狀態。
第四次揮手:客戶端收到服務器的請求后,回復服務器一個ACK響應確認。此時客戶端處于TIME_WAIT狀態,需要經過一段時間確保服務器收到自己的應答報文后,才會進入CLOSED狀態。


?

? ? ? ? 到這里,四次揮手就已經結束了。最后,服務器收到ACK報文后,就關閉連接,也處于CLOSED狀態了。

為什么握手三次,揮手需要四次?

? ? ? ? 因為當握手時,服務端收到客戶端的SYN連接請求報文后,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當服務端收到FIN報文時,很可能并不會立即關閉,所以只能先回復一個ACK報文,告訴客戶端,“你發的FIN報文我收到了”。只有等到我服務端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送。所以需要四次揮手。

為什么要等2MSL?

? ? ? ?為了保證客戶端發送的最后一個ACK報文段能夠到達服務器。因為這個ACK有可能丟失,從而導致處在LAST-ACK狀態的服務器收不到對FIN-ACK的確認報文。服務器會超時重傳這個FIN-ACK,接著客戶端再重傳一次確認,重新啟動時間等待計時器。最后客戶端和服務器都能正常的關閉。假設客戶端不等待2MSL,而是在發送完ACK之后直接釋放關閉,一但這個ACK丟失的話,服務器就無法正常的進入關閉連接狀態。

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

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

相關文章

力扣刷題 -- 206.反轉鏈表

題目: 方法一:創建新鏈表,遍歷舊鏈表,進行頭插 代碼實現: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struc…

Vue 中的過渡效果與響應式數據:transition、transitiongroup、reactive 和 ref 詳解

在 Vue 開發過程中,為應用添加過渡效果和處理響應式數據是提升用戶體驗和實現動態交互的關鍵。 一、transition:元素的單元素過渡效果 transition是 Vue 提供的內置組件,專門用于為單個元素或組件添加過渡動畫。它會在元素插入、更新或移除…

文章七《深度學習調優與超參數優化》

🚀 文章7:深度學習調優與超參數優化——你的AI模型需要一場"整容手術" 一、模型調優核心策略:像調整游戲裝備一樣優化模型 1. 學習率調整:掌控訓練的"油門踏板" 比喻:把模型訓練想象成賽車游戲&…

Python裝飾器執行時機詳解:模塊加載時的魔法

裝飾器執行的基本原理 Python裝飾器在程序運行過程中遵循獨特的執行邏輯,其核心特性體現在模塊加載階段的即時執行。通過示例7-2的registration.py 模塊,我們可以清晰觀察到裝飾器與函數執行的時序差異。 registry []def register(func):print(runnin…

基于隨機森林的糖尿病預測模型研究應用(python)

基于隨機森林的糖尿病預測模型研究應用 1、導入糖尿病數據集 In [14]: import pandas as pd import seaborn as sns import numpy as np import matplotlib.pyplot as plt datapd.read_csv(./糖尿病數據集.csv,encoding"gbk") data.head()#查看前五行數據Out[14]:…

【Web應用服務器_Tomcat】二、Tomcat 核心配置與集群搭建

在企業級 Java Web 應用的部署場景中,Tomcat 作為主流的 Servlet 容器和 Web 服務器,其核心配置的優化以及集群搭建對于保障應用的高性能、高可用性至關重要。 一、Tomcat 核心配置優化? 1.1 server.xml 配置文件解析? Tomcat 的核心配置文件server…

Linux(文件管理)

文件命名規則 除了字符“/”之外&#xff0c;所以的字符都可以使用&#xff0c;但要注意&#xff0c;在目錄名或文件名中&#xff0c;不建議使用某些特殊字符&#xff0c;如&#xff1a;<、>、?、*等 如果一個文件名中包含了特殊字符&#xff0c;例如空格&#xff0c;那…

Windows服務器部署全攻略:Flask+Vue+MySQL跨平臺項目實戰(pymysql版)

當你的后端(Flask+pymysql,Windows開發)與前端(Vue,Mac開發)需要統一部署到Windows服務器時,通過「IIS反向代理+原生組件適配」方案可實現穩定交互。以下是針對Windows環境的專屬部署指南,解決路徑適配、服務啟動等核心問題。 一、Windows服務器環境準備(必做!) 1…

wpf 輸入框 在輸入時去除水印

wpf ScrollViewer 在輸入數據時去除水印 在WPF&#xff08;Windows Presentation Foundation&#xff09;中&#xff0c;ScrollViewer控件通常用于顯示滾動內容。如果你想在ScrollViewer中使用數據輸入&#xff08;例如文本輸入&#xff09;&#xff0c;并且希望在輸入時去除水…

動態思維——AI與思維模型【91】

一、定義 動態思維思維模型是一種強調在思考問題和分析情況時&#xff0c;充分考慮到事物的變化性、發展性和相互關聯性&#xff0c;不局限于靜態的、孤立的視角&#xff0c;而是以發展變化的眼光看待事物&#xff0c;能夠根據不同時間、環境和條件的變化&#xff0c;靈活調整…

多模態大語言模型arxiv論文略讀(五十五)

MoMA: Multimodal LLM Adapter for Fast Personalized Image Generation ?? 論文標題&#xff1a;MoMA: Multimodal LLM Adapter for Fast Personalized Image Generation ?? 論文作者&#xff1a;Kunpeng Song, Yizhe Zhu, Bingchen Liu, Qing Yan, Ahmed Elgammal, Xiao…

Go-web開發之帖子功能

帖子功能 route.go r.Use(middleware.JWTAuthMiddleware()){r.POST("/post", controller.CreatePostHandler)r.GET("/post/:id", controller.GetPostDetailHandler)}post.go 定義帖子結構 type Post struct {Id int64 json:"id" …

C++ 項目中的多語言字符串管理方案(支持自動提示與動態加載)

&#x1f4ac; C 項目中的多語言字符串管理方案&#xff08;支持自動提示與動態加載&#xff09; 在中大型 C 應用中&#xff0c;我們常常會面臨界面提示文本繁多、需要支持多語言切換的問題。為了解決字符串管理混亂、缺乏自動提示、難以維護等問題&#xff0c;本文將提供一種…

數控滑臺:將制造業推向智能化的關鍵裝備

隨著制造業的不斷發展和智能化進程的加速推進&#xff0c;數控滑臺作為一種關鍵的裝備&#xff0c;在各種工業生產中發揮著越來越重要的作用。數控滑臺不僅提高了生產效率&#xff0c;節約了人力物力資源&#xff0c;還大大降低了生產過程中的錯誤率&#xff0c;保障了產品的質…

【STM32】定時器輸入捕獲

STM32 定時器輸入捕獲功能筆記 一、什么是輸入捕獲&#xff08;Input Capture&#xff09; 輸入捕獲是利用定時器的輸入通道&#xff0c;在檢測到信號電平變化&#xff08;如上升沿或下降沿&#xff09;時&#xff0c;立即將當前計數器的值捕獲并保存到捕獲寄存器&#xff08…

Qt通過QXlsx庫文件寫入到excl文件,讀取excl文件

第一&#xff1a;下載QXlsx庫文件 https://download.csdn.net/download/qq_32663053/90739425 第二&#xff1a;在Qt項目中引入QXlsx庫&#xff0c;需要把QXlsx庫文件放在項目文件夾下 第三&#xff1a;將tableview中的數據存入到excl文件 代碼&#xff1a; void MainWindow…

【KWDB 創作者計劃】一款面向 AIoT 的多模數據庫實戰體驗

一、KWDB&#xff1a;AIoT 時代的數據庫新選擇 KWDB 是由開放原子開源基金會孵化的分布式多模數據庫&#xff0c;專為物聯網、工業互聯網等場景設計。其核心價值在于時序與關系數據融合處理能力&#xff1a; ?多模統一引擎?&#xff1a;單個實例可同時建立時序庫&#xff08…

【教學類-102-22】蝴蝶彩色1——通義萬相“彩色蝴蝶”透明切邊基礎圖片制作(五款板式、批量下載、修圖、透明、切邊)

一、下載圖片 關鍵詞&#xff1a;卡通簡筆畫&#xff0c;白色背景&#xff0c;黑白輪廓線&#xff0c;、鮮艷&#xff0c;彩色&#xff0c;一只蝴蝶&#xff0c;簡單&#xff0c;可愛&#xff0c;矢量圖&#xff0c;大。 簡筆畫 強度1 4:3(長方形適配A4紙&#xff09; 五…

【JAVA】方法定義與重載:JVM方法調用機制(8)

核心知識點詳細解釋 Java方法的定義和使用 在Java中&#xff0c;方法是一段具有特定功能的代碼塊&#xff0c;它可以接受參數并返回一個值。方法的定義包括方法的修飾符、返回類型、方法名、參數列表和方法體。其基本語法如下&#xff1a; 修飾符 返回類型 方法名(參數列表)…

基于STM32的帶恒溫系統智能外賣柜設計

標題:基于STM32的帶恒溫系統智能外賣柜設計 內容:1.摘要 隨著外賣行業的迅速發展&#xff0c;對外賣存放設備的智能化和功能性要求日益提高。本設計的目的是開發一種基于STM32的帶恒溫系統智能外賣柜。方法上&#xff0c;以STM32微控制器為核心&#xff0c;結合溫度傳感器、加…