QOS Quality Of Service

16 March, 2009 (00:42) | Genel Network, Linux QOS | By: alper

QOS’u wikipedi ‘den aynen kopyalayacak olursak: Ağ İletişimi Hizmet Kalitesi ( İngilizce Quality of Service)
Kısaca QoS, ağ üzerindeki uygulamaları önceliklendirerek, zaman kaybını azaltmayı hedefleyen bir ağ servisidir. Bir ağ bağlantısı üzerinden çalışan, bir trafik veya program türüne öncelik veren çeşitli tekniklere karşılık gelir.

Türkçe dökümanlarda, QOS’un açıklaması haricinde ayrıntılara girildiğine pek rastlamadım. Daha sonra yazmayı düşündüğüm, linux advanced routing ve openbsd pf ile ilgili yazılarıma ortak bir çerçeve oluşturması amacıyla birşeyler karalamaya karar verdim. Günümüzde pek çoğumuzun evinde kullanmış olduğu modemler, linux, bsd ve windows işletim sistemleri, QOS desteklemesine rağmen, konu hakkında bilgi sahibi olunmadığından bir çok kişi bu özellikleri kullanamıyor.

QOS ile neler yapılabilir? Buna en güzel tarif sanırım basit bir örnek vermekle olur:
1024/256 bir internet bağlantımız olduğunu düşünelim. Bu internet bağlantımız üzerinden yaptığımız işlemlere ayrı bant genişliği ayırabiliriz. Örneğin web için 512kbit/s, torrent için 256kbit/s gibi bir yapılandırma sonucunda birbirlerininin hizmetlerini aksatmasını önleyebileceğimiz gibi, birinin kullanmadığı bant genişliğini de boşta bekletmek yerine diğerine aktarabiliriz. Ses ve video hizmetlerinden faydalanıyorsak, bu hizmetlere de bant genişliği sağlamak haricinde paket önceliği vererek, takılma ve/veya donma dediğimiz aksaklıkları da ortadan kaldırmamız mümkündür.

QOS kavramının ayrıntılarına girmeden önce sanırım ilk yapmamız gereken, internette hız kavramını açıklığa kavuşturmaktır.
Genel yanılgı, internette hız’ın sadece bant genişliği olduğunun düşünülmesidir. İnternet ve network hızı daha çok; “kaynak makine ile karşı makine arasındaki iletişimin süresidir”. Sanırım bunu anlatmanın en iyi yolu, CNAP eğitmenimiz Sn. İsmail Doğan hocamızın bize sağlamış olduğu, Cisco firmasının, bilgisayar ve network teknolojileri üzerine çalışmayan kişiler için hazırlamış olduğu bir videodaki sistemi kullanmaktır.
İnternet üzerinden iletişim kurduğumuz bütün sistemleri normal yollar ve arabalar gibi düşünerek betimleyecek olursak; “backbone”lar, ADSL ve Metro ethernet gibi sistemleri yollar ve otabanlar olarak düşünelim. Bu yollar ve otobanlar üzerinden göndermiş oldğumuz paketleri ise arabalar ve kamyonlar olarak düşünelim. Şimdi elimizde bulunan ADSL hattımız bir yol ve Metro ethernetimiz ise otoban olsun. ADSL hattımız üzerinden, paketlerimizi büyük tırlara yükleyip yola çıkardığımızda, yolu tamamen tıkayarak, spor otomobillerin geçişini engelleyeceklerdir. Aynı şekilde, aceleyle bir yerden bir yere ulaşmanın hızlı yolu spor otomobil olmasına rağmen, Tır ile gitmek zaman kaybı olacaktır. Bant genişliğimizi daha çok tırlara benzetebiliriz. 4096 adsl bağlantımızın olması, yani 4 ton taşıyan bir kamyonumuzun olması, sesli iletişimde sesimizin karşı tarafa zamanında gideceğinin garantisi olamaz. 26 kbit/s kullanan ses iletişimi, 4 ton taşıyacak bir kamyonla yavaş, bir spor araba ile daha hızlı hedefine ulaşacaktır. İnternet hızı, bantgenişliği demek değildir!

İkinci olarak değinmek istediğim nokta ise, QOS’da en çok yanlış anlaşılan kavramlardan birisidir ki, QOS egress bir protokoldür, ingress değildir. Yani QOS, dışarıya giden paketleri yönetebileceğimiz bir protokoldür. İnternet üzerinden gelen paketleri ne kadar kısıtlarsak kısıtlayalım, suyu akan bir çeşmeyi kıstığımızda suyun akmasının yavaşlamasının, borudaki basıncı azaltmaması gibi, internet arabirimimize gelen paketleri de yavaşlatamayız. İnternet üzerinden çok fazla paket geldiği durumlarda QOS, internetimizi hızlandırmak için uygun bir yöntem olmayacaktır.

Sanırım bundan sonrakiler, yaygın kullanılan QOS sistemlerini anlattıkça kendiliğinden anlaşılacaktır.
Bunlar:

1. Class Based Queueing (CBQ)

2. Priority Queueing (PRIQ)

3. Random Early Detection (RED)

4. Token Bucket Filter ( TBF)

5. Explicit Congestion Notification (ECN)

1. Class Based Queueing (CBQ) ( wikipedia)

Wikideki karmaşaya girmeden CBQ’yu anlatmanın kısa yolu örnek vermektir. Elimizdeki 2 mbit adsl bağlantımız için örnek olabilecek yapı şu şekilde olabilir.

Root Queue (2Mbps)
UserA (1Mbps)
ssh (100Kbps)
ftp (900Kbps, borrow)
UserB (1Mbps)

Bu örnekte a ve b kullanıcılarına 1 er Megabits/saniye bantgenişliği vererek 1 nolu kullanıcımızın ssh erişimi için 100 KBps ftp için 900Kbps veriyoruz borrow deyimi şayet 1 nolu user ssh için 100 Kbps kullanmiyorsa kullanmadığı sürece ordaki bant genişliğine ftp protokolünün taşmasına izin veriyoruz. 2 nolu user için ise 1 mbit verip kullanımını kendi isteğine bırakıyoruz.

2. Priority Queueing (PRIQ)

PRIQ oncelik kuyruğu sistemimiz uzerinden gecen internet paketleri fifo ( first in first out ) ilk giren ilk cikar mantığıyla işlenerek bir sonraki noktaya ulaştırılırlar PRIQ ile oncelik verdiğimiz paketler düşük öncelikli paketlerden daha önce işlenerek paket gecikmeleri minumuma indirilir. PRIQ bantgenişliğini yönetmediği için genellikle CBQ gibi algoritmalarla beraber kullanılır.
örneğin :
Root Queue (2Mbps)
UserA (1Mbps, priority 1)
ssh (100Kbps, priority 1)
torrent  (900Kbps, priority 8)
UserB (1Mbps, priority 1)

bu örnekte, torrent paketlerimizi en düşük önceliğe , ssh’ı ise en yüksek önceliğe alarak torrent yüzünden oluşabilecek ssh aksamalarını minumum a indirdik.

3. Random Early Detection (RED)

QOS yapılandırmamız ne kadar mükemmel olursa olsun servislerin ve kullanıcıların internet kullanımına yüklenmesinden dolayı bazı paketlerimiz kuyrukda düşürülmek zorunda kalacaktır. RED algoritmasi bize bu meydana gelmeden  hangi paketin düşürüleceğinde öncelik tanıma hakkı verir.

örneğin :
Root Queue (2Mbps)
UserA (1Mbps, priority 1)
ssh (100Kbps, priority 1)
torrent  (900Kbps, priority 8 red )

kullanıcıya ayırdığımız 1 Mbps lik limit aşımında düşürülecek olan paketlerin torrent paketleri olmasını sağladık.

4. Token Bucket Filter ( TBF)
TBF basitce bir internet bağlantısını yavaşlatmak istiyorsak seçebileceğimiz en iyi yoldur. TBF nin diğer queue lere göre en büyük avantajı cpu ve ram dostu olmasıdır.
örneğin :
ethernetimden çıkan hız 256 Kbps olsun TBF içerisinde kuyrukta maksimmum bekleme 50 ms olsun MTU 1500 gibi bir ayar yapmamız bilgisayarimizdan çıkan paketlerim 1024/256 ADSL modemimizin uploadlarda çok yüklenerek ( örn torrent vb ) sorun çıkarıp internetimizin kullanılamaz duruma geçmesini engelleyecektir.
5. Explicit Congestion Notification (ECN)
ECN , RED ile beraber çalışmakla beraber ana farkı 2 ayrı host ( firewall ve client ) üzerinde çalışır client RED ile paketi düşürmek yerine etiketleyerek server e gönderir, server client in isteği doğrultusunda gerekiyorsa  bu paketi düşürür.

Sanırım yazının amacı hiç bilgisi olmayan arkadaşlara fikir vermesi olduğu için bukadar QOS a girmek yeterli daha fazla bilgi almak isteyen arkadaşlar için referanslar :
Differentiated Service on Linux :  Linux kullanıcıları için son derece ayrıntılı teorik bilgi.

Linux Advanced Routing & Traffic Control : linux kullanıcılarının Teorinin yanında uygulamaları da bulabileği bir kaynak

OpenBSD PF FAQ : BSD kullanıcıları için referans

Cisco nun QOS u profosyonel olarak kullanacakların kesinlikle okuması gereken kaynağı.

Nortel İntroduction to QOS

Write a comment