TCP三次握手,四次揮手(從狀態的角度分析)
但是,我發覺我的知識來源大多來自《計算機網路-自頂向下》那本,這本書沒有過多的考慮TCP三次握手中的相關狀態轉移細節,導致當時回答的並不是特別好,這次決定好好把這塊知識好好鞏固一下。
首先,我們先來一張大家都非常熟悉的圖:
相信大家對這張圖已經熟得不能再熟悉的,但我這次要應用程式的角度來說下:
1.客戶端的socket(socket描述符)呼叫connect主動開啟連線(當然要指定伺服器的IP地址)這個時候,connect函式阻塞住等待下面的回信,然後傳送SYN=1的包。
2.伺服器端這時候建立socket,然後bind埠,開啟監聽,呼叫accept(阻塞),這時候收到了SYN。然後,從伺服器上建立連線描述符,也就是建立了快取空間,反回去傳送SYN K,ack J+1(客戶端的SYN),傳送回客戶端。
3.客戶端這時候的connect返回,傳送了ack K+1。服務端accept返回,連線成功,進行read,write讀寫,read這時候發生阻塞。
咋看之下,這個過程非常簡單。但是,往深挖了就很多不會了,我也沒太回答上來:
問題一
TCP在三次握手的時候一共傳輸了哪些訊息:
SYN=1,ACK,序列號,看似只有這三個東西。還有目的IP,目的埠號,源IP,源埠號,還有一個最重要的接收視窗,接收視窗是在報文端裡面進行控制的,但是我們的滑動視窗是在我們的作業系統中實現的。
問題二
滑動視窗的大小如何控制?
這個我們可以和擁塞視窗相互聯絡起來,剛開始的大小非常小,然後我們線性增大,一旦碰到了擁塞的情況,我們的視窗迅速減半。
問題三
TCP是幾元組?
五元組,分別是源埠,源IP,目的埠,目的IP,還有一個運輸層協議
下面,還是把四次握手的圖一起放上來,好做理解:
你以為這樣三次握手就完了嗎。。。
我們還沒講狀態呢?
來上圖:
大家第一眼看這圖肯定懵逼。沒事,我們一步步來解決這個圖。
對於三次握手:
(1).對於客戶端而言:我們原來處理CLOSED的狀態,然後我們客戶端呼叫connect進行主動開啟,傳送SYN,之後我們便進入了SYN_SEND,這個時候我們應該準備的事情就是等待服務端的ACK了。
(2)對於服務端而言:開啟服務端的時候從CLOSED轉移到LISTEN,我們ACCEPT一個客戶端的connect,我們處於被動開啟的狀態,從LISTEN狀態轉移到SYN_RCVD狀態,併發送SYN K和ACK=SYN J+1。我們等待客戶段的ACK應答。
(3)對於客戶端而言:收到了服務端的SYN K和ACK=SYN J+1.客戶端的阻塞connect連線成功,狀態轉移到了ESTABLISHED,併發送ACK=K+1,到服務端。
(4)對於服務端而言:收到客戶端的ACK,狀態轉移到了ESTABLISHED。三次握手結束
(5)超時情況或應用close:繼續轉移到CLOSED的起始狀態。
服務端和客戶端都到了ESTABLISHED,說明可以進行傳輸資訊。
這時候我們再來關注一下關閉伺服器的場景是如何?
(1)客戶端:呼叫close函式,傳送FIN,到達FIN_WAIT_1狀態,等待服務端的ACK過來。
(1)服務端:接收到客戶端的FIN資訊,傳送ACK,並且到CLOSE_WAIT,服務端關閉與客戶端的連線,併發送FIN.
(2)客戶端:接收到服務端的ACK包,到達FIN_WAIT_2狀態,並等待服務端傳送FIN包。
(2)服務端:服務端開始傳送FIN資訊,到達LAST_ACK狀態。
(3)客戶端:接收到服務端的FIN資訊,狀態轉移到TIME_WAIT狀態。併發送 ACK包到服務端。
(3)服務端:接收到客戶端的ACK資訊,狀態由LAST_ACK轉移到CLOSED狀態。
(3)客戶端:超過2MSL時候後返回到CLOSED狀態。
感覺字有點多,我們繼續把這個過程簡化到一張圖上面:
這個圖將我們的狀態轉移和三次握手、四次揮手的圖都放在了一張折線圖上面。
這就是我們要說的從狀態轉移的角度來說明TCP三次握手,四次揮手。
不知道大家有沒發覺一個很奇怪的狀態,也就是TIME_WAIT這個狀態,是否判斷2MSL超時。
給大家說明一下MSL是什麼意思?MSL代表著IP報文能在網際網路中存在的最長時間,2個MSL代表客戶端和服務端的一個IP報文能在網際網路中存在的最長時間總和。超過這個時間就說明出現了超時事件要進行重發。
那麼,我們的TIME_WAIT的作用到底是什麼呢,這裡有兩點:
1.實現終止TCP全雙工連線的可靠性
2.允許老的重複分組在網路中消逝
對於1而言,假設在圖中服務端的最後一個FIN未傳送成功,經過一個MSL,之後服務端會重發送一個FIN。這就需要兩個MSL時間讓客戶端進行稽核。所以,客戶端進入TIME_WAIT需要2個MSL時間。
對於2而言,是為了解決在結束這個連線之後,又建立起一個新的連線。為了避免這個新連線得到前一個連線的重發分組,2個MSL保證兩個方向的重發分組都被拋棄掉了。
對於UDP而言,三次握手和四次揮手的過程將會被全部拋棄掉,這樣看來,TCP將會比UDP多7節的傳輸過程。
Reference:UNIX網路程式設計
相關推薦
TCP三次握手,四次揮手
http hacker mage 防護 復位 可能 報文 為什麽 準備 參考文章,感謝原博主的分享與總結; https://blog.csdn.net/qzcsu/article/details/72861891 https://www.cnblogs.co
TCP的三次握手,四次揮手(不看後悔,一看必懂)
三次握手 step1:第一次握手 客戶端傳送資料包到伺服器,(在此連線請求報文段中的同步位SYN=1,確認ACK=0,表示這是一個TCP連線請求資料報文,序號seq=x,表示傳輸資料時的起始序號是x)此時,客戶端進入SYN_SENT狀態,等待伺服器確認 step2:第二次握手
如何理解tcp的三次握手,四次揮手
原文地址 這是一個很有意思的問題~ 首先,我們要知道TCP是全雙工的,即客戶端在給伺服器端傳送資訊的同時,伺服器端也可以給客戶端傳送資訊。而半雙工的意思是A可以給B發,B也可以給A發,但是A在給B發的時候,B不能給A發,即不同時,為半雙工。 單工為只能A給B發,B不能給A發
TCP的三次握手,四次揮手詳解
三次握手為了準確無誤的將資料傳送到指定IP,TCP協議採用了三次握手 1 客戶端向服務端提出請求,內容帶有syn標識,隨機序列x 2 服務端向客戶端迴應請求,內容帶有syn和ack標識,隨機序列y,確認序列x+1 3 客戶端向服務端確認請求,內容帶有ack,隨機序列x+1,確認序列y+1 完成三次握手
第五章 運輸層(UDP和TCP三次握手,四次揮手分析)
序言 通過這章,可以知道其實三次握手和四次揮手其實真的好簡單,通過這章的學習,我相信你也會同樣的認為,以後在也不需要聽到別人問三次握手的過程而自己一臉懵逼了,覺得人家好屌,其實也就是他懂你不懂,僅此而已,不懂就去學。學了你就會覺得其實也就那樣,沒有什麼厲害的,這讓我回想以前剛學習程式設
【TCP/IP】TCP的三次握手,四次揮手過程詳解
TCP傳輸控制協議 TCP是一個面向連線的協議,為使用者程序提供可靠的全雙工位元組流。TCP套接字是一種流套接字,TCP關心確認、超時和重傳之類的細節。 首先,TCP提供客戶與伺服器之間的連線。TCP客戶先與某個給定伺服器建立一個連線,再跨該連線與那
TCP協議中為什麼三次握手,四次揮手(詳解)!!!
建立TCP需要三次握手才能建立,而斷開連線則需要四次握手。整個過程如下圖所示: 先來看看如何建立連線的。 首先Client端傳送連線請求報文,Server段接受連線後回覆ACK報文,併為這次連線分配資源。Client端接收到ACK報文後也向Server段發
TCP三次握手,四次揮手(從狀態的角度分析)
但是,我發覺我的知識來源大多來自《計算機網路-自頂向下》那本,這本書沒有過多的考慮TCP三次握手中的相關狀態轉移細節,導致當時回答的並不是特別好,這次決定好好把這塊知識好好鞏固一下。 首先,我們先來一張大家都非常熟悉的圖: 相信大家對這張圖已經熟得不能再
一起來了解TCP的三次握手,四次揮手
瞭解TCP首先要簡單瞭解OSI七層模型。OSI(開放系統互聯)把網路通訊分為7層,即物理層、資料鏈層、網路層、傳輸層、會話層、表示層、應用層。HTTP是客戶端瀏覽器或其他程式與web伺服器之間的應用層通訊協議,TCP/IP是在傳輸層用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的定義,通俗一點講
嵌入式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
“三次握手,四次揮手”你真的懂嗎?
記得剛畢業找工作面試的時候,經常會被問到:你知道“3次握手,4次揮手”嗎?這時候我會“胸有成竹”地“背誦”前期準備好的“答案”,第一次怎麼怎麼,第二次……答完就沒有下文了,面試官貌似也沒有深入下去的意思,深入下去我也不懂,皆大歡喜! 作為程式設計師,要有“刨根問底”的精神。知其然,更要知其所以然。這篇文章希
圖片詳解TCP連線的三次握手,四次斷開基本原理
圖片詳解TCP連線的三次握手,四次斷開 作者:林子 TCP(TransmissionControl Protocol 傳輸控制協議)是一種面向連線傳輸協議,就像打電話一
為什麼一定要是三次握手,四次揮手
應用層向TCP層傳送用於網間傳輸的、用8位位元組表示的資料流,然後TCP把資料流分割槽成適當長度的報文段(通常受該計算機連線的網路的資料鏈路層的最大傳輸單元(MTU)的限制)。之後TCP把結果包傳給I
socket關於三次握手,四次揮手的理解
socket的建立是全雙工的,所以會有三次握手,但是四次揮手的區別。 客戶端<------------------------------------------->伺服器 握手1,客戶端請求伺服器建立連線(客戶端發); 握手2,伺服器
三次握手,四次揮手 之網路管理基礎命令
三次握手 三次握手 客戶端未發起請求之前處於CLOSED狀態,伺服器未接收到請
網路程式設計之——七層模型與TCP三段握手與四次斷開
轉載請註明出處:https://blog.csdn.net/l1028386804/article/details/83046311 一、C/S架構 客戶端/服務端架構 二、OSI七層架構 七層模型,亦稱OSI(Open System Interconnection)參考模型,是