作者 主題: 自動調整頻寬大小  (閱讀 7892 次)

0 會員 與 1 訪客 正在閱讀本文。

  • 懷疑的國中生
  • **
  • 文章數: 67
    • 檢視個人資料
自動調整頻寬大小
« 於: 2002-09-24 19:56 »
有鑑於1.5M的網路給大家使用,使用的時間不定,流量也不一定,而造成頻寬控管的大小難於掌握,如果太大的話造成網路塞車,太小的話白繳了那些錢給中華電信好康不合算,因此有了這些想法,請各學長們指導一下。
假設用戶有20個1.5M下載最高為168K,每個用戶基楚分配為6K。
每一分鐘調整頻寬一次,利用SHELLS(SCRIPT)來設計,只要一分鐘到,就捉取防火牆的的流量來比對,先捉5秒來取平均值,看它當時的總頻寬為多少,如果小於我們所設定的總頻寬的話,那就調整每個用戶的頻寬大小,每次為6K來調整,反之的話每次滅掉6K直到每個的基楚頻寬。
而我的問題是:
1.每分鐘的執行可採用cron 來寫。
2.每五秒捉取封包的指令,不知道有那一個可達成。
3.要將檔案的第幾行給提出來,以及將所得到的數據寫進去固定位置。
我在將我的例子分亨給大家。
os = linux 7.3
謝謝學長們。

duncanlo

  • SA 苦力組
  • 俺是博士!
  • *****
  • 文章數: 7312
    • 檢視個人資料
自動調整頻寬大小
« 回覆 #1 於: 2002-09-24 20:59 »
是不是可以用QoS的方法?

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17478
    • 檢視個人資料
    • http://www.study-area.org
Re: 自動調整頻寬大小
« 回覆 #2 於: 2002-09-24 22:57 »
引述: "阿忠"

而我的問題是:
1.每分鐘的執行可採用cron 來寫。
2.每五秒捉取封包的指令,不知道有那一個可達成。
3.要將檔案的第幾行給提出來,以及將所得到的數據寫進去固定位置。


1)  */1 * * * *
2) 用 for 迴圈寫,每個 loop 最後給它 sleep 5 。
3) 用 sed 和 awk 應該可以。先存到 tmp ,在回寫。

  • 懷疑的國中生
  • **
  • 文章數: 67
    • 檢視個人資料
自動調整頻寬大小
« 回覆 #3 於: 2002-09-25 00:07 »
了解謝謝我儘快測試,然後將結果報告
qos找不到相關資料參考

  • 懷疑的國中生
  • **
  • 文章數: 67
    • 檢視個人資料
自動調整頻寬大小
« 回覆 #4 於: 2002-10-31 00:55 »
經過這幾天的找資料,及測試它的功能是否符合預期的設計。
以經完全符合當初的設計的理念,現在裝在私人的學生宿舍有30台
電腦在跑,來觀察它的調整能力。
現在著手讓它能夠在多人使用時能更細緻的調整頻寬,讓它的起伏
能更平順一些,又保有快速的反應。
再一些時間就能貼出來。
現在遇到一點問題:
頡取封包我是用防火牆的指令抓取的。
我在想如果能像mrtg來抓取snmp的每分鍾的封包,可能會更好。
學長們知道用什麼方法能抓取snmp的資料?  :o
還是有另外的方法可以得到網路卡 eth1 及 eth0 的流量呢?
程式我是用 AWK 指令寫的。
謝謝拉。 :lol:  :lol:  :lol:

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17478
    • 檢視個人資料
    • http://www.study-area.org
自動調整頻寬大小
« 回覆 #5 於: 2002-10-31 10:55 »
我曾設過 mrtg,在:
http://www.study-area.org/tips/mrtg.htm

不知是否你說的?

注:
3) 編輯 /etc/snmp/snmpd.conf 檔案﹐並找到如下文字(非全部)﹐並修改紅色字體部份﹕
(不要忘記將設定行前面的註解符號也拿掉哦~~)

日京三子

  • 全區板主
  • 俺是博士!
  • *****
  • 文章數: 8830
    • 檢視個人資料
    • http://www.24online.cjb.net
自動調整頻寬大小
« 回覆 #6 於: 2002-10-31 12:13 »
哇!  神奇的阿忠又出現了!

能否將你這次的東西,像上次一樣,整理成文章供我們這些後進參考呢?

小弟先謝謝啦~ :oops:
哈克不愛的多合一輸入平台----->新香草口味
過去的時間不斷流逝,抹去的眼淚已成追憶;
乾枯的雙手無力阻止,再會了我遠去的曾經。

dwj

  • 可愛的小學生
  • *
  • 文章數: 3
    • 檢視個人資料
自動調整頻寬大小
« 回覆 #7 於: 2002-12-23 10:34 »
引述: "阿忠"
經過這幾天的找資料,及測試它的功能是否符合預期的設計。
以經完全符合當初的設計的理念,現在裝在私人的學生宿舍有30台
電腦在跑,來觀察它的調整能力。
現在著手讓它能夠在多人使用時能更細緻的調整頻寬,讓它的起伏
能更平順一些,又保有快速的反應。
再一些時間就能貼出來。
現在遇到一點問題:
頡取封包我是用防火牆的指令抓取的。
我在想如果能像mrtg來抓取snmp的每分鍾的封包,可能會更好。
學長們知道用什麼方法能抓取snmp的資料?  :o
還是有另外的方法可以得到網路卡 eth1 及 eth0 的流量呢?
程式我是用 AWK 指令寫的。
謝謝拉。 :lol:  :lol:  :lol:


抓 snmp mib 要用 snmpwget 請自行參考 ucd-snmp

interface 流量的標準 mib oid 如下 :
inOctets : .1.3.6.1.2.1.2.2.1.10
OutOctets : .1.3.6.1.2.1.2.2.1.16

snmpget 指令範例 :
下面這個指令會抓取本機的第三個 interface 此時的累計流入資料量
指令參數說明請自行參考 man page.

$ snmpget localhost public .1.3.6.1.2.1.2.2.1.10.3
interfaces.ifTable.ifEntry.ifInOctets.3 = Counter32: 75525183

抓到資料後需自行計算兩次抓取期間內的平均流量.

如果想要更動態的話, 建議自行撰寫 promiscuous mode 程式來讀取
封包流量資訊, 這樣可以更有效率地調整各User的頻寬使用率.

  • 懷疑的國中生
  • **
  • 文章數: 67
    • 檢視個人資料
自動調整頻寬大小
« 回覆 #8 於: 2002-12-23 22:29 »
抓 snmp mib 要用 snmpwget 請自行參考 ucd-snmp

interface 流量的標準 mib oid 如下 :
inOctets : .1.3.6.1.2.1.2.2.1.10
OutOctets : .1.3.6.1.2.1.2.2.1.16

snmpget 指令範例 :
下面這個指令會抓取本機的第三個 interface 此時的累計流入資料量
指令參數說明請自行參考 man page.

$ snmpget localhost public .1.3.6.1.2.1.2.2.1.10.3
interfaces.ifTable.ifEntry.ifInOctets.3 = Counter32: 75525183

抓到資料後需自行計算兩次抓取期間內的平均流量.

如果想要更動態的話, 建議自行撰寫 promiscuous mode 程式來讀取
封包流量資訊, 這樣可以更有效率地調整各User的頻寬使用率.


感謝大大dwj 的提供這樣的資料,
我最近也找到關於snmp的資料:
在本基上打入:
snmpwalk localhost public  interfaces.ifNumber.0 ==>傳回有多少個網路卡
snmpwalk localhost public interfaces.ifTable.ifEntry.ifDescr ==>傳回有多少個的介面,
例如:
snmpwalk localhost public interfaces.ifTable.ifEntry.ifDescr
interfaces.ifTable.ifEntry.ifDescr.1 = lo
interfaces.ifTable.ifEntry.ifDescr.2 = eth0
interfaces.ifTable.ifEntry.ifDescr.3 = eth1
那就2這個數字代表是eth0的介面

那要找出它的流量的數目是:
interfaces.ifTable.ifEntry.ifInOctets.1 =       ==>輸入多少流量,lo
interfaces.ifTable.ifEntry.ifInOctets.2 =          輸入多少流量,eth0
interfaces.ifTable.ifEntry.ifOutOctets.1 =      ==>輸出多少流量,lo
interfaces.ifTable.ifEntry.ifOutOctets.2 =         輸出多少流量 ,eth0
底下以此類推。
如有誤解的話,多多指較。
三子兄,要貼出來,沒什麼問題,只是我現在還在把snmpd 的資料跟我的程式給結合在一起,也還沒有實測,所以不敢拿出來, :oops:
做好的是防火牆的流量跟程式的集合而巳,只是效能不錯,讓我有信心再把snmpd給做好而巳。
ps 我是第一次寫程式的

dwj

  • 可愛的小學生
  • *
  • 文章數: 3
    • 檢視個人資料
自動調整頻寬大小
« 回覆 #9 於: 2002-12-25 14:11 »
引述: "阿忠"

感謝大大dwj 的提供這樣的資料,
我最近也找到關於snmp的資料:
在本基上打入:
snmpwalk localhost public  interfaces.ifNumber.0 ==>傳回有多少個網路卡
snmpwalk localhost public interfaces.ifTable.ifEntry.ifDescr ==>傳回有多少個的介面,
例如:
snmpwalk localhost public interfaces.ifTable.ifEntry.ifDescr
interfaces.ifTable.ifEntry.ifDescr.1 = lo
interfaces.ifTable.ifEntry.ifDescr.2 = eth0
interfaces.ifTable.ifEntry.ifDescr.3 = eth1
那就2這個數字代表是eth0的介面


上面有點錯誤, ifNumber 是指有幾個 interface 而不是有幾張網路卡, 如果有使用 IP Aliasing 把多個 IP bind 在一張網路卡上, 就會出現 interface 比網路卡多的狀況. 而 ifDescr 是每個 interface 的 description.

此外那個 interface index 並不一定是從 1 開始往上遞增的. 正確的 interface 掃描方式是先從 ifNumber 取得 interface 數量後, 再從 ifIndex 去找出每個 interface 的 index. 最後才去取得 interface information.