- 論壇徽章:
- 0
|
其實(shí)我前段時(shí)間才真正開始研究網(wǎng)絡(luò)。以前看過情景分析,把socket層基本搞清楚。往下是inet socket層,也不是很難。再往下就是傳輸層,TCP/UDP,雖然看過TCP/IP詳解的一,二卷本,但仍一頭霧水,看不懂(原因估計(jì)是太龐大,又盤根錯(cuò)節(jié))。決定再?gòu)南峦稀?br />
先看了net/core/*.c,許多都看不同,但總算有了一些認(rèn)識(shí)。然后看drivers/net/ne.c,loopback.c驅(qū)動(dòng),知道了驅(qū)動(dòng)大概情況。
再往上就是qos了,也就是net/sched/*.c.從最簡(jiǎn)單的看起,sch_generic.c(其中有noop_disc,noqueue_qdisc,pfifo_fast_qdisc),sch_fifo.c。這些基本內(nèi)容之后就看sch_sfq.c,sch_tbf.c,這兩個(gè)稍微復(fù)雜一點(diǎn),但是和別的東西獨(dú)立(只是牽涉到af_netlink,sch_api.c),因此也比較容易理解.
再往后看了sch_prio.c,這是一個(gè)可分類的規(guī)則,很簡(jiǎn)單,但也很重要。因?yàn)槟軌蚍诸悾軌驋旖悠渌?duì)列規(guī)則),因此又涉及到分類器。于是從前天到昨天花了兩天時(shí)間集中研究了u32分類器(cls_u32.c),這個(gè)分類器功能很強(qiáng)大,因此結(jié)構(gòu)異常復(fù)雜。然后附帶研究了一下fw分類器,這個(gè)分類器原理很簡(jiǎn)單。
分析的時(shí)候我同時(shí)進(jìn)行試驗(yàn),先在在virtual pc上,然后實(shí)戰(zhàn)。我們學(xué)校的網(wǎng)關(guān)是我裝的,redhat 7.2(2.4.7-10smp).以前照葫蘆畫瓢建了兩個(gè)簡(jiǎn)單tc規(guī)則.
tc qidsc add dev eth0 root sfq perturb 10
tc qidsc add dev eth1 root sfq perturb 10
eth0接外網(wǎng),eth1接內(nèi)網(wǎng),iptables做nat和過濾包。
現(xiàn)在稍微懂了一些qos后,修改了一下規(guī)則
#!/bin/bash -x
for i in 0 1
do
/sbin/tc qdisc del dev eth$i root
/sbin/tc qdisc add dev eth$i handle 1: root prio bands 3 priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
/sbin/tc qdisc add dev eth$i parent 1:1 sfq perturb 10
/sbin/tc qdisc add dev eth$i parent 1:2 sfq perturb 10
/sbin/tc qdisc add dev eth$i parent 1:3 sfq perturb 10
if [ $i -eq 0 ];then port="dport";addr="16";else port="sport";addr="12";fi
/sbin/tc filter add dev eth$i parent 1: pref 10 protocol ip u32 match ip protocol 6 0xff match ip $port 80 0xffff flowid 1:1
/sbin/tc filter add dev eth$i parent 1: pref 10 protocol ip u32 match u32 0xaabbccdd 0xffffffe0 at $addr flowid 1:2
done
這樣可以對(duì)校內(nèi)的流量進(jìn)行象樣的qos了,保證http流量?jī)?yōu)先,其次是訪問我們自己的公網(wǎng)服務(wù)器的流量,最后是其他流量,這些流量都是通過u32分類器進(jìn)行分類.當(dāng)然也可以使用fw分類器來完成這些任務(wù)。試驗(yàn)的時(shí)候有些命令不會(huì)用就看Linux的高級(jí)路由和流量控制HOWTO.pdf,然后在對(duì)照iproute2中tc的源代碼,可以起到事半功倍的效果,而不是以前的抓瞎了(tc比較難用,有沒有正規(guī)的手冊(cè))。
接下來我準(zhǔn)備繼續(xù)把其他的幾個(gè)算法看完,包括cls_route,cls_tcindex,sch_red,sch_gred,sch_teql,sch_dsmask,sch_cbq(這個(gè)最麻煩了),sch_ingress.等等。
把這些看完就了后,往上到鄰居子系統(tǒng)層(arp),再到ip層(包括路由子系統(tǒng),netfilter子系統(tǒng),icmp,igmp,ipip,等等),最后再猛攻UDP/TCP.
路還很長(zhǎng),但我有信心走下去。
[ 本帖最后由 qtdszws 于 2006-11-13 15:45 編輯 ] |
|