Linux模擬網(wǎng)絡(luò)丟包與延遲的方法
netem 與 tc:
netem 是 Linux 2.6 及以上內(nèi)核版本提供的一個(gè)網(wǎng)絡(luò)模擬功能模塊。該功能模塊可以用來在性能良好的局域網(wǎng)中,模擬出復(fù)雜的互聯(lián)網(wǎng)傳輸性能,諸如低帶寬、傳輸延遲、丟包等等情況。使用 Linux 2.6 (或以上) 版本內(nèi)核的很多發(fā)行版 Linux 都開啟了該內(nèi)核功能,比如Fedora、Ubuntu、Redhat、OpenSuse、CentOS、Debian等等。
tc 是 Linux 系統(tǒng)中的一個(gè)工具,全名為traffic control(流量控制)。tc 可以用來控制 netem 的工作模式,也就是說,如果想使用 netem ,需要至少兩個(gè)條件,一個(gè)是內(nèi)核中的 netem 功能被包含,另一個(gè)是要有 tc 。
需要注意的是:本文介紹的流控只能控制發(fā)包動(dòng)作,不能控制收包動(dòng)作,同時(shí),它直接對(duì)物理接口生效,如果控制了物理的eth0,那么邏輯網(wǎng)卡(比如eth0:1)也會(huì)受到影響,反之,如果您在邏輯網(wǎng)卡上做控制,該控制可能是無效的。(注:虛擬機(jī)中的多個(gè)網(wǎng)卡可以在虛擬機(jī)中視為多個(gè)物理網(wǎng)卡)。
Linux 有個(gè) tc 工具,即 traffic control,可以用來模擬網(wǎng)絡(luò)丟包和延遲。在開發(fā)后臺(tái) server 時(shí),如果我們想要知道這個(gè) server 在特定的網(wǎng)絡(luò)丟包情況下,是否能表現(xiàn)良好,就可以用 tc 來模擬丟包率。
模擬丟包
下面命令可以模擬丟包,從 eth0 網(wǎng)口出去的包將隨機(jī)丟失 10%:
sudo tc qdisc add dev eth0 root netem loss 10%
模擬延遲
下面命令,從 eth0 網(wǎng)口出去的包將延遲 40ms:
sudo tc qdisc add dev eth0 root netem delay 40ms
特定場(chǎng)景下的丟包和延遲
注意,上面我們介紹的命令,是針對(duì)整個(gè) eth0 網(wǎng)口起作用的,也就是說,只要是從 eth0 出去的所有的包,都會(huì)產(chǎn)生隨機(jī)丟包或者延遲。但有時(shí)候,我們只想讓丟包和延遲作用于某個(gè)目的地址,那要怎么做呢?
sudo tc qdisc add dev eth0 root handle 1: prio sudo tc qdisc add dev eth0 parent 1:3 handle 30: netem loss 13% delay 40ms sudo tc filter add dev eth0 protocol ip parent 1:0 u32 match ip dst 199.91.72.192 match ip dport 36000 0xffff flowid 1:3
上面的命令,我們告訴 tc,對(duì)發(fā)往 199.91.72.192:36000 的網(wǎng)絡(luò)包產(chǎn)生 13% 的丟包和 40ms 的延遲,而發(fā)往其它目的地址的網(wǎng)絡(luò)包將不受影響。
刪除規(guī)則
好了,模擬完丟包和延遲之后,要記得刪除掉規(guī)則:
sudo tc qdisc del dev eth0 root
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
- linux 雙網(wǎng)卡綁定網(wǎng)絡(luò)設(shè)置方法
- Linux網(wǎng)絡(luò)編程之基于UDP實(shí)現(xiàn)可靠的文件傳輸示例
- Linux下用netstat查看網(wǎng)絡(luò)狀態(tài)、端口狀態(tài)
- linux命令學(xué)習(xí)之10個(gè)網(wǎng)絡(luò)命令和監(jiān)控命令
- 檢查linux網(wǎng)絡(luò)狀態(tài)的兩個(gè)腳本
- linux下監(jiān)控網(wǎng)絡(luò)流量的腳本
- Linux基本網(wǎng)絡(luò)配置方法介紹
- Linux 檢測(cè)服務(wù)器是否連接著網(wǎng)絡(luò)
- Linux的常用網(wǎng)絡(luò)命令
- Linux下的網(wǎng)絡(luò)監(jiān)聽技術(shù)之一
相關(guān)文章
Linux下Oracle設(shè)置定時(shí)任務(wù)備份數(shù)據(jù)庫的教程
這篇文章主要介紹了Linux下Oracle設(shè)置定時(shí)任務(wù)備份數(shù)據(jù)庫的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
教你一招實(shí)現(xiàn)Linux中的文本比對(duì)
這篇文章主要給阿加介紹了關(guān)于Linux下文本比對(duì)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11
CentOS 8 正式發(fā)布 基于Red Hat Enterprise Linux 8
緊隨CentOS Linux 7.7發(fā)行版之后,CentOS Linux 8現(xiàn)已正式發(fā)布,新版本基于Red Hat Enterprise Linux 8.0源,這意味著它具有混合云時(shí)代的所有強(qiáng)大的新特性和增強(qiáng)功能2019-09-09
ubuntu/deepin制作快捷啟動(dòng)圖標(biāo)的方法
這篇文章主要介紹了ubuntu/deepin制作快捷啟動(dòng)圖標(biāo)的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02
linux如何利用crontab添加定時(shí)任務(wù)詳解
這篇文章主要給大家介紹了關(guān)于linux如何利用crontab添加定時(shí)任務(wù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用linux具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04

