linux下使用tc和netem模擬網絡異常(一)

剛開始着手要弄這個的時候,上網看了一下,就幾個命令,以爲很簡單,沒想到後面也是一波三折,如今憑記憶一點一點記錄。linux

Netem 與 TC 簡要說明bash

Netem 是 Linux 2.6 及以上內核版本提供的一個網絡模擬功能模塊。該功能模塊能夠用來在性能良好的局域網中,模擬出複雜的互聯網傳輸性能。例如:低帶寬、傳輸延遲、丟包等等狀況。使用 Linux 2.6 (或以上) 版本內核的不少 Linux 發行版都默認開啓了該內核模塊,好比:Fedora、Ubuntu、Redhat、OpenSuse、CentOS、Debian 等等。網絡

TC 是 Linux 系統中的一個用戶態工具,全名爲 Traffic Control (流量控制)。TC 能夠用來控制 Netem 模塊的工做模式,也就是說若是想使用 Netem 須要至少兩個條件,一是內核中的 Netem 模塊被啓用,另外一個是要有對應的用戶態工具 TC 。工具

首先看了一下目前使用的虛擬機linux版本,Fedora 9,Linux 2.6。性能

直接終端輸入:tc qdisc show,顯示段錯誤。ui

查看內核配置,make menuconfigspa

Networking --> Networking Options --> QoS and/or fair queuing --> Network emulator
make install沒有成功,後面還專門去官網下載了LINUX 3.2的版本嘗試,老是各類問題。
後來決定下載最新的fedora 29,一切從頭開始。(省略中間不少步......)
Fedora 29配置完成以後,試了一下tc qdisc show,顯示正常。
輸入延遲或者丟包的命令,就會報錯誤:RTNETLINK answers: No such file or directory (中間的各類嘗試其實都報這個錯誤,只是一直沒找到解決辦法,換了最新版以後仍是這個問題)
後來看到文章說:To properly use qdiscs, install the kernel-modules-extra package。就是說內核中沒有集成kernel-modules-extra 包,須要手動安裝。
輸入:yum install kernel-modules-extra 進行安裝,中間可能因爲網絡緣由出現安裝不成功,後來再次安裝就行了。
安裝完畢再次輸入命令,RTNETLINK answers: No such file or directory的錯誤就沒有了,覺得後面就沒問題了。
$:tc qdisc show (打印正常)
$tc qdisc add dev ens33 root netem delay 100ms 報錯:Error:Exclusivity flag on, cannot modify
雖然看懂了大概意思,可是實在不知道是什麼緣由,網上也基本上找不到相關的解決辦法。
偶然間輸入命令
$:tc qdisc change dev ens33 root netem delay 100ms 成功
$:tc qdisc change dev ens33 root netem loss 50% 成功
ping主機網絡確實有丟包,當時想一想實在不行就用change命令吧,也好使,繼續查資料看到:
add 表示爲指定網卡添加 Netem 配置,change 表示修改已經存在的 Netem 配置到新的值,replace 表示替換已經存在的 Netem 配置的值。
若是要刪除網卡上的 Netem 配置可使用
del:$ tc qdisc del dev enp0s5 root

看到這裏大概明白了,netem配置已經存在,因此使用add會報錯,只能用change。
懷着忐忑的心情把netem配置刪除(實在是小白,懼怕刪除配置又會出別的問題)
再次輸入add命令:$tc qdisc add dev ens33 root netem delay 100ms 成功。目前第一步算是完成了,描述可能比較混亂,只是但願本身作個記錄或者給遇到一樣問題的朋友一點點幫助。
kernel-modules-extrakernel-modules-extra kernel-modules-extraRTNETLINK answers: No such file or directorytc qdisc change dev ens33 root netem loss 50% 成功
ping主機網絡確實有丟包,當時想一想實在不行就用change命令吧,也好使,繼續查資料看到:
add 表示爲指定網卡添加 Netem 配置,change 表示修改已經存在的 Netem 配置到新的值,replace 表示替換已經存在的 Netem 配置的值。
若是要刪除網卡上的 Netem 配置可使用
del:$ tc qdisc del dev enp0s5 root

看到這裏大概明白了,netem配置已經存在,因此使用add會報錯,只能用change。
懷着忐忑的心情把netem配置刪除(實在是小白,懼怕刪除配置又會出別的問題)
再次輸入add命令:$tc qdisc add dev ens33 root netem delay 100ms 成功。目前第一步算是完成了,描述可能比較混亂,只是但願本身作個記錄或者給遇到一樣問題的朋友一點點幫助。
addchangereplacedel:$ tc qdisc del dev enp0s5 root

看到這裏大概明白了,netem配置已經存在,因此使用add會報錯,只能用change。
懷着忐忑的心情把netem配置刪除(實在是小白,懼怕刪除配置又會出別的問題)
再次輸入add命令:$tc qdisc add dev ens33 root netem delay 100ms 成功。目前第一步算是完成了,描述可能比較混亂,只是但願本身作個記錄或者給遇到一樣問題的朋友一點點幫助。
$tc qdisc add dev ens33 root netem delay 100ms
相關文章
相關標籤/搜索