網(wǎng)絡(luò)故障一般包含網(wǎng)絡(luò)數(shù)據(jù)異常,網(wǎng)絡(luò)丟包和網(wǎng)絡(luò)延遲。
Linux內(nèi)核從2.2開始提供TC(Traffic Control)去控制Linux內(nèi)核的流量,一般系統(tǒng)都是自帶tc工具。
TC控制流程:

paping是用來測試tcp連接的一個工具,需要單獨下載安裝:https://code.google.com/archive/p/paping/
這里使用paping而不是ping,按照原作者說法是為了防止在防火墻開啟的狀態(tài)下可以ping通,但無法進行tcp連接的問題。
網(wǎng)絡(luò)延遲:
tc qdisc add dev eth0 root netem delay 300ms
網(wǎng)絡(luò)丟包:
tc qdisc add dev eth0 root netem loss 7% 25% #代表丟掉7%的包,但是成功率只有25%
tc qdisc add dev eth0 root netem loss 7% #只設(shè)置7%是代表隨機丟掉7%的包
網(wǎng)絡(luò)數(shù)據(jù)異常:
tc qdisc add dev eth0 root netem corrupt 10% # 10%的數(shù)據(jù)包損壞,不是沒傳過去,而是傳過去不對。
網(wǎng)絡(luò)數(shù)據(jù)重復(fù):
tc qdisc add dev eth0 root netem duplicate 1% #隨機產(chǎn)生1%的包重復(fù)
網(wǎng)絡(luò)數(shù)據(jù)包亂序:
tc qdisc add dev eth0 root netem delay 10ms reorder 25% 50% #有25%的數(shù)據(jù)包(50%相關(guān))會被立即發(fā)送,其他的延遲10秒
關(guān)閉網(wǎng)絡(luò)異常模擬:
tc qdisc del dev eth0 root netem
監(jiān)控網(wǎng)卡:
tc qdisc add dev eth0 root netem
其余命令:
tc qdisc change dev eth0 root netem duplicate 1%
tc qdisc replace dev eth0 root netem duplicate 1%
注意事項
tc是要在client端設(shè)置的,因為只能控制數(shù)據(jù)發(fā)出,它模擬的是異常的數(shù)據(jù)到達Server后如何被處理,前提是數(shù)據(jù)在到達Server的時候已經(jīng)異常了。
至于server端的控制,需要使用iptables。
參考文檔:
https://honeypps.com/chaos/how-to-simulate-network-fault/
https://www.haxi.cc/archives/Linux%E6%A8%A1%E6%8B%9F%E5%A4%8D%E6%9D%82%E7%BD%91%E7%BB%9C%E7%8E%AF%E5%A2%83%E4%B8%8B%E7%9A%84%E4%BC%A0%E8%BE%93-netem%E5%92%8Ctc.html