SDN Nedir?

SDN (Yazılım Tanımlı Ağ), her yıl daha popüler hale gelen teknolojilerden biridir. Bazı ağ mühendisleri, tüm ağın gelecekte nasıl programlanacağına dair öyküleri okur ya da duymuşlardır ve şimdi işlerinin C / C ++, Java ya da Python’u bilen programcılar tarafından değiştirileceğinden korkuyorlar. 🙂

SDN nedir, neden popüler oluyor? Bu korkular haklı mı?

Bu soruları cevaplamak için önce “geleneksel” ağa daha yakından bakmalıyız. Geleneksel ağın mevcut “sınırlamalarını” tartışacağız, SDN’nın ne olduğunu ve SDN’ın geleneksel ağın sahip olduğu “problemleri” nasıl çözeceğini açıklayacağım.

Geleneksel Ağ

Belirli görevler için kullanılan yönlendiriciler, anahtarlar ve güvenlik duvarları gibi belirli ağ aygıtlarımız var.

Bu ağ aygıtları Cisco gibi ağ satıcıları tarafından satılır ve çoğu zaman özel donanım kullanır. Yönlendiriciler için CCP (Cisco Configuration Protocol) ve Cisco ASA güvenlik duvarları için ASDM gibi bazı GUI ürünleri olmasına rağmen, bu aygıtların çoğu öncelikle CLI aracılığıyla yapılandırılır.





Bir ağ aygıtının, örneğin bir yönlendiricinin gerçekleştirmesi gereken farklı işlevleri vardır. Bir IP paketini iletmek için yönlendiricinin yapması gereken bazı şeyler hakkında biraz düşünün:

  • IP paketinin nereye yönlendirileceğini bulmak için yönlendirme tablosunda hedef IP adresini kontrol etmelidir.
  • Yönlendirme tablosunda yüklü ağları öğrenmek için OSPF, EIGRP veya BGP gibi yönlendirme protokolleri gereklidir.
  • Bir sonraki atlama veya hedefin hedef MAC adresini bulmak ve Ethernet çerçevesindeki hedef MAC adresini değiştirmek için ARP’yi kullanmak zorundadır.
  • IP paketindeki TTL (Live Time), 1 ile azaltılmalı ve IP header checksum yeniden hesaplanmalıdır.
  • Ethernet çerçeve toplamı yeniden hesaplanmalıdır.

Bütün bu farklı görevler farklı düzlemlere ayrılır . Üç düzlem vardır:

  • Kontrol düzlemi
  • Veri düzlemi
  • Yönetim düzlemi

Bu üç düzlem arasındaki farka bir bakalım…

Kontrol Düzlemi

Kontrol düzlemi, yönlendirme bilgilerinin değiştirilmesi, ARP tablosunun oluşturulması vb. sorumludur. Kontrol düzlemi tarafından gerçekleştirilen bazı görevler şunlardır:

  • Bir MAC adresi tablosu oluşturmak için MAC adreslerini öğrenmek.
  • Döngü içermeyen bir topoloji oluşturmak için STP’yi çalıştırmak.
  • ARP tabloları oluşturma.
  • OSPF, EIGRP ve BGP gibi yönlendirme protokollerini çalıştırmak ve yönlendirme tablosunu oluşturmak.

Veri Düzlemi

Veri akışı, trafiği iletmekten sorumludur. Kontrol düzleminin sağladığı bilgilere dayanır. Veri düzleminin ilgileneceği bazı görevler şunlardır:

  • Paketleri kapsüllemek ve açmak.
  • 802.1Q başlığı gibi başlıkları ekleme veya çıkarma.
  • Yönlendirme için MAC adreslerinin eşleştirilmesi.
  • Yönlendirme tablosunda IP hedeflerini eşleme.
  • NAT kullanırken kaynak ve hedef adresleri değiştirme.
  • Erişim listeleri nedeniyle trafiği bırakıma.

Veri düzleminin görevleri mümkün olduğunca hızlı bir şekilde gerçekleştirilmelidir, bu nedenle trafiğin iletilmesi ASIC’ler ve TCAM tabloları gibi özel donanımlar tarafından gerçekleştirilir.

Yönetim Düzlemi

Yönetim düzlemi ağ cihazlarımızın erişimi ve yönetimi için kullanılır. Örneğin, cihazımıza telnet, SSH veya konsol portu üzerinden erişim.

SDN tartışırken, kontrol ve veri düzlemi akılda tutulması gereken en önemli şeydir. Farklı düzlemleri görselleştirmenize yardımcı olacak kontrol ve veri düzleminin bir çizimi:

Yukarıda OSPF ve EIGRP gibi yönlendirme protokolleri ve bazı statik yönlendirme kullandığımız kontrol düzlemini görebilirsiniz. En iyi rotalar, yönlendirme tablosuna yüklenir. Yönlendiricinin yapması gereken bir başka tablo ARP tablosudur.





Yönlendirme tablosunu oluşturmak için yönlendirme ve ARP tablosundan bilgi kullanılır. Yönlendirici bir IP paketi aldığında, yönlendirme tablosu zaten oluşturulduğundan hızlı bir şekilde iletebilir.

Geleneksel ağ sınırlamaları

Yukarıda anlattığım her şey, son 30 yıldır işleri yapmamızın yoluydu, bu yüzden geleneksel ağlarda bir yanlışlık yok. Bununla birlikte, günümüzde farklı çözümler isteyen bazı iş zorlukları var.

Bir senaryoya bakalım.

Yukarıda bir şirketin veri merkezinin ağ altyapısını görüyoruz. Altta, bir dizi sanal makineye sahip bir VMware ESXi sunucusu buluyoruz. Bu sunucu, erişim ve toplama katmanlarındaki bazı anahtarlara bağlanır. Ayrıca sunucumuzu ve iki yönlendiriciyi dış dünyaya erişim için koruyan iki ASA’yı da görüyoruz. Üstte, bir ana cihaz ile başka bir yönlendirici var.

Bu şirketin, VMware sunucusuna yüklenecek dört yeni sanal makine gerektiren yeni bir uygulama için bir iş gereksinimine sahip olduğunu varsayalım. Güvenlik nedenleriyle, her sanal makine farklı bir VLAN içinde olmalıdır. R3’ün arkasında H1 isimli bir kullanıcı, bu sanal makinelerde çalışan uygulamaya erişebilmelidir.

Bunu yapmak için ağımızda yapılandırmamız gereken bazı şeyleri düşünelim:

  • VLAN’ların tüm anahtarlarda oluşturulması gerekir.
  • Yeni VLAN’lar için bir kök köprüsü (STP) yapılandırmamız gerekiyor.
  • Her bir VLAN için bir tane olmak üzere dört yeni alt ağ atamak zorundayız.
  • Anahtarlarda IP adresleri ile yeni alt arayüzler oluşturmamız gerekiyor.
  • Yeni VLAN’ların anahtarlarında VRRP veya HSRP’yi yapılandırmamız gerekiyor.
  • Yeni uygulamalara / alt ağlara erişime izin vermek için güvenlik duvarlarını yapılandırmalıyız.
  • Anahtarlarımız, yönlendiricilerimiz ve güvenlik duvarlarımızdaki bir yönlendirme protokolünde yeni alt ağların tanıtımını yapmak zorundayız.

Bize yardımcı olacak ağ otomasyon araçları olmasına rağmen, bu cihazların hepsini tek tek yapılandırmak için genellikle CLI kullanıyoruz. Bu  yavaş, elle yapılan bir işlemdir ve bir insan yapmak zorundadır. Yeni bir sanal makineyi devreye almak sadece birkaç dakika sürerken, ağ ekibinin ağı hazırlaması birkaç saat sürebilir. Bunlar gibi değişiklikler de genellikle iş saatleri içinde değil, bakım saatleri sırasında yapılır.

Sunucu sanallaştırması, işletmelerin yukarıda açıklanan süreci hızlandıran bir şey aramasının nedenlerinden biridir. Sanallaştırmadan önce, tek bir işletim sistemine sahip tek bir fiziksel sunucumuz vardı. Günümüzde yüzlerce sanal makineye sahip birden fazla fiziksel sunucumuz var.

Bu sanal makineler otomatik olarak bir fiziksel sunucudan diğerine geçebilir. Bir L3 sınırını geçtiğinde, ağ ekibinin yönlendirme veya erişim listeleri için gerekli değişiklikleri yapmasını beklemek istemezsiniz ki tüm bunlar otomatik olmalıdır.

Günümüzde “trend”, her şeyin sanal olması gerektiğidir. Bunun ağlara da geldiğini görmek garip değil. Sadece tescilli donanım satmak için kullanılan Cisco gibi büyük şirketler artık VMWare sunucularında çalıştırabileceğiniz sanal yönlendiriciler, ASA’lar, kablosuz LAN denetleyicileri vb. üretiyor.

SDN (Yazılım Tanımlı Ağ)

Birkaç yıl öncesine ait “bulut” kelimesi gibi, her kuruluş ya da satıcının, SDN’nın tam olarak ne olduğu ve sundukları farklı ürünler hakkında farklı bir fikri vardır.

Geleneksel ağ , kontrol düzlemi için dağıtılmış bir model kullanır . ARP, STP, OSPF, EIGRP, BGP ve diğer protokoller her ağ cihazında ayrı ayrı çalışır. Bu ağ cihazları birbirleriyle iletişim kurar, ancak genel bakışa sahip veya tüm ağı kontrol eden merkezi bir cihaz yoktur.





Burada bir istisna (kablosuz ağa aşina olanlar için) kablosuz LAN denetleyicileridir (WLC). Kablosuz bir ağ yapılandırdığınızda, WLC’de erişim noktalarını kontrol eden ve yapılandıran her şeyi yapılandırırsınız. Artık her erişim noktasını ayrı ayrı yapılandırmamız gerekmiyor, hepsi WLC tarafından yapılıyor.

SDN ile kontrol düzlemi için merkezi bir kontrolör kullanıyoruz . Tedarikçinin SDN çözümüne bağlı olarak, bu, SDN kontrolörünün kontrol düzlemini% 100’ü devraldığı veya sadece ağdaki tüm ağ cihazlarının kontrol düzleminde bir içgörüye sahip olduğu anlamına gelebilir. SDN denetleyici, fiziksel bir donanım aygıtı veya sanal bir makine olabilir.

Bunu görselleştirmenize yardımcı olacak bir örnek:

Yukarıda kontrol düzleminden sorumlu olan SDN kontrolcüsünü görebilirsiniz. Anahtarlar artık sadece bir veri düzlemi olan, kontrol düzlemi olmayan “aptal” cihazlardır . SDN kontrolörü, bu anahtarların veri düzlemini kontrol düzleminden gelen bilgilerle beslemekten sorumludur  .

Dağıtılmış bir merkezi kontrol düzlemine sahip olmanın bazı avantajları ve dezavantajları vardır. Merkezi bir denetleyiciye sahip olmanın avantajlarından biri, tüm ağı tek bir aygıttan yapılandırabilmemizdir. Bu denetleyici, ağımızda olan her şeye tam erişime ve içgörüye sahiptir.

Bu hikayeye biraz daha ayrıntı ekleyelim. SDN kontrolörü iki özel arayüz kullanır, aşağıdaki resme bir göz atın:

Arayüzler kuzey yönlü arayüz- northbound interface ( NBI) ve güney yönlü arayüz-southbound interface (SBI) olarak adlandırılır . İkisini de açıklayalım ;

Southbound Arayüz

SDN kontrolörü, veri düzlemini programlamak için ağ cihazlarımızla iletişim kurmalıdır. Bu güney yönlü arayüz üzerinden yapılır. Bu fiziksel bir arayüz değil, bir yazılım arayüzü, genellikle bir API (Application Programming Interface-Uygulama Programlama Arabirimi) dir.

Bir API, önceden tanımlanmış işlevler ve veri yapıları kullanarak bir uygulamanın diğer uygulamalara erişimini sağlayan bir yazılım arabirimidir.

Bazı popüler güney yönlü arayüzler:

  • OpenFlow: Bu muhtemelen şu an en popüler SBI’dir. Açık Ağ Vakfı’ tarafından sunulan açık kaynak kodlu bir protokoldür . OpenFlow’u destekleyen birkaç ağ aygıtı ve SDN denetleyicisi var.
  • Cisco OpFlex: Bu, Cisco’nun OpenFlow’a verdiği cevabı Ayrıca standardizasyon için IETF’e sunulan açık kaynak kodlu bir protokoldür.
  • CLI: Cisco, mevcut yönlendiriciler ve anahtarlar için bir SDN çözümü olan APIC-EM’yi sunuyor. Telnet, SSH ve SNMP gibi mevcut nesil donanımlarda bulunan protokolleri kullanır.

Northbound Arayüz

Northbound arayüzü, SDN kontrol ünitesine erişmek için kullanılır. Bu, bir ağ yöneticisinin onu yapılandırmak veya ondan bilgi almak için SDN’ya erişmesine izin verir. Bu bir GUI aracılığıyla yapılabilir, ancak aynı zamanda diğer uygulamaların SDN denetleyicisine erişmesine izin veren bir API sunar. Bunu komut dosyaları yazmak ve ağ yönetiminizi otomatikleştirmek için kullanabilirsiniz. İşte bazı örnekler:

  • Ağınızdaki tüm ağ cihazlarındaki bilgileri listeleyin.
  • Ağdaki tüm fiziksel arabirimlerin durumunu göster.
  • Tüm anahtarlarınızda yeni bir VLAN ekleyin.
  • Tüm ağınızın topolojisini göster.
  • Yeni bir sanal makine oluşturulduğunda IP adreslerini, yönlendirme ve erişim listelerini otomatik olarak yapılandırın.

Bunu görselleştirmenize yardımcı olacak bir örnek:

API aracılığıyla, çok sayıda uygulama SDN denetleyicisine erişebilir:

  • SDN denetleyiciden ağ hakkında bilgi almak için bir GUI kullanan bir kullanıcı. Sahne arkasında, GUI API kullanıyor.
  • Java veya Python’da yazılmış komut dosyaları, SDN denetleyicisinden bilgi almak veya ağı yapılandırmak için API’yi kullanabilir.
  • Diğer uygulamalar SDN denetleyicisine erişebilir. Belki bir VMware ESXi sunucusunda yeni bir sanal makine oluşturulduğunda ağı otomatik olarak yapılandıran bir uygulama.

REST API

Birkaç kez, kuzey ve güneye bakan arayüzlerin API kullandığını belirttim. Bir API’nın ne olduğuna daha yakından bakalım. SDN denetleyicileri genellikle bir REST API’sini (Representational State Transfer-Temsili Durum Transferi) kullanır .

REST API, SDN denetleyicisi ve başka bir uygulama arasında bilgi göndermek ve almak için HTTP mesajlarını kullanır. İnternette bir web sayfasına göz atarken veya çevrimiçi bir iletişim formu girdiğinizde kullandığınız HTTP mesajlarını kullanır:

  • HTTP GET: bilgi almak istediğimizde kullanılır.
  • HTTP POST / PUT: bilgiyi yüklemek veya güncellemek istediğimizde kullanılır.

Bir web sayfasına göz atmakla benzerdir, sadece bu sefer bir web sayfası veya resim istemiyorsunuz, ancak SDN denetleyicisinden belirli bir nesne, örneğin, ağdaki tüm VLAN’ları içeren bir liste istiyorsunuz.





SDN denetleyicisi, HTTP GET isteğini aldığında, talep edilen bilgilerle bir HTTP GET yanıtı ile yanıt verecektir. Bu bilgi ortak bir veri formatında teslim edilir. En çok kullanılan iki veri formatı:

  • JSON ((JavaScript Object Notation-JavaScript Nesne Gösterimi)
  • XML (eXtensible Markup Language-EXtensible Markup Language)

Bunu görselleştirmenize yardımcı olacak bir örnek:

Yukarıda, aşağıdaki URL’yi API aracılığıyla almak için HTTP GET kullanan bir python betiğimiz var:

https://192.168.1.1:8443/sdn/v2.0/net/nodes

Bu URL, ağdaki tüm düğümler (ana makineler) hakkındaki bilgiler gibi bazı değişkenleri alacaktır.

API bunu aldıktan sonra, bir HTTP GET yanıt mesajı ile yanıt verir:

İstenen değişkenler JSON formatında sağlanacaktır ve işte böyle görünüyor:

{
	"nodes": [
		{
		"ip": "172.16.1.1",
		"mac": "fa16.3e5d.f1f4",
		"vid": 0,
		"dpid": "00:00:00:00:00:00:00:03",
		"port": 1
	}, {
		"ip": "172.16.1.2",
		"mac": "fa16.3e5d.f1f5",
		"vid": 0,
		"dpid": "00:00:00:00:00:00:00:03",
		"port": 2
	}
]
}

Daha önce hiç JSON görmemiş olsanız bile, yukarıdaki çıktının okunması kolaydır. Bu ağda iki düğümün bulunduğunu söylüyor ve IP adreslerini  ve MAC adreslerini gösteriyor.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Networklesson sitesinden uyarlanıp çevrilmiştir.

1 yorum

Bir yanıt bırakın

E-posta hesabınız yayımlanmayacak.


*