SDN 3 – OpenFlow, Mesaj Tipleri ve İlk Etkileşim

Merhabalar,

Önceki yazida biraz daha içine girebildigimiz SDN’e baska bir temel bileseni ile devam ediyoruz.

Southbound Interface’ler.

Daha önce de bahsettigimiz üzere southbound interface’ler kontrolör ile cihazlar arasindaki iletisimi sagliyor idi. Cihazlar üzerinden geçen trafige karsi alinabilecek aksiyonlari karar vermek için gereken sorgulari, trafik istatistiklerini, fiziksel özelliklerini, port durumlarini kontrolöre iletmek veya kontrolörün kendisine ilettigi herhangi bir sorguya cevap vermek için burada çalisan protokolleri kullanirlar. Biz bu protokollerden en yaygin kullanilani OpenFlow protokolünü inceleyecegiz.

OpenFlow:

Openflow açik standart, SDN mimarisinde D-CPI kisminda çalisan bir protokoldür. OF mesajlari ile cihazlar ile kontrolör arasinda iletisim saglar. Bir cihazin openflow desteklemesi openflow ile yapabilecgeiniz tüm yönlendirme ve protokolleri çalistirabiliyor olmasi anlamina geliyor. Routing protokolleri,STP,QoS,Switching elinizdeki cihaz openflow’dan anliyor ise bu openflowun destekledigi özellikleri de çalistiriyor demektir. Fakat SDN hala gelisim asamasinda ve tamamiyle bir bütünlük saglanabilmis degil. Bu yüzden bir cihaz openflow’un sadece belirli sürümlerini hatta o sürüm içerisindeki sadece belirli özellikleri destekliyor da olabilir. Cihazin openflow özelliklerinden gereken bilgiyi alabilirsiniz. Openvswitch en güncel destegi sunan sanal bir cihaz. HP bir switch’te test yapmistim o da 1.0’in belirli özelliklerini destekliyor idi. Bazi switchlerde ikisini de destekler yani istediginiz portlari normal switch için istediklerinizi openflow’u aktif ederek kullanabilirsiniz.

En son çikan openflow sürümü 1.5.1 https://www.opennetworking.org/sdn-resources/technical-library adresinden sürümleri takip edebilir, destekledigi özelliklere bakabilirsiniz. Çok hizli gelistigini söyleyebilirim 🙂 .

Bilinen en yaygin kontrolörler POX, OpendayLight. POX daha çok akademik arastirmalar için kullaniliyor. Python diliyle kodlaniyor. OpendayLight ise Java dilinde kodlaniyor ve özel sektörde oldukça yaygin. Sanirim bu sebeple oldukça da hizli ilerliyor. Opendaylight en son 1.3.1 destekliyordu. POX hala OpenFlow 1.0 destekliyor sadece. Ayrica opendaylight olaya sadece openflow olarak bakmiyor çünkü SDN sadece openflow ile sinirli degil. Birçok kurulustan destek aldiklari ve birçok kurulusun kontrolör altyapilarina destek verdikleri için yeni yeni özellikler ekliyorlar ve basarililar.

Biz yazilarda POX kullanacagiz. Opendaylight ile uzun çalismadim. POX temelini anlamamiz ve kodlar içerisinde kaybolmamamiz için sade ve anlasilir olacak.

Openflow destekleyen cihaza sadece kontrolörün baglanti bilgilerini vermeniz yeterli. port bilgisi vermez iseniz varsayilan olarak 6633’ü alacaktir. Cihaz ile kontrolör önce destekledikleri openflow versiyonlarini paylasirlar. Ikisinin ortak oldugu en yüksek versiyon ayarlanir. Özel olarak eger destekliyor ise cihaza su openflow sürümü ile çalis diyebilirsiniz ama gene bir eslesme asamasindan geçecektir. Kontrolörün de bu belirlenmis sürümü desteklemesi gerekiyor.

Artik birkaç mesaj tipinden bahsedebiliriz:

Kontrolörden Cihaza Giden Mesajlar:

  • Features: Kontrolörün cihazin yeterlilikleri hakkinda bilgi almasini saglayan mesajlardir. Kontrolör kendisine baglanmak isteyen her cihazdan bu bilgiyi ister.
  • Configuration: Kontrolörün cihaza yapilandirma bildirimi yaptigi mesajlardir.
  • Modify-State: Kontrolörün cihazin akis tablosuna ve port durumlarina müdahale etmesini saglayan mesajlardir.
  • Read-State: Kontrolörün cihazdan istatistiksel veri çekmesini veya port bilgilerini hakkinda bilgi almasini saglayan mesajlardir.
  • Packet-Out: Cihazdan gelen bilinmeyen trafige ait alinacak aksiyonlarin söylendigi mesajlardir.

Cihazdan Kontrolöre giden mesajlar ( Asenkron mesajlar):

  • Paket-In : Cihazin akis tablosunda olmayan trafige ait aksiyonu ögrenmek için trafik bilgilerini kontrolöre ilettigi mesajlardir.
  • Flow Removed/Expiration: Akis tablosu içerisinde artik kullanilmayan veya süresi geçmis akislarin durumlarini kontrolöre bildiren mesajlardir.
  • Port-Status: Cihazin port durumlarinda olan degisiklikleri kontrolöre ilettigi mesajlardir.
  • Error: Cihaz üzerinde meydana gelen problemleri kontrolöre iletmek için kullandigi mesajlardir.

Simetrik mesajlar:

  • Hello: Cihazin kontrolörle ilk iletisime geçtigi mesajdir.
  • Echo: Kontrolör ile cihaz arasinda sürekli gönderilip alinan kontrol mesajlaridir.

Bunlar en genel kapsamda mesaj tipleridir. bundan sonra bahsedecegimiz mesaj tipleri daha özel olacak. Bu yüzden openflow sürümlerine göre isim degisikligi, kapsam daralmasi veya genislemesi geçirebilir.

Yazi giderek uzuyor. Son olarak cihaz ile kontrolör arasinda ilk etkilesimden bahsedip akis tablolari ve yönlendirme yapisini diger yaziya birakalim.

drawit-diagram-1
  • Cihaz üzerinde tanimli olan kontrolöre cihaz ilk iletisimde Hello mesaji gönderir, bu mesaj içerisinde cihaz destekledigi en yüksek openflow sürüm bilgisini de gönderir.
  • Ardindan kontrolör Hello mesaji ile karsilik verir.
  • Daha sonrasinda kontrolör cihazdan özelliklerini talep eder. OFPT_Features_Request
  • Cihaz bilgilerini kontrolöre iletir.Bu bilgiler içerisinde fiziksel port bilgileri,tablo bilgileri ve istatistiksel veriler bulunur. OFPT_Features_Reply
  • Son olarak kontrolör iletisimde kullanilacak ekstra bilgileri cihaza iletir. OFPT_Set_Config.

Ve artik normal trafik için gerekli iletisime hazir hale gelirler. 🙂