Bölüm 28 ve 29 : İstemci Sunucu Etkileşimi ve Soket API sine Giriş Kaynak : Douglas E. Comer, Computer Networks and Internets With Internet Applications, 4. Baskı, 2004, Prentice Hall Hazırlayan : Tacettin Ayar İstanbul Teknik Üniversitesi Bilgisayar Mühendisliği Bölümü 1
Internet Protokolleri ve Ağ Uygulamaları Internet protokolleri Veri iletimi için genel amaçlı hizmet sağlar Konakların bağlantıya geçmesi için mekanizma sağlar Uygulama programları diğer uygulamalarla iletişime geçmek için Internet protokollerini kullanır Kullanıcı düzeyi hizmetler sağlar 2
Internet Protokolleri Üzerinden İletişim Uygulama, iletişime geçmeden önce protokol yazılımı ile etkileşmelidir Dinleyici uygulama, yerel protokol yazılımını gelen mesajları kabul etmeye hazır olduğu konusunda bilgilendirir Bağlanıcı uygulama, dinleyici ile iletişime geçmek için Internet protokolünü kullanır Uygulamalar iletişime geçince mesajları karşılıklı değişir 3
İstemci-Sunucu Kavramı Sunucu uygulama dinleyicidir Mesaj gelmesi için bekler Hizmeti yerine getirir Sonuçları geri döndürür İstemci uygulama bağlanıcıdır Sunucuya mesaj gönderir Geri dönen mesajı bekler 4
İstemcinin Özellikleri Herhangi bir uygulama programı ağ hizmetine gereksinim duyduğunda istemci olur Doğrudan kullanıcı tarafından çağrılır Kullanıcının bilgisayarında yerel olarak koşar Sunucuyla olan bağlantıyı başlatır Özel bir donanım veya karmaşık işletim sistemi gerektirmez 5
Sunucunun Özellikleri Ağ hizmeti sağlamaya adanmış özel amaçlı uygulama Sistem açılışı zamanında başlar (Genellikle merkezi, paylaşılmış) Uzak bir bilgisayarda koşar İstemcilerden hizmet istekleri bekler, sonraki isteği beklemek için döngü yapar Rasgele istemcilerden istek kabul eder, her istemciye bir hizmet sağlar Güçlü donanıma gereksinim duyabilir 6
Sunucu-Sınıfı Bilgisayarlar Birçok sunucu uygulaması koşturan paylaşılmış, merkezi bilgisayarlar bazen sunucular olarak adlandırılır. Daha doğrusu, uygulamalar sunucu dur ve bilgisayar da sunucu-sınıfı bilgisayar dır Sunucular çok basit bilgisayarlarda koşabilir 7
Mesaj Karşılıklı Değişimleri Genellikle istemci ve sunucu mesajları şu şekilde karşılıklı değiştirirler : İstemci (belki veriyle) istek gönderir Sunucu (belki veriyle) cevap gönderir İstemci birden çok istek gönderebilir, sunucu birden çok cevap gönderebilir Sunucu birden çok cevap gönderebilir Örneğin video gönderimi 8
İletim Protokolleri ve İstemci-Sunucu Kavramı -1 İstemciler ve sunucular iletim protokolleri üzerinden (örn. TCP veya UDP) mesajları karşılıklı değişirler İstemci ve sunucunun ikisi de aynı protokol yığınına sahip olmalıdır ve ikisi de iletim katmanıyla etkileşmelidir 9
İletim Protokolleri ve İstemci-Sunucu Kavramı -2 10
Bir Bilgisayarda Birden Çok Hizmet - 1 Yeterince güçlü bilgisayar yeterli hızda işlemci, çok-görevcikli işletim sistemi- birden çok sunucu koşturabilir İyi yönleri : Sunucular bağımsız süreçler olarak koşar ve istemcileri aynı anda idare edebilir Kaynakları birden çok hizmet arasında paylaştırarak maliyetleri düşürebilir Yönetim yükünü düşürür yalnızca bir sunucu-sınıfı bilgisayarın bakımı 11
Bir Bilgisayarda Birden Çok Hizmet - 2 Kötü yönleri : Bir sunucu, sunucu-sınıfı bilgisayarın kaynaklarını tüketerek diğer sunucuları etkileyebilir Bir tek sunucu-sınıfı bilgisayarın çökmesi birden çok sunucuyu alaşağı edebilir 12
Bir Bilgisayarda Birden Çok Hizmet - 3 13
Bir Hizmeti Tanımlama Her hizmet bir eşsiz tanımlayıcı elde eder İstemci ve sunucunun ikisi de bu tanımlayıcıyı kullanır Sunucu, yerel protokol yazılımına tanımlayıcı ile kaydolur İstemci, bu tanımlayıcı altında iletişim için protokol yazılımıyla bağlantıya geçer Örnek TCP, protokol port numaralarını tanımlayıcı olarak kullanır Sunucu, hizmet için port numarası ile kaydolur İstemci, hizmet için port numarasıyla oturum ister 14
Birden Çok Sunucu Arasından Seçim Gelen mesajlar ne şekilde doğru sunucuya aktarılır? Her iletim oturumu iki eşsiz tanımlayıcıya sahiptir Sunucuda (IP adresi, port numarası) İstemcide (IP adresi, port numarası) Bir bilgisayardaki iki istemci aynı port numarasını kullanamaz Böylece, istemci son-noktaları eşsiz olur ve sunucu bilgisayar protokol yazılımı, mesajları doğru sunucu sürecine iletebilir 15
Bağlantılı ve Bağlantısız İletim TCP -bağlantılı İstemci, sunucuyla bağlantı kurar İstemci ve sunucu rasgele boyutlu birden çok mesajı karşılıklı olarak değişirler İstemci ve sunucu bağlantıyı sonlandırır UDP -bağlantısız İstemci mesaj oluşturur İstemci mesajı sunucuya gönderir Sunucu yanıtlar Mesaj bir UDP datagramına sığmalıdır Bazı hizmetler ikisini de kullanır DNS, chargen, motd 16
API Protokola olan arayüz, API (Uygulama Programı Arayüzü) olarak adlandırılır programlama/işletim sistemi tarafından tanımlanmıştır Uygulama programı için fonksiyonlar topluluğunu içerir 17
Soket API si Protokollar genellikle API yi belirtmez API programlama sistemi tarafından tanımlanır Farklı programlama sistemleriyle azami esneklik-uyumluluk sağlar Soket API si özel bir protokol API sidir Kökeni Berkeley BSD UNIX e dayanır Günümüzde Windows 95, Windows NT, Solaris,...vs de bulunur TCP/IP standardı olarak tanımlanmamıştır, de facto standarttır 18
Soketler ve UNIX G/Ç UNIX G/Ç sistemine genişletme olarak geliştirilmiştir Aynı dosya tanımlayıcısı adres uzayını kullanır (küçük tamsayılar) Aç-oku-yaz-kapat modeline dayandırılmıştır aç bir dosyayı erişim için hazırla oku/yaz dosyanın içeriğine eriş kapat dosya kullanımını güzelce sonlandır aç, oku/yaz/kapat için dosyayı tanımlamada kullanılan bir dosya tanımlayıcısı döndürür. 19
Soket API si Soket programlama, dosya G/Ç dan daha karmaşıktır Daha fazla parametre gerektirir Adresler Protokol kapı numaraları Protokol tipi Yeni anlamlar İki Yöntem Varolan G/Ç sistem çağrılarına parametre ekleme Yeni sistem çağrıları oluşturma Soketler bir dizi yeni sistem çağrıları kullanır 20
Kısaca Soket Sistem Çağrıları socket: yeni bir soket oluşturur close: bir soketin kullanımını sonlandırır bind: bir sokete bir ağ adresini iliştirir listen:gelen bağlantı istekleri için kuyruk boyunu belirler accept: bağlantı isteği gelmesi için beklemeye geçer ve kullanmaya başlar connect: uzak konağa bağlantı yapar send: aktif bağlantı üzerinden veri iletir recv: aktif bağlantı üzerinden veri alır sendto: bağlantısız hizmet üzerinden veri iletir recvfrom: bağlantısız hizmet üzerinden veri alır 21
Socket() tanımlayıcı = socket(protokol ailesi, tip, protokol) Sonraki çağrılarda kullanılan soket tanımlayıcısını döndürür Protokol ailesi : protokol ailesini seçer PF_INET - Internet protokolları PF_APPLETALK - AppleTalk protokolları Tip : haberleşme tipini seçer SOCK_DGRAM - bağlantısız SOCK_STREAM bağlantılı Protokol : protokol ailesi içindeki protokolü belirtir IPPROTO_TCP TCP yi seçer IPPROTO_UDP - UDP yi seçer 22
Close() close(tanımlayıcı) Soket tanımlayıcısının kullanımını sonlandırır Tanımlayıcı : kapatılacak soketin tanımlayıcısıdır 23
Bind() bind(soket, yerel adres, adres uzunluğu) Başlangıçta soketin iliştirilmiş bir adresi yoktur Yerel Adres : Sokete iliştirilecek adres ve kapı Adres uzunluğu yerel adres yapısının uzunluğu 24
Soket Adres Biçimleri - 1 Soketler herhangi bir protokol için kullanılabileceğinden adres biçimi geneldir : struct sockaddr { /* adresin toplam uzunluğu */ u_char sa_len; /* adresin ailesi */ u_char sa_family; } /* adres */ char sa_data[14]; 25
Soket Adres Biçimleri - 2 IP protokolleri için, sa_data, IP addresini ve kapı numarasını tutar : struct sockaddr_in { /*adresin toplam uzunluğu*/ u_char sin_len; /*adresin ailesi*/ u_char sin_family; /* protokol kapı numarası */ u_short sin_port; struct in_addr sin_addr; /* IP adresi */ } char sin_zero[8] /*kullanılmayan*/ 26
Soket Adres Biçimleri - 3 İlk iki alan genel sockaddr yapısının aynıdır Kalanlar IP protokollerine özgüdür INADDR_ANY herhangi bir IP adresi olarak yorumlanır 27
Listen() listen(soket, kuyruk boyu) Sunucu, gelen bağlantıları beklemek için kullanır soket: bağlantıların, üzerinden varacağı soketi (adres) tanımlar Sunucu önceki isteği işlerken yeni bağlantı istekleri varabilir İşletim sistemi istekleri kuyrukta tutabilir Kuyruk boyu: (bekleyen+kabul edilmiş) istekler için üst sınırı belirler 28
Accept() tanımlayıcı = accept(soket, istemci adresi, istemci adres uzunluğu) Sunucu tarafından bir sonraki bağlantı isteğini kabul etmek için kullanılır Bağlantı isteği varana kadar bloklanır tanımlayıcı: yeni bağlantının sunucu tarafındaki ucuna yeni soket Eski soket değişmeden kalır istemci adresi : struct sockaddr tipinde istemci adresini döndürür, biçim soketin adres ailesine bağlıdır istemci adres uzunluğu : adres uzunluğunu döndürür 29
Connect() - 1 connect(soket, sunucu adresi, sunucu adres uzunluğu) İstemci sunucuyla bağlantı kurmak için kullanır Bağlantı tamamlanıncaya (kabul edilinceye) kadar bloklanır soket: Kullanılacak soketin tanımlayıcısını tutar sunucu adresi: sunucuyu tanımlar (struct sockaddr tipinde) sunucu adres uzunluğu: sunucu adresinin uzunluğunu verir 30
Connect() - 2 Genellikle bağlantılı iletim protokolüyle kullanılır Bağlantısız protokol ile de kullanılabilir Yerel soketi sunucu adresiyle işaretler Sonraki mesajlar için gizlice sunucuyu tanımlar 31
Send() send(soket, veri, uzunluk, bayraklar) Bağlanmış bir soket üzerinden veri gönderiminde kullanılır soket: soket i tanımlar veri: gönderilecek veriyi işaret eder uzunluk: (sekizlik olarak) veri uzunluğunu verir bayraklar özel seçenekleri belirtir 32
Sendto() sendto(soket, veri, uzunluk, bayraklar, hedef adresi, hedef adres uzunluğu) Bağlanmamış soketlerde hedefi açıkça belirterek kullanılır sendto fazladan parametre ekler : hedef adresi - hedef adresi (struct sockaddr) hedef adres uzunluğu 33
Recv() recv(soket, tampon, uzunluk, bayraklar) Bağlanmış soket üzerinden gelen veriyi almakta kullanılır soket: soket i tanımlar Gelen veri, tampona kopyalanır uzunluk: Sekizlik olarak en fazla alınabilecek veri boyutu bayraklar : özel seçenekler verir Gerçekte alınan sekizlik sayısını döndürür 0 bağlantının kapandığını belirtir -1 hata belirtir 34
Recvfrom() recvfrom(soket, tampon, uzunluk, bayraklar, gönderici adresi, gönderici adres uzunluğu) Bağlanmamış soket üzerinden gelen veriyi almakta kullanılır soket: soket i tanımlar tampon: Gelen verinin kopyalanacağı yer uzunluk : Sekizlik olarak en fazla alınabilecek veri boyutu bayraklar: özel seçenekler verir gönderici adresi : veriyi gönderenin adresi gönderici adres uzunluğu : gönderici adresinin uzunluğu 35