1. 程式人生 > >TCP協議的3次握手與4次揮手

TCP協議的3次握手與4次揮手

一、定義

    TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議,由IETF的RFC 793定義。在簡化的計算機網路OSI模型中,它完成第四層傳輸層所指定的功能,使用者資料報協議(UDP)是同一層內, 另一個重要的傳輸協議。在因特網協議族(Internet protocol suite)中,TCP層是位於IP層之上,應用層之下的中間層。不同主機的應用層之間經常需要可靠的、像管道一樣的連線,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。

二、報文格式


1.Source Port:是源埠,16位。

2.Destination Port:是目的埠,16位。

3.Sequence Number:是傳送資料包中的第一個位元組的序列號,32位,用來標識從TCP源端向目的端傳送的位元組流,發起方傳送資料時對此進行標記。

4.Acknowledgment Number:是確認序列號,32位,只有ACK標誌位為1時,確認序號欄位才有效,Ack=Seq+1

5.Data\Offset:是資料偏移,4位,該欄位的值是TCP首部(包括選項)長度除以4。

6.標誌位:6位,即URG、ACK、PSH、RST、SYN、FIN等,具體含義如下:

    1)URG表示Urgent Pointer欄位有意義。

    2)ACK表示Acknowledgment Number欄位有意義

    3)PSH表示Push功能,RST表示復位TCP連線

    4)RST表示重置連線。

    5)SYN表示SYN報文(在建立TCP連線的時候使用)

    6)FIN表示沒有資料需要傳送了(在關閉TCP連線的時候使用)

    7)Window表示接收緩衝區的空閒空間,16位,用來告訴TCP連線對端自己能夠接收的最大資料長度。

注意:標誌位ACK和Acknowledgment Number分清楚;確認方Acknowledgment Number=發起方Sequence Number+1,兩端配對。 

三、三次握手

     TCP是因特網中的傳輸層協議,使用三次握手協議建立連線。當主動方發出SYN連線請求後,等待對方回答SYN+ACK[1]  ,並最終對對方的 SYN 執行 ACK 確認。這種建立連線的方法可以防止產生錯誤的連線,TCP使用的流量控制協議是可變大小的滑動視窗協議。


1.第一次握手:Client將標誌位SYN置為1,隨機產生一個值seq=J,並將該資料包傳送給Server,Client進入SYN_SENT狀態,等待Server確認。

2.第二次握手:server收到資料包後由標誌位SYN=1知道Client請求建立連線,Server將標誌位SYN和ACK都置為1,ack=J+1,隨機產生一個值seq=K,並將該資料包傳送給Client以確認連線請求,Server進入SYN_RCVD狀態。

3.第三次握手:Client收到確認後,檢查ack是否為J+1,ACK是否為1,如果正確則將標誌位ACK置為1,ack=K+1,並將該資料包傳送給Server,Server檢查ack是否為K+1,ACK是否為1,如果正確則連線建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間可以開始傳輸資料了。

四、四次揮手

    由於TCP連線時全雙工的,因此,每個方向都必須要單獨進行關閉,這一原則是當一方完成資料傳送任務後,傳送一個FIN來終止這一方向的連線,收到一個FIN只是意味著這一方向上沒有資料流動了,即不會再收到資料了,但是在這個TCP連線上仍然能夠傳送資料,直到這一方向也傳送了FIN。首先進行關閉的一方將執行主動關閉,而另一方則執行被動關閉。

    所謂四次揮手(Four-Way Wavehand)即終止TCP連線,就是指斷開一個TCP連線時,需要客戶端和服務端總共傳送4個包以確認連線的斷開。在socket程式設計中,這一過程由客戶端或服務端任一方執行close來觸發,整個流程如下圖所示:

1.第一次揮手:Client傳送一個FIN,用來關閉Client到Server的資料傳送,Client進入FIN_WAIT_1狀態。

2.第二次揮手:Server收到FIN後,傳送一個ACK給Client,確認序號為收到序號+1(與SYN相同,一個FIN佔用一個序號),Server進入CLOSE_WAIT狀態。

3.第三次揮手:Server傳送一個FIN,用來關閉Server到Client的資料傳送,Server進入LAST_ACK狀態。

4.第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀態,接著傳送一個ACK給Server,確認序號為收到序號+1,Server進入CLOSED狀態,完成四次揮手。

    上面是一方主動關閉,另一方被動關閉的情況,實際中還會出現同時發起主動關閉的情況,具體流程如下圖:


五、總結

1.為什麼建立連線是三次握手,而關閉連線卻是四次揮手呢?

    這是因為服務端在LISTEN狀態下,收到建立連線請求的SYN報文後,把ACK和SYN放在一個報文裡傳送給客戶端。而關閉連線時,當收到對方的FIN報文時,僅僅表示對方不再發送資料了但是還能接收資料,己方也未必全部資料都發送給對方了,所以己方可以立即close,也可以傳送一些資料給對方後,再發送FIN報文給對方來表示同意現在關閉連線,因此,己方ACK和FIN一般都會分開發送。

相關推薦

TCP協議3握手4揮手過程詳解

進行 發送數據 不存在 信息 隊列 協議 標識 方式 ar9 所謂三次握手(Three-Way Handshake)即建立TCP連接,就是指建立一個TCP連接時,需要客戶端和服務端總共發送3個包以確認連接的建立。所謂四次揮手(Four-Way Wavehand)即終止TCP

TCP協議3握手4揮手過程詳解 標籤: TCP IM

1、前言 儘管TCP和UDP都使用相同的網路層(IP),TCP卻嚮應用層提供與UDP完全不同的服務。TCP提供一種面向連線的、可靠的位元組流服務。 面向連線意味著兩個使用TCP的應用(通常是一個客戶和一個伺服器)在彼此交換資料之前必須先建立一個TCP連線。這一過程與打電話很相似,先撥

Tcp協議中的3握手4揮手過程分析

轉載https://blog.csdn.net/u012824097/article/details/52490091 客戶端與服務端的通訊中步驟 1建立Tcp連線 3次握手 2再進行資料傳輸 3資料傳輸完成後,斷開連線。

(轉)理論經典:TCP協議3握手4揮手過程詳解

<div id="article_content" class="article_content clearfix csdn-tracking-statistics" data-pid="blog" data-mod="popu_307" data-dsm="post"

TCP協議3握手4揮手

一、定義    TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議,由IETF的RFC 793定義。在簡化的計算機網路OSI模型中,它完成第四層傳輸層所指定的功能,使用者資料報協議(UDP)

TCP3握手4揮手

TCP通訊的整個過程,如下圖: ​ 三次握手兩個序號和三個標誌位: (1)序號:seq序號,佔32位,用來標識從TCP源端向目的端傳送的位元組流,發起方傳送資料時對此進行標記。 (2)確認序號:ack序號,佔32位,只有ACK標誌位為1時,確認序號欄位才有效,ack=seq+1。

TCP為什麼需要3握手4揮手

為什麼需要“三次握手”             在謝希仁著《計算機網路》第四版中講“三次握手”的目的是“為了防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤”。在另一部經典的《計算機網路》一書中講“三次握手”的目的是為了解決“網路中存在延遲的重複分組”的問題。這

阿里Java面試官:請別再問我3握手4揮手了!

在面試中,三次握手和四次揮手可以說是問的最頻繁的一個知識點了,我相信大家也都看過很多關於三次握手與四次揮手的文章。  

Linux學習筆記十一:圖解TCP3握手4揮手

cto 基於 名詞 分段 water http nag 名詞解釋 pro 如圖所示是是一個IP數據包的圖表: 我們知道web訪問是基於http協議和tcp/ip協議棧的,所以下面我們www.magedu.com 來通過抓包分析tcp3次握手過程。 如圖:第一個包:SYN

tcp協議報文和三握手揮手

tcp報文 三次握手與四次揮手 tcp11種狀態tcp協議:tcp是面向連接、可靠的進程到進程之間的協議。tcp提供全雙工服務:即:數據可在同一時間雙向傳輸。tcp報文段首部格式:各字段含義:源端口號:16位字段,為發送端進程對應的端口號目標端口:16位字段,為接收端進程對應的端口號,接收方接收到數據

TCP協議握手揮手通俗解析

再次 方式 32位 sent 時間 應用層 系統 socket編程 檢測 TCP/IP協議三次握手與四次握手流程解析 一、TCP報文格式 TCP/IP協議的詳細信息參看《TCP/IP協議詳解》三卷本。下面是TCP報文格式圖: 圖1 TCP報文格式 上圖中

為什麽TCP3握手4揮手

應用 neu art ack nco linux 客戶 丟了 大量 為什麽要3次握手?假設存在以下過程: A->B (寫信,我想和你吃飯) B->A (寫信,收到,我也想和你吃飯) A->B (寫信,收到) 其實呢,最開始兩步,是因為通信的雙方要互

TCP協議握手揮手

文章目錄 TCP報文格式 三次握手 四次揮手 注 TCP報文格式 TCP/IP協議的詳細資訊參看《TCP/IP協議詳解》三卷本。下面是TCP報文格式圖: 上圖中有幾個欄位需要重點介紹下: (1

詳解TCP3握手4揮手

為什麼有3次握手          每當建立一個TCP/IP連線的時候都要經歷3次握手,這是為了保證建立一個可靠的連線。 什麼是3次握手        上圖中的三次揮手說的是,客戶端向伺服器發請求,伺服器接收請求,伺服器接收請求之後傳送一個連線標誌,客戶端接收連線標

TCP3握手4揮手過程

建立連線(3次握手) SYN是標誌位,設定SYN=1,表示請求建立連線 服務端會同時和多個客戶端建立連線,所以在報文互動時,需要帶上序號seq,在響應是seq+1,以此來檢測報文合法性 連線過程 客戶端:我想建立一個連線。狀態:CLOSED

深入淺出之 TCP協議(三握手揮手、超時重發、流量控制、擁塞控制、UDP區別)

TCP/IP 中有兩個具有代表性的傳輸層協議,分別是TCP、UDP。TCP提供可靠的通訊傳輸,而UDP則常被用於讓廣播和細節控制交給應用的通訊傳輸。 要知道TCP為了這簡單描述“可靠的通訊傳輸”背後所做的努力,你會深感佩服其強大性。TCP的特徵:序列化+確認應

簡述TCP協議的六個標誌位和三握手揮手的過程及原理

簡述TCP協議的三次握手與四次揮手的過程及原理        今天,我們來分享一下TCP協議的六個標誌位和三次握手與四次揮手的過程及原理。        先介紹一下TCP中的六個控制位,      

網路基本原理,tcp握手4揮手,路由器,arp協議,網路7層模型

網路基本原理:區域網通訊區域網是在同一個鏈路內相互通過mac地址通訊的主機組成的集體比如在一個工作室內同一個路由器下面的幾臺電腦組成由於在最開始 電腦之間相互不知道對方在mac地址所以 電腦主機之間相互通訊就需要通過廣播的方式發給區域網內部的主機,這個時候因為主機一般都是連結的都是交換機,交換機的的記憶體內部

網絡基本原理,tcp握手4揮手,路由器,arp協議,網絡7層模型

條件 網段通信 數據 會話層 反向 掩碼 倒數 物理層 utf 網絡基本原理:局域網通信局域網是在同一個鏈路內相互通過mac地址通信的主機組成的集體比如在一個工作室內同一個路由器下面的幾臺電腦組成由於在最開始 電腦之間相互不知道對方在mac地址所以 電腦主機之間相互通信就

TCP/IP協議握手握手流程

(1)第一次握手:Client將標誌位SYN設定為1,隨機產生一個值seq=x,並將該資料包傳送給Server,Client進入SYN_SENT狀態,等待Server確認。(2)第二次握手:Server收到資料包後由標誌位SYN=1知道Client請求建立連線,Server將標誌位SYN和ACK都置為1,ac