TCP/IP協議詳解之 TCP協議學習筆記

TCP/IP協議詳解之 TCP協議學習筆記

 

一、TCP提供一種面向連接到、可靠的字節運輸層服務。

     面向連接指 雙方 (廣播或多播不能用於TCP )進行通信必須先建立Tcp連接。

     可靠性指  1> 能夠處理數據傳輸過程中被破壞問題;

2> 能夠處理重複數據接收問題;

3> 能夠發現數據丟失以及對此進行有效解決;

4> 能夠處理接收端數據亂序到達問題。

     可採用數據重傳和數據確認應答機制來完成TCP 協議的可靠性數據傳輸。

 

TCP將用戶數據打包構成報文段;它發送數據後啓動一個定時器;另一端對收到的數據進行確認,對失序的數據重新排序,丟棄重複數據; T C P提供端到端的流量控制,並計算和驗證一個強制性的端到端檢驗和。

 

二、TCP首部格式

注:下面表格來自網絡!   

           

 

序列號:TCP序號,即本報文段所發送的數據的第一個字節的序號。

確認號:即希望下次收到對方傳送的數據的第一個字節的序號。

數據偏移:指出TCP報文段的數據起始處距離TCP報文段的距離,實際就是TCP頭部長度。注意,數據偏移的單位不是字節而是32bit,即4字節。TVP首部最大長度爲(2^4-1)*4=60字節。

保留:保留爲今後使用,目前統一置爲0.

代碼位

1、 URG:緊急比特。當URG=1時,表明緊急指針字段有效。該報文應儘快傳送。而不要按原來的隊列順序來傳送。

2、 ACK:確認比特。當ACK=1時確認號字段纔有效,ACK=0時,表明確認號無效。

3、 PSH:推送比特:按對隊傳輸到對方,不用待緩存填滿後再提交給上層,而是立即提交。

4、 RST:復位比特。TCP連接中出現嚴重差錯,必須立即釋放並重新建立連接。也用於拒絕一個非法的報文段或拒絕打開一個連接。

5、 SYN:同步比特。在連接建立時用來同步序號。當SYN=1而ACK=0時,表明這是一個連接請求報文段。對方若同意建立連接,則應在響應的報文段中使用SYN=1和ACK=1。因此,SYN=1時,就表明這是一個連接請求或連接接受。

6、 FIN:終止比特。用來釋放一個連接。當FIN=1時,表明數據發送完畢,要求釋放連接

窗口:接收端告知自己的接收能力,即自己接收窗口的大小,發送方將按這個大小發送數據。

校驗和:檢驗的範圍包括首部和數據這兩部分。在計算檢驗和時,要在TCP報文段的前面加上12字節的僞首部。

緊急指針:當緊急指針代碼位被設置時爲有效字段。如果有效,這個值指明瞭當前序列號的八位組的偏移值,即第一個非緊急數據的起始位置。

 

三、TCP連接的建立和終止

 

建立(三次握手

三次握手的目的是同步連接雙方的序列號和確認號並交換 TCP窗口大小信息。

1) 請求端(通常稱爲客戶)發送一個SYN段指明客戶打算連接的服務器的端口,以及初始序號(ISN,在這個例子中爲1 4 1 5 5 3 1 5 2 1)。這個SYN段爲報文段1。

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

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

                                       客戶端                                                                                                                              服務器端


      

   

       終止(四次握手)

       (1)客戶端發送一個FIN(終止這個方向的連接),用來關閉客戶端到服務器端的數據傳送(報文段4)。

(2)服務器端收到這個FIN,它發回一個ACK,確認序號爲收到的序號加1(報文段5)。和SYN一樣,一個FIN將佔用一個序號。

(3)服務器端關閉與客戶端的連接,發送一個FIN給客戶端(報文段6)。

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

                             客戶端                                                                       服務器端  

  


1.爲什麼建立連接協議是三次握手,而關閉連接卻是四次握手呢?

這是因爲服務端的LISTEN狀態下的SOCKET當收到SYN報文的連接請求後,它可以把ACK和SYN(ACK起應答作用,而SYN起同步作用)放在一個報文裏來發送。但關閉連接時,當收到對方的FIN報文通知時,它僅僅表示對方沒有數據發送給你了;但未必你所有的數據都全部發送給對方了,所以你可能未必會馬上會關閉SOCKET,也即你可能還需要發送一些數據給對方之後,再發送FIN報文給對方來表示你同意現在可以關閉連接了,所以它這裏的ACK報文和FIN報文多數情況下都是分開發送的。

 

2. 當一個服務器進程接受一個來自客戶進程的服務請求時是如何處理端口的?如果多個連接請求幾乎同時到達會發生什麼情況?

       T C P使用由本地地址和遠端地址組成的4元組:目的I P地址、目的端口號、源I P地址和源端口號來處理傳入的多個連接請求。T C P僅通過目的端口號無法確定那個進程接收了一個連接請求。另外,在三個使用端口2 3的進程中,只有處於L I S T E N的進程能夠接收新的連接請求。處於E S TA B L I S HE D的進程將不能接收S Y N報文段,而處於L I S T E N的進程將不能接收數據報文段。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章