通訊基本流程
我們都知道tcp協議是面向連線的協議,可以保證資料不丟失,不重複,不亂序的到達接收方。
tcp的通訊過程大概是下圖所示。
上圖為tcp整個完整的通訊過程,首先經過三次握手建立連線(綠色部分),連線建立後可以正常通訊(藍色部分),通訊完畢需要四次揮手斷開連線(紅色部分)。
三次握手
三次握手可以這麼理解:
tcp客戶端是男孩子,tcp伺服器是女孩子,男孩子要追女孩子,首先要建立戀愛關係。需要乙個建立戀愛關係的過程。
男孩:我們可以戀愛嗎?(客戶端請求伺服器建立連線)
女孩:你想追我?想清楚了!(伺服器要求客戶端確認連線)
男孩:沒錯,你就是我的夢中情人!(客戶端確認連線)
三次握手確立了tcp伺服器和客戶端的「戀愛關係」。為什麼需要三次握手,兩次握手不行嗎?從通訊角度看,對於客戶端兩次就夠了,但對於伺服器不夠,因為,兩次握手伺服器僅僅知道客戶端和伺服器之間的通道是通的,但伺服器和客戶端之間還未知,所以需要收到客戶端發來的確認訊息雙方才能確認雙方的訊息通路都是ok的。
四次揮手
對於連線的斷開需要四次揮手,可以理解為男孩和女孩要分手,需要經過一番如下商量。
男孩:我們不合適,我們分手吧。(客戶端已經沒有資料可以傳輸)
女孩:什麼?這麼快就分手了,不能這麼快完,我要給你算總賬!(伺服器這端還有未傳送完的資料)
女孩給男孩算賬中……(沒有傳送完的資料繼續傳輸)
女孩:算好了,分手!(伺服器這端資料傳輸完畢)
男孩:好的,我們從今後還是朋友……(等待time_wait時間到,恢復單身)
這裡有個注意的點是,客戶端在收到伺服器傳送的資料傳輸完畢的訊息後(第三次揮手),不能立即關閉連線(恢復單身,尋找新歡),必須等待2msl時間才能關閉,因為這期間最後一次揮手伺服器未必能收到,如果沒有收到,伺服器會重新傳送第三次揮手的訊息,這時候如果客戶端關閉,將無法回應第四次揮手訊息,使得四次揮手過程無法完成。
具體描述
第一次握手:建立連線時,客戶端傳送syn包(syn=x)到伺服器,並進入syn_sent狀態,等待伺服器確認;syn:同步序列編號(synchronize sequence numbers)。
第二次握手:伺服器收到syn包,必須確認客戶的syn(ack=x+1),同時自己也傳送乙個syn包(syn=y),即syn+ack包,此時伺服器進入syn_recv狀態;
第三次握手:客戶端收到伺服器的syn+ack包,向伺服器傳送確認包ack(ack=y+1),此包傳送完畢,客戶端和伺服器進入established(tcp連線成功)狀態,完成三次握手。
對上圖四次揮手的描述
1)客戶端程序發出連線釋放報文,並且停止傳送資料。釋放資料報文首部,fin=1,其序列號為seq=u(等於前面已經傳送過來的資料的最後乙個位元組的序號加1),此時,客戶端進入fin-wait-1(終止等待1)狀態。 tcp規定,fin報文段即使不攜帶資料,也要消耗乙個序號。
2)伺服器收到連線釋放報文,發出確認報文,ack=1,ack=u+1,並且帶上自己的序列號seq=v,此時,服務端就進入了close-wait(關閉等待)狀態。tcp伺服器通知高層的應用程序,客戶端向伺服器的方向就釋放了,這時候處於半關閉狀態,即客戶端已經沒有資料要傳送了,但是伺服器若傳送資料,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個close-wait狀態持續的時間。
3)客戶端收到伺服器的確認請求後,此時,客戶端就進入fin-wait-2(終止等待2)狀態,等待伺服器傳送連線釋放報文(在這之前還需要接受伺服器傳送的最後的資料)。
4)伺服器將最後的資料傳送完畢後,就向客戶端傳送連線釋放報文,fin=1,ack=u+1,由於在半關閉狀態,伺服器很可能又傳送了一些資料,假定此時的序列號為seq=w,此時,伺服器就進入了last-ack(最後確認)狀態,等待客戶端的確認。
5)客戶端收到伺服器的連線釋放報文後,必須發出確認,ack=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進入了time-wait(時間等待)狀態。注意此時tcp連線還沒有釋放,必須經過2∗∗msl(最長報文段壽命)的時間後,當客戶端撤銷相應的tcb後,才進入closed狀態。
6)伺服器只要收到了客戶端發出的確認,立即進入closed狀態。同樣,撤銷tcb後,就結束了這次的tcp連線。可以看到,伺服器結束tcp連線的時間要比客戶端早一些。
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...