您好,登錄后才能下訂單哦!
這篇文章給大家介紹linux中如何實現模擬弱網環境,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
運維過程中,最復雜的問題,莫過于網絡的問題,而網絡問題最煩的就是無法復現,這篇介紹一個強大的網絡模擬工具Netem。
Netem是從linux 2.6以上內核版本開始提供的一個網絡模擬功能模塊,它主要用來在性能良好的網絡環境中,模擬出復雜的網絡傳輸性能,比如低帶寬、傳輸延遲、丟包等各種常見的網絡故障的情況。
而Netem是由命令行工具tc控制,tc我們應該比較熟悉,tc是iproute2工具包的一部分,它的全稱是traffic control(流量控制),最常用的莫過于通過nc監聽進行反彈shell。
tc主要用于linux內核的流量控制,主要是通過在是輸出端口處建立一個隊列來實現流量控制,接收包從輸入接口進來后,經過流量限制,丟棄不符合規定的數據包,由輸入多路分配器進行判斷選擇,如果接收包的目的是本主機,那么將該包送給上層處理,否則需要進行轉發,將接收包交到轉發塊處理,轉發塊同時也接收本機上層(TCP、UDP等)產生的包。轉發塊通過查看路由表,決定所處理包的下一跳,然后對包進行排列以便將他們傳送到輸出接口,一般我們只能限制網卡發送的數據包,不太好限制網卡接收的數據包,所以我們可以通過改變發送次序來控制傳輸速率,linux流量控制主要是在輸出接口排列時進行處理和實現的。
關于linux內部網絡包轉發,在公眾號之前發過的文章《nfstable比iptables強在哪里》里面有較詳細的介紹,這里就不羅嗦了,有興趣的可以點進去看下。
回到正題,我們主要通過tc工具加Netem模塊進行網絡狀況的模擬,看下netem模塊的強大功能
網絡狀況不好的情況通常就是以下幾個表現:延遲、丟包、亂序、重復、錯誤等,我們就通過netem來模擬以上這幾種情況,建議不要生產環境測試,熟練掌握后再使用
在tc配置netem的操作中,主要有4個控制參數,分別是add(表示為指定網卡添加Netem配置),change(表示修改已經存在的Netem配置),replace(表示替換已經存在的Netem配置的值),del(表示刪除網卡上的Netem配置),好了,接著開始測試幾種情況。
tc qdisc add dev eth0 root netem daly 100ms
模擬網絡,所有的報文延遲100ms發送
上面的命令中qdisc是排隊規則,沒有添加規則之前,因為是內網,所以ping延遲在1ms,添加延遲后,增加到100ms
在真實的網絡環境中,我們通常很難看到非常穩定的時延,別杠內網,所以netem也考慮到這一點,模擬延遲參數中提供了控制延遲的時間分布的可選參數,完整的參數列表如下:
可以看到,除了TIME外,還有三個可選參數:
JITTTER:網絡抖動,增加一個隨機事件長度,讓延遲事件出現在某個范圍
CORRELATION:相關系數,下一個報文延遲事件和上一個報文的相關系數
distribution:延遲分布,可以選擇的值有uniform、normal、pareto和paretonormal
先來看下JITTER,如果設置為10ms,那么報文延遲事件會在100ms± 10ms之間隨機選擇,看下效果
CORRELATION是指包和包之間的相關性,因為網絡狀況是平滑變化的,短時間里相鄰報文的延遲應該是近似的,而不是完全隨機的,這個值是個百分比,如果為100%,就是固定延遲的情況,如果是0%則是隨機延遲的情況,接著剛才的配置繼續看下效果
而distribution則是通過正態分布的方式來模擬更符合真實網絡情況,它的幾個參數就是幾種延遲分布方法,有興趣的可以試一下
模擬丟包率
丟包在網絡中是最常見的一種情況,丟包會導致重傳,重傳會增加網絡鏈路的流量和延遲,Netem提供了loss參數,可以模擬丟包率
tc qdisc add dev eth0 root netem loss 50%
看下效果
和延遲類似,丟包率也有相關系數的參數可以設置,表示后一個報文丟包率和它前一個報文的相關性
tc qdisc add dev eth0 root netem loss 50% 25%
上面這個命令表示,丟包率是50%,并且當前報文丟棄的可能性和前一個報文相關性為25%
模擬報文重復,用duplicate參數,報文重復和丟包的參數類似,就是重復率和相關性兩個參數,比如隨機產生50%重復的包
tc qdisc add dev eth0 root netem duplicate 50%
看下效果
相關性和其他參數一樣,有興趣可以測試
模擬包損壞
模擬報文損壞用參數corrupt,報文損壞和報文重復的參數也類似,比如隨機產生30%損壞的報文
tc qdisc add dev eth0 root netem corrupt 30%
查看效果
可以從icmp_seq看到,損壞的報文,導致嚴重的丟包
我們知道TCP為了保證可靠傳輸,會在報文中添加序列號,確保被拆分的包能夠到達后進行重組,那么最好的情況就是包能按序傳輸,減少重新排序的次數,雖然包亂序造成的影響沒有上面幾種嚴重,但是仍然是會經常遇到,netem同樣提供了模擬包亂序的方法
模擬報文亂序和前面的參數不太一樣,上面的操作都是針對單個報文的,而亂序則牽扯到多個報文重組的問題,所以Netem這里有兩種方法來模擬亂序
第一種是固定的每隔一定數量的報文亂序一次
tc qdisc add dev eth0 root netem reorder 50% gap 3 delay 100ms
上面這個是每隔3個數據包正常發送,其他的數據包延遲100ms發送
第二種方法是更接近顯示情況的,就是隨機的,用概率來選擇亂序的報文
tc qdisc change dev eth0 root netem reorder 50% 15% delay 300ms
看效果
上面這個就是50%的報文正常發送,其他報文延遲300ms發送
測試的過程中,肯定需要查看當前配置了那些條件,通過tc的show指令可以進行查看
對于模擬弱網環境,排查問題,這個工具必不可少,趕緊收藏!
關于linux中如何實現模擬弱網環境就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。