天天看點

運輸層TCP協定協定格式TCP建連(三次握手)和TCP斷連(四次揮手)TCP順序性(流式)TCP可靠性定時器提高發送效率和減輕網絡負擔的方法滑動視窗(解決一條連接配接的網絡問題)擁塞控制(解決廣域網的網絡問題)TCP 封包段的發送時機

協定格式

運輸層TCP協定協定格式TCP建連(三次握手)和TCP斷連(四次揮手)TCP順序性(流式)TCP可靠性定時器提高發送效率和減輕網絡負擔的方法滑動視窗(解決一條連接配接的網絡問題)擁塞控制(解決廣域網的網絡問題)TCP 封包段的發送時機

TCP建連(三次握手)和TCP斷連(四次揮手)

https://blog.csdn.net/b2222505/article/details/78164056

https://blog.csdn.net/b2222505/article/details/78162486

TCP順序性(流式)

原理:分片組包、序列号

TCP是流狀态協定:不一定順序接收,但是一定會順序傳回給應用層。比如A write 兩次(123、456)。B Read了兩次,可能一次過收到123456、也可能分兩次接收12、3456

如果源主機使用同樣的連接配接發送另一個封包段,那麼這個封包段的序列号等于前一個封包段的序列号與前一個封包段中資料位元組的數量之和。例如,假設源主機發送3個封包段,每個封包段有100位元組的資料,且第一個封包段的序列号是1000,那麼第二個封包段的序列号就是1100(1000+100),第三個封包段的序列号就是1200(1100+100)。

TCP可靠性

原理:逾時重傳,得不到ACK就重新發送資料,直到對方确認為止。

重傳方式:

1、一個包對應一個ack

2、連續ARQ協定

累積确認:接收方一般采用累積确認的方式。即不必對收到的分組逐個發送确認,而是對按序到達的最後一個分組發送确認,這樣就表示:到這個分組為止的所有分組都已正确收到了。累積确認有的優點是:容易實作,即使确認丢失也不必重傳。缺點是:不能向發送方反映出接收方已經正确收到的所有分組的資訊。

Go-back-N:如果發送方發送了前 5 個分組,而中間的第 3 個分組丢失了。這時接收方隻能對前兩個分組發出确認。發送方無法知道後面三個分組的下落,而隻好把後面的三個分組都再重傳一次。這就叫做 Go-back-N(回退 N),表示需要再退回來重傳已發送過的 N 個分組。可見當通信線路品質不好時,連續 ARQ 協定會帶來負面的影響。

3、選擇确認 SACK(Selective ACK)

如果這些位元組的序号都在接收視窗之内,那麼接收方就先收下這些資料,但要把這些資訊準确地告訴發送方,使發送方不要再重複發送這些已收到的資料。如果要使用選擇确認,那麼在建立 TCP 連接配接時,就要在 TCP 首部的選項中加上“允許 SACK”的選項,而雙方必須都事先商定好。如果使用選擇确認,那麼原來首部中的“确認号字段”的用法仍然不變。隻是以後在 TCP 封包段的首部中都增加了 SACK 選項,以便報告收到的不連續的位元組塊的邊界。由于首部選項的長度最多隻有 40 位元組,而指明一個邊界就要用掉 4 位元組,是以在選項中最多隻能指明 4 個位元組塊的邊界資訊。

4、D-SACK(Duplicate SACK)告訴發送方有哪些資料被重複接收了

5、快速重傳。發送方連續收到3次相同的ack,則啟動快速重傳。擁塞視窗下降一半,反應相對沒那麼激烈。

定時器

定時過長會造成網絡使用率不高。太短會造成多次重傳,網絡擁塞。

1、堅持定時器

收到0滑動視窗封包時,啟動定時器,逾時後向對端查詢視窗是否增大。如果仍然是0則再次開啟定時器(定時時間間隔為指數退避1、2、4、8、16……64)

2、保活定時器

檢測TCP連接配接是否可用

3、重傳定時器

TCP 每發送一個封包段,就對這個封包段設定一次計時器。隻要計時器設定的重傳時間到但還沒有收到确認,就要重傳這一封包段。

4、2MSL定時器

TimeWait相關。

提高發送效率和減輕網絡負擔的方法

1、回複資料附帶ACK

2、Nagle算法

Nagle算法的做法是先把第一個小包發送出去,後面的小包都緩存起來,直到收到前一個資料段的ack,或者緩存資料長度已經達到mss大小才發送。

3、quick ack

tcp發送ack有兩種方式:quick ack和 delayed ack 

quick ack:收到資料包後,立即發送ACK給對端。

delayed ack:收到資料包後,不會立即發送ACK,而是啟動延時确認定時器,在此期間:

1. 本端有資料包要發送給對端。就在發送資料包的時候捎帶上此ACK。

2. 本端沒有資料包要發送,定時器逾時後發送ACK給對端。

根據算法的描述可以看到:nagle算法和delayed ack都是為了減少小資料包在網路中傳輸的數量,優化網絡性能。

連接配接剛啟動的時候,擁塞算法使用的是慢啟動,必須盡快發送ack,發送方才可能盡快增大發送視窗,發送更多的資料。

滑動視窗(解決一條連接配接的網絡問題)

本質描述接收方的TCP緩沖大小。如果發送方收到接收方的視窗大小為0的TCP資料包,那麼發送方将停止發送資料。

運輸層TCP協定協定格式TCP建連(三次握手)和TCP斷連(四次揮手)TCP順序性(流式)TCP可靠性定時器提高發送效率和減輕網絡負擔的方法滑動視窗(解決一條連接配接的網絡問題)擁塞控制(解決廣域網的網絡問題)TCP 封包段的發送時機
運輸層TCP協定協定格式TCP建連(三次握手)和TCP斷連(四次揮手)TCP順序性(流式)TCP可靠性定時器提高發送效率和減輕網絡負擔的方法滑動視窗(解決一條連接配接的網絡問題)擁塞控制(解決廣域網的網絡問題)TCP 封包段的發送時機

擁塞控制(解決廣域網的網絡問題)

https://blog.csdn.net/b2222505/article/details/78172728

慢啟動、擁塞避免、擁塞發生、快速重傳和快速恢複。

上述是老的TCP擁塞控制算法。現已被其他算法取代

基于丢包回報的TCP協定(Tahoe、Reno、New Reno、SACK)

基于延時回報的TCP協定(Vegas、Westwood)

基于丢包回報的高速帶寬算法(HSTCP、STCP、BIC-TCP、CUBIC)

TCP 封包段的發送時機

第一種機制是 TCP 維持一個變量,它等于最大封包段長度 MSS。隻要緩存中存放的資料達到 MSS 位元組時,就組裝成一個 TCP 封包段發送出去。

第二種機制是由發送方的應用程序指明要求發送封包段,即 TCP 支援的推送(push)操作。

第三種機制是發送方的一個計時器期限到了,這時就把目前已有的緩存資料裝入封包段(但長度不能超過 MSS)發送出去。

運輸層TCP協定協定格式TCP建連(三次握手)和TCP斷連(四次揮手)TCP順序性(流式)TCP可靠性定時器提高發送效率和減輕網絡負擔的方法滑動視窗(解決一條連接配接的網絡問題)擁塞控制(解決廣域網的網絡問題)TCP 封包段的發送時機

繼續閱讀