tcp的連線使用三次握手的方式,釋放是使用四次揮手的方式,本文通過**說明連線和釋放的過程。
建立連線時,客戶端a主動開啟連線,伺服器b被動開啟連線。
b的tcp伺服器程序先建立傳輸控制塊tcb,準備接收客戶程序a的連線請求。此時伺服器就處於listen(收聽)狀態,等待客戶的連線請求。
a的tcp客戶程序也是首先建立tcb,然後向b傳送連線請求報文段。即傳送syn=1的報文段,tcp規定,syn報文段不能攜帶資料,但要消耗掉乙個序號,所以seq=u。此時a進入syn-sent(同步已傳送)狀態。
b收到a的連線請求報文段時,若同意連線,則向a傳送確認,在確認報文段中將syn和ack都置為1,確認號為ack=x+1,這個報文段也不能攜帶資料,但同樣也消耗掉乙個序號,seq=y。此時b進入syn-rcvd(同步收到)狀態。
a收到b的確認後,還要向b給出確認,確認報文段的ack置為1,確認號ack=y+1,序號seq=x+1.tcp規定,ack報文段可以攜帶資料,不攜帶則不消耗序號。 這時,tcp連線已經建立,a進入setablished(已建立連線)狀態。
b收到a的確認後,也進入setablished狀態。
為什麼a還要傳送一次確認?
這主要是為了防止已失效的連線請求報文段突然又傳送到了b,產生錯誤。
ex: a發出到第乙個連線請求報文段,因在某些網路節點長時間滯留,a沒有收到確認,於是a再重傳一次連線請求,這次建立了連線。傳輸完成後釋放連線,而之前滯留的請求在之後的某個時間到達b,此時b誤認為a又發出一次新的連線,於是向a發出確認報文段,同意建立連線。假定不採用三次握手, 那麼只要b發出確認,連線就建立,但a沒有發出請求,不會對b的確認做出響應,也不會向b傳送資料,但b一直在等待a傳送資料,此時造成了b的資源的極大浪費。
採用三次握手可以防止上述現象的發生。
a應用程序先向其tcp發出連線釋放報文段,並停止再傳送資料,主動關閉tcp連線。
a傳送釋放報文段,fin置為1,seq=u,(等於前面已傳送過的資料最後乙個位元組的序號加1)。此時,a進入fin-wait-1(終止等待1)狀態。
b收到連線釋放報文段後即發出確認,ack=u+1,seq=v,b進入close-wait(關閉等待狀態)。tcp伺服器程序通知高層應用程序,a到b方向連線釋放,這時tcp出於半關閉狀態,即a不再傳送資料到b,但仍要接收b傳送的資料,也就是說b到a的連線並未關閉。
a收到b的確認後,進入fin-wait-2(終止等待2)狀態,等待b發出釋放連線。
b若無資料傳送,則傳送連線釋放報文段,fin=1,b進入last-ack(最後確認)狀態,等待a確認。
a收到b的連線釋放報文段時後,必須對此發出確認,ack=1,a進入time-wait(時間等待)狀態。
此時,tcp連線並沒有釋放掉,必須經過時間等待計時器設定的時間2msl後,a才能進入closed狀態。
為什麼a必須等待2msl的時間?
第一,為了保證a傳送的最後乙個確認ack報文段能夠到達b。若ack報文段丟失,b無法接收確認就重傳了釋放報文段,而此時如果沒有等待就立即釋放連線,a就無法接收b重傳的fin+ack報文段,無法做出響應,b就無法按正常步驟進入closed狀態。
第二,防止「已經失效的連線請求報文段」出現在本鏈結中。a傳送完最後乙個確認報文段後,再經過2msl時間,就可以使本鏈結持續的時間內所產生的所有報文段都從網路中消失。這樣可以使下乙個新的連線中不會出現這種舊的連線請求報文段。
b只要收到a發出的確認,就進入closed狀態。b結束tcp連線的時間比a早一些。
若客戶端和伺服器已經建立連線,而客戶端突然發生故障,這種情況的處理方式?
tcp設有乙個保活計時器(keepalive timer),伺服器每收到一次客戶的資料,就重新設定保活計時器,時間的設定通常是兩小時,若兩小時沒有收到客戶資料,就傳送乙個探測報文段,以後每隔75分鐘傳送一次,若一連傳送10個探測報文段後仍無客戶的響應,伺服器就認為客戶端處理故障,關閉連線。
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...