tcp連線是通過三次握手來連線的。
當客戶端向伺服器發起連線請求時,客戶端會傳送同步序列標號syn
到伺服器,在這裡我們設syn
為m,等待伺服器確認,這時客戶端的狀態為syn
_sent。
當伺服器收到客戶端傳送的syn
後,伺服器要做的是確認客戶端傳送過來的syn
,在這裡伺服器傳送確認包ack
,這裡的ack
為m+1,意思是說「我收到了你傳送的syn
了」,同時,伺服器也會向客戶端傳送乙個syn
包,這裡我們設syn
為n。這時伺服器的狀態為syn
_recv。
一句話,伺服器端傳送syn
和ack
兩個包。
客戶端收到伺服器傳送的syn
和ack
包後,需向伺服器傳送確認包ack
,「我也收到你傳送的syn
了,我這就給你發個確認過去,然後我們即能合體了」,這裡的ack
為n+1,傳送完畢後,客戶端和伺服器的狀態為establish,即tcp連線成功。
在三次握手中,客戶端和伺服器端都傳送兩個包syn
和ack
,只不過伺服器端的兩個包是一次性發過來的,客戶端的兩個包是分兩次傳送的。
三次握手示意圖如下(純手繪,見諒見諒):
當a端和b端要斷開連線時,需要四次握手,這裡稱為四次揮手。
斷開連線請求可以由客戶端發出,也可以由伺服器端發出,在這裡我們稱a端向b端請求斷開連線。
a端向b端請求斷開連線時會向b端傳送乙個帶有fin
標記的報文段,這裡的fin
是fin
ish的意思。
b端收到a傳送的fin
後,b段現在可能現在還有資料沒有傳完,所以b端並不會馬上向a端傳送fin
,而是先傳送乙個確認序號ack
,意思是說「你發的斷開連線請求我收到了,但是我現在還有資料沒有發完,請稍等一下唄」。
當b端的事情忙完了,那麼此時b端就可以斷開連線了,此時b端向a端傳送fin
序號,意思是這次可以斷開連線了。
a端收到b端傳送的fin
後,會向b端傳送確認ack
,然後經過兩個msl時長後斷開連線。
msl是maximum segment lifetime,最大報文段生存時間,2個msl是報文段傳送和接收的最長時間。
四次揮手示意圖如下(純手繪,見諒見諒):
tcp連線時是三次握手,那麼兩次握手可行嗎?
在《計算機網路》中是這樣解釋的:已失效的連線請求報文段」的產生在這樣一種情況下:client發出的第乙個連線請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連線釋放以後的某個時間才到達server。本來這是乙個早已失效的報文段。但server收到此失效的連線請求報文段後,就誤認為是client再次發出的乙個新的連線請求。於是就向client發出確認報文段,同意建立連線。假設不採用「三次握手」,那麼只要server發出確認,新的連線就建立了。由於現在client並沒有發出建立連線的請求,因此不會理睬server的確認,也不會向server傳送ack
包。這樣就會白白浪費資源。
而經過三次握手,客戶端和伺服器都有應有答,這樣可以確保tcp正確連線。
在tcp連線中,伺服器端的syn
和ack
向客戶端傳送是一次性傳送的,而在斷開連線的過程中,b端向a端傳送的ack
和fin
是是分兩次傳送的。因為在b端接收到a端的fin
後,b端可能還有資料要傳輸,所以先傳送ack
,等b端處理完自己的事情後就可以傳送fin
斷開連線了。
前文說到
msl是maximum segment lifetime,最大報文段生存時間,2個msl是報文段傳送和接收的最長時間。
假定網路不可靠,那麼第四次傳送的ack
可能丟失,即b端無法收到這個ack
,如果b端收不到這個確認ack
,b端會定時向a端重**送fin
,直到b端收到a的確認ack
。所以這個2msl就是用來處理這個可能丟失的ack
的。 tcp的4次揮手 三次握手
1.tcp短連線 模擬一種tcp短連線的情況 1.client 向 server 發起連線請求 2.server 接到請求,雙 建 連線 3.client 向 server 傳送訊息 4.server 回應 client 5.一次讀寫完成,此時雙方任何乙個都可以發起 close 操作 在步驟5中,一...
tcp的三次握手和4次揮手
第一次握手 host1傳送乙個tcp標誌位syn 1 ack 0的資料報給host2,並隨機會產生乙個sequence number 3233.當host2接收到這個資料後,host2由syn 1可知客戶端是想要建立連線 第二次握手 host2要對客戶端的聯機請求進行確認,向host1傳送應答號ac...
TCP協議的三次握手 4次揮手
tcp的連線建立是乙個三次握手過程,目的是為了通訊雙方確認開始序號,以便後續通訊的有序進行。主要步驟如下 連線開始時,連線建立方 client 傳送syn包,幷包含了自己的初始序號a 連線接受方 server 收到syn包以後會回覆乙個syn ack包,其中包含了對上乙個a包的回應資訊ack,回應的...