Word Document

advertisement
BAND GENİŞLİĞİ YÖNETİMİ
Hakan KUTUCU
İzmir Yüksek Teknoloji Enstitüsü
Matematik Bölümü
[email protected]
ÖZET
Band Genişliği Yönetimi yerel bir ağda bulunan tüm
istemci makinaların internet band genişliği sınırlarını
belirleyen ve anlık internet kullanım miktarını ölçen bir
programdır. Sistem veri tabanı ve ara yüz olarak iki ana
bölümden oluşmaktadır. Bunun yanında sistemde
entegre 3 adet modül bulunmaktadır.
Veri tabanında sadece 1 tablo ve bu tabloda ağda
bulunan tüm istemci makinalara ait kullanım politikaları
tutulmaktadır.
Ara yüzün oluşturulmasında Java programlama dili
kullanılmıştır. Ara yüzle veri tabanı arasında JDBC
köprüsü kullanılmaktadır.
İlk modül C programlama dili ile posix threadleri
kullanılarak yazıldı. Bu modül soket kullanarak Java
RMI sunucusuna elde ettiği verileri göndermektedir.
İkinci modül RMI teknolojisi kullanarak veritabanı,
arayüz ve 1. modül arasında java sunucusu olarak
çalışmaktadır.
Üçüncü ve sonuncu modül ise Perl dili kullanılarak
yazıldı. Bu modül veritabanından gerekli bilgileri alarak
istmecilere band genişliğini vermektedir.
ABSTRACT
Bandwidth Management is a program that restricts the
internet bandwidth of all clients at Local Area Networks
(LAN) and measures their rates of usage of internet.
Altough this project consists of two main parts:
Database and Graphical User Interface (GUI), there
exists 3 more modules embedded in the system.
Database includes 1 table and this table includes policies
belonging to all clients at LAN.
Java programming language is used to construct GUI.
JDBC Bridge exists between interface and database.
Users access to data base by using interface, via this
bridge.
The first module of the project is written by using
POSIX threads in C programming language. This
module uses a socket in order to send the evaluated data
to the Java RMI server.
The second module works as a Java server between
GUI, database and first module by using RMI
technology.
The last module is written by using Perl. This module
grants bandwidth to clients by taking necessary
information into consideration from database.
Anahtar Kelimeler: HTB(Hierarchical Token
Bucket), TC(Trafic Control), RMI(Remote Machine
Invocation)
1. GİRİŞ
İnternet'in, her firmanın ve kurumun can damarı olduğu
günümüzde, bir çok firma ve kurum, tüm kullanıcılarına
internet hizmeti sağlamaktadır. Fakat birçok alanda
araştırma ve iş amaçlı kullanılan internet, kullanıcıların
yanlış kullanımlarına da maruz kalmaktadır. Bu gibi
durumlarda da elektronik posta alışverişlerinde
problemler yaşanmakta, gerekli sitelerde sörf hızı
düşmekte ve iş, zaman, para kayıpları söz konusu
olmaktadır. Çözüm ise internet trafiğini kontrol altına
almak ve
kullanıcıların internet band genişliğini
kısıtlamaktır. Bu kısıtlamayı yapan bazı donanımsal
cözümler mevcuttur. Bunların başında CISCO, 3Com,
DLINK, NORTEL, ALLOT gibi üreticiler gelmektedir.
Bu çalışmada bir çok modül birleştirilerek yerel ağa
bağlı istemcilerin internet trafiklerini kontrol altına
alınmıştır. Projede kullanılan programlar Java, C ve Perl
ile yazılmıştır. Linux (Slackware 8.1) işletim sistemi
kurulu ağ geçidi (gateway) olarak kullanılan bir sunucu
üzerinde çalıştırıldı. Aynı zamanda trafik kontrol
mekanızması olarak linux kernel 2.4.18 ve sonrasının
desteklediği “htb” kuyruklama disiplini ile tc aracı
kullanılmıştır. “tc” ve kuyruklama disiplinleri ileride
açıklanacaktır.
2. Neden Bu Proje?
İzmir Yüksek Teknoloji Enstitüsünde, internet band
genişliği 8 Mbps dir. Yaklaşık 500 bilgisayar gün boyu
internete bağlanmakta ve bu da kullanıcı başına elde
edilebilir ortalama 16 Kbps’lık bir band genişliği
vermektedir.
Kampüsteki kullanıcılar interneti farklı amaçlar için
kullanmaktadırlar. Dosya transferi, internette sörf,
bilimsel araştırma, elektronik posta trafiği, internette
sohbet (chat) bunların belli başlı olanlarıdır. Bunlardan
özellikle dosya transferi (mpeg,divx,mp3, vb...) band
genişliğini fazlasıyla sömürmektedir. Bu da bir
kullanıcının herhangi bir araştırma yapmak istemesi
durumunda internette aradığı makalelere geç ulaşmasına
neden olmaktadır.
Şekil 1’deki istatistik UlakNet Ana yönlendiriciler
üzerindeki ATM arayüzlerinden alınmıştır. Yeşil renk
UlakNet'ten kullanıcıya doğru giden trafiği gösterir.
Mavi renk ise kullanıcıdan UlakNet'e doğru giden trafiği
göstermektedir. Burada görüldüğü üzere 8 Mbps lik
band genişliği zaman zaman zorlanmıştır. Band
genişliğinin yetmediği yerlerde uygulanabilecek en
kolay çözüm band genişliğinin artırılmasıdır. Fakat bu
geçici bir çözüm olacaktır. Band genişliği ne kadar
arttırılırsa
arttırılsın
hemen
hemen
hepsinin
kullanıldığını ve bunun sonunun olmadığı görülecektir.
Sonuç olarak bu çözüm şirkete ya da kuruma pahalıya
mal olacaktır.






Token Bucket Filter (TBF)
Hierarchical Token Bucket (HTB)
Class Based Queue (CBQ)
First in First Out (FIFO)
Random Early Detection (RED)
Stochastic Fairness Queuing (SFQ)
Bunlardan günümüzde en çok kullanılanları CBQ ve
HTB dir. En genel filtre u32 dir, bu bize ANY header'a
dayalı trafiği seçebilmemize izin verir.
3.2 Kuyruklama Nedir?
Kuyruklama ile gönderilen verinin sırası belirlenir.
Burada bilinmesi gereken önemli nokta sadece transfer
edilecek verinin kontrol edilebilmesidir. İnternet bu
yolla çalışır. Bize paket gönderen insanları doğrudan
kontrol edemeyiz. Şöyle basit bir örnek verelim.
Evlerimizdeki posta kutusu (fiziksel olan) düşünülürse
gönderilen postaların adedini belirlemek ya da onları
kısıtlamak elinizde değildir.
İnternet çoğunlukla, içerisinde bize yardımcı olacak
birkaç özelliğe sahip olan TCP/IP tabanlıdır [1]. TCP/IP
iki host arasındaki hat kapasitesini bilemez. Bu yüzden
paket gönderecek olan host gönderebildiği kadar hızlı
gönderir ve daha sonra paketler kaybolmaya başladığı
zaman yavaşlar.
[İnternet]---<E3,ADSL,v.b.>---[Linux Ağ Geçidi]--[Yerel Ağ]
eth1
Tüm bu nedenlerden dolayı kullanıcıların interneti
efektif kullanmalarını sağlamak, kullanıcı bazlı
politikalar üretip kullandıkları servislere ve önceliklere
(priority) göre onlara bir band genişliği verebilmek için
bu proje seçilmiştir.
3. Proje Öncesi
3.1 Band Genişliği Yönetimi için Sınıf
Tabanlı Kuyruk Oluşturma Kullanımı
Trafik kontrolü için iki temel birim vardır. Bunlar
filtreleme ve kuyruklamadır. Filtreler trafiği kuyruğa
yerleştirirler, bu kuyruklar trafiği toplayıp hangisinin
önce, hangisinin sonra gönderileceğine ya da paketin
gönderilmeyip kesileceğine (drop) karar verirler.
Linux'un desteklediği bir çok kuyruklama disiplini
vardır. Bunlardan bazıları sınıf tabanlı bazıları ise sınıf
tabanlı olmayan kuyruklama disiplinleridir. Aşağıda
bunlara örnek bir kaç kuyruklama çeşidi verilmiştir [8].
eth0
Yukarıdaki şemada ağ geçidi olarak kullanılan Linux
sunucu eth0 ve eth1 adında iki adet ağ arabirimine
sahiptir. eth1 fiber kanala paket koyar ve fiber kanala
paket gönderir, eth0 ise alt ağa bağlı olup kullanıcıların
paketlerini ele alır.
Daha önceden de bahsedildiği gibi sadece gönderilecek
veri kontrol edilebildiğinden dolayı iki ayrı benzer
kurallar kümesine ihtiyaç olacaktır. eth0 üzerindeki
kuyruğu modifiye ederek ağda bulunan istemcilere
paketlerin hangi hızda gönderildiği hesaplanır ve bu da
bize onlar için elde edilebilir indirim (downstream) band
genişliğini verir. Kısaca istemcilerin indirme hızını
(download speed) verir. eth1 üzerinde ise internete
gönderilen verinin hangi hızda olduğunu belirlenir. Bu
da bize “upload” hızını verir.
3.3 HTB (Hierarchical Token Bucket)
HTB Martin Devera tarafından yazılmıştır. CBQ’dan
daha
basit
parametler
kümesine
sahiptir.
Konfigürasyonu kullanıcıyı sınırlamaz ve zorlamaz.
HTB verilen bir hat üzerindeki giden
trafiğin
kontrolünü sağlar. Fiziksel bir hattın birçok daha yavaş
hatmış gibi görünmesine (simulated link) ve farklı
trafiklerin bu hatlardan gönderilmesine izin verir. Her
iki durumda da fiziksel hattın nasıl simulated hatlara
bölüneceğine ve verilen bir paketin gönderilmesi için
kullanılacak olan simulated hattın hangisi olması
gerektiğine karar verileceği belirlenmek zorundadır.
HTB her sınıfa verilmiş olan servis kaynaklarının
minimumunun verildiğinden emin olur. Eğer bir sınıf
atanmış kaynaklardan daha azını kullanıyorsa ya da hiç
birini kullanmıyorsa kalan band genişliği diğer sınıflar
tarafından paylaşılır. Buna ödünç alma (borrowing)
diyoruz.
3.4 Hiyerarşik Ağaç
İnternet trafiği şekillendirilmek isteniyorsa önce trafik
ağacı iyice şekillendirilmelidir. Ağacın gövdesi
maksimum band genişliğini temsil eder. Sınıf (class) adı
verilen her dal babasının (parent) kullanılabilir band
genişliğinin bir kısmını kullanır.




match ip src x.x.x.x/x : kaynak ip bu gruptan olursa
match ip dest x.x.x.x/x : hedef ip bu gruptan olursa
match ip sport xx : kaynak port bu porttan olursa
match ip dport xx : hedef port bu porttan olursa
şeklinde anahtarlar kullanılabilir. İsteğe ve ihtiyaca bağlı
olarak kombinasyonların da kullanılması mümkündür.
Aşağıdaki filtre örneği 1 numaralı ağ kartına gelen,
kaynak ip adresi 192.168.10.10 olan paketleri 10
numaralı sınıfa yönlendirir. Yani yerel ağımızda bulunan
ip adresi 192.168.10.10 olan istemci makinaya 10
numaralı sınıfta tanımlanan kuyruklama disiplinini
uygular.
tc filter add dev eth1 protocol ip parent 1:0 u32 match ip
src 192.168.10.10 flowid 1:10
3.6 Örnek Bir Uygulama
Aşağıdaki uygulama HTB kullanılarak yapılan basit bir
trafik kontrol mekanızmasıdır. Öncelikle 256 Kbit lik bir
internet çıkışının var olduğu varsayılmıştır.
# tc qdisc add dev eth0 root handle 1: htb default 30
# tc class add dev eth0 parent 1: classid 1:1 htb rate
256Kbit burst 15K
Buraya kadar 256 Kbit lik bir band alanı tanımlaması
yapıldı. Servisler bazında sınırlamalar yapılmak istenirse
örneğin; web erişimi için bu bandın 150 Kbit’i, ftp için
ise 50 Kbit’i geriye kalan band aralığını ise diğer
servislerin kullanması için şu şekilde konfigürasyon
yapılır:
Şekil 2’deki örnek yapılandırmada toplam 5 adet dal
vardır. Fakat band genişliği yönetimleri uç dallarda
yapılmaktadır. Eğer tüm sınıflarda yeterince trafik varsa
sınıf 11 ve 12 %30, sınıf 2 ve 3 te %20 lik bir band
genişliği alır. Eğer sınıf 2 de herhangi bir trafik yok ise
sınıf 11 ile 12 %37,5, sınıf 3 te %25 lik bir band
genişliği alır. Eğer sınıf 11 de bir trafik yok ise sınıf 12
%60, sınıf 2 ile 3 te %20 lik bir band genişliği alacaktır.
Eğer sınıf 2 ve 3 de trafik yok ise sınıf 11 ve 12 %50 lik
bir band genişliği alacaktır.
Herhangi bir sınıfta trafik varsa o sınıfa atanan band
genişliği miktarı garantilenmiştir. Bunun yanında diğer
sınıflardan borç almalarda olabilir.
3.5 Filtreleme
Filtreler sınıfların hangi paketleri değerlendirileceğinin
belirlendiği bilgilerdir. U32 filtresi uygulamalarda en sık
kullanılan filtredir. U32 paketleri başlığına (header)
bakarak sınıflara ayırabilir [8]. Temelde tüm filtreler
içinde ;
# tc class add dev eth0 parent 1: classid 1:10 htb rate
150Kbit ceil 256Kbit burst 15K
# tc class add dev eth0 parent 1: classid 1:20 htb rate
50Kbit ceil 256Kbit burst 15K
# tc class add dev eth0 parent 1: classid 1:30 htb rate
56Kbit ceil 256Kbit burst 15K
Yukarıda oluşturulan sınıflar tek başlarına bir anlam
ifade etmezler. Bunun için oluşturulan bu sınıfları
servislere eşlemek için filtrelerin oluşturulması
gerekmektedir.
# tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32
match ip dport 80 0xffff flowid 1:10
# tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32
match ip dport 21 0xffff flowid 1:20
Bu tanımlamalarla 1:10 sınıfının www (80) 1:20
sınıfının ise ftp (21) tarafından kullanacağı
belirlenmiştir. Görüldüğü üzere sınıfın neyi işleyeceğini
belirlemek için filtre kavramı kullanılmaktadır. Filtreler
sınıf kurallarının neye uygulanacağının belirlendiği
bilgilerdir.
Sonuç olarak 256 Kbit’lik bir band genişliğinin 150
Kbit’liği web için, 50 Kbit’liği ise ftp için ayrılmıştır.
Bunun dışındaki gelişen tüm trafik (smtp,chat vb..) ise
geriye kalan 56 Kbit’lik bir alandan akacaktır. Tabii bu
durum diğer tüm servisler dolu olduğunda böyle
olacaktır. Bir servis boş kaldığında diğer servisler öbür
servislerden borç band alabileceklerdir. Trafik
kontrolünde IP bazlı çok daha geniş filtreler de
uygulamak mümkündür.
gerçekleşmektedir, böylelikle Java dilinin özellikleri ve
avantajları dağıtık programlamada da kullanılabilmiş
olmaktadır.
Java RMI ağ işlem (networking) için kullanıcıya soket
veya stream'lere göre daha üst düzeyde bir arayüz
sunmaktadır. Bu nedenle, RMI ile dağıtık programlama
yapmak soket ve stream kullanımına göre daha az
karmaşıktır. Programcı açısından bakıldığında, RMI
kullanıldığında
istemci/sunucu
uygulamaların
geliştirilmesi sırasında ağ işlem ayrıntıları ile uğraşmak
gerekmemektedir.
4. RMI (Remote Machine Invocation) [7]
İnternet ve Network teknolojilerinin sürekli artan
popülaritesi ve kullanım alanları, daha az çaba ile daha
güçlü olan dağıtılmış uygulama geliştirmeye olan talebi
artırmıştır. Bunun sonucunda birçok dağıtılmış
uygulama geliştirme teknolojileri ortaya çıkmıştır. Bu
dağıtılmış uygulama teknolojilerinin belli başlıcaları;
 Soketler,
 RPC (Remote Procedure Call),
 Corba (Common Object Request Broker
Architecture),
 DCOM (Distributed Component Object Model),
 SOAP (Simple Object Access Protocol),
 RMI (Remote Machine Invocation).
4.1 Java RMI Nedir?
RMI salt Java nesne modelini tüm ağa yayan yeni bir
dağıtık teknolojidir. Bir JVM (Java Virtual
Machine)’deki nesnelerin başka bir JVM’deki
nesnelerin metodlarını çağırmalarına imkan verir. Tipik
bir RMI uygulaması istemci ve sunucu olmak üzere iki
ayrı programdan oluşur. RMI, sunucu ve istemciler
arasında davranış (behaviour) taşımaya izin verdiğinden
alanında tektir.
Java RMI, internet üzerinde farklı yerlerde bulunan ve
TCP/IP ile bağlantısı sağlanmış sanal Java makinaları
üzerindeki Java nesnelerinin, normal metot çağrımları
kullanarak iletişimde bulunabilmesi için gerekli olan
katmanları içermektedir. Şekil-3'te 1. Java sanal
makinesi (JVM-1) üzerinde bulunan bir Java
uygulamasının (veya Java applet'inin) 2. Java Sanal
Makinası (JVM-2) üzerinde bulunan RemoteObject
isimli bir nesnenin Remote_Method() isimli bir
metodunu
çağrımı
görülmektedir.
Java
RMI
kullanıldığında istemci ve sunucu da Java ile yazılacağı
için dağıtık programlama tümüyle Java dilinde
4.2 Java RMI Mimarisi
Java RMI mimarisi üç katmandan oluşmaktadır. Bunlar;
1.
2.
3.
Koçan (Stub) & İskelet (Skeleton) Katmanı
Uzak Referans (Remote Reference) katmanı
İletim (Transport) Katmanı
Şekil-4'ten de görüldüğü gibi uzakta bulunan bir Java
nesnesinin metodlarını çağıran bir istemci ilk önce kendi
tarafında bulunan "koçan" kod ile iletişime geçer.
"Koçan" kod, isteği "Uzak Referans" katmanına, bu
katman da "İletim" katmanına geçirir. Daha sonra, karşı
taraftaki bilgisayarda istek önce "Uzak Referans"
oradan da "iskelet" koda iletilerek istenen servise
ulaşılır. Servisin sonuçları da aynı biçimde istemciye
iletilmektedir.
4.2.1 Koçan & İskelet Katmanı
İstemci, uzakta bulunan bir nesnenin metodlarını
çağırmaya başladığı anda ilk olarak "koçan" kod ile
iletişime geçecektir. İstemcinin uzaktaki nesne ile ilgili
olarak elinde bulunan referans aslında yerel "koçan"
koda olan referanstır. Karşı tarafta bulunan "iskelet"
kod ise uzak nesnenin istenen metodunun
gerçekleştiriminin çağrılması ve sonuçların elde
edilmesinden sorumludur.
Bir RMI çağrımında gerçekleşen olayların adımları ve
bu adımlar içerisinde koçan ve iskelet kodların görevleri
aşağıda verilmiştir.
a) Koçan kodu, “object serialization” (nesnelerin byte
stream'leri biçimine dönüştürülüp aktarılması)
tekniği kullanarak çağrımı parametreleriyle birlikte
paketler.
b) Koçan kodu, isteğin uzak nesneye gönderimini
yapar. Bu istek "uzak referans" ve "iletim"
katmanları yolu ile karşı tarafa aktarılır. Karşı
taraftaki "iletim" ve "uzak referans" katmanları ile
de iskelet koda ulaşır.
c) Karşı taraftaki iskelet kodu gelen paketi açar,
parametreleri çıkarır ve uzak nesnenin istenen
metodunun gerçekleştirimini çağırır.
Bu katmanın görevlerinden birisi koçan kodundan gelen
çağrımları aktarım katmanı biçimlerine dönüştürmek
veya aktarım katmanından gelen istekleri iskelet
kodunun anlayacağı biçime dönüştürmektir.
Bu katmanın diğer bir görevi uzak referans
protokollerini
(remote
reference
protocols)
gerçekleştirmektir. Bu protokoller, uçtan uca (point to
point) veya tekrarlı (replicated) nesnelere çağrım
protokolleri olabilir.
4.2.3. İletim Katmanı
d) İskelet kod sunucudaki nesneden gerçekleştirimin
sonucunu alır.
e) İskelet kod sonucu paketleyerek, isteğin geldiği
yoldan benzer biçimde karşı tarafa gönderir.
f) Sonuçlar koçan koda gelir. Koçan kodu, sonuçların
paketini açar ve sonuçları istemciye geçirir.
"Koçan & İskelet" katmanının diğer bir özelliği de,
yazılan programların platform bağımsız olmasını
sağlamasıdır. Bu katman kullanıcıyı uzak nesnenin
gerçekleştirim ayrıntılarını veya aktarım katmanı
ayrıntılarını bilme zorunluluğunu ortadan kaldıran bir
soyutlama sağlamaktadır.
4.2.2 Uzak Referans Katmanı
Bu katman temel olarak programcının yazdığı kodlar ve
bilgisayar ağı iletişimi arasında bir köprü görevi
yapmaktadır.
Bu katman bağlantının sağlanması, bakımı, kapatılması
gibi işlerden sorumludur. İletişimin sağlanmasında Java
soketleri kullanılmaktadır. JDK1.1 sürümünde, aktarım
protokolü olarak TCP (Transmission Control Protocol)
kullanılmaktadır. RMI mimarisinde her katman
birbirinden bağımsız olduğu için aktarım protokolü
değiştirmek örneğin; UDP (User Datagram Protocol)
protokolünü programcıların kullanımına sunmak
olasıdır.
4.3 Java RMI’ın Yararları
Kullanım Kolaylığı : RMI kullanımı kolaydır ve Java
nesnelerini ağ üzerinde yaymak için basit bir modeldir.
Kod ve Veri Taşıma : RMI uzak nesne çağrılarında
nesnelerin bütünlüğünün bozulmadan iletilmesine tam
destek sağlar.
Yeni Dağıtık Uygulama Çeşitleri : RMI’ın kullanım
kolaylığı ve sanal makineler arası davranış taşımaya
olanak vermesi yeni tür taşınabilir dağıtık uygulamalar
geliştirmeye olanak verir.
Güvenli , Taşınabilir Uygulamalar : RMI Java
çalışma zamanı güvenliğini korur ve kullanıcılara
güvenli ve taşınabilir uygulamalar geliştirme olanağı
verir.
Platform Kolaylığı : Java platformunun çekirdeği
olarak RMI, platformun olduğu heryerdedir. Bu, salt
java dağıtık uygulamalarının bir defa yazılıp her yerde
çalıştırılabilmesine olanak verir.
belirleme modülü ise sadece verileri okumaktadır.
Band Genişliği Yönetimi Programı Yapısı
Servis kullanımlarını belirlemek için Snort adlı program
kullanıldı. Snort’ta belli başlı 5 adet servis için kurallar
yazıldı. Bu kurallar;
Servis 1: Yasaklı web sayfaları için
alert
tcp
any
any->any
any
(content
lists:”rule1.txt”;msg:”rule1”;)
Servis 2: HTTP&FTP
alert tcp any any ->any 80 (msg:”rule2”;)
Servis 3: POP3&SMTP
alert tcp any any-> any 110 (msg:”rule3”;)
Servis 4: pdf,gs,zip,rar formatındaki dosya transferleri
alert
tcp
any
any
->any
any
(contentlist:”rule4.txt”;msg:”rule4”;)
Servis5: divx,mpeg,mov formatındaki dosya transferleri
alert
tcp
any
any
->any
any
(contentlist:”rule5.txt”;msg:”rule5”;)
Proje birçok birimden oluşmaktadır;
1.
2.
3.
4.
5.
Kullanıcı bilgilerini tutan bir veritabanı (MySql
kullanıldı).
Kullanıcıların hangi servisleri kullandığı (Snort
ile bulundu).
Kullanıların “download&upload” hızlarının
hesaplanması (C kodu ile yapıldı) [2], [3].
Band genişliği sınırlaması getiren karar verme
mekanızması (Perl ile yapıldı) [4].
Ağ yöneticisinin kullanacağı bir arayüz (GUI
java ile yapıldı) [5], [6].
Şekil 5’de şekilde görüldüğü üzere tüm bilgisayarlar
Linux ağ geçidine bağlıdır ve bu ağ geçidinden internete
çıkmaktadırlar. Band genişliği yönetimi programı da bu
ağ geçidinde çalışmaktadır ve veri akış şeması Şekil 6
da görülmektedir.
5.1 Veri Tabanı Yapısı
Linux işletim sisteminde kullanılan Mysql veritabanı
kullanılmıştır. Tüm veriler tek bir tabloda tutulmaktadır.
Veritabanına erişim JDBC (Java Database Connectivity)
köprüsü ile yapılmaktadır.
Alanlar
Özelliği
uid :
ip :
up_min
up_max
down_min
down_max
prio
serv1
serv2
serv3
serv4
serv5
changed
birincil anahtar
Kullanıcı IP adresi
garantilenmiş Upload Hızı
maximum upload hızı
garantilenmiş download hızı
maximum download hızı
kullanıcı önceliği (1-5)
Servis 1 kullanımı, 1 ise kullanımda 0 ise değil
Servis 2 kullanımı, 1 ise kullanımda 0 ise değil
Servis 3 kullanımı, 1 ise kullanımda 0 ise değil
Servis 4 kullanımı, 1 ise kullanımda 0 ise değil
Servis 5 kullanımı, 1 ise kullanımda 0 ise değil
Kullanıcının bilgileri güncellendi mi?
Tablo 1: Veritabanı Yapısı
Bu veri tabanı Java RMI sunucu modülü, servis
kullanımı tarama modülü ve band genişliği belirleme
modülü tarafından ortaklaşa kullanılmaktadır. Bunlardan
Java RMI sunucu modülü ve servis kullanımı tarama
modülü veritabanına veri yazmakta, band genişliği
Veritabanında kullanılan tablo yapısı Tablo 1 de
verilmiştir.
5.2 Servis Kullanımı Tarama Modülü
rule1, rule4 ve rule5 metin dosyalarından aldığı
kelimelere göre çalışır. Rule2 ve rule3 en sık kullanılan
portları izler. Bu kurallara göre Snort tüm ağı inceler ve
kurallara göre alarm verir. Bu alarmlar bir log dosyasına
kayıt edilir. Aşağıdaki örnek bize 192.168.10.10 IP
adresli bir istemcinin Servis 3 yani POP ve SMTP
servislerini kullandığını alarm ediyor.
[**] [1:0:0] rule3 [**] [Priority: 0]
05/27-14:25:39.705667
192.168.10.10:1150
->
199.237.72.126:80
TCP TTL:128 TOS:0x0 ID:3903 IpLen:20 DgmLen:40
DF ***A**** Seq: 0x89F2C9A9 Ack: 0xA3E619B1
Win: 0x42C8 TcpLen: 20
Log dosyasında bunun gibi yüzlerce alarm mevcut. Bu
log dosyasını Perl ile yazılan ve her 2 saniyede bir
devreye giren bir modül kontrol etmektedir. İstemci
bilgisini ve kullandığı servisi belirleyip bunu
veritabanına güncellemektedir. Şekil 7’de modülün akış
şeması verilmiştir.
5.3 Hız Belirleme Modülü
Bu modül C programı ile yapıldı. Burda üç adet
“thread” kullanılmıştır. Şekil 8’de “thread”lerin
kotardığı işler ve aralarındaki ilişki görülmektedir.
Birinci “thread” “producer”; “producer” ağ geçidine
gelen tüm internet çıkış ve giriş paketleri bilgilerini (ip
numarasi, upload mı download mı yaptıgını, paket
büyüklüğünü) “fifo”ya yaziyor. İkinci “thread” “fifo”
dan “buffer” alıp bu paketlerden aynı makinaya ait
olanların paket büyüklüklerini bir “array” de
toplamaktadır. 3. “thread” ise 2 saniye uyuyup “array”de
tutulan paket büyüklüklerini 2’ye bölerek (saniyede
iletilen paket büyüklüğünü belirlemek için) açılan bir
soket aracılığı ile java sunucusuna gönderiyor. Java
istemci programı RMI teknoloji ile bilgileri java sunucu
programından alıp GUI de ilgili yere yazılıyor.
5.4 Band Genişliği Atama modülü
Bu modül Perl kullanılarak yapıldı. Her 2 saniyede bir
veritabanındaki değişiklik kontrol edilmektedir.
Veritabanından değişen kayıtların parametreleri alınarak
projenin başında bahsedilen Hierarchy Token Bucket
kuyruklama disiplini kullanılarak tc (traffic control)
mekanizması ile band genişliği atama işlemi sağlanıyor.
Tc mekanizmasının hangi seviyede çalıştığı Şekil 9’da
görülmektedir.
5.5 Java RMI Sunucusu ve GUI (Kullanıcı
Arayüzü)
Kullanıcı arayüzü oluşturmak için iki adet program
yazıldı. Bunlar sunucu ve istemci modellidir. Sunucu
veritabanınından kullanıcılara atanan band genişlikleri,
öncelik bilgisi, kullandığı servisler gibi bilgileri alır ve
istemciye gönderir. Bunu RMI teknolojisi ile
kotarmaktadır. Ağ yöneticisi herhangi bir kullanıcının
upload ve download band genişliklerini bu arayüzden
belirleyebilmektedir. Aynı zamanda bir kullanıcıya
öncelik (priority) verilerek boş kalan band genişliği
kaynaklarından daha fazla yararlanması sağlanmaktadır.
Yüksek öncelik numarasına sahip bir internet kullanıcısı
boş kalan kaynaklardan daha fazla yararlanacaktır. Şekil
10-11-12-13-14 te ağ yöneticisinin bu program için
kullanacağı arabirimi Şekil 15-16 ve 17 de sunucu
üzerinde çalışan modüllerin ekran görüntüleri
görülmektedir.
6.SONUÇ
Band genişliği yönetimi projesi amacına ulaşmış bir
projedir. Önümüzdeki aylarda kampüsteki internet
trafiğini band genişliği seviyesinde yönetmek için
kullanıma geçmesi düşünülmektedir.
Linux işletim sisteminin performansi ve güvenliği bu
projede kullanılmıştır. Veritabanı yönetimi ve
kullanımından kaynaklanan hiç bir sorun yaşanmamıştır.
Tüm modüller hatasız çalışmaktadır.
Proje ayrı bir alt ağ oluşturularak üzerinde denenmiştir.
Band genişliği yönetimi programı çalıştırılmadan önce
internet kullanımı kontrolsüz olmakta istemcilerde
download accelerator türü programlar kullanılarak en üst
sınırlarda dosya indirimi yapılmaktaydı. Band genişliği
yönetiminden sonra istemcilerin interneti kullanma
yoğunluğu efektif hale getirilmiştir.
KAYNAKLAR DİZİNİ
[1] Andrew S. Tanenbaum, 1996, Computer Networks,
Prentice Hall Inc., New Jersey, 814p.
[2] Harvey M. and Paul J. Deitel, 2003, C How To
Program, Prentice Hall Inc., New Jersey, 1312p.
[3] Beej's Guide to Network Programming, Using
Internet Sockets Brian “Beej” Hall,1995, 49p
[4] Harvey M. and Paul J. Deitel, 2001, Perl How To
Program, Prentice Hall Inc., New Jersey, 1057p.
[5] Harvey M. and Paul J. Deitel, 1999, Java How To
Program, Prentice Hall Inc., New Jersey, 1355p.
[6] Schildt, H., 2001, Java 2 (Çev. T. Akbaş), Alfa
Basım Yayım Dağıtım Ltd. Şti., 975-316-866-7,
İstanbul, 810s.
[7] Sunucu Yazılım Teknolojileri, Yrd. Doç. Dr. R.
Cenk Erdur, Ege Üniversitesi Bilgisayar
Mühendisliği
[8] Linux Advanced Routing& Traffik Control.
http://lartc.org
Download