linux中如何實(shí)現(xiàn)模擬弱網(wǎng)環(huán)境

這篇文章給大家介紹linux中如何實(shí)現(xiàn)模擬弱網(wǎng)環(huán)境,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

成都創(chuàng)新互聯(lián)專注于永順企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城系統(tǒng)網(wǎng)站開發(fā)。永順網(wǎng)站建設(shè)公司,為永順等地區(qū)提供建站服務(wù)。全流程按需定制制作,專業(yè)設(shè)計,全程項(xiàng)目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

運(yùn)維過程中,最復(fù)雜的問題,莫過于網(wǎng)絡(luò)的問題,而網(wǎng)絡(luò)問題最煩的就是無法復(fù)現(xiàn),這篇介紹一個強(qiáng)大的網(wǎng)絡(luò)模擬工具Netem。

Netem是從linux 2.6以上內(nèi)核版本開始提供的一個網(wǎng)絡(luò)模擬功能模塊,它主要用來在性能良好的網(wǎng)絡(luò)環(huán)境中,模擬出復(fù)雜的網(wǎng)絡(luò)傳輸性能,比如低帶寬、傳輸延遲、丟包等各種常見的網(wǎng)絡(luò)故障的情況。

而Netem是由命令行工具tc控制,tc我們應(yīng)該比較熟悉,tc是iproute2工具包的一部分,它的全稱是traffic control(流量控制),最常用的莫過于通過nc監(jiān)聽進(jìn)行反彈shell。

tc主要用于linux內(nèi)核的流量控制,主要是通過在是輸出端口處建立一個隊(duì)列來實(shí)現(xiàn)流量控制,接收包從輸入接口進(jìn)來后,經(jīng)過流量限制,丟棄不符合規(guī)定的數(shù)據(jù)包,由輸入多路分配器進(jìn)行判斷選擇,如果接收包的目的是本主機(jī),那么將該包送給上層處理,否則需要進(jìn)行轉(zhuǎn)發(fā),將接收包交到轉(zhuǎn)發(fā)塊處理,轉(zhuǎn)發(fā)塊同時也接收本機(jī)上層(TCP、UDP等)產(chǎn)生的包。轉(zhuǎn)發(fā)塊通過查看路由表,決定所處理包的下一跳,然后對包進(jìn)行排列以便將他們傳送到輸出接口,一般我們只能限制網(wǎng)卡發(fā)送的數(shù)據(jù)包,不太好限制網(wǎng)卡接收的數(shù)據(jù)包,所以我們可以通過改變發(fā)送次序來控制傳輸速率,linux流量控制主要是在輸出接口排列時進(jìn)行處理和實(shí)現(xiàn)的。

關(guān)于linux內(nèi)部網(wǎng)絡(luò)包轉(zhuǎn)發(fā),在公眾號之前發(fā)過的文章《nfstable比iptables強(qiáng)在哪里》里面有較詳細(xì)的介紹,這里就不羅嗦了,有興趣的可以點(diǎn)進(jìn)去看下。

回到正題,我們主要通過tc工具加Netem模塊進(jìn)行網(wǎng)絡(luò)狀況的模擬,看下netem模塊的強(qiáng)大功能

網(wǎng)絡(luò)狀況不好的情況通常就是以下幾個表現(xiàn):延遲、丟包、亂序、重復(fù)、錯誤等,我們就通過netem來模擬以上這幾種情況,建議不要生產(chǎn)環(huán)境測試,熟練掌握后再使用

在tc配置netem的操作中,主要有4個控制參數(shù),分別是add(表示為指定網(wǎng)卡添加Netem配置),change(表示修改已經(jīng)存在的Netem配置),replace(表示替換已經(jīng)存在的Netem配置的值),del(表示刪除網(wǎng)卡上的Netem配置),好了,接著開始測試幾種情況。

模擬延遲傳輸

tc qdisc add dev eth0 root netem daly 100ms

模擬網(wǎng)絡(luò),所有的報文延遲100ms發(fā)送

linux中如何實(shí)現(xiàn)模擬弱網(wǎng)環(huán)境

上面的命令中qdisc是排隊(duì)規(guī)則,沒有添加規(guī)則之前,因?yàn)槭莾?nèi)網(wǎng),所以ping延遲在1ms,添加延遲后,增加到100ms

在真實(shí)的網(wǎng)絡(luò)環(huán)境中,我們通常很難看到非常穩(wěn)定的時延,別杠內(nèi)網(wǎng),所以netem也考慮到這一點(diǎn),模擬延遲參數(shù)中提供了控制延遲的時間分布的可選參數(shù),完整的參數(shù)列表如下:

linux中如何實(shí)現(xiàn)模擬弱網(wǎng)環(huán)境

可以看到,除了TIME外,還有三個可選參數(shù):

  • JITTTER:網(wǎng)絡(luò)抖動,增加一個隨機(jī)事件長度,讓延遲事件出現(xiàn)在某個范圍

  • CORRELATION:相關(guān)系數(shù),下一個報文延遲事件和上一個報文的相關(guān)系數(shù)

  • distribution:延遲分布,可以選擇的值有uniform、normal、pareto和paretonormal

先來看下JITTER,如果設(shè)置為10ms,那么報文延遲事件會在100ms± 10ms之間隨機(jī)選擇,看下效果

linux中如何實(shí)現(xiàn)模擬弱網(wǎng)環(huán)境

CORRELATION是指包和包之間的相關(guān)性,因?yàn)榫W(wǎng)絡(luò)狀況是平滑變化的,短時間里相鄰報文的延遲應(yīng)該是近似的,而不是完全隨機(jī)的,這個值是個百分比,如果為100%,就是固定延遲的情況,如果是0%則是隨機(jī)延遲的情況,接著剛才的配置繼續(xù)看下效果

linux中如何實(shí)現(xiàn)模擬弱網(wǎng)環(huán)境

而distribution則是通過正態(tài)分布的方式來模擬更符合真實(shí)網(wǎng)絡(luò)情況,它的幾個參數(shù)就是幾種延遲分布方法,有興趣的可以試一下

模擬丟包率

丟包在網(wǎng)絡(luò)中是最常見的一種情況,丟包會導(dǎo)致重傳,重傳會增加網(wǎng)絡(luò)鏈路的流量和延遲,Netem提供了loss參數(shù),可以模擬丟包率

tc qdisc add dev eth0 root netem loss 50%

看下效果

linux中如何實(shí)現(xiàn)模擬弱網(wǎng)環(huán)境

和延遲類似,丟包率也有相關(guān)系數(shù)的參數(shù)可以設(shè)置,表示后一個報文丟包率和它前一個報文的相關(guān)性

tc qdisc add dev eth0 root netem loss 50% 25%

上面這個命令表示,丟包率是50%,并且當(dāng)前報文丟棄的可能性和前一個報文相關(guān)性為25%

模擬包重復(fù)

模擬報文重復(fù),用duplicate參數(shù),報文重復(fù)和丟包的參數(shù)類似,就是重復(fù)率和相關(guān)性兩個參數(shù),比如隨機(jī)產(chǎn)生50%重復(fù)的包

tc qdisc add dev eth0 root netem duplicate 50%

看下效果

linux中如何實(shí)現(xiàn)模擬弱網(wǎng)環(huán)境

相關(guān)性和其他參數(shù)一樣,有興趣可以測試

模擬包損壞

模擬報文損壞用參數(shù)corrupt,報文損壞和報文重復(fù)的參數(shù)也類似,比如隨機(jī)產(chǎn)生30%損壞的報文

tc qdisc add dev eth0 root netem corrupt 30%

查看效果

linux中如何實(shí)現(xiàn)模擬弱網(wǎng)環(huán)境

可以從icmp_seq看到,損壞的報文,導(dǎo)致嚴(yán)重的丟包

模擬包亂序

我們知道TCP為了保證可靠傳輸,會在報文中添加序列號,確保被拆分的包能夠到達(dá)后進(jìn)行重組,那么最好的情況就是包能按序傳輸,減少重新排序的次數(shù),雖然包亂序造成的影響沒有上面幾種嚴(yán)重,但是仍然是會經(jīng)常遇到,netem同樣提供了模擬包亂序的方法

模擬報文亂序和前面的參數(shù)不太一樣,上面的操作都是針對單個報文的,而亂序則牽扯到多個報文重組的問題,所以Netem這里有兩種方法來模擬亂序

第一種是固定的每隔一定數(shù)量的報文亂序一次

  1. tc qdisc add dev eth0 root netem reorder 50% gap 3 delay 100ms 


linux中如何實(shí)現(xiàn)模擬弱網(wǎng)環(huán)境

上面這個是每隔3個數(shù)據(jù)包正常發(fā)送,其他的數(shù)據(jù)包延遲100ms發(fā)送

第二種方法是更接近顯示情況的,就是隨機(jī)的,用概率來選擇亂序的報文

tc qdisc change dev eth0 root netem reorder 50% 15% delay 300ms

看效果

linux中如何實(shí)現(xiàn)模擬弱網(wǎng)環(huán)境

上面這個就是50%的報文正常發(fā)送,其他報文延遲300ms發(fā)送

查看已配置過濾條件

測試的過程中,肯定需要查看當(dāng)前配置了那些條件,通過tc的show指令可以進(jìn)行查看

linux中如何實(shí)現(xiàn)模擬弱網(wǎng)環(huán)境

對于模擬弱網(wǎng)環(huán)境,排查問題,這個工具必不可少,趕緊收藏!

關(guān)于linux中如何實(shí)現(xiàn)模擬弱網(wǎng)環(huán)境就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

文章標(biāo)題:linux中如何實(shí)現(xiàn)模擬弱網(wǎng)環(huán)境
本文URL:http://bm7419.com/article20/jjcjco.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站收錄、標(biāo)簽優(yōu)化全網(wǎng)營銷推廣、微信公眾號、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司