tcp/ip
的三次握手和四次分手以及超時機制
tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線:
位碼即tcp
標誌位,有6
種標示:syn(synchronous
建立聯機
)ack(acknowledgement
確認)psh(push
傳送)fin(finish
結束)rst(reset
重置)urg(urgent
緊急)sequencenumber(
順序號碼
)acknowledge number(
確認號碼)
第一次握手:主機
a傳送位碼為
syn=
1,隨機產生
seqnumber=1234567
的資料報到伺服器,主機b由
syn=1
知道,a
要求建立聯機;
第二次握手:主機
b收到請求後要確認聯機資訊,向a傳送
acknumber=(主機a
的seq+1),syn=1,ack=1,
隨機產生
seq=7654321
的包第三次握手:主機
a收到後檢查
acknumber
是否正確,即第一次傳送的
seqnumber+1,
以及位碼
ack是否為
1,若正確,主機
a會再傳送
acknumber=(主機b
的seq+1),ack=1
,主機b
收到後確認
seq值與
ack=1
則連線建立成功。
完成三次握手,主機
a與主機
b開始傳送資料。
在tcp/ip
協議中,
tcp協議提供可靠的連線服務,採用三次握手建立乙個連線。
第一次握手:建立連線時,客戶端傳送
syn包
(syn=j)
到伺服器,並進入
syn_send
狀態,等待伺服器確認;
第二次握手:伺服器收到
syn包,必須確認客戶的
syn(
ack=j+1
),同時自己也傳送乙個
syn包(
syn=k
),即syn+ack
包,此時伺服器
進入syn_recv
狀態;第三次握手:客戶端收到伺服器的
syn+
ack包,向伺服器傳送確認包
ack(ack=k+1)
,此包傳送完畢,客戶端和伺服器進入
established
狀態,完成三次握手。
完成三次握手,客戶端與伺服器開始傳送資料.
採用四次分手斷開一條連線:
由於tcp
連線是全雙工的,因此每個方向都必須單獨進行關閉。這個原則是當一方完成它的資料傳送任務後就能傳送乙個
fin來終止這個方向的連線。收到乙個
fin只意味著這一方向上沒有資料流動,乙個
tcp連線在收到乙個
fin後仍能傳送資料。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。(1
)客戶端
a傳送乙個
fin,用來關閉客戶
a到伺服器
b的資料傳送(報文段4)。
(2)伺服器
b收到這個
fin,它發回乙個
ack,確認序號為收到的序號加
1(報文段
5)。和
syn一樣,乙個
fin將占用乙個序號。(3
)伺服器
b關閉與客戶端
a的連線,傳送乙個
fin給客戶端
a(報文段6)。
(4)客戶端a發回
ack報文確認,並將確認序號設定為收到序號加
1(報文段7)。
1.為什麼建立連線協議是三次握手,而關閉連線卻是四次握手呢?
這是因為服務端的
listen
狀態下的
socket
當收到syn
報文的建連請求後,它可以把
ack和
syn(
ack起應答作用,而
syn起同步作用)放在乙個報文裡來傳送。但關閉連線時,當收到對方的
fin報文通知時,它僅僅表示對方沒有資料傳送給你了;但未必你所有的資料都全部傳送給對方了,所以你可以未必會馬上會關閉
socket,
也即你可能還需要傳送一些資料給對方之後,再傳送
fin報文給對方來表示你同意現在可以關閉連線了,所以它這裡的
ack報文和
fin報文多數情況下都是分開傳送的。
2.為什麼
time_wait
狀態還需要等
2msl
後才能返回到
closed
狀態?這是因為雖然雙方都同意關閉連線了,而且握手的
4個報文也都協調和傳送完畢,按理可以直接回到
closed
狀態(就好比從
syn_send
狀態到establish
狀態那樣);但是因為我們必須要假想網路是不可靠的,你無法保證你最後傳送的
ack報文會一定被對方收到,因此對方處於
last_ack
狀態下的
socket
可能會因為超時未收到
ack報文,而重發
fin報文,所以這個
time_wait
狀態的作用就是用來重發可能丟失的
ack報文。
TCP IP三次握手,四次分手
tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線 位碼即tcp標誌位,有6種標示 syn synchronous建立聯機 ack acknowledgement 確認 psh push傳送 fin finish結束 rst reset重置 urg urgent緊急...
TCP IP 三次握手四次分手
在tcp ip協議中,tcp協議提供可靠的連線服務,採用三次握手建立乙個連線,如圖1所示。1 第一次握手 建立連線時,客戶端a傳送syn包 syn j 到伺服器b,並進入syn send狀態,等待伺服器b確認。a向b請求連線 2 第二次握手 伺服器b收到syn包,必須確認客戶a的syn ack j ...
關於TCP IP三次握手和四次分手的理解
其實是事務發展的一種抽象,更形象的比喻為 主要是便於理解啊,網上是有神人的 三次握手流程 客戶端發個請求 開門吶,我要進來 給伺服器 伺服器發個 進來吧,我去給你開門 給客戶端 客戶端有很客氣的發個 謝謝,我要進來了 給伺服器 四次揮手流程 客戶端發個 時間不早了,我要走了 給伺服器,等伺服器起身送...