最近服務(wù)器環(huán)境部署了tcprtt網(wǎng)絡(luò)時延監(jiān)控,發(fā)現(xiàn)不同服務(wù)器不同節(jié)點之間的RTT時延表象非常奇怪,無法準確的判斷服務(wù)器的網(wǎng)絡(luò)情況。因此需要弄清楚什么是RTT,以及能否作為服務(wù)器網(wǎng)絡(luò)性能的檢測指標。
1、RTT是什么?
TCP中的 RTT指的是“往返時延”(Round-Trip Time) ,即從發(fā)送方發(fā)送數(shù)據(jù)開始,到發(fā)送方接收到來自接收方的確認消息所經(jīng)過的時間。RTT時延通常由三部分決定: 鏈路的傳播時間、末端系統(tǒng)的處理時間、路由器等網(wǎng)絡(luò)中間節(jié)點的緩存和排隊時間 。正常情況下報文的傳輸時間和在應(yīng)用處理時間相對固定,在網(wǎng)絡(luò)擁堵情況下會出現(xiàn)RTT時延的波動。
RTT是衡量網(wǎng)絡(luò)傳輸性能的重要指標之一,能夠反映出數(shù)據(jù)在網(wǎng)絡(luò)中傳輸?shù)乃俣群头€(wěn)定性。通常情況下,RTT越短,網(wǎng)絡(luò)傳輸?shù)乃俣染驮娇?,反之則越慢。因此, 通過監(jiān)測TCP中的RTT時延,可以初步判斷網(wǎng)絡(luò)的性能如何。 但需要注意的是,RTT時延只是一個指標,要全面評估網(wǎng)絡(luò)性能還需要結(jié)合其他指標進行綜合分析。
1.1 RTT和RTO關(guān)系
說起RTT就要提到RTO(Retransmission Timeout),TCP協(xié)議在握手過程中會啟動一個定時器,如果在定時器時間內(nèi)沒有收到,則會進行重傳,這個 重傳的超時時間稱為RTO 。RTT和RTO的關(guān)系是:由于網(wǎng)絡(luò)的不確定性,每個RTT都是動態(tài)變化的,RTO也會動態(tài)變化。
當(dāng) RTO < RTT 時, 將會觸發(fā)大量的重傳, 當(dāng) RTO > RTT 時候, 如果頻繁出現(xiàn)丟包, 重傳不及時, 又會造成網(wǎng)絡(luò)的反應(yīng)慢, 最好的結(jié)果是 RTO 略大于 RTT.
1.2 RTT和Ping區(qū)別
Ping是使用 ICMP傳輸協(xié)議 ,可以用來評估RTT時延和網(wǎng)絡(luò)性能的好壞。相比之下, RTT則是在應(yīng)用層 (OSI/ISO的第7層)進行的網(wǎng)絡(luò)時延測量,包括更高級別的協(xié)議和應(yīng)用程序引起的額外處理時延。
1.3 RTT和時延的區(qū)別
網(wǎng)絡(luò)時延與RTT密切相關(guān),但又不同。延遲是數(shù)據(jù)包從發(fā)送端點傳輸?shù)浇邮斩它c所需的時間(僅一次行程)。許多因素可能會影響此路徑,包括網(wǎng)絡(luò)鏈路性能情況、網(wǎng)絡(luò)擁堵情況還有交換機層的緩存和隊列等。 ** RTT除了網(wǎng)絡(luò)傳輸?shù)臅r延,還有末端處理的時延** ,因此網(wǎng)絡(luò)時延并不一定完全等于RTT的一半。因此我們 可以解釋在部分主備節(jié)點的數(shù)據(jù)庫中,主節(jié)點到備節(jié)點的RTT時延表現(xiàn)正常,低于1ms,但是備節(jié)點到主節(jié)點之間的RTT時延超過10ms ,這中間很大一部分原因是因為備節(jié)點到主節(jié)點發(fā)送數(shù)據(jù)庫的時候,主節(jié)點處理耗費了大部分時間。
2、RTT的算法和測量方法
2.1 RTT經(jīng)典算法 [RFC793]
該算法稱為加權(quán)移動平均算法Exponential weighted moving average,過程如下:
1) 首先,先采樣RTT,記下最近幾次的RTT值。
2)然后做平滑計算SRTT(Smoothed RTT),公式為:
SRTT=(α?SRTT)+((1?α)?RTT)
其中的α取值在0.8到0.9之間
3)開始計算RTO。公式如下:
RTO=min[UBOUND,max[LBOUND,(β?SRTT)]]
UBOUND 是最大的 timeout 時間,上限值;
LBOUND 是最小的 timeout 時間,下限值;
β值一般在1.3到2.0之間。
該算法的問題在于重傳時,是用重傳的時間還是第一次發(fā)數(shù)據(jù)的時間和ACK回來的時間計算RTT樣本值,另外,delay ack的存在也讓rtt不能精確測量。
2.2 RTT標準算法(Jacobson / Karels算法)
該算法[ RFC6298 ]特點是引入了最新的RTT的采樣rtts和平滑過的srtt的差值做參數(shù)來計算。 公式如下:
1)計算平滑RTT
srtt=srtt+α(rttssrtt)
2)計算平滑RTT和真實的差距(加權(quán)移動平均)
rttvar=(1?β)?rttvar+β?(|rtts?srtt|)
3)計算RTO
rto=u?srtt+??rttvar
4)考慮到時鐘粒度,給RTO設(shè)置一個下界。
rto=max(u?srtt+max(G,??rttvar),1000)
這里G為計時器粒度,1000ms為整個RTO的下屆值。因此RTO至少為 1s。在Linux下,α=0.125,β=0.25,μ=1,?=4。
5)在首個SYN交換前,TCP無法設(shè)置RTO初始值。根據(jù)[RFC6298],RTO初始值為1s,而初始SYN報文段采用的超時間隔為3s。當(dāng)計算出首個RTT測量結(jié)果rtts,則按如下方法進行初始化:
srtt=rttsrttvar=rtts/2
2.3 RTT測量方法
每發(fā)送一個分組,TCP都會進行RTT采樣,這個采樣并不會每一個數(shù)據(jù)包都采樣,同一時刻發(fā)送的數(shù)據(jù)包中,只會針對一個數(shù)據(jù)包采樣,這個采樣數(shù)據(jù)被記為sampleRTT,用它來代表所有的RTT。采樣的方法一般有兩種:
- TCP Timestamp選項 :在TCP選項中添加時間戳選項,發(fā)送數(shù)據(jù)包的時候記錄下時間,收到數(shù)據(jù)包的時候計算當(dāng)前時間和時間戳的差值就能得到RTT。這個方法簡單并且準確,但是需要發(fā)送段和接收端都支持這個選項。
- 重傳隊列中數(shù)據(jù)包的TCP控制塊 :每個數(shù)據(jù)包第一次發(fā)送出去后都會放到重傳隊列中,數(shù)據(jù)包中的TCP控制塊包含著一個變量,tcp_skb_cb->when,記錄了該數(shù)據(jù)包的第一次發(fā)送時間。如果沒有時間戳選項,那么RTT就等于當(dāng)前時間和when的差值。
linux內(nèi)核中,更新rtt的函數(shù)為tcp_ack_update_rtt:
3、RTT網(wǎng)絡(luò)性能檢測和優(yōu)化
3.1 RTT時延檢測方法
1)使用ping命令測量RTT是最常用的方法
Ping命令將ICMP協(xié)議回顯請求數(shù)據(jù)包發(fā)送到目的地,然后報告接收響應(yīng)信號所需的時間(以毫秒為單位)。
[root@tango-rac01 ~]# ping -c 20 -i 1 www.csdn.net
PING r3lzca9monbh9slnohm4wwh32vxfadus.yundunwaf4.com (60.205.172.2) 56(84) bytes of data.
--- r3lzca9monbh9slnohm4wwh32vxfadus.yundunwaf4.com ping statistics ---
20 packets transmitted, 20 received, 0% packet loss, time 20099ms
rtt min/avg/max/mdev = 45.053/62.665/163.425/29.858 ms
2)時延 bcc-tools工具tcprtt (內(nèi)核版本為4.1以上)
tcprtt -i 1 -d 10 -A 192.168.1.100 -P 80
Tracing TCP RTT... Hit Ctrl-C to end.
msecs : count distribution
0 - > 1 : 4 | |
2 - > 3 : 0 | |
4 - > 7 : 1055 |****************************************|
8 - > 15 : 26 | |
16 - > 31 : 0 | |
32 - > 63 : 0 | |
64 - > 127 : 18 | |
128 - > 255 : 14 | |
256 - > 511 : 14 | |
512 - > 1023 : 12 | |
3)使用ss -ti命令
[root@tango-rac01 tools]# ss -ti
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 0 192.168.112.135:ssh 192.168.112.1:56505
cubic wscale:8,9 rto:241 rtt:40.225/0.997 ato:74 mss:1448 cwnd:10 bytes_acked:152109 bytes_received:12047 segs_out:733 segs_in:816 send 2.9Mbps lastsnd:41 lastrcv:137 pacing_rate 5.8Mbps rcv_rtt:28 rcv_space:28960
其中有rtt:40.225/0.997數(shù)據(jù),表示RTT均值和中位數(shù)
3.2 RTT時延優(yōu)化
1)RTT時延波動的原因
前文提到RTT時延包括網(wǎng)絡(luò)傳輸時延和末端處理時延,末端處理時延相對比較固定,因此RTT波動很大可能和以下因素有關(guān):
- 網(wǎng)絡(luò)擁塞 :當(dāng)網(wǎng)絡(luò)擁塞時,數(shù)據(jù)包需要在網(wǎng)絡(luò)中等待更長時間,從而導(dǎo)致 RTT 增加。
- 網(wǎng)絡(luò)質(zhì)量 :網(wǎng)絡(luò)質(zhì)量差、丟包率高等問題也會導(dǎo)致 RTT 波動較大。
- 網(wǎng)絡(luò)設(shè)備問題 :網(wǎng)絡(luò)設(shè)備的故障、配置錯誤等也可能導(dǎo)致 RTT 波動較大。
2) 網(wǎng)絡(luò)擁塞的檢測方法
網(wǎng)絡(luò)擁塞是指網(wǎng)絡(luò)中的數(shù)據(jù)傳輸量超過了網(wǎng)絡(luò)鏈路或節(jié)點的處理能力,導(dǎo)致網(wǎng)絡(luò)性能下降或出現(xiàn)數(shù)據(jù)丟失等問題。除了常見的傳輸延遲、丟包率等指標外,還有以下幾種網(wǎng)絡(luò)擁塞的檢測手段:
- 流量分析:通過對網(wǎng)絡(luò)流量的監(jiān)測和分析,找出網(wǎng)絡(luò)中的高流量區(qū)域,從而判斷哪些地方可能存在擁塞。
- 響應(yīng)時間監(jiān)測:通過測量網(wǎng)絡(luò)設(shè)備響應(yīng)時間,判斷網(wǎng)絡(luò)是否處于擁塞狀態(tài)。
- 帶寬占用監(jiān)測:通過對網(wǎng)絡(luò)帶寬的監(jiān)測和分析,找出網(wǎng)絡(luò)中的高帶寬占用區(qū)域,從而判斷哪些地方可能存在擁塞。
- 包延遲監(jiān)測:通過測量數(shù)據(jù)包在網(wǎng)絡(luò)中傳輸所需的時間,判斷網(wǎng)絡(luò)是否處于擁塞狀態(tài)。
- 拓撲分析:通過分析網(wǎng)絡(luò)拓撲結(jié)構(gòu),找出網(wǎng)絡(luò)中的瓶頸節(jié)點和鏈路,從而判斷哪些地方可能存在擁塞。
3)網(wǎng)絡(luò)抖動檢測方法
網(wǎng)絡(luò)抖動是指網(wǎng)絡(luò)通信中出現(xiàn)的延遲或者丟包現(xiàn)象,導(dǎo)致通信不穩(wěn)定。要檢測網(wǎng)絡(luò)抖動,可以使用以下方法:
- ping命令 :ping命令可以測試網(wǎng)絡(luò)是否能夠正常通信,如果出現(xiàn)延遲或者丟包現(xiàn)象,就說明存在網(wǎng)絡(luò)抖動。
- tracert命令 :tracert命令可以追蹤網(wǎng)絡(luò)通信的路徑,如果在通信過程中出現(xiàn)延遲或者丟包現(xiàn)象,就說明存在網(wǎng)絡(luò)抖動。
- 網(wǎng)絡(luò)診斷工具 :網(wǎng)絡(luò)診斷工具可以幫助檢測網(wǎng)絡(luò)抖動,并提供詳細的網(wǎng)絡(luò)狀態(tài)信息,幫助用戶更好地理解網(wǎng)絡(luò)通信過程中出現(xiàn)的問題。
- 網(wǎng)絡(luò)質(zhì)量監(jiān)測系統(tǒng):網(wǎng)絡(luò)質(zhì)量監(jiān)測系統(tǒng)可以監(jiān)測網(wǎng)絡(luò)質(zhì)量,包括延遲、丟包等指標,并提供實時報警和分析報告,幫助用戶及時發(fā)現(xiàn)和解決網(wǎng)絡(luò)抖動問題。
4、總結(jié)
RTT作為網(wǎng)絡(luò)時延的檢測工具,是 在應(yīng)用層進行的網(wǎng)絡(luò)性能檢測 ,包括了網(wǎng)絡(luò)傳輸?shù)臅r延和末端響應(yīng)的時延。在實際分析過程中,主機上單個服務(wù)的RTT時延較長并不能說明服務(wù)器之間的物理網(wǎng)絡(luò)異常,需要更多的指標數(shù)據(jù)進行分析,比如相同主機上的其它服務(wù)的RTT時延、ping包時延等。
如上圖所示的主機1中的服務(wù)1和主機2中的服務(wù)2和服務(wù)3配置了RTT時延監(jiān)控,發(fā)現(xiàn)服務(wù)器1到服務(wù)2的RTT時延明顯差于服務(wù)1到服務(wù)3的RTT時延。這個時候就可以辨別出,如果是網(wǎng)絡(luò)層的性能變差,兩個RTT檢測的值表現(xiàn)上會相似,但實際上卻是相反的,只能 說明服務(wù)2在響應(yīng)服務(wù)1的請求處理時間比服務(wù)3長 。
因此在實際的監(jiān)控配置過程中,RTT時延只能作為網(wǎng)絡(luò)性能監(jiān)控的一個參考指標,不排除會出現(xiàn)誤判的情景,需要和其它主機和服務(wù)橫向?qū)Ρ热シ治雠袛唷?/p>
-
交換機
+關(guān)注
關(guān)注
20文章
2571瀏覽量
98241 -
ICMP
+關(guān)注
關(guān)注
0文章
51瀏覽量
14870 -
RTO
+關(guān)注
關(guān)注
0文章
15瀏覽量
11145 -
RTT
+關(guān)注
關(guān)注
0文章
64瀏覽量
16987 -
TCP通信
+關(guān)注
關(guān)注
0文章
146瀏覽量
4184
發(fā)布評論請先 登錄
相關(guān)推薦
評論