首頁 運維 安全 詳解TCP的三次握手與四次揮手

詳解TCP的三次握手與四次揮手

Nov 29, 2019 pm 04:43 PM
tcp

詳解TCP的三次握手與四次揮手

一、TCP(Transmission Control Protocol 傳輸控制協定)

TCP是面向對連接,可靠的進程到進程通訊的協定
TCP是提供全雙工服務,即資料可在同一時間雙向傳輸

二、TCP封包(封裝在IP資料封包中)

詳解TCP的三次握手與四次揮手

1、連接埠號

1)來源埠號:發送方程序對應的連接埠號,來源IP和連接埠的作用就是標誌封包的回傳位址。

2)目標連接埠號碼:對應的是接收端的進程,接收端收到資料段後,根據這個連接埠將資料對應給應用程式的介面。

註:TCP標頭中的來源埠號碼與目的埠號同IP資料封包中的來源IP與目的IP唯一確定一條TCP連線。

2、序號:發送端為每個位元組進行編號,以便於接收端正確重組。

3、確認號:用於確認發送端的資訊。

4、控制位元

1)URG:緊急指標有效位元。
2)ACK:確認序號位,當該位為1時,用於確認發送方的資料。
3)PSH:標誌位元為1時要求接收放盡快將資料端送達應用層。
4)RST:為1時透過重新建立TCP連線
5)SYN:同步序號位,TCP需要建立連線時將該值設為1
6)FIN:當TCP斷開連線時將此位置為1

5、視窗值:用於說明本地可接收資料段的數目,視窗大小是可變的。以此控制發送端發送資料的速率,從而達到流量控制。

6、校驗和:用來做錯誤控制

7、緊急指標:只有當 URG 標誌置 1 時緊急指標才有效。

8、選項:位於TCP首部多大40位元組的可選訊息,最常見的可選欄位是最長封包大小。

註:8個欄位中較為重要的是連接埠號碼、序號、確認序號、以及控制位元中ACK、SYN、FIN這三個控制位。

三、TCP三次握手(透過wireshark抓包分析)

詳解TCP的三次握手與四次揮手

##PC1為真機,PC2為虛擬機器CentOS,PC1與PC2綁定在同一塊虛擬網路卡VNet8上,PC1IP位址為192.168.90.10,PC2IP位址為192.168.90.40。提前在CentOS上建置號碼網站,PC1訪問PC2,然後透過抓包工具進行TCP的抓報,如下所示:

1、第一次握手

詳解TCP的三次握手與四次揮手

如上圖,透過抓包工具抓包發現,來源位址(source)為192.168.90.10,來源埠號(source port)為55604,目的位址(destination)為192.168.168.90.40,目的埠號(destination port)為80。初始序號(sequence number)和確認序號(acknowledgment number)都為0。第一次握手PC1使用一個隨機連接埠號碼向PC2的80埠發送建立連線的請求,此過程最典型的表示就是TCP的SYN控制位元為1,其他五個控制位元全為0。

2、第二次握手

詳解TCP的三次握手與四次揮手

如上圖,第二次握手,來源位址以及連接埠號碼和目的位址和連接埠與第一次握手相反,初始序號為0,確認序號為1,且控制位元中的ACK和SYN都為1。第二次握手其實分成兩部分完成:

1)PC2收到PC1的請求,向PC1回覆一個確認訊息,此過程標誌就是TCP的ACK控制位元為1,其他五個控制位元全為0 ,並且確認序號是PC1的初始序號加1。
2)PC2也向PC1發送一個建立連接的請求,此過程的標誌與第一次握手一樣,TCP的SYN控制位為1,其他五個控制位全為0。

3、第三次握手

詳解TCP的三次握手與四次揮手

如圖,來源位址以及連接埠號碼和目的位址以及連接埠號碼與第一次握手相同,其中初始序號即為第二次握手的確認序號1,確認序號即為第二次握手的初始序號加1。 PC1收到PC2的回覆(包含請求和確認),也要回覆PC2一個確認訊息,此過程最典型的標誌就是TCP的ACK控制位為1,其他五個控制位為0,而且確認序號是PC2的初始序號加1。這樣完成了三次握手,在PC1和PC2之間建立了TCP連線。

四、TCP連線終止的四次揮手#

詳解TCP的三次握手與四次揮手

此時PC1為CentOS,對應的IP位址為192.168.90.40,PC2為真機,應該的IP位址為192.168.90.10,透過抓包來分析他斷開連接的過程,如下:

1、第一次揮手

詳解TCP的三次握手與四次揮手

PC1(伺服器)向PC2客戶端發送FIN和ACK位元為1的TCP報文段。

2、第二次揮手

詳解TCP的三次握手與四次揮手

PC2客戶端向PC1伺服器傳回ACK位元為1的TCP封包文段。

3、第三次揮手

詳解TCP的三次握手與四次揮手

PC2客戶端向PC1伺服器發送FIN和ACK位元為1的TCP報文段。

4、第四次揮手

詳解TCP的三次握手與四次揮手

PC1伺服器傳回PC2客戶端到ACK位元為1的TCP封包文段,完成終止連線。

5、TCP四次揮手的半關閉概念(TCP一方終止發送資料但可以接收)

1)PC2客戶端FIN報文段,半關閉了這個連接,PC1伺服器發送ACK報文段接收半關閉。

2)PC1伺服器繼續發送數據,而PC2客戶端只發送ACK確認,不再發送任何數據。

3)當PC1伺服器把所有資料都傳送完畢時,就發送FIN報文段,PC2客戶端再發送ACK報文段,這樣就關閉了TCP連線。

以上是詳解TCP的三次握手與四次揮手的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

win10如何重置tcp/ip協定? windows10重置tcp/ip協定棧的方法 win10如何重置tcp/ip協定? windows10重置tcp/ip協定棧的方法 Mar 16, 2024 am 11:07 AM

win10如何重置tcp/ip協定?其實方法很簡單的,使用者可以直接的進入到命令提示符,然後按下ctrl shift enter的組合鍵來進行操作就可以了或者是直接的執行重置命令來進行設置,下面就讓本站來為使用者來仔細的介紹一下windows10重置tcp/ip協定棧的方法吧。 windows10重置tcp/ip協定棧的方法一、管理員權限1、我們使用快捷鍵win R直接開啟運行窗口,然後輸入cmd並按住ctrl shift enter的組合鍵。 2、或者我們可以直接在開始選單中搜尋命令提示符,右鍵點

python中怎麼使用TCP實作對話客戶端和伺服器 python中怎麼使用TCP實作對話客戶端和伺服器 May 17, 2023 pm 03:40 PM

TCP客戶端一個使用TCP協定實現可連續對話的客戶端範例程式碼:importsocket#客戶端設定HOST='localhost'PORT=12345#建立TCP套接字並連接伺服器client_socket=socket.socket(socket.AF_INET,socket .SOCK_STREAM)client_socket.connect((HOST,PORT))whileTrue:#取得使用者輸入message=input("請輸入要傳送的訊息:&

活久見! TCP兩次揮手,你有看過嗎?那四次握手呢? 活久見! TCP兩次揮手,你有看過嗎?那四次握手呢? Jul 24, 2023 pm 05:18 PM

那這裡面提到的"面向連接",意味著需要 建立連接,使用連接,釋放連接。建立連線是指我們熟知的TCP三次握手。而使用連接,則是透過一發送、一確認的形式,進行資料傳輸。還有就是釋放連接,也就是我們常見的TCP四次揮手。

如何在Java中使用單一TCP連線發送多個檔案? 如何在Java中使用單一TCP連線發送多個檔案? Apr 27, 2023 am 08:49 AM

使用一個TCP連線發送多個檔案為什麼會有這篇部落格?最近在看一些相關方面的東西,簡單的使用一下Socket進行程式設計是沒有的問題的,但是這樣只是建立了一些基本概念。對於真正的問題,還是無能為力。當我需要進行檔案的傳輸時,我發現我好像只是發送過去了資料(二進位資料),但是關於檔案的一些資訊卻遺失了(檔案的副檔名)。而且每次我只能使用一個Socket發送一個文件,沒有辦法做到連續發送文件(因為我是依靠關閉流來完成發送文件的,也就是說我其實是不知道文件的長度,所以只能以一個Socket連接代表一個檔案)。

Java API 開發中使用 Netty4 進行 TCP 通信 Java API 開發中使用 Netty4 進行 TCP 通信 Jun 17, 2023 pm 11:18 PM

TCP是電腦網路通訊協定的一種,是一種連線導向的傳輸協定。在Java應用開發中,TCP通訊被廣泛應用於各種場景,例如客戶端和伺服器之間的資料傳輸、音訊視訊即時傳輸等等。 Netty4是一個高效能、高可擴展性、高效能的網路程式框架,能夠優化伺服器和用戶端之間的資料交換流程,使其更有效率可靠。使用Netty4進行TCP通訊的具體實作步驟如下:引入

Nginx怎麼配置TCP負載平衡 Nginx怎麼配置TCP負載平衡 May 19, 2023 am 08:29 AM

假設Kubernetes叢集已經配置好,我們將基於CentOS為Nginx建立一個虛擬機器。以下是實驗中設定的詳細資訊:Nginx(CenOS8Minimal)–192.168.1.50KubeMaster–192.168.1.40KubeWorker1–192.168.1.41KubeWorker2–192.168.192.168.1.41KubeWorker2–192.168.1.421)所以需要安裝e

Linux SIGPIPE訊號 Linux SIGPIPE訊號 Feb 19, 2024 pm 04:00 PM

在TCP通信雙方中,為了描述方便,以下將通信雙方用A和B代替。根據TCP協定規定,如果A關閉連線後B繼續發送數據,B會收到A的RST回應。若B繼續發送數據,系統會發出SIGPIPE訊號告知連接已斷開,停止發送。系統對SIGPIPE訊號的預設處理行為是讓B進程退出。作業系統對SIGPIPE訊號的這種預設處理行為非常不友好,讓我們來分析一下。 TCP通訊是全雙工頻道,相當於兩條單工頻道,連線兩端各負責一條。當對端「關閉」時,雖然本意是關閉整個兩條頻道,但本端只是收到FIN包。依TCP協議的規定,當一

swoole開發功能的高併發TCP長連接處理技巧 swoole開發功能的高併發TCP長連接處理技巧 Aug 25, 2023 pm 10:01 PM

【標題】Swoole開發功能的高並發TCP長連接處理技巧【導言】隨著互聯網的高速發展,應用程式對並發處理的需求也越來越高。 Swoole作為一款基於PHP的高效能網路通訊引擎,提供了強大的非同步、多進程、協程能力,大大提升了應用程式並發處理的能力。本文將介紹如何使用Swoole開發功能的高並發TCP長連接處理技巧,並結合程式碼範例進行詳細說明。 【正文】一、Swo

See all articles