置位概念:根據tcp的包頭字段,存在3個重要的標識ack、syn、fin
ack:表示驗證字段 syn:位數置1,表示建立tcp連線 fin:位數置1,表示斷開tcp連線三次握手過程說明:
1.由客戶端傳送建立tcp連線的請求報文,其中報文中包含seq序列號,是由傳送端隨機生成的,並且將報文中的syn欄位置為1,表示需要建立tcp連線。(syn=1,seq=x,x為隨機生成數值)2.由服務端回覆客戶端傳送的tcp連線請求報文,其中包含seq序列號,是由回覆端隨機生成的,並且將syn置為1,而且會產生ack欄位,ack欄位數值是在客戶端傳送過來的序列號seq的基礎上加1進行回覆,以便客戶端收到資訊時,知曉自己的tcp建立請求已得到驗證。(syn=1,ack=x+1,seq=y,y為隨機生成數值)這裡的ack加1可以理解為是確認和誰建立連線。3.客戶端收到服務端傳送的tcp建立驗證請求後,會使自己的序列號加1表示,並且再次回覆ack驗證請求,在服務端發過來的seq上加1進行回覆。(syn=1,ack=y+1,seq=x+1)
四次揮手過程說明:
1.客戶端傳送斷開tcp連線請求的報文,其中報文中包含seq序列號,是由傳送端隨機生成的,並且還將報文中的fin欄位置為1,表示需要斷開tcp連線。(fin=1,seq=x,x由客戶端隨機生成)2.服務端會回覆客戶端傳送的tcp斷開請求報文,其包含seq序列號,是由回覆端隨機生成的,而且會產生ack欄位,ack欄位數值是在客戶端發過來的seq序列號基礎上加1進行回覆,以便客戶端收到資訊時,知曉自己的tcp斷開請求已經得到驗證。(fin=1,ack=x+1,seq=y,y由服務端隨機生成)3.服務端在回覆完客戶端的tcp斷開請求後,不會馬上進行tcp連線的斷開,服務端會先確保斷開前,所有傳輸到a的資料是否已經傳輸完畢,一旦確認傳輸資料完畢,就會將回覆報文的fin欄位置1,並且產生隨機seq序列號。(fin=1,ack=x+1,seq=z,z由服務端隨機生成)4.客戶端收到服務端的tcp斷開請求後,會回覆服務端的斷開請求,包含隨機生成的seq欄位和ack欄位,ack欄位會在服務端的tcp斷開請求的seq基礎上加1,從而完成服務端請求的驗證回覆。(fin=1,ack=z+1,seq=h,h為客戶端隨機生成)
至此tcp斷開的4次揮手過程完畢
1.一開始,建立連線之前伺服器和客戶端的狀態都為closed;2.伺服器建立socket後開始監聽,變為listen狀態;3.客戶端請求建立連線,向伺服器傳送syn報文,客戶端的狀態變味syn_sent;4.伺服器收到客戶端的報文後向客戶端傳送ack和syn報文,此時伺服器的狀態變為syn_rcvd;5.然後,客戶端收到ack、syn,就向伺服器傳送ack,客戶端狀態變為established;6.伺服器端收到客戶端的ack後變為established。此時3次握手完成,連線建立!
由於tcp連線是全雙工的,斷開連線會比建立連線麻煩一點點。
1.客戶端先向伺服器傳送fin報文,請求斷開連線,其狀態變為fin_wait1;2.伺服器收到fin後向客戶端傳送ack,伺服器的狀態圍邊close_wait;3.客戶端收到ack後就進入fin_wait2狀態,此時連線已經斷開了一半了。如果伺服器還有資料要傳送給客戶端,就會繼續傳送;4.直到發完資料,就會傳送fin報文,此時伺服器進入last_ack狀態;5.客戶端收到伺服器的fin後,馬上傳送ack給伺服器,此時客戶端進入time_wait狀態;6.再過了2msl長的時間後進入closed狀態。伺服器收到客戶端的ack就進入closed狀態。
至此,還有乙個狀態沒有出來:closing狀態。
closing狀態表示:客戶端傳送了fin,但是沒有收到伺服器的ack,卻收到了伺服器的fin,這種情況發生在伺服器傳送的ack丟包的時候,因為網路傳輸有時會有意外。
•listen:等待從任何遠端tcp 和埠的連線請求。•syn_sent:傳送完乙個連線請求後等待乙個匹配的連線請求。•syn_received:傳送連線請求並且接收到匹配的連線請求以後等待連線請求確認。•established:表示乙個開啟的連線,接收到的資料可以被投遞給使用者。連線的資料傳輸階段的正常狀態。•fin_wait_1:等待遠端tcp 的連線終止請求,或者等待之前傳送的連線終止請求的確認。•fin_wait_2:等待遠端tcp 的連線終止請求。•close_wait:等待本地使用者的連線終止請求。•closing:等待遠端tcp 的連線終止請求確認。•last_ack:等待先前傳送給遠端tcp 的連線終止請求的確認(包括它位元組的連線終止請求的確認)•time_wait:等待足夠的時間過去以確保遠端tcp 接收到它的連線終止請求的確認。•time_wait兩個存在的理由:•可靠的實現tcp全雙工連線的終止;•允許老的重複分節在網路中消逝。•closed:不在連線狀態(這是為方便描述假想的狀態,實際不存在)
tcp三次握手 以及四次揮手
首先client端傳送連線請求報文,server段接受連線後回覆ack報文,並為這次連線分配資源。client端接收到ack報文後也向server段發生ack報文,並分配資源,這樣tcp連線就建立了。那如何斷開連線呢?簡單的過程如下 注意 中斷連線端可以是client端,也可以是server端。假設...
tcp 四次揮手 TCP的三次握手和四次揮手
三次握手 第一次握手 客戶端傳送syn包 syn x 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack x 1 同時自己也傳送乙個syn包 syn y 即syn ack包,此時伺服器進入syn recv狀態 第三次握手 客戶端收到伺服...
TCP三次握手和四次揮手
一 tcp三次握手 three way handshake 1 tcp三次握手的作用 三次握手的目的是連線伺服器指定埠,建立tcp連線,並同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。在socket程式設計中,客戶端執行connect 時,將觸發三次握手。2 tcp三次握手過程 第一步 ...