Linux Altında QOS - 2 Linux Trafik Kontrol ( QOS ) Bileşenleri.
Linux altında QOS’u daha iyi anlamak için QOS bileşenlerine daha yakından bakalım.
| Geleneksel Element | Linux Bileşeni |
| shaping | Class |
| scheduling | Qdisc |
| classifying | Filter Classfilter |
| policing | policier filter |
| dropping | policier filter |
| marking | dsmark |
.
Kavramları daha iyi anlamak için bir önceki yazımdaki resimden faydalanacağım.

1. qdisc :
Qdisc, tüm linux trafik kontrol sisteminin üzerine inşa edildiği ana bloktur, aynı zamanda queuing discipline şeklinde de bilinir. ” Kuyruk yöneticisi gibi çevrilebilir sanırım türkçeye”
qdisc gelen trafic için yapılandırıldığında “ingress qdisc” giden için yapılandırıldığında ise “egress qdisc” olarak isimlendirilir. daha önceki QOS yazımdan hatırlayacağınız üzere, Gelen trafik üzerinde söz hakkımız olmadığını belirtmiştim. Günlük kullanımda gerçekten bir faydası olmasada qdisc bize bu sınırlamayı yapma imkanı sunar. egress qdisc de child class tanımlayabildiğimiz halde ingress de sadece filter tanımı yapıp child class tanımı yapamayız.qdisck daha sonra değineceğimiz gibi classless ve classfull olmak üzere ikiye ayrılırlar.
2. Class :
Class’i QOS için tanımlamanın en güzel yolu “tasnif etmek” manasında kullanmaktır. gelen bir paketi tasnif ederek class’lara ayırabilir, class’ların içerisine childclass oluşturulabilir. hatta bu classlar içerisinde yukarıdaki resimde görüldüğü gibi yeni qdisc’ ler tanımlanabilir. Özellikle qos’a yabancı kişiler içn burada bir anlam kopukluğu olabilir. örneklendirirsek daha iyi anlaşılacağını sanıyorum.
Şirketimize gelen 4 mbit hattımız üzerinde şu şekilde bir plan yapalım : 4 mbit hattımız root qdisc tir. içinden server ler için 2 mbit ayırmak için bir child class ve içerisine qdisck tanımlarız. sonra 756 kbit mail server ler için ayırmak istiyoruz bir child class daha tanımlıyoruz. aynı şekilde 256k voice hizmeti için ve manager ler için 1 mbit ayırıyoruz. böylece iş planımız aşağıdaki gibi oluyor.

Burada 4 mbit root qdisc altına 2 adet child class yöneticiler için 1 mbit server ler için 2 mbit tanımlamamız gerekiyor. Sonra Server Child class i altına yeniden child class oluşturarak mail child class 1 mbit voice 256kbit oluşturuyoruz.

Class lar bize hepsi için ayrı ayrı filter tanımlamamızı sağlar. Bunların yanında dikkat edilmesi gereken diğer nokta, QOS sadece bant genişliği olmadığı için class lar bant genişliği hariç örneğin önceliklendirme için kullanılabilirler. Buradaki örnek daha kolay anlaşılacağını umduğum için bant genişliği olarak verilmiştir.
Hiç bir class barındırmayan class’lar leaf class, barındıranlar ise inner class ( veya root ) olarak adlandırılırlar.
3. Filter:
Filter kavramının daha iyi anlaşılabilmesi için önce Classifier ve Policier’a girsek iyi olacak.
3.1. Classifier :
Classifier lar filter objeler veya araçlarıdır. Bir paket in yada paket metadata’snın tanımlanması amacı ile kullanılırlar.
” Paket metadata :fiziksel link ( osi layer 1 ) üzeri bilgileri içerir. kim kiminle haberleşiyor , nasıl haberleşiyor ? , ne zaman ? , nerede ? gibi bilgilerdir. örneğin. kaynak ve hedef ip adresleri , protokol ( tcp udp ) , port ( tcp 80 portu ) , routing bilgileri gibi bilgilerin genel adı. örneğin : Email / Webmail sender / receiver / subject, IM contact list / status / sender / receiver, route update in routing protocol,”
Linux trafik kontrolünde kullanılan Classifier lar kısaca :
- U32 : En çok kullanılan ve en gelişmiş Classifier ” Sınıflandırıcı ” dır. Paket header’da bulunan herhangi bir şey u32 ile sınıflandırıcı olarak kullanılabilir.
- filter fw : fwmark
- filter route
- tcindex
Classifier’lar qos örnekleri yaptıkça daha çok anlaşılacaktır.
3.2 Policer :
Policer “policing” QOS içerisinde gelen paketin belirlenen trafiğin üstünde veya altında olmasına göre işlem yaparlar. örneğin : istenilen trafikden aşağısı geliyorsa paket geçsin üstüne çıkıldı ise drop ( düşürme göz ardı etme ) yapılsın şeklinde. shaper lardan farkı paketin bir kuyuruk işlemine sokularak bekletilememesidir.
Sonuç olarak Filter’lar classifier ve policer leri içerirler, bir filter içerisinde mutlaka Classifier olmak zorundadır. Policier Classifier ile birlikte olabilir veya kullanılmaya bilir.
4. Handle :
Her class ve classfull qdisc trafik kontrol yapısında bir tanımlayıcıya ihtiyaç duyar. Linux trafik kontrol sisteminde bu tanımlayıcılar numara ile yapılır.bu numaralandırma sistemi Major ve Minor olmak üzere iki öğeye sahiptir. <major>:<minor> şeklinde kullanılırlar. örneğin : 1:0 major ( ana ) ve minor ( alt ) sayıların kullanılması aşağıdaki kurallara göre yapılmalıdır.
- Major sayılar için linux kernelinde bir sınırlama olmamakla beraber , aynı parente ait tüm objelerin, bir major ( ana ) handle numarası paylaşması gerekir. kural olmamakla beraber genellikle root qdisc e atanmış olan numaralar 1 ile başlarlar.
- Minor sayılar kenrel tarafından eğer 0 ise qdisc başka bir rakam ise class olarak tanımlanır. bir parent içerisinde aynı numaraya sahip birden fazla class olamaz.
- ffff:0 ( 65535:0 ) numarası, 0:0 in giden ( eggress )trafik için root qdisc olması için ayrıldığı gibi gelen trafik ( ingress ) için qdisc olarak rezerve edilmiştir kullanılamaz.
Handle konusunun yapacak olduğumuz örneklerle daha iyi anlaşılacağını düşünüyorum.
5. Shaper :
Shaper’lar ( Şekillendirici ) basitçe geçen trafiğin bant genişliğini ( rate ) şekillendirmek için kullanılırlar. Söz konusu işlemi yapabilmek için gelen paketler izin verilen miktarın üzerinde bir paket genişliği istiyorsa, örneğin 1 Mbps bant genişliği sınırlaması yaptık ve 2 mbits bantgenişliğinde trafik geçmek istiyor. söz konusu paketleri bir kuyuruğa atıp bekleterek bu hızı geçmemesi sağlanır. Policier de tanımlanan filter’lar ise shaper’dan farklı olarak direk olarak fazladan gelen paketi droplamaktadır.
Kernel : linux altında QOS için, genel olarak linux kernelinde derlenmiş veya modul olarak bulunması gerelenler :
CONFIG_NET_SCH_CBQ=m
CONFIG_NET_SCH_HTB=m
CONFIG_NET_SCH_CSZ=m
CONFIG_NET_SCH_PRIO=m
CONFIG_NET_SCH_RED=m
CONFIG_NET_SCH_SFQ=m
CONFIG_NET_SCH_TEQL=m
CONFIG_NET_SCH_TBF=m
CONFIG_NET_SCH_GRED=m
CONFIG_NET_SCH_DSMARK=m
CONFIG_NET_SCH_INGRESS=m
CONFIG_NET_QOS=y
CONFIG_NET_ESTIMATOR=y
CONFIG_NET_CLS=y
CONFIG_NET_CLS_TCINDEX=m
CONFIG_NET_CLS_ROUTE4=m
CONFIG_NET_CLS_ROUTE=m
CONFIG_NET_CLS_FW=m
CONFIG_NET_CLS_U32=m
CONFIG_NET_CLS_RSVP=m
CONFIG_NET_CLS_RSVP6=m
CONFIG_NET_CLS_POLICE=y