Herkese Merhaba arkadaşlar bugün biraz network birazda python ile server yapımı olaylarına gireyim dedim, uzatmadan konuya geçeyim.
Network Nedir ?
Network en basit tanımıyla tek ağ üzerinde birden çok cihazın( bilgisayar ve çeşitli çevre birimleri ) barındıgı ve haberleştigi ortak ağ grublarıdır. Kablolu ve Kablosuz olmak üzere İki çeşit Network iletişim sistemi bulunmaktadır, Network sisteminde belli başlı protokoller mevcuttur bizim cihazlar arası iletişim kurmamıza olanak sağlarlar
Network Protokolleri nedir?
Ağa bağlanan cihazlar arasında iletişimin nasıl sağlanacağını belirler bu iletişim sistemi dünya genelinde standarttır.
Peki neler yapabilir bu protokoller?
Network Protokolleri kısaca şunları yapa bilir
Verinin sıralanması: Yani verinin paketlere ayrılması,
Verinin yönlendirilmesi: Alıcı ve verici arasındaki en etkin rotanın belirlenmesi,
Akış kontrolü: Farklı hızda çalışan alıcı ve verici arasında uyumun sağlanması,
Hata kontrolü: Verinin hatasız gönderilmesi.
Kısaca bunları yapabilir, belki bunlardan pek birşey anlamamış olabilirsiniz birazdan aşağıda protokollerimize değineceğim ve konu kafanızda netleşmiş olacak.
Protokoller :
TCP Protokolü (Transmission Control Protocol) : İnternette veri aktarımı için kullanılan 2 protokolü temsil eder; Transmission Control Protocol (TCP) ve Internet Protocol (IP). TCP/IP'de, yollanan veriler katmanlara göre paketlenerek yollanır ve alıcıda bu paketler teker teker açılıp veri ulaştırılır
UDP Protokolü (User Datagram Protocol) : Veri aktarım protokollerinden biridir. Verileri herhangi bir bağlantı kurmadan karşı tarafa göndermeyi sağlamaktadır.
FTP Protokolü (File Transfer Protocol) : Dosya Transfer Protokolü"dür, Cihazlar arası Dosya paylaşımı yapılan protokoldür. FileZilla ve CuteFTP gibi FTP programlar kullanılır.
SNMP Protokolü (Simple Network Management Protocol) : Basit Ağ Yönetim Protokolü"dür. Router, switch gibi network bileşenlerinin veya network kartı olan UPS gibi cihazların yönetimini sağlar.
HTTP Protokolü (Hyper Text Transfer Protocol) : HTTP protokolü istemci (Client) ile sunucu (Server) arasındaki alışverişi sağlar ve Ağ üzerinden web syfalarının veya Tarayıcı üzerinden yapılan isteklerin görüntülenmesini sağlayan protokoldür.
IP Protokolü (Internet Protocol) : Yukarıda bahsettigim gibi İnternet üzerinde veri aktarımı işlemi için kullanılır. IP blokları ve Mac adresleri bu protokolden sorulur.
DNS Protokolü (Domain Name System Protocol) : DNS sistemi, isim sunucuları ve çözümleyicilerinden oluşur. Bu protokolde host isimlerine karşılık gelen IP adresi bilgileri tutulur yani web üzerinde istegimiz siteye gitmek için IP adresini yazmak yerine host adresi ile arama yapmamıza olanak sağlar. Örnek olarak 172.217.20.78 adresi ile Google erişmek yerine google.com yazarak erişmemize yarar.
DHCP Protokolü (Dynamic Host Configuration Protocol) : Ağdaki cihazlara ip adresi, ağ maskesi, ağ geçidi ve dns adresleri gibi bilgileri otomatik olarak atayarak ağdaki IP çakışma ihtimalini engeller, her cihaza otomatik olarak bir IP adresi verir.
SSH Protokolü (Secure Shell) : Türkçe karşılığı "Güvenli Kabuk" olarak bilinir , bir bilgisayarın aynı ağda bulunan bir sunucuya uzaktan bağlanmasını sağlayan prtokoldür.
TELNET Protokolü (Telecommunication Network) : İletişim ağı olarak bilinir , Ağ üzerindeki çok kullanıcılı bir makineye (server) başka bir makina (pc) kullanarak bağlanmak ve o makine üzerinde bazı komutları çalıştırmak için kullanılılan protokoldür.
POP Protokolü (Post Office Protocol) : Mail sunucuları üzerinden mailleri almak için e-mail yazılımları tarafından yaygın şekilde kullanılan bir protokoldür. POP protokolünün iki farklı versiyonu bulunur POP2 ve POP3
IMAP Protokolü (Internet Message Access Protocol) : Gelen e-postalarınızı bilgisayarınıza ya da diğer cihazlarınıza indirmenizi sağlayan iletişim protokolüdür.
WINS Protokolü (Windows Internet Name Service Protocol ) : Ağdaki bilgisayar ve grupların NetBIOS adlarının dinamik eşleştirmelerini kaydetme ve sorgulama imkanı verir. NetBIOS ad çözümlemesi sırasında ortaya çıkan sorunları çözmek amacıyla tasarlanmıştır.
Bu şekilde çeşitli protokoller vardır ve belli bir düzene sahip Network Protokol Katmanları mevcuttur bu katmanlara göre iletişim kusursuz işler.
Network Protokol Katmanları nedir ?
Network katmanlarının tek modeli vardır OSI modelidir ve 7 katmandan oluşur bu modele göre network sistemi işler. Aşağıya OSI modelini bırakıyorum.
OSI (Open System Interconnection)
7 - Application Layer (Uygulama Katmanı) : Kullanıcıya(Client) en yakın katman burasıdır bu katmanda çeşitli software'ler ve API ler kullanarak (Chrome, Firefox, Skype vb.) veriler oluştururuz örenek bir web site oluşturduk bu web sitesindeki her hareketimiz yaptıgımız istekler bu katmanda gerçekleşir
6 - Presantation Layer (Sunum Katmanı) : Gönderilecek verinin diğer bilgisayara anlaşılacak şekilde çevrilmesini sağlar. Örnek: karakter kodlama, veri sıkıştırma ve şifreleme,şifre çözme işlemlerinin yapıldığı katmandır. Datanın Encryption and decryption edilmesi bu katmada gerçekleşir
5 - Session Layer (Oturum Katmanı) : Sunum katmanına yollanacak veriler farklı oturumlarla birbirinden ayrılarak yapılır, Oturum ve bağlantı koordinasyonu bu katmanda yapılır Uygulamalar arasındaki bağlantıların kurulması, yönetimi ve sonlandırılmasından sorumlu katmandır.
4 - Transport Layer (Taşıma Katmanı) : Gönderilmek istenen veriyi olduğu gibi tek parça halinde göndermek yerine, bölütleme, alındılama ve çoğullama gibi parçalara ayırırarak ağ üzerindeki noktalara güvenli bir şekilde gönderen katmandır.
3 - Network (Ağ Katmanı) : Bir ağın adreslendirme , yönlendirme (routing) işlemlerinin kablolu veya kablosuz yapılandırıdığı ve yönetildiği katmandır.
2 - Data Link Ethernet (Veri Hattı Katmanı) : Ağlar arasında gönderilen veri paketlerinin yolunu kontrol ederek güvenli bir şekilde iletilmesini sağlayan katmandır.
1 - Physical (Fiziksel Katman) : Işık , Elektrik , radyo vb sinyallerin gönderilip alındıgı katmandır, OSI modelindeki donanım katıdır. Ethernet şu ana kadar fiziksel katmanda kullanılan en yaygın protokoldür.
Protokollerimiz bu kadar arkadaşlar. Şimdi konuda bahsini ettigim python ile Http server yapıp çalıştıracagız ve link tanımlayarak başka bir localhost sistemimize yönlendirecegiz. Benim yapacagım bu işlem hemen her programlama dilinde yapıla biliyor aynı zamanda her programlama diline göre her protokolün modülü mevcuttur Normalde C# ile yapacaktım bunu ama daha sonra vaz geçtim Python ile yaparsam daha anlaşılır olur diye düşündüm çünkü C# kod bakımından hem çok uzun hemde anlaşılması zor bir dil , bu konuları hiç bilmeyen yada daha yeni başlamış olan arkadaşların gözünü korkutmak istemem, belki daha sonra C# için özel bir konu açarım. Neyse Kodlamamıza geçelim.
Python ile Server Yapımı
Python da bunu yapmak çok zor bir işlem değil biraz python bilgisi ve bize python kurulumunda gelen bazı modüller ile kolayca yapabilirsiniz, python kurulumunda gelen bu modüllerden biri http.server digeri ise SimpleHTTPServer 'dir.
Ben bu konuda "http.server" modülünü kullanıcam , Python 3 standart kütüphanesi http.server modülü ile birlikte gelir bu yüzden bu modülü kullanırken herhangi bir kurulum gerektirmez ve bununla birlikte serverimize soket oluşturmak için "socketserver" adındaki modülünü kullanıcam.
Http.server'ı kendi programınızda kullanmak için Şimdi modüllerimizi içe aktararak kodlamaya başlayabiliriz.
Buradaki işlemlerimizi kısaca anlatayım , Burada modüllerimizi içe aktarıp "PORT" adında bir degişken oluşturdum ve içerisine server için kullanıcagımız Portu tanımladım daha sonra altına "Handler" adında başka bir degişken oluşturarak " http.server " için SimpleHTTPRequestHandler yani bir İstek İşleyicisi oluşturdum
http.server.SimpleHTTPRequestHandler : Türkçedeki karşılıgı Basit HTTP İstek İşleyicisi olarak geçer, İşleyici nedir bilmeyenler için kısaca bahsedeyim gelen TCP verilerini alan ve bunu bir HTTP isteği gibi işleyen bir sınıftır. Örneğin do_GET () ve do_POST () yöntemlerini uygular.
Buradan sonra browser de çalıştırcagımız index sayfam için ilk önce bir "def" oluşturup "do_GET ()" metodu kullandım bu metodumuza "self" parametresi atadım daha sonra bir alt satıra geçerek if blogu içine index sayfamı tanımladım.
Bu kısımda elif , else diye devam etmedim şimdilik bir tane İndex dosyası tanımladım ilerde geliştirirsem bunu genişlete bilirim.
Burada Socket serverimizi bir "with" içine tanımladım ve daha sonra TCP isteklerim için "TCPServer " kullanarak istemci ile sunucu arasında sürekli veri akışı sağladım, burada browser de çalıştıracagımız localhostumuzu ve yanına port degişkenimizi tanımladık son olarak httpd.serve_forever() kodumuzu ekleyip serverimizi kodlamayı bitirdik bu kod bir sonraki satıra geçme buraya kadar çalıştır anlamı taşımaktadır.
Şimdi çalışıyor mu bir bakalım.
Gördügünüz gibi sorunsuz çalışıyor ben burada İndex sayfası kodlarımı paylaşmadım herkes html biliyordur diye gerek duymadım , burada index sayfama XAMPP localhostuna giden bir link tanımladım siz index sayfanızı kafanıza göre tasarlaya bilirsiniz.
Normalde server çalıştırmak için pythonda bazı komutlar var ama ben görselde dikkat ettiyseniz hiç bir komut girmeden direk çalıştırdım, Python HTTP server için genellikle 8000 portu kullanılır veya 8080 portu kullanılır aynı zamanda Python ile yazdıgımız sunucu 0.0.0.0 'da adresi üzerinde çalışır. Benim sistemimde 8000 portu başaka bir sunucuda kurulu oldugu için ben 8080 portunu kullandım ve kodlarımın içine 0.0.0.0 adresini yazmak yerine localhost yazdım.
Peki bu birşey degiştirir mi derseniz, hayır degiştirmez ben sadece Browserde daha kolay kullanım sağlamak için python'un bana sundugu ip yi yazmak yerine localhost yazarak işimi kolaylaştırmak istedim, tabi sunucu ismi localhost olabilir bu sadece kullanım açısından yapılan birşey , ismine ne yazarsanız yazın burada isterseniz localhost yerine başka birşeyde yazabilirsiniz her türlü bizim serverimiz 0.0.0.0 adresi üzerinde çalışır.
Sunucunun çalışma şekli bu şekildedir bu ayarlar göz önünde bulundurulursa eğer sunucu çalıştırmak için
aşağıdaki komutları windows kullanılıyorsa CMD linux kullanılıyorsa Terminal ekranınızda çalıştırmanız gerekir
python3 -m http.server
python2 -m SimpleHTTPServer
php -S 0.0.0.0:8000
ruby -run -e httpd
Benim kodladıgım sunucu bu komutlara ihtiyaç duymadan çalışmaktadır.
Bu konu bu kadardı umarım faydası olur bir sonraki konuda görüşmek dilegiyle..<br><br>
-- Chedy --