3.TCP的三次握手和四次揮手

?一、前置知識

? TCP是一種面向連接的、可靠的、基于字節流的傳輸層通信協議。在傳輸數據前通信雙方必須建立連接(所謂連接,是指客戶端和服務端各自保存一份關于對方的信息,比如ip地址,端口號等)。TCP通過三次握手建立一個連接,通過四次揮手釋放一個連接。

? 在了解TCP連接前,先了解TCP報文的頭部結構:

??TCP報文段的頭部結構主要包含以下幾個部分:
1.源端口和目的端口(Source port,Destination port):這兩個字段用來標識發送端和接收端的端口號,占16位。
2.序列號(Sequence number):占32位,用來標識從TCP源端向目的端發送的字節流。當發起方發送數據時,會對這些數據進行標記,確保數據的有序性和完整性。(seq)
3.確認序號(Acknowledgement number):占32位,只有在ACK標志位為1時,這個字段才有效。它表示接收方已經成功接收到的數據的序列號(ack=seq+1)
4.標志位:占6位,包含URG、ACK、PSH、RST、SYN、FIN等標志。其中ACK表示確認序號有效,FIN表示釋放一個連接,SYN表示發起一個新連接。


二、TCP的三次握手

? 三次握手就是通過三次數據包的交換,來確認通信雙方收發數據的能力。

  1. 一開始,客戶端和服務端都處于CLOSE狀態,服務端監聽客戶端的請求,進入LISTEN狀態。
  2. 第一次握手(客戶端發送連接請求):客戶端會向服務端發送一個SYN包,里面包含了客戶端的初始序列號。然后客戶端進入SYN_SENT狀態。
  3. 第二次握手(服務端確認收到了客戶端的連接請求):回復客戶端一個SYN+ACK包,里面包含確認信息(表示收到了客戶端的SYN包)和服務端的初始序列號。然后服務端進入SYN_RCVD(received的縮寫)狀態。
  4. 第三次握手(客戶端收到服務端的確認后,再次向服務端確認):再回復一個ACK包給服務端。然后客戶端進入ESTABLISHED狀態,當服務端接收到這個ACK包后,也進入ESTABLISHED狀態。
  5. 這樣客戶端和服務端之間就建立了一個可靠的連接,可以開始傳輸數據。

三、TCP的四次揮手

  1. 數據傳輸結束后,通信雙方都可以主動發起釋放連接請求,假設由客戶端發起。
  2. 第一次揮手(客戶端發送釋放連接請求):客戶端向服務端發送一個FIN包,并附帶一個序列號。然后,客戶端進入FIN_WAIT1狀態。
  3. 第二次揮手(服務端確認收到了客戶端釋放連接的請求):回復一個ACK包,同時包含一個確認號。然后,服務端進入CLOSE_WAIT狀態(此時服務端還沒準備好釋放連接,可能還有數據要處理),當客戶端收到服務端的這個ACK包后,進入FIN_WAIT2狀態。
  4. 第三次揮手(服務端也已經準備好釋放連接):向客戶端發送一個FIN包,并附帶一個序列號。然后,服務端進入LAST_ACK狀態,表示等待來自客戶端的最后一個ACK包。
  5. 第四次揮手(客戶端確認服務端也已經準備好釋放連接):就回復一個ACK包,但是此時客戶端不會馬上關閉連接,而是進入TIME_WAIT狀態,等待某個固定時間(2MSL,2 Maximum Segment LifeTime,兩倍的最長報文段生命周期),目的是防止這個ACK包丟失,導致服務端沒有收到客戶端關閉連接的確認,沒有關閉連接,就會超時重傳FIN包。那么等待這個固定時間后(即是確保服務端已經正常關閉連接后),客戶端才關閉連接,進入CLOSED狀態。當服務端收到這個ACK包后,就關閉連接,進入CLOSED狀態。
  6. 這樣就成功釋放連接了。

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

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

相關文章

從零開始:C++ String類的模擬實現

文章目錄 引言1.類的基本結構2.構造函數和析構函數3.基本成員函數總結 引言 在C編程中,字符串操作是非常常見且重要的任務。標準庫中的std::string類提供了豐富且強大的功能,使得字符串處理變得相對簡單。然而,對于學習C的開發者來說&#x…

C語言----斐波那契數列(附源代碼)

各位看官們好,當我寫了上一篇博客楊輝三角后,有一些看官叫我講一下斐波那契數列。對于這個大家應該是有了解的。最簡單的規律就是f(n)f(n-2)f(n-1)。就是當前是前兩項之和,然后下標1和0都是1.從第三項開始計算的。那么我們知道規律&#xff0…

位圖(c++)

文章目錄 1.位圖概念2.位圖的實現3.應用(解決整形存在或次數問題)3.1存在問題3.2次數問題 5.搜索的方法對比: 1.位圖概念 和哈希一樣,都是一個表來記錄某個元素的個數或者存在與否;不同的是哈希使用的計算機定義的完整…

旅游卡創業的機會在哪里?

在當今社會,旅游已經成為了人們休閑娛樂的重要方式之一。 隨著經濟的發展和人們生活水平的提高,越來越多的人開始追求更高品質的旅游體驗。因此,旅游卡創業應運而生,為游客提供了更加便捷、實惠的旅游服務。那么,旅游…

群輝部署小雅alist實現視聽盛會

最近群輝搭建起來了,開始整蠱影視庫,之前搞過nastool。這次折騰下小雅alist。 1.下載并安裝 直接在群輝的docker里面下載映像 主要映射下端口和文件夾 #token mytoken.txt 獲取地址:https://alist.nn.ci/zh/guide/drivers/aliyundriv…

Git使用(2):遠程倉庫

一、創建遠程倉庫 登錄碼云Gitee - 基于 Git 的代碼托管和研發協作平臺。 點擊右上角,新建倉庫。 創建完成,復制倉庫地址接下來要使用。 二、將idea項目推送到碼云 首先創建本地倉庫VCS -> Create Git Repository。然后選擇Manage Remotes&#xff0…

服務器是網絡中的重要設備

眾所周知,服務器是網絡中的重要設備,要接受少至幾十人、多至成千上萬人的訪問,因此對服務器具有大數據量的快速吞吐、超強的穩定性、長時間運行等嚴格要求。但是,今天我們了解的是GPU服務器,很明顯,從字面上…

機器學習的目的

機器學習的目的是讓計算機能夠從數據中學習并改善性能,以執行特定的任務而無需明確的編程指令。具體來說,機器學習旨在實現以下幾個主要目標: 1. 預測與泛化: 機器學習的一個主要目標是通過學習數據的模式和特征,從而對…

舊衣回收,整個項目環節詳細拆解

日常舊衣服很多人果斷丟垃圾箱,殊不知這背后隱藏著商機。大把人都在掘金的項目。 舊衣回收,眼下市場覆蓋率才占10%。絕對的藍海,干這種項目成本很低。小到自家的舊衣回收能換小錢,大到開公司做分揀撈利潤。 說到這里&#xff0c…

用友hr軟件統一認證與致遠OA單點登錄身份周期管理怎么做

一、引言 隨著企業信息化建設的深入,各類管理軟件如用友HR、致遠OA等已經成為事業單位日常運營不可或缺的工具。用友HR軟件以其強大的人力資源管理功能,幫助企事業單位實現員工信息的集中管理;而致遠OA則以其便捷的辦公流程管理,…

機器學習概念:一些基本概念

目錄 數據集 (Dataset):用于訓練和評估模型的數據集合。 特征 (Feature):描述數據的屬性或變量,用于訓練模型。 標簽 (Label):在監督學習中,與輸入數據相關聯的輸出結果。 模型 (Model):對數據的某種假…

springcloud簡單了解及上手

springcloud微服務框架簡單上手 文章目錄 springcloud微服務框架簡單上手一、SpringCloud簡單介紹1.1 單體架構1.2 分布式架構1.3 微服務 二、SpringCloud與SpringBoot的版本對應關系2022.x 分支2021.x 分支2.2.x 分支 三、Nacos注冊中心3.1 認識和安裝Nacos3.2 配置Nacos3.3 n…

C++ 并發編程指南(11)原子操作 | 11.6、計算機內存結構

文章目錄 一、計算機內存結構1、內存的基本組成2、內存的類型3、內存的結構層次4、CPU架構5、局部性原理6、總結 前言 在探討計算機的運行效率和數據處理能力時,內存結構無疑是一個至關重要的部分。內存,作為計算機系統中的關鍵組件,承擔著存…

vue從入門到精通(一):Vue模板語法

一,模板語法 Vue 使用一種基于 HTML 的模板語法,使我們能夠聲明式地將其組件實例的數據綁定到呈現的 DOM 上。所有的Vue模板都是語法層面合法的 HTML,可以被符合規范的瀏覽器和 HTML 解析器解析。 Vue模板語法有2大類: 插值語法: 功能:用于解…

請介紹下H264的多參考幀技術及其應用場景,并請說明下為什么要有多參考幀?

H.264(也稱為H.264/AVC)的多參考幀機制是其編碼效率和質量提升的關鍵部分。這個機制允許編碼器在編碼當前幀時,參考多個之前已編碼的幀。這種多參考幀的方法為編碼器提供了更多的選擇,使其能夠更準確地預測當前幀的內容&#xff0…

【保姆級介紹自動化的講解】

🌈個人主頁: 程序員不想敲代碼啊 🏆CSDN優質創作者,CSDN實力新星,CSDN博客專家 👍點贊?評論?收藏 🤝希望本文對您有所裨益,如有不足之處,歡迎在評論區提出指正,讓我們共…

SCP‘s Story

越過“第二夜”的星星,越過“邁克爾連續線”和“禁運線”,在“煤炭之路”最遠的一站,有一顆眼淚。這不是織物或紙上的撕裂,而是現實中的撕裂,是物理定律和常識失效的地方。 有些人稱之為黑洞,銀河系中最大…

【C語言】4.C語言數組(2)

文章目錄 6. 二維數組的創建6.1 ?維數組的概念6.2 ?維數組的創建 7. 二維數組的初始化7.1 不完全初始化7.2 完全初始化7.3 按照?初始化7.4 初始化時省略?,但是不能省略列 8. 二維數組的使用8.1 ?維數組的下標8.2 ?維數組的輸?和輸出 9. 二維數組在內存中的存…

利用一段代碼輕松繞過PHP授權系統

利用一段代碼輕松繞過PHP授權系統 第一步:首先你需要改名全局文件 比如說全局文件 common.php,那么 你將他改為core.php 第二步:創建文件 創建一個文件,和改名前的全局文件名稱一樣,然后把以下代碼復制進去就OK了 …

行列視在做報表之前需要準備哪些前期工作

行列視是一款功能強大的生產數據分析和報表生成工具,使用它進行報表制作之前,確實需要一些前期準備工作,以確保報表的準確性和有效性。以下是進行行列視報表制作前需要準備的一些關鍵步驟: 1.明確報表需求: - 確定報表…