Bu blog, Linux ağ programlama hakkında temel bilgiler içermektedir.

14 Haziran 2017 Çarşamba

11. Soket Nedir?

Haziran 14, 2017 Posted by Burak Candan No comments
Temelde soket, ağ iletişimi sağlanmasını sağlayan bir sanallaştırmadır[31]. Aşağıda Tablo'da Linux için basit bir ağ I/0 Birincil Soket Fonksiyonları gösterilmiştir.


Tablo: Birincil Soket Fonksiyonlar



Operasyon

Açıklama

Açılış

Giriş veya çıkış işlemine hazırlık

Kapanış

Önceki işlemi sonlandırma ve kaynağa dönüş

Okuma

Datayı okuma ve uygulama hafızasına kabul

Yazma

Uygulama hafızasından data yazma ve kontrol etme


Kontrol (ioctl)

Ara bellek boyutları ve iletişim davranış seçeneklerinin ayarlanması

Ağa ait olmayan ya da ağ ile ilişkili olmayan uygulamalarda 1 ve 0'lardan oluşan fonksiyonlar (yani bilgi işlemlerin tamamı) dosyalar üzerinde işlem görür. Dosya açılır, okuma, yazma veya iki işlem birden yapılır ve daha sonra dosya kapanır. Fonksiyonlar, dosya tanımlayıcısı olarak bilinen sistemle işler. Berkeley Soket Arayüzü'nde ise dosya tanımlayıcısı ile aynı mantıkta oluşturulmuş soket tanımlayıcısı sistemi mevcuttur. Tıpkı dosyada olduğu gibi aktif soket, soket tanımlayıcısı olarak belirlenen bir tam sayı şeklinde tanımlanır. Aynı tanımlayıcı tablo içerisinde hem dosya tanımlayıcısı hem de soket tanımlayıcısı bulunamaz. Böyle bir durumda çakışma, karışıklık yaşanacağından sistem çalışmayacaktır[32].

Dosyalama mantığının daha iyi anlaşılması için şöyle bir örnek verilebilir. Günümüzde internet kullanan herkesin bir tür modem edinmesi gerekmektedir. İnternete bağlanmayı sağlayan araçlar olarak modemlerin DHCP sunucusu görevini üstlenerek IP atama mekanizmaları da mevcuttur[33]. Bir Linux işletim sistemi üzerinde bilgisayara atanan IP bilgisini içeren dosya nerede mevcuttur? Bu konuda kişisel kullanım için hazırlanmış Debian işletim sisteminden bir örnek verilebilir. Debian ve diğer pek çok Linux dağıtımında “File Manager” yani dosya yöneticisi mevcuttur. Böyle bir işletim sisteminde yukarıda bahsedilmiş olan dosya tanımlayıcıları kolay bir şekilde gözlemlenebilecektir. Soruya geri dönülecek olunursa ip adresini barındıran dizin yolu şu şekildedir: /etc/resolv.conf bu dizin şu şekilde açılabilir. Uygulamalara gelinerek dosyalar açılır ve ardından etc klasörü içindeki resolv.conf dosyası bulunur. Bu dosya açıldığında birinci satırda “#Generated by NetworkManager”  o satırın altında da nameserver yazısının yanında atanmış ip bulunur. IP değişikliği buradan yapılabilir fakat dosyaya yazma izni olması gerekmektedir. Bu izin uçbirime gelinerek “chmod -R 777  /etc/resolv.conf” yazılarak verilebilir. Atanan IP değiştiğinde veya dosya içerisindeki IP manuel olarak değiştirildiğinde işlem yapılmış olur. İşte soket tanımlayıcısı olarak belirlenen işlemlerde temelinde bu  dosya mantığında ilerlemektedir. 

Dosya ve soket ilişkisi üzerinde biraz daha durulmasında fayda vardır. Ne zaman bir uygulama açılsa bir dosya yaratılır veya o uygulamayla ilişkili halihazırda var olan bir dosya üzerinde işlemler yapılmaya başlanır. Dosya tanımlayıcısı oluşturulmuş olunur. Bu tanımlayıcı bir işaretcidir ve görevi veri yapısında dosyayı tanımlamaktır. Data yapısı dosyanın ismini, dosyanın gerçek yerini (diskde mi hafızada mı olduğunu), salt okunur mu yoksa okuma-yazma işlemine uygun mu olduğunu ve dosyanın boyut bilgilerini içerir[34]. 

Dosya işlemlerine benzer şekilde soket tanımlayıcısının oluşumu da bir uygulamanın soket oluşturmasıyla gerçekleşir. Soket veri yapısında ek olarak soket tipi, local adres, kullanılan port bilgisi gibi bilgiler bulunur. Örnek vermek gerekirse FTP işlemleri 20. porttan gerçekleşir. İşte bu bilgi soket veri yapısında bulundurulur[35].

Bu çalışmada baz alınan soket sisteminde ağa bağlı olmak için mutlaka soket açık olmalıdır. Soket açık olduktan sonra veri soketten okunabilir veya sokete yazılabilir. İletişim sona erdiğinde ise ağ ile iletişim kapatılır ve soket tarafından kullanılan kaynaklar serbest bırakılır.

Şekil'de de gösterildiği üzere soketler iki farklı yolla kullanılabilmektedirler. Bir soket oluşturulduktan sonra bir bağlıtı talebi gelene kadar bekleyebilir veya uzaktaki bir host ile bağlantı başlatabilir. Soket istemci bir program tarafından kullanılıyorsa, bir servera bağlantı başlatıyorsa bu soket aktif bir sokettir. Eğer soket server gibi davranıyor ve bir bağlantı talebi gelmeden işlev görmüyorsa bu soket pasif bir sokettir. İki türlü soket tibi de aynı yöntemlere oluşturulur. Tek fark hangi tip ağ uygulaması tarafından kullanıldıklarıdır.
ŞEKİL: Aktif ve Pasif Soket


Aktif soket yapısında istemci uygulama soket komutuyla soketi oluşturur. Bağlantı, severe bağlantı istemidir. Yazma() komutuyla birlikte etkileşimde olunan servera istek gönderilir ve server tarafından okuma() kısmında bu istek okunur. İstemci çağrısı sona erdiğinde çağrı kapat() ile kapatılır.


Aktif pasifte soket oluşturulduktan sonra dinleme evresi vardır bir çağrı geldiğinde bu çağrı kabul edilir istek kabul edilir ve çağrı okunur daha sonrasında kabul işlemi gerçekleşir ve bağlantı kurulur, bu bağlantı işlem sona erdiğinde kapatılır.




  

0 yorum:

Yorum Gönder