计算机网络 --- 传输层TCP协议
TCP協議的特點?
- TCP是面向連接(虛連接)的傳輸層協議。
- 每一條TCP連接只能有兩個端點,每一條TCP連接只能是點對點的。
- TCP提供可靠交付的服務,無差錯、不丟失、不重復、按序到達。可靠有序,不丟不重。
- TCP提供全雙工通信。
因為TCP提供全雙工通信,所以發送接收方分別要準備發送緩存和接收緩存。發送緩存里面為準備發送的數據 & 已發送但尚未收到確認的數據,接收緩存里面為按序到達但尚未被接受應用程序讀取的數據 & 不按序到達的數據。
- TCP面向字節流(流:流入到進程或從進程流出的字節序列,注意不是比特序列):TCP把應用程序交下來的數據堪稱僅僅是一連串的無結構字節流。?
TCP報文段的首部格式
注意填充字段的意義在于TCP報文段的首部長度必須是4B的整數倍
- 序號:在一個TCP連接中傳送的字節流中的每一個字節都按順序編號,本字段表示本報文段所發送數據的第一個字節的序號。
- 確認號:期望收到對方下一個報文段的第一個數據字節的序號。若確認號為N,則證明到序號N - 1為止的所有數據都已正確收到。
- 數據偏移(首部長度):TCP報文段的數據起始處距離TCP報文段的起始處有多遠,以4B為單位。
- 控制位 --- 緊急位URG:URG = 1時,標明此報文段中有緊急數據,是高優先級的數據,應盡快傳送,不用在緩存里排隊,配合緊急指針字段使用。
- 控制位 --- 確認位ACK: ACK = 1時確認號有效,在連接建立后所有傳送的報文段都必須把ACK置為1.
- 控制位 --- 推送位PSH:PSH = 1時,接收方盡快交付接收應用進程,不再等到緩存填滿再向上交付。
- 控制位 --- 復位RST:RST = 1時,表明TCP連接中出現嚴重差錯,必須釋放連接,然后再重新建立傳輸連接。
- 控制位 --- 同步位SYN:SYN = 1時,表明是一個連接請求/連接接受報文。
- 控制位 --- 終止位FIN:FIN = 1時,表明此報文段發送方數據已發完,要求釋放連接。
- 窗口:指的是發送本報文段的一方的接收窗口,即現在允許對方發送的數據量。
- 檢驗和:檢驗首部 + 數據,檢驗時要加上12B偽首部,第四個字段為6(UDP為17).
- 緊急指針:URG = 1時才有意義,指出本報文段中緊急數據的字節數。
- 選項:最大報文段長度MSS、窗口擴大、時間戳、選擇確認
TCP連接管理
TCP連接傳輸三個階段
TCP連接的建立采用客戶服務器方式,主動發起連接建立的應用進程叫做客戶,而被動等待連接建立的應用進程叫服務器.
TCP連接建立
假設運行再一臺主機(客戶)上的一個進程想與另一臺主機(服務器)上的一個進程建立一條連接,客戶應用進程首先通知客戶TCP,他想建立一個與服務器上某個進程的連接,客戶TCP會用以下步驟與服務器中的TCP建立一條TCP連接:
SYN洪泛攻擊:
SYN洪泛攻擊發生在OSI第四層,這種方式利用TCP協議的特性,就是三次握手。攻擊者發送TCP SYN,SYN是TCP三次握手中的第一個數據報,而當服務器返回ACK后,該攻擊者就不對其進行再確認,那這個TCP連接就處于掛起狀態,也就是所謂的半連接狀態,服務器收不到再確認的話,還會重復發送ACK給攻擊者。這樣更加會浪費服務器的資源。攻擊者就對服務器發送非常大量的這種TCP連接,由于每一個都沒法完成三次握手,所以在服務器上,這些TCP連接會因為掛起狀態而小號CPU和內存,最后服務器可能死機,就無法為正常用戶提供服務了。
TCP連接釋放
參與一條TCP連接的兩個進程中的任何一個都能終止該連接,連接結束后,主機中的“資源”(緩存和變量)將被釋放。
TCP可靠傳輸
傳輸層:使用TCP實現可靠傳輸
網絡層:提供盡最大努力交付,不可靠傳輸
可靠:保證接收方進程從緩存區讀出的字節流與發送方發出的字節流是完全一樣的。
TCP實現可靠傳輸的機制:
- 校驗:與UDP校驗一樣,增加偽首部。
- 序號
- 確認:TCP默認使用累計確認。
- 重傳:確認重傳不分家,TCP的發送方在規定的時間內沒有收到確認就要重傳已發送的報文段。超時重傳。TCP采用自適應算法,動態改變重傳RTTs(加權平均往返時間)。
冗余ACK(冗余確認)
每當比期望序號大的失序報文段到達時,發送一個冗余ACK,指明下一個期待字節的序號。
舉例:
發送方已發送1,2,3,4,5報文段
接收方收到1,返回給1的確認(確認號為2的第一個字節)
接收方收到3,仍返回給1的確認(確認號為2的第一個字節)
接收方收到4,仍返回給1的確認(確認號為2的第一個字節)
接收方收到5,仍返回給1的確認(確認號為2的第一個字節)
發送方收到3個對于報文段1的冗余ACK,認為2報文段丟失,重傳2號報文段(快速重傳)
TCP流量控制
流量控制:
讓發送方慢點,要讓接收方來得及接收。
TCP利用滑動窗口機制實現流量控制。
在通信過程中,接收方根據自己接收緩存的大小,動態地調整發送方的發送窗口大小,即接收窗口rwnd(接收方設置確認報文段的窗口字段來將rwnd通知給發送方),發送方的發送窗口取接收窗口rwnd和擁塞窗口cwnd的最小值。
TCP為每一個連接設有一個持續計時器,只要TCP連接一方收到對方的零窗口通知,就啟動持續計時器。
若持續計時器設置的時間到期,就發送一個零窗口探測報文段。接收方收到探測報文段時給出現在的窗口值。
若窗口仍然是0,那么發送方就重新設置持續計時器。
TCP擁塞控制
出現擁塞的條件:
對資源需求的總和 > 可用資源
網絡中有許多資源同時呈現供應不足 -> 網絡性能變壞 -> 網絡吞吐量將隨輸入負荷增大而下降
擁塞控制:
防止過多的數據注入到網絡中。(全局性)
擁塞控制 & 流量控制:
擁塞控制四種算法
- 慢開始
- 擁塞避免
- 快重傳
- 快恢復
假定:
- 數據單方向傳送,而另一個方向只傳送確認
- 接收方總是有足夠大的緩存空間,因而發送窗口大小取決于擁塞程度
發送窗口 = Min{接收窗口rwnd,擁塞窗口cwnd}
接收窗口:接收方根據接收緩存設置的值,并告知給發送方,反映接收方容量。
擁塞窗口:發送方根據自己估算的網絡擁塞程度而設置的窗口值,反映網絡當前容量。
慢開始和擁塞避免
一個傳輸輪次:
發送了一批報文段并收到它們的確認的時間。
一個往返時延RTT。
開始發送一批擁塞窗口內的報文段到開始發送下一批擁塞窗口內的報文段的時間。
ssthresh(slow start shreshold)的初始值:
慢開始門限,到達初始值之后就要減速。在網絡擁塞之后,新門限值定義為出現網絡擁塞時的擁塞窗口的一半。
快重傳和快恢復
收到多個冗余ACK后立刻進行快重傳。快重傳直接回到新的ssthresh(不像慢重傳回到1),直接進行線性擁塞避免。
總結
以上是生活随笔為你收集整理的计算机网络 --- 传输层TCP协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: net应用程序中发生了未经处理的异常怎么
- 下一篇: ipv6+ssh+java_IPv6的本