Tcp連接的建立與終止

Tcp的建立,終止

TCP報文段的格式

       對於TCP報文段,每個輸出行開始按如下格式顯示

       源 > 目的 : 標誌

      

這個字段的格式是開始的序號,一個冒號,隱含的結尾序號及圓括號內的數據字節數

第二行中字段ack 1415531522表示確認序號

Win 4096表示發端通告的窗口大小

Tcp的建立稱之爲三次握手

1.    請求端發送一個SYN段指明客戶打算連接的服務器的端口,以及初始序號(ISN).這個SYN段被稱爲報文段1.

2.    服務器發回包含服務器的初始序號的SYN報文段作爲應答.同時,將確認序號設置爲客戶的初始序號(ISN)加1以對客戶的SYN報文段進行確認.一個SYN佔用一個序號.

3.    客戶必須將確認序號設置爲服務器的ISN加1以對服務器的SYN報文段進行確認

 

ISN是隨時間變化的


Tcp的終止被稱爲四次揮手

由於TCP連接是全雙工的(即數據在兩個方向上能同時傳遞),因此每個方向必須單獨的進行關閉.這原則就是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向連接.

  收到一個FIN只以爲着在這一方向上沒有數據流動.一個TCP連接在收到一個FIN後仍能發送數據.

  首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉

(1)  TCP客戶端發送一個FIN,用來關閉客戶到服務器的數據傳輸.

(2)  服務器收到這個FIN,它發回一個ACK,確認序號爲收到的序號+1.和SYN一樣,一個FIN將佔用一個序號.

(3)  服務器關閉客戶端的鏈接,發送一個FIN給客戶端.

(4)  客戶端發回ACK報文確認,並將確認序號設置爲收到序號+1.


最大報文長度MSS

       最大報文段長度(MSS)表示TCP傳往另一端的最大快數據的長度.當一個鏈接建立時,連接的雙方都要通告各自的MSS.

       當TCP發送一個SYN時,它能將MSS值設置爲外出接口上的MTU長度減去固定的IP首部和TCP首部.對於一個以太網,MSS值可達1460字節.

       如果目的IP地址爲”非本地的”,MSS通常的默認值爲536.而且,如果中間的傳輸網絡的MSS更小的話,這個值還會變的更小.

TCP的半關閉

       TCP提供了連接的一端在結束它的發送後還能接收來自另一端數據的能力.這就是所謂的半關閉.

    TCP狀態變遷圖


2MSL等待狀態

       TIME_WAIT狀態也稱爲2MSL等待狀態.每個具體TCP實現必須選擇一個報文段最大生存時間MSL.它是任何報文段被丟棄前在網絡內的最大時間

       對於一個具體實現所給定的MSL值,處理的原則是:當TCP執行一個主動關閉,併發回最後一個ACK,該鏈接必須在TIME_WAIT狀態停留時間爲2倍的MSL.這樣可讓TCP再次發送最後的ACK以防這個ACK丟失(另一端超時並重發)

       這種2MSL等待的另一個結果是這個TCP連接在2MSL等待期間,定義這個連接的插口(客戶端的ip地址和端口號,服務器的IP地址和端口號)不能被使用.這個連接只能在2MSL結束後才能使用.

平靜時間的概念

如果處於2MSL等待端口的主機出現故障,它會在MSL秒內重新啓動,並在重啓後的MSL秒內不能建立任何連接

FIN_WAIT_2狀態

:這就是著名的半關閉的狀態了,這是在關閉連接時,客戶端和服務器兩次握手之後的狀態。在這個狀態下,應用程序還有接受數據的能力,但是已經無法發送數據,但是也有一種可能是,客戶端一直處於FIN_WAIT_2狀態,而服務器則一直處於WAIT_CLOSE狀態,而直到應用層來決定關閉這個狀態。

復位報文段

       RST:TCP首部中的6個標誌比特之一,表示重置連接,復位連接

       一般來說,無論何時一個報文段發往基準的連接出現錯誤,TCP都會發出一個復位報文段.

到不存在的端口的連接請求

       對於UDP,當一個數據報到達目的端口時,該端口沒在使用,他將產生一個ICMP不可達的信息.而TCP則使用復位.

異常終止一個連接

終止一個連接的正常方式是一方發送FIN.有時這也稱爲有序釋放,應爲在所有排隊數據都已發送之後才發送FIN,正常情況下沒有任何數據丟失.但也有可能發送一個復位報文段而不是FIN來中途釋放一個連接.有時稱這位異常釋放

       異常終止一個連接對應用程序來說有兩個優點:

(1)  丟棄任何代發數據並立即發送復位報文段;

(2)  RST的接收方會區分另一端執行的是異常關閉還是正常關閉.

檢測半打開連接

如果一方已經關閉或異常終止連接而另一方缺還不知道,我們將這樣的TCP連接稱爲半打開的.任何一端的主機異常都可能導致發生這種情況.只要不打算在半打開連接上傳輸數據,仍處於連接狀態的一方就不會檢測另一方已經出現異常.

       半打開連接的另一方產檢原因是當客戶主機突然掉電而不是正常的結束客戶應用程序後再關機,服務器主機重啓後,從客戶向服務器發送另一行字符.由於服務器的TCP已經重新啓動,它將丟失復位前的所有信息,因此他不知道數據報文段中提到的連接.TCP的處理原則是接受方以復位作爲應答.

發佈了24 篇原創文章 · 獲贊 2 · 訪問量 7980
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章