1.tcp連線的建立
設主機b執行乙個伺服器程序,它先發出乙個被動開啟命令,告訴它的tcp要準備接收客戶程序的連續請求,然後服務程序就處於聽的狀態。不斷檢測是否有客戶程序發起連續請求,如有,作出響應。設客戶程序執行在主機a中,他先向自己的tcp發出主動開啟的命令,表明要向某個ip位址的某個埠建立運輸連線,過程如下:
1)主機a的tcp向主機b的tcp發出連線請求報文段,其首部中的同步位元syn應置1,同時選擇乙個序號x,表明在後面傳送資料時的第乙個資料位元組的序號是x。
2)主機b的tcp收到連線請求報文段後,如同意,則發揮確認。在確認報文段中應將syn置為1,確認號應為x+1,同時也為自己選擇乙個序號y
3)主機a的tcp收到此報文段後,還要向b給出確認,其確認號為y+1
4)主機a的tcp通知上層應用程序,連線已經建立,當主機b的tcp收到主機a的確認後,也通知上層應用程序,連線建立。
2.tcp連線的釋放
在資料傳輸完畢之後,通訊雙方都可以發出釋放連線的請求。釋放連線的過程為如上圖所示:
1)資料傳輸結束後,主機a的應用程序先向其tcp發出釋放連線請求,不在傳送資料。tcp通知對方要釋放從a到b的連線,將發往主機b的tcp報文段首部的終止位元fin置為1,序號u等於已傳送資料的最後乙個位元組的序號加1。
2)主機b的tcp收到釋放連線通知後發出確認,其序號為u+1,同時通知應用程序,這樣a到b的連線就釋放了,連線處於半關閉狀態。主機b不在接受主機a發來的資料;但主機b還向a傳送資料,主機a若正確接收資料仍需要傳送確認。
3)在主機b向主機a的資料傳送結束後,其應用程序就通知tcp釋放連線。主機b發出的連線釋放報文段必須將終止位元置為1,並使其序號w等於前面已經傳送過的資料的最後乙個位元組的序號加 1,還必須重複上次已傳送過的ack=u+1。
4)主機a對主機b的連線釋放報文段發出確認,將ack置為1,ack=w+1, seq=u+1。這樣才把從b到a的反方向連線釋放掉,主機a的tcp再向其應用程序報告,整個連線已經全部釋放。
3.注意的問題
四次揮手釋放連線時,等待2msl的意義
4.tcp的有限狀態機
連線的建立和釋放所要求的步驟可以用乙個有限狀態機來表達,該狀態機有11種狀態。每一種狀態中都存在一些合法的事件,當合法事件發生的時候,可能需要採取某個動作。當其他事件發生的時候,則報告乙個錯誤。
狀態關鍵字
解釋說明
closed
關閉狀態,沒有連線活動或正在進行
listen
監聽狀態,伺服器正在等待連線進入
syn rcvd
收到乙個連線請求,尚未確認
syn sent
已經發出連線請求,等待確認
established
連線建立,正常資料傳輸狀態
fin wait 1
(主動關閉)已經傳送關閉請求,等待確認
fin wait 2
(主動關閉)收到對方關閉確認,等待對方關閉請求
timed wait
完成雙向關閉,等待所有分組死掉
closing
雙方同時嘗試關閉,等待對方確認
close wait
(被動關閉)收到對方關閉請求,已經確認
last ack
(被動關閉)等待最後乙個關閉確認,並等待所有分組死掉
伺服器程序變遷的過程(粗虛線)
TCP連線過程
1 建立連線協議 三次握手 1 客戶端傳送乙個帶syn標誌的tcp報文到伺服器。這是三次握手過程中的報文1.2 伺服器端回應客戶端的,這是三次握手中的第2個報文,這個報文同時帶ack標誌和syn標誌。因此它表示對剛才客戶端syn報文的回應 同時又標誌syn給客戶端,詢問客戶端是否準備好進行資料通訊。...
TCP連線過程及狀態變化
狀態狀態描述 closed 表示初始狀態。對服務端和客戶端雙方都一樣。listen 表示監聽狀態。服務端呼叫了listen函式,可以開始accept連線了。syn sent 表示客戶端已經傳送了syn報文。當客戶端呼叫connect函式發起連線時,首先發syn給服務端,然後自己進入syn sent狀...
TCP連線過程及報文解析
可能大家都聽過tcp建立連線時需要經歷三次握手和四次揮手的。那麼具體的握手揮手的過程是怎麼樣的呢?這篇文章就通過wireshark抓包來了解tcp連線建立和斷開的過程。實驗方法 寫一段簡單的 客戶端和服務端,分別部署,讓客戶端主動像伺服器發起連線,隨後斷開。讓wireshark抓股這個過程中產生了哪...