TC工具:(參考)
應(yīng)用場景:網(wǎng)絡(luò)故障模擬(網(wǎng)卡)
實(shí)現(xiàn)平臺:Linux
解決問題:
? ? ? ?本質(zhì)上是做一個流量的控制(延伸到具體應(yīng)用有丟包、延遲、抖動等)
原理:
? ? ? ?從流量控制的角度看(使用TC工具),流量控制主要分為三塊,包括隊(duì)列、類和TC,這里我們會先建一個隊(duì)列,隊(duì)列的方式有CBQ、HTB等,然后在隊(duì)列下建立類,這邊流量過來,比如說WWW和Email這兩種流量需要被分派到兩個類中,我們通過filter對應(yīng)相應(yīng)的流量規(guī)則來匹配這兩種類
linux基本的流程操作是:
1、建立隊(duì)列:
tc qdisc add dev eth1 root handle 1:htb default 11
通過qudis創(chuàng)建跟隊(duì)列root,采用隊(duì)列方式是htb
2、創(chuàng)建類
? tc?class?add?dev?eth1 parent?1:?classid?1:13?htb?rate?20mbit?ceil?20mbit
通過class創(chuàng)建類,跟隊(duì)列是parent1,子隊(duì)列是class 1:13,這里是對帶寬進(jìn)行了限制這里是rate?20mbit,最高帶寬ceil?20mbit
3、設(shè)置過濾器
?tc filter add dev eth0? parent 1:0 protocol ip prio 1?u32 match ip dport 80 0xffff?flowid 1:11?
這里是一個匹配操作,u32過濾器要檢查的協(xié)議字段是?protocol ip,匹配的的ip端口是80 ,匹配的結(jié)果是0xffff ,最終會把流量放入類1:11 中
4、檢查流量配置情況
tc?filter show dev DEV或者tc -s -d qdisc ls這個表示方式很多
與其他工具或模塊的結(jié)合
比如說和netem模塊結(jié)合,可模擬場景包括:模擬端口或IP超時、網(wǎng)絡(luò)丟包(netem? loss)、包損壞(netem??corrupt)、包亂序(?reorder?)、包重復(fù)(netem??duplicate)、網(wǎng)絡(luò)抖動(抖動是在延遲基礎(chǔ)上做的,是一個迭代過程,可以先用tc設(shè)置延遲,一定時間之后將tc規(guī)則刪除,在設(shè)置延遲再刪除以此往復(fù))
注意的點(diǎn):
tc執(zhí)行必須root賬號 ;只針對出口流量有效
iptables工具:(參考)
應(yīng)用場景:網(wǎng)絡(luò)管控(作用層是第三層和第四層)
實(shí)現(xiàn)平臺:Linux
解決問題:網(wǎng)絡(luò)的過濾或網(wǎng)絡(luò)地址轉(zhuǎn)換
原理:
? ? ? ? 這里iptables內(nèi)部可以理解為一個網(wǎng),這里table是一個整體的框架,里層是chain,chain里是具體的rule ,這里的一個table可以包含多個chain,chain可以包含多個rule。table主要分為三部分,主要是nat、mangle和filter,其中nat主要是改變網(wǎng)絡(luò)地址,mangle主要是做對包的一些設(shè)置,相關(guān)的chain是?PREROUTING,POSTROUTING, OUTPUT,INPUT?和?FORWARD,對于filter 做的是對包進(jìn)行 DROP、LOG、ACCEPT 和 REJECT 等操作。舉一個例子來說:進(jìn)入主機(jī)的包(data)主要有三種為輸入本機(jī)的包,本機(jī)作為源輸出的包,和本機(jī)作為中轉(zhuǎn)的包,當(dāng)data進(jìn)入時iptables這邊會先做一個relu的判斷,是丟棄(relu中Target參數(shù)DROP)包還是接受(ACCEPT),如果是接受,接收后判斷是否是本機(jī)的包,如果是本機(jī)包,送入上層進(jìn)行處理,如果不是則通過Forwarding Block處理,同時也接受來自本機(jī)的包,這里如果和TC結(jié)合可以理解為iptables做了一個Mark的工作,將經(jīng)過預(yù)處理的包再讓TC做一個流量控制。當(dāng)然relu是可以自己依情況設(shè)置規(guī)則的,這里只是做了一個包處理過程模擬,當(dāng)然它還包括網(wǎng)址切換等操作
linux基本的流程操作是(這里基本是和TC聯(lián)合一起用的)
這邊是一個簡單的上網(wǎng)、端口設(shè)置和限流的例子
iptables -t nat -A POSTROUTING -s 172.16.44.0/24 -o eth0 -j MASQUERADE
通過nat添加端口轉(zhuǎn)發(fā)
iptables -t nat -I PREROUTING -p tcp -d a.b.c.d --dport 80 -j DNAT --to 172.16.44.210:80iptables -t nat -I POSTROUTING -p tcp -d 172.16.44.210 --dport 80 -j SNAT --to 172.16.44.1
這里是指定外網(wǎng)地址,將80端口轉(zhuǎn)發(fā)到172.16.44.210:80,它這里設(shè)置的內(nèi)網(wǎng)地址是?172.16.44.210
下面既可以用TC對網(wǎng)路進(jìn)行一個限速
分布式系統(tǒng):
? ? ? ?我們客戶端這邊用的是Tomcat(web server)和應(yīng)用(java app),通過HHTP協(xié)議與服務(wù)端進(jìn)行通信,服務(wù)器這邊的部署是根據(jù)分布式框架,希望用更多的計(jì)算機(jī)實(shí)現(xiàn)更大的數(shù)據(jù)處理,這里的計(jì)算機(jī)即系統(tǒng)分布節(jié)點(diǎn),這里是多節(jié)點(diǎn)提供相同服務(wù),那么問題就是如果幾個應(yīng)用過來應(yīng)該選擇哪個節(jié)點(diǎn),這里采用的是負(fù)載均衡選出一個節(jié)點(diǎn),對于日常應(yīng)用可能每個應(yīng)用間還有聯(lián)系,也就是各節(jié)點(diǎn)間要通信,通信符合TCP/IP協(xié)議,節(jié)點(diǎn)的下邊就是數(shù)據(jù)處理層
? ? ? ? 這是內(nèi)部一個集群的處理過程,在公司的情況下,一個部門的服務(wù)可能與其他部門是相關(guān)的,每個部門都有獨(dú)立的機(jī)器部署,相互間的通信是通過rpc實(shí)現(xiàn)的遠(yuǎn)程處理(rpc實(shí)現(xiàn)通信的過程主要是對一端對數(shù)據(jù)進(jìn)行封裝,另一端解封,調(diào)用的過程)
這是一個大概的框架,如果下一步會詳細(xì)看下