Socket
- Türkçe karşılığı
- soket
- Okunuşu
- sokit
Günlük kullanımda iki ad da yaygın.
Kısaca
Socket, bir programın ağ üzerinden veri gönderip almak için açtığı; IP adresi, port numarası ve protokolle tanımlanan yazılım tabanlı bir uç noktadır.
Ağ soketi (socket) nedir?
Socket, bir uygulamanın ağ üzerinden iletişim kurmak için kullandığı programlama arayüzüdür. Program işletim sisteminden bir socket ister, onu uzak bir adrese bağlar ya da yerel bir adrese bağlar (bind) ve ardından bir dosyayla yaptığı gibi onun üzerinden veri okur ve yazar. Tarayıcılardan ve web sunucularından veritabanı sürücülerine kadar hemen her ağ programı socket'ler üzerine kuruludur; bu genellikle ilk kez 1980'lerin başında BSD Unix'te ortaya çıkan ve bugün her büyük işletim sistemi tarafından desteklenen Berkeley sockets API'si aracılığıyla olur.
Bir TCP sunucusu bir socket oluşturur, onu 8080 gibi bir porta bağlar ve listen() çağırır; bir istemci her bağlandığında accept() o tek konuşmaya ayrılmış yeni bir socket döndürür. İstemci kendi socket'ini oluşturur ve sunucunun adresiyle connect() çağırır; bundan sonra iki taraf da send() ve recv() kullanır. Her TCP bağlantısı dört değerle tanımlanır: kaynak IP adresi, kaynak port, hedef IP adresi ve hedef port. UDP socket'i bağlanmayı atlar ve yalnızca tek tek datagramlar gönderip alır; Unix benzeri sistemlerde her socket bir dosya tanımlayıcısıdır (file descriptor), yani açık dosyalar için kullanılan aynı türden bir tutamaçtır.
IP adresi bir binanın sokak adresi, port bir daire numarasıysa, socket o dairede kurulu telefondur: bir programın gerçekte konuştuğu ve dinlediği araç. Çoğu geliştirici socket'leri dolaylı olarak HTTP istemcileri, web framework'leri ve veritabanı kitaplıkları aracılığıyla kullanır; ama onlar ECONNREFUSED (o portu dinleyen hiçbir şey yok) ve EADDRINUSE (port zaten alınmış) gibi hatalarda ve zaman aşımı ile bağlantı havuzu gibi ayarlarda karşımıza çıkar. Unix domain socket'ler, aynı makinedeki süreçler arasında ağ yığınından geçmeden hızlı iletişim için aynı API'yi kullanır.
Socket sıklıkla port ve WebSocket ile karıştırılır. Port yalnızca bir sayıdır; socket ise bir programın içindeki canlı bir nesnedir ve dinleyen tek bir port, her istemci için bir tane olmak üzere aynı anda binlerce bağlı socket'e sahip olabilir. WebSocket ise adına rağmen, tarayıcılara bir sunucuyla uzun ömürlü iki yönlü bir bağlantı sağlayan belirli bir protokoldür; sıradan bir TCP socket'i üzerinde çalışır ama düşük seviyeli socket API'siyle aynı şey değildir.
Önemli noktalar
- Socket, bir programın ağ verisi gönderip aldığı uç noktadır.
- Sunucular
bind(),listen()veaccept()çağırır; istemcilerconnect()çağırır; sonra ikisi desend()verecv()kullanır. - Bir TCP bağlantısı kaynak IP, kaynak port, hedef IP ve hedef port ile tanımlanır.
- Unix benzeri sistemlerde socket bir dosya tanımlayıcısıdır ve Unix domain socket'ler tek bir makinedeki süreçleri bağlar.
- Port bir sayıdır, socket canlı bir uç noktadır ve WebSocket ayrı bir protokoldür.
Örnek
import socket
# Accept connections and send back whatever each client sends
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server:
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(("127.0.0.1", 8080)) # claim an address and port
server.listen() # start accepting connections
while True:
conn, addr = server.accept() # a new socket for each client
with conn:
data = conn.recv(1024)
conn.sendall(data) # echo the bytes back
# Try it from another terminal: echo hello | nc 127.0.0.1 8080Sık sorulan sorular
Socket ile port arasındaki fark nedir?
Port, bir makinedeki bir hizmeti tanımlayan sayıdır; socket ise bir programın iletişim kurmak için oluşturduğu, bir adrese, bir porta ve bir protokole bağlı uç noktadır. Dinleyen tek bir portun, her istemci için bir tane olmak üzere birçok bağlı socket'i olabilir.
Socket ile WebSocket arasındaki fark nedir?
Socket, her türlü programın kullandığı ağ iletişimi için genel işletim sistemi arayüzüdür. WebSocket ise bir HTTP yükseltme isteğiyle başlatılan ve web sayfalarına bir sunucuyla kalıcı iki yönlü bir kanal sağlayan belirli bir protokoldür; bir TCP socket'inin üzerinde çalışır.
Connection refused ne anlama gelir?
ECONNREFUSED, socket'inizin hedef makineye ulaştığı ama o portu dinleyen hiçbir program olmadığı için işletim sisteminin bağlantıyı reddettiği anlamına gelir. Sunucunun çalıştığını ve beklediğiniz adres ve portu dinlediğini kontrol edin.
İlgili sayfalar
- TCPAğlar, s. 28TCP, bir bağlantı kurup kaybolan verileri yeniden göndererek iki program arasında veriyi güvenilir ve sıralı biçimde ileten temel bir internet protokolüdür.
- UDPAğlar, s. 33UDP, bağlantı kurmadan datagram adı verilen küçük ve bağımsız mesajlar gönderen, garantili teslimat yerine hızı seçen hafif bir internet protokolüdür.
- PortAğlar, s. 22Port, bir cihazdaki belirli bir programı ya da hizmeti tanımlayan, 0 ile 65535 arasında bir sayıdır; IP adresine gelen trafik böylece doğru uygulamaya ulaşır.
- WebSocketWeb Geliştirme, s. 61WebSocket, tarayıcı ile sunucu arasında tek bir bağlantıyı açık tutarak her iki tarafın istediği an birbirine anında mesaj göndermesini sağlayan protokoldür.
- File Descriptorİşletim Sistemleri, s. 11File descriptor, Unix benzeri bir işletim sisteminin process'e açık bir dosya, socket, pipe ya da başka bir girdi/çıktı kaynağı için verdiği küçük tamsayıdır.
- IP AdresiAğlar, s. 12IP adresi, ağdaki her cihaza verilen ve verinin o cihaza yönlendirilmesini sağlayan sayısal bir etikettir; bir evin posta adresine benzer.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin