1. 程式人生 > >一起來了解TCP的三次握手,四次揮手

一起來了解TCP的三次握手,四次揮手

        瞭解TCP首先要簡單瞭解OSI七層模型。OSI(開放系統互聯)把網路通訊分為7層,即物理層、資料鏈層、網路層、傳輸層、會話層、表示層、應用層。HTTP是客戶端瀏覽器或其他程式與web伺服器之間的應用層通訊協議,TCP/IP是在傳輸層用TCP協議的規則進行的封裝,資料形式進行TCP協議的規則傳輸。

        一、FLAGS欄位標識

        在TCP層,有一個FLAGS欄位。這個欄位有以下幾個標識:SYN, FIN, ACK, PSH, RST, URG,  ESTABLISHED, TIME_WAIT, CLOSE_WAIT。

    1、SYN:同步序列編號,是TCP/IP建立使用的握手訊號。
    2、 ACK:表示響應
    3、 FIN:表示關閉連線
    4、PSH:表示有DATA傳輸
    5、 RST: 表示連線重置
    6、 ESTABLISHED:表示建立連線
    7、 TIME_WAIT: 表示主動關閉,傳送方會保持2MSL(多層交換)時間之後才會回到初始狀態
    8、 CLOSE_WAIT: 表示被動關閉
 二、TCP的三次握手

       1、過程

        (1)首先客戶端與服務端均處於未連線狀態,並且客戶端主動想伺服器請求建立連線。

        (2)客戶端將報文段中的SYN=1,並選擇一個seq=x(即該請求報文的序號為x),將這個報文傳送到伺服器。此時,客戶端計入同步狀態(SYN-SEND),SYN報文段不能攜帶資料,但要消耗掉一個序號。

       (3)伺服器收到請求報文後,若同意建立連線,則回覆報文,SYN=1,ACK=1,並選擇一個seq=y,且報文中確認號為x+1, 序號為y,此時伺服器業計入同步接收狀態(SYN-RCVD)。

        (4)客戶端收到服務端的同步確認後,對伺服器傳送確認的確認,將ACK=1,確認號為y+1,而報文首部的序號為x+1,將該報文發出後,客戶端進入已連線狀態(ESTABLISHED)。

        (5)伺服器收到客戶端的確認後,也進入已連線狀態。

        2、簡單的描述就是:

    (1)A對B說:我的序號是x,我要向你請求連線;(第一次握手,傳送SYN包,然後進入SYN-SEND狀態)

    (2)B聽到之後對A說:我的序號是y,期待你下一句序號是x+1的話(意思就是收到了序號為x的話,即ack=x+1),同意建立連線。(第二次握手,傳送ACK-SYN包,然後進入SYN-RCVD狀態)

A聽到B說同意建立連線之後,對A說:與確認你同意與我連線(ack=y+1,ACK=1,seq=x+1)。(第三次握手,A已進入ESTABLISHED狀態)

    (3)B聽到A的確認之後,也進入ESTABLISHED狀態。

        3、使用三次握手機制的原因

 客戶端向伺服器傳送了第一條請求報文,但是該報文並未在網路中被丟棄,而是長時間阻滯在某處,而客戶端收不到伺服器確認,以為該報文丟失,於是重新發送該報文,這次的報文成功到達伺服器,如果不使用三次握手,則伺服器只需對該報文發出確認,就建立了一個連線。而在這個連線建立,並釋放後,第一次傳送的,阻滯在網路中的報文到達了伺服器,伺服器以為是客戶端又重新發送了一個連線請求(實際上在客戶端那裡,該連線早已失效),就又向客戶端傳送一個確認,但客戶端認為他沒有傳送該請求報文,因此不理睬伺服器傳送的確認,而伺服器以為又建立了一個新的連線,於是一直等待A發來資料,造成了伺服器資源的浪費,並且會產生安全隱患。因此,若使用三次握手機制,伺服器傳送了該確認後,收不到客戶端的確認,也就知道並沒有建立連線,因此不會將資源浪費在這種沒有意義的等待上。

三、TCP的四次揮手(TCP連線的釋放)

1、過程

  (1)現假設客戶端與伺服器均處於連線建立狀態,客戶端主動斷開連線

        (2)客戶端向伺服器傳送FIN報文:FIN=1,序號seq=上一個最後傳輸的位元組序號+1=u,傳送後,客戶端進入FIN-WAIT-1狀態。

        (3)伺服器接收到該報文後,傳送一個確認報文:令ACK=1,確認序號ack = u+1,自己的報文序號seq=v,傳送後,伺服器進入CLOSE-WAIT狀態。

        (4)此時TCP連線進入連線半關閉狀態,伺服器可能還會向客戶端傳送一些資料。

        (5)客戶端收到來自伺服器的確認之後,進入FIN-WAIT-2狀態。等待伺服器傳送連線釋放報文。

        (6)如果伺服器已經沒有要傳送的資料,則釋放TCP連線,向客戶端傳送報文:令FIN=1,ACK=1,確認號ack =u+1,自己的序號seq = w(w可能等於v也可能大於v),伺服器進入LAST-ACK狀態。

        (7)客戶端收到伺服器的連線釋放報文後,對該報文發出確認,令ACK=1,確認號ack=w+1,自己的序號seq=u+1,傳送此報文後,等待2個msl時間後,進入CLOSED狀態。

        (8)伺服器收到客戶端的確認後,也進入CLOSED狀態並撤銷傳輸控制塊。客戶端狀態變化:未連線----->SYN-SEND----->ESTABLISHED----->FIN-WAIT-1----->FIN-WAIT-2----->TIME-WAIT----->CLOSED伺服器狀態變化:未連線----->SYN-RCVD----->ESTABLISHED----->CLOSE-WAIT----->LAST-ACK----->CLOSED。

        2、簡單描述

   (1)A與B交談結束之後,A要結束此次會話,對B說:我要關閉連線了(seq=u,FIN=1)。(第一次揮手,A進入FIN-WAIT-1)

   (2)B收到A的訊息後說:確認,你要關閉連線了。(seq=v,ack=u+1,ACK=1)(第二次揮手,B進入CLOSE-WAIT)

   (3)A收到B的確認後,等了一段時間,因為B可能還有話要對他說。(此時A進入FIN-WAIT-2)

   (4)B說完了他要說的話(只是可能還有話說)之後,對A說,我要關閉連線了。(seq=w, ack=u+1,FIN=1,ACK=1)(第三次揮手)

   (5)A收到B要結束連線的訊息後說:已收到你要關閉連線的訊息。(seq=u+1,ack=w+1,ACK=1)(第四次揮手,然後A進入CLOSED)

   (6)B收到A的確認後,也進入CLOSED。

四、TCP狀態轉換示意圖



相關推薦

起來TCP握手揮手

        瞭解TCP首先要簡單瞭解OSI七層模型。OSI(開放系統互聯)把網路通訊分為7層,即物理層、資料鏈層、網路層、傳輸層、會話層、表示層、應用層。HTTP是客戶端瀏覽器或其他程式與web伺服器之間的應用層通訊協議,TCP/IP是在傳輸層用TCP協議的規則進行的封裝

TCP握手揮手(不看後悔看必懂)

三次握手 step1:第一次握手 客戶端傳送資料包到伺服器,(在此連線請求報文段中的同步位SYN=1,確認ACK=0,表示這是一個TCP連線請求資料報文,序號seq=x,表示傳輸資料時的起始序號是x)此時,客戶端進入SYN_SENT狀態,等待伺服器確認 step2:第二次握手

TCP握手揮手

三次握手為了準確無誤的將資料傳送到指定IP,TCP協議採用了三次握手 1 客戶端向服務端提出請求,內容帶有syn標識,隨機序列x 2 服務端向客戶端迴應請求,內容帶有syn和ack標識,隨機序列y,確認序列x+1 3 客戶端向服務端確認請求,內容帶有ack,隨機序列x+1,確認序列y+1 完成三次握手

TCP/IP】TCP握手揮手過程詳

TCP傳輸控制協議   TCP是一個面向連線的協議,為使用者程序提供可靠的全雙工位元組流。TCP套接字是一種流套接字,TCP關心確認、超時和重傳之類的細節。   首先,TCP提供客戶與伺服器之間的連線。TCP客戶先與某個給定伺服器建立一個連線,再跨該連線與那

TCP協議中為什麼握手揮手(詳)!!!

建立TCP需要三次握手才能建立,而斷開連線則需要四次握手。整個過程如下圖所示: 先來看看如何建立連線的。 首先Client端傳送連線請求報文,Server段接受連線後回覆ACK報文,併為這次連線分配資源。Client端接收到ACK報文後也向Server段發

圖片詳TCP連線的握手斷開基本原理

圖片詳解TCP連線的三次握手,四次斷開 作者:林子            TCP(TransmissionControl Protocol 傳輸控制協議)是一種面向連線傳輸協議,就像打電話一

TCP握手揮手

http hacker mage 防護 復位 可能 報文 為什麽 準備 參考文章,感謝原博主的分享與總結; https://blog.csdn.net/qzcsu/article/details/72861891 https://www.cnblogs.co

網路程式設計之——七層模型與TCP握手斷開

轉載請註明出處:https://blog.csdn.net/l1028386804/article/details/83046311 一、C/S架構 客戶端/服務端架構 二、OSI七層架構 七層模型,亦稱OSI(Open System Interconnection)參考模型,是

如何理解tcp握手揮手

原文地址 這是一個很有意思的問題~     首先,我們要知道TCP是全雙工的,即客戶端在給伺服器端傳送資訊的同時,伺服器端也可以給客戶端傳送資訊。而半雙工的意思是A可以給B發,B也可以給A發,但是A在給B發的時候,B不能給A發,即不同時,為半雙工。 單工為只能A給B發,B不能給A發

嵌入式linux網路程式設計TCP、IP協議原理wireshark抓包工具乙太網頭(Ethernet header)IP頭TCP握手握手UDP頭

文章目錄 1,wireshark抓包工具 1.1,wireshark安裝 1.2,wireshark啟動 1.2.1,出現錯誤警告 1.2.2,解決方案 2,常用除錯測試工具 3,TCP

第五章 運輸層(UDP和TCP握手揮手分析)

    序言         通過這章,可以知道其實三次握手和四次揮手其實真的好簡單,通過這章的學習,我相信你也會同樣的認為,以後在也不需要聽到別人問三次握手的過程而自己一臉懵逼了,覺得人家好屌,其實也就是他懂你不懂,僅此而已,不懂就去學。學了你就會覺得其實也就那樣,沒有什麼厲害的,這讓我回想以前剛學習程式設

TCP握手揮手(從狀態的角度分析)

但是,我發覺我的知識來源大多來自《計算機網路-自頂向下》那本,這本書沒有過多的考慮TCP三次握手中的相關狀態轉移細節,導致當時回答的並不是特別好,這次決定好好把這塊知識好好鞏固一下。 首先,我們先來一張大家都非常熟悉的圖: 相信大家對這張圖已經熟得不能再

TCP協議的連線管理機制------握手揮手

有關TCP協議的相關知識見:這篇部落格        TCP與UDP最大的區別就是TCP保證可靠性資料傳輸。從TCP與UDP的協議報頭就可以看出差別。TCP的協議報頭比UDP報頭多了很多東西,而多出來的這些都是用於保證資料的可靠性傳輸的。下面將具體介紹TCP保證可靠傳輸的機制

TCP協議總結(理解握手揮手

TCP(傳輸控制協議)特點: 1.TCP是面向連線的運輸層協議 2.TCP連線是點對點的,連線端點是兩個套接字(socket=IP地址 : 埠號) 3.TCP是全雙工通訊,兩端都可以傳送接收資料 4.TCP資料傳輸是面向位元組流的。 TCP可靠傳輸的工

TCP握手揮手和重要的細節—乾貨滿滿建議細讀

最近把個人部落格搭建好了,連結在這裡:tobe的囈語,文章會先在部落格和公眾號更新~ 大家多多收藏啊 上一次講了 UDP 協議,從這次開始,就要講 TCP 協議了,因為 TCP 協議涉及到的東西很多,一篇文章概括不完,所以我把 TCP 協議的內容分成好幾個部分,逐個擊破。 TCP 報文段結構 一談到 TCP

淺談TCP握手揮手

今天我們來講一下TCP的三次握手和四次揮手,先來張思維導圖。      一、TCP是什麼 TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議。 我們知道了上述瞭解到了TCP的定義,通俗一點講

握手斷開

TCP協議的建立必須經過三次握手的過程,   三次握手即:1.客戶端傳送同步序列號請求SYN(seq=100  ctl=SYN);                   &nbs

握手揮手”你真的懂嗎?

記得剛畢業找工作面試的時候,經常會被問到:你知道“3次握手,4次揮手”嗎?這時候我會“胸有成竹”地“背誦”前期準備好的“答案”,第一次怎麼怎麼,第二次……答完就沒有下文了,面試官貌似也沒有深入下去的意思,深入下去我也不懂,皆大歡喜! 作為程式設計師,要有“刨根問底”的精神。知其然,更要知其所以然。這篇文章希

為什麼一定要是握手揮手

應用層向TCP層傳送用於網間傳輸的、用8位位元組表示的資料流,然後TCP把資料流分割槽成適當長度的報文段(通常受該計算機連線的網路的資料鏈路層的最大傳輸單元(MTU)的限制)。之後TCP把結果包傳給I

socket關於握手揮手的理解

socket的建立是全雙工的,所以會有三次握手,但是四次揮手的區別。          客戶端<------------------------------------------->伺服器 握手1,客戶端請求伺服器建立連線(客戶端發); 握手2,伺服器