2.1.1 第一次握手
建立連線。客戶端傳送連線請求報文段,將syn置為1,sequence number為 x;然後,客戶端進入syn_send狀態,等待服務端的確認;
2.1.2 第二次握手
服務端收到syn報文段。伺服器收到客戶端的syn報文段,需要對這個syn報文段進行確認,設定acknowledgment number為sequence number+1;同時,自己自己還要傳送syn請求資訊,將syn位置為1,sequence number為y;伺服器端將上述所有資訊放到乙個報文段(即syn+ack報文段)中,一併傳送給客戶端,此時伺服器進入syn_recv狀態;
2.1.3 第三次握手
客戶端收到伺服器的syn+ack報文段。然後將acknowledgment number設定為y+1,向伺服器傳送ack報文段,這個報文段傳送完畢以後,客戶端和伺服器端都進入established狀態,完成tcp三次握手。
目的:為了防止已失效的連線請求報文段突然又傳送到了服務端,產生錯誤。
已失效的連線請求報文段」的產生在這樣一種情況下:
client發出的第乙個連線請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連線釋放以後的某個時間才到達server。
本來這是乙個早已失效的報文段。 假設不採用「三次握手」,server收到此失效的連線請求報文段後,就誤認為是client再次發出的乙個新的連線請求。於是就向client發出確認報文段,同意建立連線。由於現在client並沒有發出建立連線的請求,因此不會理睬server的確認,也不會向server傳送資料。但server卻以為新的運輸連線已經建立,並一直等待client發來資料。這樣,server的很多資源浪費。
採用「三次握手」的辦法可以防止上述現象發生。例如剛才那種情況,client不會向server的確認發出確認。server由於收不到確認,就知道client並沒有要求建立連線。
3.1.1 第一次揮手
主機a(可以使客戶端,也可以是伺服器端),設定sequence number和acknowledgment number,向主機b傳送乙個fin報文段;此時,主機a進入fin_wait_1狀態;這表示主機a沒有資料要傳送給主機b了;
3.1.2 第二次揮手
主機b收到了主機a傳送的fin報文段,向主機a回乙個ack報文段,acknowledgment number為sequence number加1;主機a進入fin_wait_2狀態;主機b告訴主機a,我「同意」你的關閉請求;
3.1.3 第三次揮手
主機b向主機a傳送fin報文段,請求關閉連線,同時主機b進入 last_ack 狀態;
3.1.4 第四次揮手
主機a收到主機b傳送的fin報文段,向主機b傳送ack報文段,確認關閉連線。然後主機a進入time_wait狀態;主機b收到主機a的ack報文段以後,此時,主機a等待2msl後依然沒有收到回覆,則關閉連線。
q:為什麼等待2msl後依然沒有收到回覆,就可以關閉連線了呢?
a:假如主機b沒有收到主機a的 ack 報文,則主機b肯定在 1個msl之後會認為主機a沒有收到自己的 fin 報文,會重發自己的 fin 報文,主機a 2msl 沒收到回覆,則證明主機b 已經收到報文,已經關閉連線,所以主機a此時也可以關閉連線了。
TCP三次握手 四次揮手
tcp 三次握手 tcp 連線是通過三次握手進行初始化的。三次握手的目的是同步連線雙方的序列號和確認號並交換 tcp 視窗大小資訊。以下步驟概述了通常情況下客戶端計算機聯絡伺服器計算機的過程 1.客戶端向伺服器傳送乙個syn置位的tcp報文,其中包含連線的初始序列號x和乙個視窗大小 表示客戶端上用來...
TCP三次握手 四次揮手
服務端的tcp程序先建立傳輸控制塊tcb,準備接受客戶端程序的連線請求,然後服務端程序處於listen狀態,等待客戶端的連線請求,如有,則作出響應。1 客戶端的tcp程序也首先建立傳輸控制模組tcb,然後向服務端發出連線請求報文段,該報文段首部中的syn 1,ack 0,同時選擇乙個初始序號seq ...
TCP三次握手四次揮手
tcp transmission control protocol 傳輸控制協議 tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線。位碼即tcp標誌位,有6種標誌 urg urgent緊急 ack acknowledgement 確認 psh push傳送 rst...