為了建立一條tcp連線:
(1)請求端傳送乙個syn段指明客戶打算連線的伺服器端口,以及初始序號(isn)。這個syn為報文段1.
(2)伺服器發回包含伺服器的初始序號的syn報文段作為應答。同時,將確認序號設定為客戶的isn加1以對客戶的syn報文段進行確認。乙個syn占用乙個序號
(3)客戶必須將確認序號設定為伺服器的isn加1以對伺服器的syn進行確認
以上過程稱作三次握手
傳送第乙個syn的一端將執行主動開啟,接受這個syn並發回下乙個syn的另一端執行被動開啟。
建立乙個連線需要三次握手,而終止乙個連線需要經過4次握手。
這是由tcp的半關閉造成的。既然乙個tcp全雙工,因此每個方向必須單獨地進行關閉。
和syn一樣,fin占用乙個序號
下圖是連線的建立和終止時間系列
大多數系統建立乙個新連線的最長時間限制是75秒。
tcp軟體採用一種500ms的定時器。這種500ms的定時器用於確定本節中的各種tcp超時。
當我們鍵入命令時,將建立乙個6秒的定時器(12個時鐘滴答),但它可能在之後的5.5~6秒內的任意時刻超時。
儘管定時器初始化為12個時鐘滴答,但定時器會在設定後的第乙個0~500ms中的任意時刻減一。從那以後,定時器大約每隔500ms減一,但在第乙個500ms內是可變的。
最大報文段長度(mss)表示tcp傳往另一端的最大資料的長度。當建立乙個連線時,連線的雙方都要通告各自的mss。
當建立乙個連線時,每一方都有用於通告它期望接受的mss選項(mss選項只能出現在syn報文段中)。如果一方不接受來自另一方的mss值,則mss就定為預設值536位元組(這個預設值允許20位元組的ip首部和20位元組的tcp首部以適合576位元組的ip資料報)
對於乙個乙太網,mss值可達1460位元組。
只有當syn_rcvd狀態是從listen狀態進入,而不是從syn_sent狀態進入時從syn_rcvd狀態回到listen的狀態變遷才是有效地.
對於來自某個連線的較早替身的遲到報文段,2msl等待可防止將它解釋成使用相同插口對新連線的一部分.但這只有在處於2msl等待連線中的主機處於正常工作狀態時才有效.
tcp在重新啟動後的msl秒不能建立任何連線.這就稱作平靜時間
在fin_wait_2狀態我們已經發出fin,並且另一端也對它進行了確認.只有另一端的程序完成這個關閉,我們這段才會從fin_wait_2狀態進入time_wait狀態
這就意味著我們這段可能永遠保持這個狀態.另一端也將處於close_wait狀態,並一直保持這個狀態直到應用層決定進行關閉.
tcp首部中的rst位元是用於」復位」的.
可能產生復位報文段的情況:
當連線請求到達時,目的埠沒有程序正在監聽.
有可能傳送乙個rst復位報文段終止乙個連線,稱為異常釋放
異常終止乙個連線對應用程式有兩個優點
(1)丟棄任何待傳送資料並立即傳送復位報文段;
(2)rst的接收方會區分另一端執行的是異常關閉還是正常關閉.
如果一方已經關閉或異常終止而另一方卻還不知道,我們將這樣的tcp連線稱為半開啟的.
只要不再半開啟的連線上傳輸資料,仍處於連線狀態的一方就不會檢測另一方已經出現異常.
TCP 連線的建立和終止
1.伺服器通過呼叫socket,bind和listen三個函式準備接受外來連線,稱為被動開啟。2.客戶通過呼叫connect發起主動開啟,導致客戶tcp傳送乙個syn同步分節,告訴伺服器將在連線中傳送的資料的初始序列號。syn分節不包含資料,只包含乙個ip首部,乙個tcp首部及可能的tcp選項。3....
TCP連線的建立和終止
一 tcp連線建立 三路握手 1 伺服器必現準備好接受外來的連線,即被動開啟。2 客戶通過呼叫connect發起主動開啟,這導致客戶tcp傳送乙個syn分節,它告訴伺服器客戶將在連線中傳送的資料的初始序列號。3 伺服器必須確認 ack 客戶的syn,同時自己也得傳送乙個syn分節,它含有伺服器將在同...
TCP 連線的建立和終止
三路握手 建立乙個tcp連線時會發生下述情形。1 伺服器必須準備好接受外來的連線。這通常通過呼叫socket bind和listen這3個函式來完成的,我們稱之為被動開啟。2 客戶通過呼叫connect發起主動開啟。這導致客戶tcp傳送乙個syn 同步 分節,它告訴伺服器客戶將在 待建立的 連線中傳...