TCP 三次握手四次揮手

目錄

TCP 三次握手

1. SYN (Synchronize:同步)

2. SYN-ACK (Synchronize + Acknowledge:同步+確認)

3. ACK (Acknowledge:確認)

為什么是三次而不是兩次或四次?

三次握手的作用

TCP 四次揮手

第一次揮手:客戶端發送 FIN

第二次揮手:服務器發送 ACK 確認

第三次揮手:服務器發送 FIN

第四次揮手:客戶端發送 ACK 確認

為什么需要四次揮手?


TCP 三次握手

TCP三次握手(Three-Way Handshake) 是建立TCP連接時,客戶端和服務器之間為了保證可靠的數據傳輸而進行的三次消息交換。 三次握手的目的是通過交換序列號,確認通信雙方都準備好建立連接,并且雙方都能進行數據的發送和接收。
注意: 三次握手只在TCP連接建立時進行一次,而不是在每次發送消息時都進行。因為 TCP是一個 面向連接的協議,這意味著在發送數據之前,客戶端和服務器 需要建立一個持久的連接。這個連接在數據傳輸過程中保持開放,直到完成數據交換或者關閉連接。 三次握手是TCP連接建立的過程,一旦連接建立,客戶端和服務器之間就可以進行多次數據傳輸,直到連接關閉。

1. SYN (Synchronize:同步)

  • 客戶端向服務器發送一個TCP包,SYN(同步)標志位為1,表示請求建立連接,并告訴服務器自己初始的序列號(seq。seq是一個隨機值,這個序列號用于標識數據包的順序,并且確保數據在傳輸過程中能夠按照正確的順序重組。使用隨機的初始序列號可以防止一些網絡攻擊(比如猜測攻擊),防止攻擊者能夠偽造合法的TCP連接)。
  • 該包的目的就是告訴服務器:客戶端準備建立連接,同時也告訴服務器客戶端準備好數據流的初始序列號。
客戶端 → 服務器
  • SYN = 1
  • 初始序列號:seq = x

2. SYN-ACK (Synchronize + Acknowledge:同步+確認)

  • 服務器收到客戶端的SYN包后,知道客戶端要建立連接,于是服務器向客戶端發送一個SYN-ACK包,表示服務器同意建立連接,并且確認客戶端的序列號。
  • SYN-ACK包包含兩個標志位:
    • SYN = 1:表示服務器同意連接。
    • ACK = 1:表示確認收到了客戶端的請求包。
  • 同時,服務器會選定自己的序列號seq(如:y)并告知客戶端,之后會根據這個序列號繼續數據傳輸。
服務器 → 客戶端
  • SYN = 1
  • ACK = 1
  • 確認客戶端序列號:ack = x + 1
  • 初始序列號:seq = y
(SYN 是表示服務器同意與客戶端建立連接,并且會告訴客戶端服務器的初始序列號。ACK是表示確認收到客戶端的 SYN請求包,即確認客戶端發出的序列號 x,并且ACK中的確認號應是客戶端的序列號 x + 1。)

3. ACK (Acknowledge:確認)

  • 客戶端收到服務器的SYN-ACK包后,確認服務器同意建立連接,并向服務器發送一個ACK包。此包用于確認服務器的 SYN包。
  • 客戶端在該包中會將序列號ack設置為服務器的初始序列號加1(即:ack = y + 1),同時客戶端的序列號遞增為x + 1。
客戶端 → 服務器
  • ACK = 1
  • 確認服務器序列號:ack = y + 1
  • 序列號:seq = x + 1
完成三次握手后,建立TCP連接,客戶端和服務器可以開始正常的數據傳輸。

為什么是三次而不是兩次或四次?

兩次握手不足以保證服務器是否收到客戶端的請求。如果客戶端發送了SYN包,但服務器沒有響應,客戶端就無法知道服務器是否準備好接收連接。四次握手會增加額外的開銷和延遲,而實際情況下三次握手就足夠保證雙方都準備好進行通信了。

三次握手的作用

  • 保證雙方準備好通信:通過交換序列號,客戶端和服務器可以確保彼此都準備好接收和發送數據。
  • 確認雙方的接收能力:三次握手確保連接的兩端都能夠進行數據的發送和接收。
  • 避免無效連接:如果客戶端或服務器沒有準備好,就不會建立連接,從而避免了無效連接的浪費。

TCP 四次揮手

四次揮手是 TCP 連接關閉的過程,確保客戶端和服務器都能獨立且正確地關閉各自的連接。客戶端和服務器在關閉連接時需要分別發送 FIN 包,并且每個 FIN(Finish)包都需要對方的 ACK 確認,以保證雙方都準備好關閉連接。

第一次揮手:客戶端發送 FIN

客戶端 -> 服務器:FIN(Finish)客戶端向服務器發送一個 FIN 包(帶有 FIN 標志),表示客戶端沒有數據要發送了,但仍然能夠接收來自服務器的數據。此時客戶端進入 FIN_WAIT_1 狀態。

第二次揮手:服務器發送 ACK 確認

服務器 -> 客戶端:ACK服務器收到客戶端的 FIN 包后,確認客戶端的關閉請求,發送一個 ACK 包(帶有 ACK 標志)給客戶端,確認號為客戶端發送的序列號 + 1。此時,服務器進入 CLOSE_WAIT 狀態,等待關閉其發送通道(即它需要先發送完自己未發送的數據)。客戶端進入 FIN_WAIT_2 狀態。

第三次揮手:服務器發送 FIN

服務器 -> 客戶端:FIN(Finish)當服務器沒有數據可發送并準備關閉連接時,服務器向客戶端發送一個 FIN 包(帶有 FIN 標志),表示服務器也沒有數據要發送了。此時,服務器進入 LAST_ACK 狀態。

第四次揮手:客戶端發送 ACK 確認

客戶端 -> 服務器:ACK
客戶端收到服務器的 FIN 包后,發送一個 ACK 包(帶有 ACK 標志)給服務器,確認號為服務器發送的序列號 + 1。此時,客戶端進入 TIME_WAIT 狀態,等待 2MSL(Maximum Segment Lifetime,最大報文生存時間),確保服務器收到了確認包。如果客戶端在此時間段內沒有收到重復的 FIN 包,它將徹底關閉連接。TIME_WAIT 狀態也是為了防止網絡延遲或丟包等問題,避免導致數據包的重發。)
服務器收到客戶端的確認包后,進入 CLOSED 狀態,連接完全關閉。

為什么需要四次揮手?

  • TCP 是全雙工的協議,即通信的雙方(客戶端和服務器)可以同時發送和接收數據。因此,關閉連接時,雙方需要各自關閉自己的一條發送通道,才能完成連接的正常關閉。
  • 每個方向上的數據傳輸都需要確認,確保數據不會丟失或錯亂。

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

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

相關文章

C語言初階牛客網刷題—— HJ34 圖片整理【難度:中等】

1. 題目描述 牛客網在線OJ鏈接 Lily上課時使用字母數字圖片教小朋友們學習英語單詞,每次都需要把這些圖片按照大小(ASCII碼值從小到大)排列收好。請大家給Lily幫忙,通過C語言解決。 輸入描述:Lily使用的圖片包括 “A…

MVCC底層原理實現

MVCC的實現原理 了解實現原理之前,先理解下面幾個組件的內容 1、 當前讀和快照讀 先普及一下什么是當前讀和快照讀。 當前讀:讀取數據的最新版本,并對數據進行加鎖。 例如:insert、update、delete、select for update、 sele…

python實現http文件服務器訪問下載

//1.py import http.server import socketserver import os import threading import sys# 獲取當前腳本所在的目錄 DIRECTORY os.path.dirname(os.path.abspath(__file__))# 設置服務器的端口 PORT 8000# 自定義Handler,將根目錄設置為腳本所在目錄 class MyHTT…

Cpp::靜態 動態的類型轉換全解析(36)

文章目錄 前言一、C語言中的類型轉換二、為什么C會有四種類型轉換?內置類型 -> 自定義類型自定義類型 -> 內置類型自定義類型 -> 自定義類型隱式類型轉換的坑 三、C強制類型轉換static_castreinterpret_castconst_castdynamic_cast 四、RTTI總結 前言 Hell…

2024年終總結:技術成長與突破之路

文章目錄 前言一、技術成長:菜鳥成長之路1. 學習與實踐的結合2. 技術分享與社區交流 二、生活與事業的平衡:技術之外的思考1. 時間管理與效率提升2. 技術對生活的積極影響 三、突破與展望:未來之路1. 技術領域的突破2. 未來規劃與目標 四、結…

ComfyUI實現老照片修復——AI修復老照片(ComfyUI-ReActor / ReSwapper)解決天坑問題及加速pip下載

AI修復老照片,試試吧,不一定好~~哈哈 2023年4月曾用過ComfyUI,當時就感慨這個工具和虛幻的藍圖很像,以后肯定是專業人玩的。 2024年我寫代碼去了,AI做圖沒太關注,沒想到,現在ComfyUI真的變成了工…

思科交換機telnet配置案例

目錄 1.telnet簡述2.網絡拓撲3.設備說明4.網絡配置4.1 電腦PC ip設置4.2 網絡交換機telnet配置 5.小結 1.telnet簡述 Telnet是遠程登錄服務的一個協議,該協議定義了遠程登錄用戶與服務器交互的方式。它允許用戶在一臺聯網的計算機上登錄到一個遠程分時系統中&#…

WPS數據分析000006

一、排序 開始→ 排序 同文件→選項→自定義序列→輸入序列 二、篩選 高級篩選 條件區域要與列表區域一樣。 三、條件格式

vofa++使用方法

控件區可以添加控件用來啊多樣顯示 點擊一個控件然后右鍵可以選擇要添加顯示的數據,點all表全部顯示, 點auto可以自動布局 要用控件需要選擇協議,不知道協議具體格式可以點擊問號看看,并且最好用printf重定義來實現 比如我要實現F…

達夢拷貝DM_HOME的復制安裝

近期一個項目需求,需要在沒有安裝包的情況下,將達夢數據庫安裝到虛機上(生產機上安裝了達夢),故采用直接打包生產機DM_HOME的方式拷貝至虛機,再依次執行達夢的部分指令完成安裝。以下為驗證的步驟&#xff…

tomcat的accept-count、max-connections、max-threads三個參數的含義

tomcat的accept-count、max-connections、max-threads三個參數的含義 tomcat的accept-count、max-connections、max-threads三個參數的含義 max-connections:最大連接數 最大連接數是指,同一時刻,能夠連接的最大請求數 需要注意的是&#x…

ui文件轉py程序的工具

源博客連接: PyCharm中利用外部工具uic轉成的py文件,里面全是C代碼,并非python類型的代碼,導致大量報錯。。。_pyside6-uic為什么把ui轉為了c-CSDN博客 如果想把ui文件轉為py文件,首先設置pycharm的外部工具&#xf…

hedfs和hive數據遷移后校驗腳本

先談論校驗方法,本人騰訊云大數據工程師。 1、hdfs的校驗 這個通常就是distcp校驗,hdfs通過distcp遷移到另一個集群,怎么校驗你的對不對。 有人會說,默認會有校驗CRC校驗。我們關閉了,為什么關閉?全量遷…

61,【1】BUUCTF WEB BUU XSS COURSE 11

進入靶場 左邊是吐槽,右邊是登錄,先登錄試試 admin 123456 admiin# 123456 admin"# 123456 不玩了,先去回顧下xss 回顧完就很尷尬了,我居然用SQL的知識去做xss的題 重來 吐槽這里有一個輸入框,容易出現存儲型…

海外問卷調查如何影響企業的經營?在品牌建設中有何指導意義?

市場調查的定義:通過科學的方法,有目的地、系統地搜集整理一些市場信息,其目的在于了解當下市場現狀和發展前景,為企業生產和品牌打造提供一些科學的指導意見,這是任何大企業、中小企業、初創企業都必須重視的一個重要…

STM32新建不同工程的方式

新建工程的方式 1. 安裝開發工具 MDK5 / keil52. CMSIS 標準3. 新建工程3.1 寄存器版工程3.2 標準庫版工程3.3 HAL/LL庫版工程3.4 HAL庫、LL庫、標準庫和寄存器對比3.5 庫開發和寄存器的關系 4. STM32CubeMX工具的作用 1. 安裝開發工具 MDK5 / keil5 MDK5 由兩個部分組成&#…

idea maven本地有jar包,但還要從遠程下載

idea 中,java 工程執行 maven reimport,報jar報無法下載。 我奇了個怪,我明明在本地倉庫有啊,你非得從遠程下載? 我從供應商那里拿來的,遠程當然沒有了。 這太奇葩了吧,折騰好久不行。 后來…

springboot 調用 c++生成的so庫文件

一、創建c文件 SoTest.h #pragma once class SoTest {int Add(int a,int b); };SoTest.cpp #include "SoTest.h"int SoTest::Add(int a, int b) {return a b; }二、創建so文件 /home/ubuntu/projects/SoTest/bin/x64/Debug/libSoTest.so 三、java代碼 Maven依…

Windows 靶機常見服務、端口及枚舉工具與方法全解析:SMB、LDAP、NFS、RDP、WinRM、DNS

在滲透測試中,Windows 靶機通常會運行多種服務,每種服務都有其默認端口和常見的枚舉工具及方法。以下是 Windows 靶機常見的服務、端口、枚舉工具和方法的詳細說明: 1. SMB(Server Message Block) 端口 445/TCP&…

250125-package

1. 定義 包就是文件夾,作用是在大型項目中,避免不同人的編寫的java文件出現同名進而導致報錯;想象一個場景,在一個根目錄中,每一個人都有自己的一個java文件夾,他可以將自己編寫的文件放在該文件夾里&…