《TCP/IP詳解卷1:協議》第17、18章 TCP:傳輸控制協議(1)-讀書筆記


章節回顧:

《TCP/IP詳解卷1:協議》第1章 概述-讀書筆記

《TCP/IP詳解卷1:協議》第2章 鏈路層-讀書筆記

《TCP/IP詳解卷1:協議》第3章 IP:網際協議(1)-讀書筆記

《TCP/IP詳解卷1:協議》第3章 IP:網際協議(2)-讀書筆記

《TCP/IP詳解卷1:協議》第4章 ARP:地址解析協議-讀書筆記

《TCP/IP詳解卷1:協議》第5章 RARP:逆地址解析協議-讀書筆記

《TCP/IP詳解卷1:協議》第6章 ICMP:Internet控制報文協議-讀書筆記

《TCP/IP詳解卷1:協議》第11章 UDP:用戶數據報協議-讀書筆記

《TCP/IP詳解卷1:協議》第17、18章 TCP:傳輸控制協議(1)-讀書筆記

《TCP/IP詳解卷1:協議》第17、18章 TCP:傳輸控制協議(2)-讀書筆記

《TCP/IP詳解卷1:協議》第19章 TCP的交互數據流-讀書筆記


 

第17章 TCP:傳輸控制協議

1、TCP服務

盡管TCP和UDP都使用相同的網絡層(IP),TCP卻向應用層提供與UDP完全不同的服務。TCP提供一種面向連接的、可靠的字節流服務

(1)面向連接

兩個使用TCP的應用(通常是一個客戶和一個服務器)在彼此交換數據之前必須先建立一個TCP連接。過程與打電話相似,先撥號振鈴,等待對方摘機說“喂”,然后才說明是誰。

說明:在一個TCP連接中,僅有兩方彼此進行通信。廣播和多播不能用於TCP

(2)可靠性

TCP通過下列方式來提供可靠性:

1)應用數據被分割成T C P認為最適合發送的數據塊。由TCP傳遞給IP的信息單位稱為報文段或段。

注意:對於UDP,應用程序產生的數據報長度將保持不變。

2)當TCP發出一個段后,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。

3)當TCP收到發自TCP連接另一端的數據,它將發送一個確認。這個確認不是立即發送,通常將推遲幾分之一秒

4)TCP將保持它的首部和數據檢驗和。這是一個端到端的檢驗和,如果收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段(希望發端超時並重發)。

5)因為TCP報文段是作為IP數據報來傳輸的,而IP數據報的到達可能會失序,所以TCP報文段的到達也可能會失序。如果必要,TCP將對收到的數據進行重新排序,將收到的數據以正確的順序交給應用層。

6)因為IP數據報會發生重復,所以TCP的接收端必須丟棄重復的數據。

7)TCP提供流量控制。TCP連接的每一方都有固定大小的緩沖區。TCP的接收端只允許另一端發送其緩沖區所能接納的數據。可防止較快主機致使較慢主機的緩沖區溢出。

說明:

1)兩個應用程序通過TCP連接交換8 bit構成的字節流。TCP不在字節流中插入記錄標識符。將這稱為字節流服務。

2)假設一方的應用程序先傳10字節,又傳20字節,再傳50字節,連接的另一方將無法了解發方每次發送了多少字節。收方可以分4次接收這80個字節,每次接收20字節。

3)TCP對字節流的內容不作任何解釋,它不知道傳輸的數據字節流是二進制數據、ASCII字符、EBCDIC字符或其他類型數據。由TCP雙方的應用層對字節流進行解釋。

 

2、TCP首部

TCP數據被封裝在一個IP數據報中,如圖17-1所示。

圖17-2顯示TCP首部的數據格式。如果不計選項字段,它通常是20個字節

TCP首部字段說明:

(1)TCP段包含的源端和目的端端口號,是用於尋找發端和收端應用進程

說明:源端和目的端端口號加上源端IP地址和目的端IP地址唯一確定一個TCP連接。

(2)序號用來標識從TCP發端向收端發送的數據字節流。如果將字節流看作是在兩個應用程序間的單向流動,則TCP用序號對每個字節進行計數。序號是32 bit的無符號數,到達2^32-1后又從0開始。

說明:TCP為應用層提供全雙工服務。這意味着數據能在兩個方向上獨立進行傳輸。所以,連接的每一端必須保持每個方向上的傳輸數據序號。

(3)當建立一個新的連接時,SYN標志置1。

(4)因為每個傳輸的字節都被計數,確認序號包含發送確認的一端所期望收到的下一個序號,即確認序號是上次已成功收到數據字節序號加1。

注意:只有ACK標志為1時確認序號字段才有效。

(5)發送ACK無需任何代價,因為32 bit的確認序號字段和ACK標志一樣,總是TCP首部的一部分。因此,一旦一個連接建立起來,這個字段總是被設置,ACK標志也總是被設置為1。

(6)首部長度給出首部中32 bit字的數目。需要這個值是因為任選字段的長度是可變的。這個字段占4 bit,因此TCP最多有60字節的首部(32bit*(2^4-1))。如果沒有選項字段,正常的長度是20字節。

(7)TCP首部中有6個標志比特,它們中的多個可同時被設置為1。含義為:

1)URG 緊急指針有效。

2)ACK 確認序號有效。

3)PSH 接收方應該盡快將這個報文段交給應用層。

4)RST 重建連接。

5)SYN 同步序號用來發起一個連接。

6)FIN 發端完成發送任務。

(8)TCP的流量控制由連接的每一端通過聲明的窗口大小來提供。窗口大小為字節數,起始於確認序號字段指明的值,這個值是接收端期望接收的字節。窗口大小是一個16 bit字段,因而窗口大小最大為65535字節。

(9)檢驗和覆蓋了整個TCP報文段包括TCP首部和TCP數據。這是一個強制性的字段,一定是由發端計算和存儲,並由收端進行驗證。

說明:TCP檢驗和的計算與UDP檢驗和的計算相似,使用一個偽首部。

(10)只有當URG標志置1時緊急指針才有效。緊急指針是一個正的偏移量,和序號字段中的值相加表示緊急數據最后一個字節的序號。TCP的緊急方式是發送端向另一端發送緊急數據的一種方式。

(11)最常見的選項字段是最長報文大小,又稱為MSS (Maximum Segment Size)。每個連接方通常都在通信的第一個報文段(為建立連接而設置SYN標志的那個段)中指明這個選項。它指明本端所能接收的最大長度的報文段。

(12)TCP報文段中的數據部分是可選的。例如:一個連接建立和終止時,雙方交換的報文段僅有TCP首部。在處理超時的許多情況中,也會發送不帶任何數據的報文段。

 

小結:

(1)TCP提供了一種可靠的面向連接的字節流運輸層服務。

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

(3)許多流行的應用程序如Telnet、Rlogin、FTP和SMTP都使用TCP。


 

第18章 TCP連接的建立與終止

1、引言

TCP是一個面向連接的協議。無論哪一方向另一方發送數據之前,都必須先在雙方之間建立一條連接。

2、連接的建立與終止

(1)建立連接協議

如果18-3所示,為了建立一條TCP連接:

1)請求端(客戶)發送一個SYN段指明客戶打算連接的服務器的端口,以及初始序號(ISN,例子中為1415531521),如報文1。

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

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

這三個報文段完成連接的建立,這個過程也稱為三次握手

說明:

1)發送第一個SYN的一端將執行主動打開,接收這個SYN並發回下一個SYN的另一端執行被動打開。

2)當一端為建立連接而發送它的SYN時,它為連接選擇一個初始序號。ISN隨時間而變化,因此每個連接都將具有不同的ISN。

(2)終止連接

終止一個連接要經過4次握手。這是由TCP的半關閉造成的。

說明:

1)因為TCP是全雙工的(數據在兩個方向上能同時傳遞),因此每個方向必須單獨進行關閉。原則是:當一方完成它的數據發送任務后發送一個FIN來終止這個方向連接。當一端收到一個FIN時,它必須通知應用層另一端已經終止了那個方向的數據傳送。

注意:發送FIN通常是應用層進行關閉的結果。

2)收到一個FIN只意味着在這一方向上沒有數據流動。

注意:一個TCP連接在收到一個FIN后仍能發送數據,這對利用半關閉的應用來說是可能的,盡管在實際應用中只有很少的TCP應用程序這樣做。

圖18-4顯示了終止一個連接的典型握手順序。

發送FIN將導致應用程序關閉它們的連接,這些FIN的ACK是由TCP軟件自動產生的。


 

說明:上面內容包括《TCP/IP詳解卷1:協議》第17章內容以及18章的一點內容(TCP連接的建立與終止),18章還有部分內容分析各種連接問題,內容較多,明天才能總結出來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM