1、TCP協定特點
- TCP是面向連接配接(虛連接配接)的傳輸層協定。
- 每一條TCP連接配接隻能有兩個端點,每一條TCP連接配接隻能是點對點的。
- TCP提供可靠傳遞的服務,無差錯、不丢失、不重複、按序到達。可靠有序,不丢不重
- TCP提供全雙工通信。
- 發送緩存 準備發送的資料&已發送但尚未收到确認的資料
- 接收緩存 按序到達但尚未被接受應用程式讀取的資料&不按序到達的資料
TCP面向位元組流 TCP把應用程式交下來的資料看成僅僅是一連串的無結構的位元組流。
- 流:流入到程序或從程序流出的位元組序列。
2、TCP封包段首部格式

(1)序号:在一個TCP連接配接中傳送的位元組流中的每一個位元組都按順序編号,本字段表示本封包段所發送資料的第一個位元組的序号。
(2)确認号:期望收到對方下一個封包段的第一個資料位元組的序号。若确認号為N,則證明到序号N-1為止的所有資料都已正确收到。
(3)資料偏移(首部長度):TCP封包段的資料起始處 離 TCP封包段的起始處 有多遠,以4B為機關,即1個數值是4B。
(4)6個控制位(注意點)
緊急位URG:URG = 1時,表明此封包段中有緊急資料,是高優先級的資料,應盡快傳送,不用在緩存裡排隊,配合緊急指針字段使用。
确認位ACK:ACK = 1時确認号有效,在連接配接建立後所有傳送的封包段都必須把ACK置為1。
推送位PSH:PSH = 1時,接收方盡快傳遞接收應用程序,不再等到緩存填滿再向上傳遞。
複位RST:RST = 1時,表明TCP連接配接中出現嚴重差錯,必須釋放連接配接,然後再重建立立傳輸連結。
同步位SYN:SYN = 1時,表明是一個連接配接請求/連接配接接收封包。
終止位FIN:FIN = 1時,表明此封包段發送方資料已發完,要求釋放連接配接。
(7)視窗:指的是發送本封包段的一方的接收視窗,即現在允許對方發送的資料量。
(8)校驗和:檢驗首部 + 資料,檢驗時要加上12B僞首部,第四個字段為6。
(9)緊急指針:URG = 1時才有意義,指出本封包段中緊急資料的位元組數。
(10)選項:最大封包段長度MSS、視窗擴大、時間戳、選擇确認等。
3、TCP可靠傳輸
(1)傳輸層:使用TCP實作可靠傳輸。
(2)網絡層:提供盡最大努力傳遞,不可靠傳輸。
1. 可靠:保證接收方程序從緩沖區讀出的位元組流與發送方發出的位元組流是完全一樣的。2. TCP實作可靠傳輸的機制:(1)校驗、(2)序号、(3)确認、(4)重傳 (1.1)校驗:與UDP校驗一樣,增加僞首部。 (2.1)序号:一個位元組占一個序号,序号字段指的是一個封包段第一個位元組的序号。
(3)确認重傳不分家,TCP的發送方在規定的時間(重傳時間)内沒有收到确認,就要重傳已發送的封包段。即逾時重傳。
(4)TCP采用自适應算法,動态改變重傳時間RTTs(權重平均往返時延)
還是等太久了!!
(5)備援ACK(備援确認)來解決:
建議看看老謝的可靠傳輸過程圖!
- 每當比期望序号大的失序封包段到達時,發送一個備援ACK,指明下一個期待位元組的序号。
- 發送方已發送1,2,3,4,5封包段。
- 接收方收到1,傳回給1的确認(确認号為2的第一個位元組)。
- 接收方收到3,傳回給1的确認(确認号為2的第一個位元組)。
- 接收方收到4,傳回給1的确認(确認号為2的第一個位元組)。
- 接收方收到5,傳回給1的确認(确認号為2的第一個位元組)。
- 發送方收到3個對于封包段1的備援ACK——> 認為2封包段丢失,重傳2号封包段。 即快速重傳。
-------- end --------