Soket Nedir? IP Adresi ve Portla Nasıl Çalışır?

Ağ soketi, bir uygulamanın ağ üzerinden veri gönderip alırken kullandığı iletişim uç noktasıdır. TCP ve UDP kullanan uygulamalarda IP adresi paketlerin ağda hangi adrese gönderileceğini, port numarası ise ilgili taşıma protokolündeki hangi uç noktaya verileceğini belirtir. Soket, uygulamanın bu iletişimi işletim sistemi üzerinden yönetmesini sağlar.
TCP standardında “soket”, IP adresi ile TCP portunun birleşimi olarak tanımlanır. Uygulama programlamasındaki soket ise yalnız bu iki değerden ibaret değildir; adreslerin yanında protokol ayarlarını, veri tamponlarını ve varsa bağlantı durumunu da yöneten bir işletim sistemi nesnesidir. Kurulmuş bir TCP bağlantısı yerel soket ile uzak soket çiftinden oluşur; bu nedenle yalnız sunucu portuna bakmak, belirli bir bağlantıyı tanımlamak için yeterli değildir.
UDP soketi tek bir uzak uca bağlı olmak zorunda değildir. Tek bir UDP soketi, farklı IP adresleri ve portlardan datagram adı verilen bağımsız mesajlar alabilir; işletim sistemi düzeyinde belirli bir uzak adrese bağlanması da UDP'yi bağlantı yönelimli bir protokole dönüştürmez.
IP Adresi, Port ve Soket Arasındaki İlişki
IP adresi, port ve soket aynı kavram değildir. Aralarındaki fark özellikle aynı sunucuda birden fazla hizmetin veya aynı hizmete ait çok sayıda eşzamanlı bağlantının bulunduğu durumlarda belirginleşir.
| Kavram | Neyi Tanımlar? | Bağlantı İçin Rolü |
|---|---|---|
| IP adresi | Ağ katmanındaki kaynak veya hedef adresi | Hangi ağ adresine paket gönderileceğini belirtir. |
| Port | Taşıma protokolü içindeki uygulama uç noktasını | Aynı IP adresindeki farklı iletişim uç noktalarını ayırır. |
| Soket | Uygulamanın işletim sistemi üzerinden kullandığı iletişim uç noktasını | Uygulamanın veri gönderdiği, aldığı veya bağlantı beklediği uç noktayı temsil eder. |
| TCP bağlantısı | Yerel soket ile uzak soket çiftini | Belirli iki uç arasındaki bağlantı durumunu ayırt eder. |
Bu yüzden “sunucunun IP adresi ve portu” yalnız sunucu tarafındaki yerel uç noktayı gösterebilir. Belirli bir TCP oturumunu ayırmak için istemcinin IP adresi ve port bilgisi de gerekir; aynı IP adresi ve port çifti, farklı taşıma protokolleri kullanıldığında TCP ile UDP'de ayrı uç noktaları ifade eder.
TCP Bağlantısını Yerel ve Uzak Soketler Nasıl Tanımlar?
TCP bağlantı yönelimli bir taşıma protokolüdür. TCP standardı bir bağlantıyı iki soketin oluşturduğu çiftle tanımlar; port numaraları uygulama hizmetlerini belirlemeye ve farklı akışları ayırmaya yardımcı olur.
Sunucu Tarafında Dinleme
Sunucu uygulaması bir soketi yerel adres ve portla ilişkilendirip dinleme durumuna geçirir. Uygulama, bekleyen bir TCP bağlantısını accept işlemiyle kabul ettiğinde o bağlantı için ayrı bir soket alır. Dinleyen soket yeni istekleri beklemeye devam eder; kabul edilen soket ise belirli istemciyle veri alışverişinde kullanılır.
Aynı sunucu portunun çok sayıda istemciye hizmet verebilmesi de buradan gelir. Yerel IP adresi ve port aynı kalsa bile uzak IP adresi ve port çifti farklı olduğundan bağlantılar birbirinden ayrılır. Örneğin aynı istemci adresinden açılan iki bağlantı, farklı kaynak portları kullanabilir; sunucunun her bağlantı için yeni bir dinleme portu açması gerekmez.
İstemci Tarafında Bağlantı Kurma
İstemci, bağlanacağı uzak IP adresini ve portu belirleyerek aktif bağlantı kurma sürecini başlatır. Uygulama yerel IP adresini ve portu açıkça seçebilir veya işletim sistemi uygun değerleri atayabilir; sonuçta kurulmuş bağlantının iki ucu da belirli hale gelir.
TCP bu bağlantı üzerinde güvenilir ve sıralı bir bayt akışı sağlar. Soket bu iletim özelliklerinin kendisi değildir; uygulamanın TCP bağlantısındaki yerel uç noktasını ve bağlantı bağlamını temsil eden yapıdır.
UDP Soketinde Uzak Uç Nokta Zorunlu Değildir
UDP, datagram adı verilen bağımsız mesajları bağlantı kurma ve kapatma aşaması olmadan gönderip alabilir. Tek bir UDP soketi birden fazla kaynak IP adresinden paket alabilir; bu nedenle bir UDP sunucusunun her uzak eş için ayrı bir taşıma bağlantısı kurması gerekmez.
Birçok işletim sistemi UDP soketinin connect işlemiyle belirli adres ve port çiftine “bağlanmasına” izin verir. Bu işlem varsayılan gönderim hedefini belirler ve gelen datagramları seçilen uzak uçla sınırlayabilir. Ancak her sistemde başka bir hedefe gönderimi kesin olarak yasaklamaz; örneğin Linux, bağlı UDP soketinden sendto ile farklı bir hedefe gönderime izin verir. İşlem karşı uçla el sıkışma yapmaz ve UDP'ye teslim garantisi kazandırmaz.
Soket Bilgileri Ne Zaman Belirlenir?
Bir soket oluşturulduğu anda tüm uç nokta bilgileri kesinleşmiş olmayabilir. Uygulamanın rolüne ve protokole göre bilgiler aşamalı olarak belirlenir.
- Oluşturma: Uygulama, IPv4 veya IPv6 gibi bir adres ailesi ile TCP veya UDP gibi bir taşıma protokolü seçer.
- Yerel adresi ilişkilendirme: bind işlemi belirli bir yerel adres ve portu veya tüm yerel adresleri kapsayan bir dinleme adresini seçebilir. Port olarak 0 verilmesi, işletim sisteminden uygun bir port seçmesini istemenin yaygın yoludur.
- TCP sunucusu: listen işlemi soketi dinleme durumuna geçirir. accept ile alınan ayrı bağlantı soketinde yerel ve uzak uçlar belirli olur.
- TCP istemcisi: connect ile uzak uç belirtilir. Uygulama önceden yerel adres ve port seçmediyse işletim sistemi uygun değerleri belirleyebilir.
- UDP: Uygulama her datagram için hedef verebilir veya connect ile varsayılan bir hedef seçebilir; TCP benzeri bağlantı kurulumu yapılmaz.
Yerel IP adresi, yerel port, uzak IP adresi ve uzak port birlikte kurulmuş bir TCP bağlantısını ayırt eder; bunlar her soketin oluşturulduğu anda sahip olması gereken dört sabit alan değildir. Dinleyen TCP soketinde belirli bir uzak uç bulunmaz. Bağlantısız UDP soketi ise her datagramda başka bir hedefle iletişim kurabilir.
0.0.0.0, :: ve Loopback Üzerinde Dinleme
Sunucu uygulaması belirli bir yerel IP adresinde dinleyebileceği gibi IPv4 için 0.0.0.0, IPv6 için :: kullanarak ilgili adres ailesindeki tüm yerel adreslerde dinleyebilir. Bunlar istemcinin sunucuya erişmek için kullanacağı hedef adresler değildir. Yalnız aynı cihaz içinden erişim isteniyorsa loopback adresleri olan 127.0.0.1 veya ::1 üzerinde dinleme kullanılabilir.
:: üzerinde dinleyen bir soketin IPv4 bağlantılarını da kabul edip etmeyeceği, işletim sistemine ve IPV6_V6ONLY gibi soket ayarlarına bağlıdır. Yalnız IPv6 dinleme kaydını görmek, IPv4 erişiminin açık olduğunu kanıtlamaz; iki adres ailesi ayrı kontrol edilmelidir.
Her Soket IP Adresi ve Port Kullanır mı?
Hayır. Soket kavramı TCP ve UDP ağ iletişiminden daha geniştir. Aynı cihazdaki uygulamaların haberleşmesi için kullanılan Unix domain soketleri, IP adresi ve port yerine bir dosya yolu veya işletim sisteminin desteklediği yerel bir ad kullanabilir. Bu nedenle bir soketin adresi yorumlanırken önce hangi adres ailesine ait olduğuna bakılır.
Soket Bilgisi Ağ Sorunlarını Bulmaya Nasıl Yardımcı Olur?
Soket bilgisi, bir uygulamanın hangi protokolü kullandığını, hangi yerel adrese ve porta bağlandığını ve varsa hangi uzak uçla iletişim kurduğunu gösterir. Bu bilgiler, yanlış yerel IP adresine bağlanmış bir hizmeti, beklenmeyen bir uzak eşi veya TCP yerine UDP kullanılan bir yapılandırmayı ortaya çıkarabilir.
Bununla birlikte yerel olarak dinleyen bir soket görmek, hizmetin dış ağdan erişilebilir olduğunu tek başına kanıtlamaz. Güvenlik duvarı, IP adreslerini veya portları çeviren NAT, yönlendirme ve ağdaki erişim sorunları paketlerin gerçekten uç noktaya ulaşıp ulaşmayacağını etkileyebilir. Yerel soket kaydıyla dışarıdan yapılan erişim denemesi bu yüzden farklı şeyleri gösterir.







