TCP為什么要三次握手?

TCP三次握手協議是為了在不可靠的互聯網環境中可靠地建立起一個連接,三次握手可以確保兩端的發送和接收能力都是正常的。
那么,為什么是三次而不是二次或四次握手呢?

為什么不是二次握手?

如果是二次握手,即客戶端發送一個SYN到服務器,服務器回復一個SYN-ACK給客戶端,此時就建立連接。

這種情況下,如果第一個SYN請求在網絡中延遲了,并且客戶端重新發送了SYN后建立了連接,那么當延遲的SYN請求到達服務器后,服務器會認為是新的連接請求,而此時客戶端不會理會服務器的回應,導致服務器一直等待,浪費資源。

為什么不是四次握手?

四次握手會增加額外的延遲和復雜性,并且第四個握手并沒有提供三次握手已經解決的問題的任何額外保證。

三次握手已經能夠確認雙方的發送和接收能力都是正常的,進一步的確認只會增加一次往返時間,降低建立連接的效率。

三次握手建立連接的過程:

  1. 客戶端發送SYN:客戶端選擇一個隨機的序列號x發送一個SYN報文,并進入SYN_SENT狀態。

  2. 服務器發送SYN-ACK):服務器收到SYN報文,選擇自己的序列號y,并發送一個SYN-ACK報文,服務器進入SYN_RCVD狀態。

  3. 客戶端發送ACK:客戶端收到SYN-ACK報文后,會發送一個ACK報文,然后進入ESTABLISHED狀態。

&nbsp

數據傳輸結束之后的四次揮手:

TCP的連接終止則需要四次揮手,這是因為TCP連接是全雙工的,即通信雙方都可以同時發送和接收信息。終止連接時,每個方向都需要單獨關閉,所以就需要四次揮手。

  1. 客戶端發送FIN:客戶端決定數據發送完畢后,發送一個FIN報文。

  2. 服務器ACK:服務器收到這個FIN報文,發送一個ACK報文確認,并進入CLOSE_WAIT狀態。

  3. 服務器發送FIN:服務器準備好關閉連接時,發送一個FIN報文。

  4. 客戶端ACK:客戶端收到FIN后,發送一個ACK報文,然后進入TIME_WAIT狀態。經過一段時間后確保服務器收到ACK報文之后,客戶端關閉連接。

&nbsp

生活中的例子:

可以將三次握手比作電話通話。當你撥打一個電話號碼時,對方接聽(第一次握手),你們開始互相問候確認對方能聽到(第二次握手),然后你們開始對話(第三次握手)。
如果只問候一次,你可能不確定對方是否真的聽到你;如果問候多次,就顯得冗余和不效率。

通話結束后,你說“再見”掛斷電話(第一次揮手),對方說“再見”后也掛斷(第二次揮手),這樣確保了雙方都明白通話結束。

在電話通話快結束的時候:

你先說“你還什么別的嗎,沒有我就要掛了”(第一次揮手),等待對方回應,相當于發送了FIN包。

對方回應“等我想想還有什么”(第二次揮手),相當于對方發送了ACK包,但對方可能還有點兒事要處理,所以通話還未立刻結束。

過了一會兒,對方確認說“好了,我也沒話了,那掛了”(第三次揮手),這時候對方發送了FIN包。

你回應“知道了,掛了”(第四次揮手),對應發送ACK包,之后雙方都可以掛斷電話,結束通話。

求一鍵三連:點贊、分享、收藏

點贊對我真的非常重要!在線求贊,加個關注我會非常感激!@小鄭說編程

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

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

相關文章

網絡編程 io_uring

io_uring 1、概述 io_uring是Linux(內核版本在5.1以后)在2019年加入到內核中的一種新型的異步I/O模型; io_uring使用共享內存,解決高IOPS場景中的用戶態和內核態的切換過程,減少系統調用;用戶可以直接向…

vue + cesium初始化地圖 + 鼠標經過地圖(點、線等其他實體)樣式

vue cesium初始化地圖 鼠標經過地圖(點、線等其他實體)樣式 export function initMap(mapViewer) {Cesium.Ion.defaultAccessToken "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI0OTUzOGJhMy1iNzVjLTQwZjItYWYyNy03YjA4MjM0YWE2MWMiLCJpZ…

Unity(第二十二部)官方的反向動力學一般使用商城的IK插件,這個用的不多

反向動力學(Inverse Kinematic,簡稱IK)是一種通過子節點帶動父節點運動的方法。 正向動力學 在骨骼動畫中,大多數動畫是通過將骨架中的關節角度旋轉到預定值來生成的,子關節的位置根據父關節的旋轉而改變,這…

編寫腳本一鍵安裝rsyslog

腳本分解 環境檢測部分 檢查操作系統 #!/bin/bash# 檢查是否為 Debian 類型 if [ -f /etc/debian_version ]; thenecho "當前操作系統是 Debian 類型"SYSLOG_SERVICE"rsyslog"INSTALL_COMMAND"apt-get install -y"CONFIG_FILE"/etc/rsys…

Vmware esxi虛擬主機狀態無效,無法注銷重啟等操作修復解決

問題 裝有ESXI系統的服務器在強制關機啟動后,顯示虛擬機狀態是無效的,并且無法進行任何操作。 解決辦法 對出問題的虛擬機重新注冊 1、開啟esxi系統的ssh功能 2、取消注冊出問題的虛擬機 找到問題的虛擬機 [rootlocalhost:~] vim-cmd vmsvc/getal…

燒腦問題解決辦法:如何選擇一款合適自己的手機流量卡

現在社會人們越來越離不開手機了,手機給我們生活帶來了翻天覆地的變化,手機需要最多的就是流量了,所以選擇一款合適自己的手機流量卡就顯得尤為重要了,今天小編就給大家來分享一下我的經驗,希望對大家能有幫助&#xf…

python基礎-基本數據類型深入-2.1

目錄 元組 什么是元組(tuple) 元組練習-1 元組的基本操作 元組常用內建函數 列表和元組的區別與總結 元組練習-2 元組練習-3 元組 什么是元組(tuple) 與列表(list)一樣,元組&#xff0…

【Web安全靶場】sqli-labs-master 54-65 Challenges 與62關二分法和like模糊搜索

sqli-labs-master 54-65 Challenges 其他關卡和靶場見專欄… 文章目錄 sqli-labs-master 54-65 Challenges第五十四關-聯合注入第五十五關-聯合注入第五十六關-聯合注入第五十七關-聯合注入第五十八關-報錯注入第五十九關-報錯注入第六十關-報錯注入第六十一關-報錯注入第六十…

grid的刪除

/u01/11.2.0/grid 為 grid 用戶的安裝主目錄 1、刪除 crs 配置信息 root: cd /u01/11.2.0/grid/crs/install perl rootcrs.pl -deconfig -force 2、刪除 crs 配置信息,并卸載軟件 cd /u01/11.2.0/grid/deinstall ./deinstall grid user: ./deinstall -home /…

Mysql與StarRocks語法上的不同

🐓 序言 StarRocks 是新一代極速全場景 MPP (Massively Parallel Processing) 數據庫。StarRocks 的愿景是能夠讓用戶的數據分析變得更加簡單和敏捷。用戶無需經過復雜的預處理,可以用StarRocks 來支持多種數據分析場景的極速分析。 🐓 語法…

嵌入式驅動學習第一周——linux的休眠與喚醒

前言 本文介紹進程的休眠與喚醒。 嵌入式驅動學習專欄將詳細記錄博主學習驅動的詳細過程,未來預計四個月將高強度更新本專欄,喜歡的可以關注本博主并訂閱本專欄,一起討論一起學習。現在關注就是老粉啦! 行文目錄 前言1. 阻塞和非阻…

第二節 數學知識補充

一、線性代數 向量的 L 2 L_2 L2?范數(Euclidean范數/Frobenius范數)&矩陣的元素形式范數 向量的 L 2 L_2 L2?范數: ∣ ∣ x ∣ ∣ 2 ( ∣ x 1 ∣ 2 ? ∣ x m ∣ 2 ) 1 2 ||x||_2(|x_1|^2\cdots|x_m|^2)^{\frac12} ∣∣x∣∣2?(∣…

Verilog參數、Verilog參數和屬性沖突、整數處理

Verilog參數 Verilog參數執行以下操作: ?允許您創建易于重用和擴展的參數化代碼。 ?使代碼更可讀、更緊湊、更易于維護。 ?將此類功能描述為: ○ 總線尺寸 ○ 建模設計單元中某些重復元素的數量 ?是常數。對于參數化模塊的每個實例化&#xf…

電腦桌面便簽哪個好,好用的電腦桌面便簽推薦

在如今信息爆炸的時代,人們的工作和生活節奏越來越快,記事和備忘變得尤為重要。而電腦桌面便簽作為一種方便快捷的記錄工具,備受廣大用戶青睞。那么,電腦桌面便簽哪個好,哪個更加出色呢? 作為一名人事專員…

CryoEM - 使用 cryoSPARC 基于單顆粒圖像從頭重構蛋白質三維結構

歡迎關注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/136384544 基于冷凍電鏡單顆粒圖像重構蛋白質三維結構,利用冷凍電鏡技術測定生物大分子結構的方法。原理是從冷凍電鏡獲得大量同一種蛋白質分子的二維投影圖…

【數據結構】實現隊列

大家好,我是蘇貝,本篇博客帶大家了解隊列,如果你覺得我寫的還不錯的話,可以給我一個贊👍嗎,感謝?? 目錄 一. 隊列的概念及結構二. 隊列的實現隊列的結構體初始化銷毀隊尾插入隊頭刪除顯示第一個節點的值…

【Java程序員面試專欄 算法思維】六 高頻面試算法題:動態規劃

一輪的算法訓練完成后,對相關的題目有了一個初步理解了,接下來進行專題訓練,以下這些題目就是匯總的高頻題目,本篇主要聊聊回溯算法,主要就是排列組合問題,所以放到一篇Blog中集中練習 題目關鍵字解題思路時間空間零錢兌換動態規劃+雙重循環dp[i]表示兌換金額為i元的最少…

從0開始學習NEON(0)

1、前言 ? 最近在學習NEON指令集,主要學習"單指令流,多數據流"的編程方式,在這之前主要是針對cuda編程進行學習。最近的一部分工作轉移到了arm主板上,接觸到了 ncnn這個開源項目,不得不佩服nihui的強大。在…

C# 線性插值

線性插值是一種常用的插值算法,適用于許多實際場景。 傳感器數據處理:在傳感器數據處理中,可能會出現數據點不連續或不均勻的情況。使用線性插值可以根據已知的數據點來估算在兩個數據點之間的數值,從而填補數據中的缺失或不連續之…

iOS消息轉發流程

當向Objc對象發送消息時,如果找到對象對應的方法,就會進入消息轉發流程,給開發者提供一些最后的機會處理消息無法發送問題,以免出現程序崩潰。 1. 回調對象的resolveInstanceMethod方法,在這個方法中,允許開…