1. 程式人生 > >淺析LET無線行動網路為什麼RTT抖動大為什麼資料包亂序多

淺析LET無線行動網路為什麼RTT抖動大為什麼資料包亂序多

浙江溫州皮鞋溼,下雨進水不會胖!9月份錯過了深圳的超猛颱風,12月8號又錯過了杭州的超猛大雪,當天卻在深圳迎來了趙正則,馬上2019年了,又一次錯過了杭州的大雪,回到了深圳過元旦…


無奈啊無奈,去年夏天我為如題展示的問題折騰的寢食難安,然而並無解,可能那是一個工作任務吧,什麼事情只要成了工作任務,就索然無味了…

現如今,工作重點已經遠離了 判定無線網路對TCP的影響 ,偶然的機會,我反倒又重新想起了往事,不得不探究一番LTE網路對TCP的影響到底是什麼。


我就長話短說,不使用太多的術語,簡單描述一下。


網路結構

要想移動就必須無線,不然拖著線纜走來走去,遲早得把自己纏進去。

為了支援移動終端無線上網,必須有很多固定的基站,每個基站釋放的訊號輻射一定的區域,所有的基站構成一個像馬蜂窩一樣的 行動通訊訊號網路(圖片百度得之,盜圖所得)
在這裡插入圖片描述

每一個小孔都由一個基站負責,當然在無線空域。小孔之間是會有重疊的,而這種重疊區域,正是行動網路中關鍵行為,移交行為的執行區域,但是在行動網路中,任何行為都是 但不經常,也不絕對 的!即便你不用去推敲多普勒效應,也能從自己頻繁掉線的經歷中可見一斑!

每一個基站都有 轉發所有到達其輻射區域的移動終端所收發的資料 的任務,與此同時,它還必須負責實時監控 有哪些移動終端屬於自己訊號所能輻射的區域 以及 哪些移動終端正在進入或者離開自己訊號所能輻射的區域

, 後者被稱為 移交任務

基站移交過程

移交,這是無線行動網路中最最關鍵的過程,可以說無線行動網路絕大多數和固網有所區別的行為都是由這個所謂的移交過程造成的。

由於移動終端隨時隨地在移動過程中,而其所在的空間的每一個點都由一個或者多個基站輻射的訊號所覆蓋,隨著終端的移動,每一個基站的訊號強度會有所變化:
在這裡插入圖片描述

基站會根據和移動終端協商的結果,來決定要不要把該移動終端 轉交 給其它 更適合服務它 的基站,比如該基站比當前基站的訊號更好,諸如此類。

所有的行為都發生在時空當中,那麼移交過程的時序圖,大致就是下面的樣子:
在這裡插入圖片描述
以此為基礎,我們就知道在無線行動網路中TCP怪異行為的成因為何了。

為什麼RTT抖動

無線網路的介質不像固網那麼可靠,這是一定的。

無線網路的介質無非就是一些電磁波,這玩意兒非常脆弱,非常容易受到各類干擾,除了你的移動終端距離基站的距離不同會導致訊號強弱差異之外,還會有其它因素影響:

  • 天氣因素,比如大風,閃電
  • 有人提著一臺無線裝置從你身邊走過
  • 地形因素,包括身邊開過一輛汽車
  • 裝置天線的方向

是不是很複雜?!

如果移交過程一如既往的順利,那麼RTT幾乎不會發生變化,然而在無線網路情況下,基於上述的原因,移交行為往往並不僅僅由於距離變化而發生,此外,由於電磁波訊號的脆弱性質,在移交的過程中,訊息也不是能保證順利到達,任何一個訊息都可能會丟失。

這導致,如果信令丟失,唯一能讓移動終端能重新接入網路的機制就是其主動探測機制,其中為了避免信令延遲到達,其權衡就是使用定時器機制,而這個定時器便是RTT抖動的根源!
在這裡插入圖片描述

而TCP的RTO計算依賴於RTT,如果RTT是不準的,那麼RTO將會是隨意的,這極大影響著TCP的丟包判斷。

如果這個移動終端重新掃描基站的定時器延時數量級達到了TCP連線的RTO數量級,極有可能還會觸發TCP的重傳,這顯然是丟包誤判,因為此時只是ACK在基站已經找不到移動終端而被丟棄,所以讓移動終端誤以為資料包的丟失,或者是反向路徑上發生同樣的事情。

總之,移交過程讓TCP對丟包的判斷變得複雜!

為什麼亂序多

信令的傳輸和資料的傳輸總是分開的,它們二者之間應該是解耦合的,這是優秀的設計,但是這種設計也會對特有的協議帶來一些問題,比如要求順序傳輸的TCP。

其實TCP的規範並不要求順序傳輸,它只是要求順序接收而已,然而在實現上,如果你沒有讓接收端覺得你在順序傳輸,那麼傳送端將會重傳已經傳過的資料,這意味著,實際上,TCP 要求 傳送端 必須按照順序傳輸資料

然而正是由於行動網路中移交過程的存在,導致在移交的期間,可能會有多個基站在獨立幫忙傳輸移動終端的資料,它們之間並沒有做基於資料流序列號的同步機制,這導致了亂序的發生!

在這裡插入圖片描述
越是將快取當頻寬的傳送行為,比如CUBIC這種,就越是會收到亂序的影響,而BBR這種演算法,本來就保持不排隊政策,所以資料亂序的可能性相對少很多。

本質上的原因,就在於, 信令和資料是分別傳送和接收的, 信令只負責控制的部分,有可能信令已經判斷無線連線失效了,可是資料依然保留在快取中繼續被髮送,而此時移動終端已經連線上其它的基站在傳送資料了。

TIPs:移動場景下,千萬不要填充快取!

ACK聚合

綜上,TCP的ACK聚合能在一定程度上避免RTT抖動和亂序,然而這會減慢ACK時鐘報時頻率,影響CCA來做決策。

成也蕭何,敗也蕭何!


可見,傳統的TCP遇到如今當下的無線行動網路時,損的一逼啊,我們不希望底層的行為會影響到TCP層面的丟包判定以及重傳,顯然,基站移交導致的RTO並不是真的丟包所導致,但是 網路協議棧的分層設計 法則讓我們沒法大動干戈…在適應無線行動網路這方面,BBR是不是比CUBIC更好呢?

這卻是不一定的。

我們不能僅僅關注丟包判定這方面,我們還要關注收斂速度。BBR對行動網路的底層移交行為是 無感知 的,它能意識到的僅僅就是 丟包 而已!這種策略導致的結果到底是好還是壞,我覺得是壞!

首先,我覺得BBR統計最小RTT的方式在行動網路要有所改變,這是最必要的,其次,計算cwnd的演算法必須要有所改變,不能僅僅是乘以2,因為ACK聚合會導致空窗期,這個已經在BBRv2裡解決了,甚好。

接下來,我也不知道會發生什麼。


瘋子說了,待明年,我們就終於又回到魔都的地界裡去了,所有的事情都已經過去,摧毀了當初南下的原因,如今回去便是自然而然。雖然不是回到嘉定,但杭州至少也是我們經常去的地方,也是滿滿的回憶。

開車兩個小時多就能到嘉定,吃個洲橋的羊肉串外加一頓火鍋,也不錯。


浙江溫州皮鞋溼,下雨進水不會胖!