您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關如何實現Linux 2.6.16 TCP連接速度異常的問題分析,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
發現訪問公司某些業務時,速度非常不穩定,并且整體慢于競爭對手。分析認為SESU10母盤上內核TCP擁塞控制算法和Windows的Ack頻率控制的策略存在不兼容情況。
目前至少確認 2.6.16內核版本存在此問題;打TCP優化補丁或者更換Tlinux以后可以解決問題。
在體驗網環境下測試:大文件下載的情況下,百度的下載速度平均在600KBPS,我們的下載速度平均低于100Kbps;互娛Webgame情況下,TNT業務下載速度大約是DDT的25%。
這里是一個典型的下載速度曲線:
我們的服務器的曲線:(縱軸單位:包/s)
百度的服務器下載的曲線:
重現該問題的測試環境:
網絡: 公司體驗網,普通聯通4M ADSL
服務器:Linux64位服務器, 深圳機房。
服務器程序: Apache,nws(自研webserver)
客戶端: Windows XP, Windows7,任意瀏覽器或者旋風(單線程下載)
測試工具:wireshark, httpwatch
測試連接:分別是自建CDN、百度下載、深圳DC+Apache
通過客戶端抓包分析發現速度很慢的段有兩個問題:
服務器端總是等到前面的數據包確認以后才發送第二個包
Windows總是等到200ms左右才發送ACK確認。
對于Windows端的行為, 為了防止ACK過多導致網絡壓力,Ms TCP協議棧在每收到一個數據包時,啟動一個200ms定時器,直到收到其他數據包或者定時器過期時才發送ACK包。
通過設置注冊表選項 TcpAckFrequency 參數為1關閉 Ack delay以后,實驗發現下載速度恢復正常,無法重現下載速度慢的問題。
To configure the max outstanding ACKs in Windows XP/2003/Vista/2008:
[HKEYLOCALMACHINE \SYSTEM \CurrentControlSet \Services \Tcpip \Parameters \Interfaces \{Adapter-id}]
TcpAckFrequency = 1 (Default=2, 1=Disables delayed ACK, 2-n = If n outstanding ACKs before timed interval, sent ACK)
因為無法強制用戶通過修改注冊表避免問題,并且競爭對手也沒有看到類似問題,因此只能從linux端解決。
Linux這一端,首先懷疑和nagle算法有關系,在nws服務器上設置TCP_NODELAY以后仍然可以重現,可以排除Nagle算法的影響。 (實際上nws每次發送大數據包或者直接使用sendfile,不太會收到nagle算法影響) 其次Apache,nws都可以重現這個問題,比較懷疑操作系統本身有缺陷。
因為每次linux僅發送一個數據包,因此懷疑擁塞窗口的問題,推測問題如下:
初始情況下,客戶端回復一個ACK時,擁塞窗口增大,每次發送多個數據包,因此剛開始可以有較快的傳輸速度;因為網絡延時抖動或丟包導致服務器協議棧判定數據包超時,重置擁塞窗口為1,每次僅發送一個數據包,收到客戶端200ms回包,時仍然認為超時,同時調整RTT;直到RTT增大到200ms不算超時為止,擁塞窗口得以擴大,可以發送多個數據包,傳輸速度增快,如此循環。
通過測試增大初始擁塞窗口為10 (更換內核加載架平新技術組的TCP優化模塊實現),下載速度恢復正常。
上述就是小編為大家分享的如何實現Linux 2.6.16 TCP連接速度異常的問題分析了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。