章節回顧:html
《TCP/IP詳解卷1:協議》第3章 IP:網際協議(1)-讀書筆記併發
《TCP/IP詳解卷1:協議》第3章 IP:網際協議(2)-讀書筆記post
《TCP/IP詳解卷1:協議》第4章 ARP:地址解析協議-讀書筆記url
《TCP/IP詳解卷1:協議》第5章 RARP:逆地址解析協議-讀書筆記spa
《TCP/IP詳解卷1:協議》第6章 ICMP:Internet控制報文協議-讀書筆記3d
《TCP/IP詳解卷1:協議》第11章 UDP:用戶數據報協議-讀書筆記指針
《TCP/IP詳解卷1:協議》第1七、18章 TCP:傳輸控制協議(1)-讀書筆記htm
《TCP/IP詳解卷1:協議》第1七、18章 TCP:傳輸控制協議(2)-讀書筆記
《TCP/IP詳解卷1:協議》第19章 TCP的交互數據流-讀書筆記
第17章 TCP:傳輸控制協議
一、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雙方的應用層對字節流進行解釋。
二、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鏈接的創建與終止
一、引言
TCP是一個面向鏈接的協議。不管哪一方向另外一方發送數據以前,都必須先在雙方之間創建一條鏈接。
二、鏈接的創建與終止
(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章還有部份內容分析各類鏈接問題,內容較多,明天才能總結出來。