TC工具:(參考)
應(yīng)用場景:網(wǎng)絡(luò)故障模擬(網(wǎng)卡)
實(shí)現(xiàn)平臺:Linux
解決問題:
? ? ? ?本質(zhì)上是做一個(gè)流量的控制(延伸到具體應(yīng)用有丟包论颅、延遲局骤、抖動(dòng)等)
原理:
? ? ? ?從流量控制的角度看(使用TC工具)洞坑,流量控制主要分為三塊,包括隊(duì)列品姓、類和TC攀细,這里我們會先建一個(gè)隊(duì)列,隊(duì)列的方式有CBQ塑陵、HTB等感憾,然后在隊(duì)列下建立類,這邊流量過來令花,比如說WWW和Email這兩種流量需要被分派到兩個(gè)類中阻桅,我們通過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?
這里是一個(gè)匹配操作尤揣,u32過濾器要檢查的協(xié)議字段是?protocol ip搔啊,匹配的的ip端口是80 ,匹配的結(jié)果是0xffff 北戏,最終會把流量放入類1:11 中
4负芋、檢查流量配置情況
tc?filter show dev DEV或者tc -s -d qdisc ls這個(gè)表示方式很多
與其他工具或模塊的結(jié)合
比如說和netem模塊結(jié)合,可模擬場景包括:模擬端口或IP超時(shí)嗜愈、網(wǎng)絡(luò)丟包(netem? loss)旧蛾、包損壞(netem??corrupt)、包亂序(?reorder?)蠕嫁、包重復(fù)(netem??duplicate)锨天、網(wǎng)絡(luò)抖動(dòng)(抖動(dòng)是在延遲基礎(chǔ)上做的,是一個(gè)迭代過程剃毒,可以先用tc設(shè)置延遲病袄,一定時(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)部可以理解為一個(gè)網(wǎng)益缠,這里table是一個(gè)整體的框架,里層是chain基公,chain里是具體的rule 幅慌,這里的一個(gè)table可以包含多個(gè)chain,chain可以包含多個(gè)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 等操作糙置。舉一個(gè)例子來說:進(jìn)入主機(jī)的包(data)主要有三種為輸入本機(jī)的包,本機(jī)作為源輸出的包是目,和本機(jī)作為中轉(zhuǎn)的包谤饭,當(dāng)data進(jìn)入時(shí)iptables這邊會先做一個(gè)relu的判斷,是丟棄(relu中Target參數(shù)DROP)包還是接受(ACCEPT),如果是接受,接收后判斷是否是本機(jī)的包揉抵,如果是本機(jī)包亡容,送入上層進(jìn)行處理,如果不是則通過Forwarding Block處理冤今,同時(shí)也接受來自本機(jī)的包闺兢,這里如果和TC結(jié)合可以理解為iptables做了一個(gè)Mark的工作,將經(jīng)過預(yù)處理的包再讓TC做一個(gè)流量控制戏罢。當(dāng)然relu是可以自己依情況設(shè)置規(guī)則的屋谭,這里只是做了一個(gè)包處理過程模擬,當(dāng)然它還包括網(wǎng)址切換等操作
linux基本的流程操作是(這里基本是和TC聯(lián)合一起用的)
這邊是一個(gè)簡單的上網(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)行一個(gè)限速
分布式系統(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ù),那么問題就是如果幾個(gè)應(yīng)用過來應(yīng)該選擇哪個(gè)節(jié)點(diǎn)郎任,這里采用的是負(fù)載均衡選出一個(gè)節(jié)點(diǎn)秧耗,對于日常應(yīng)用可能每個(gè)應(yīng)用間還有聯(lián)系,也就是各節(jié)點(diǎn)間要通信舶治,通信符合TCP/IP協(xié)議分井,節(jié)點(diǎn)的下邊就是數(shù)據(jù)處理層
? ? ? ? 這是內(nèi)部一個(gè)集群的處理過程,在公司的情況下霉猛,一個(gè)部門的服務(wù)可能與其他部門是相關(guān)的尺锚,每個(gè)部門都有獨(dú)立的機(jī)器部署,相互間的通信是通過rpc實(shí)現(xiàn)的遠(yuǎn)程處理(rpc實(shí)現(xiàn)通信的過程主要是對一端對數(shù)據(jù)進(jìn)行封裝惜浅,另一端解封瘫辩,調(diào)用的過程)
這是一個(gè)大概的框架,如果下一步會詳細(xì)看下