Gniazdo (telekomunikacja)

Z Wikipedii, wolnej encyklopedii

Gniazdo (ang. socket) – pojęcie abstrakcyjne reprezentujące dwukierunkowy punkt końcowy połączenia. Dwukierunkowość oznacza możliwość wysyłania i odbierania danych. Wykorzystywane jest przez aplikacje do komunikowania się przez sieć w ramach komunikacji międzyprocesowej.

Gniazdo posiada trzy główne właściwości:

  1. typ gniazda identyfikujący protokół wymiany danych
  2. lokalny adres (np. adres IP, IPX, czy Ethernet)
  3. opcjonalny lokalny numer portu identyfikujący proces, który wymienia dane przez gniazdo (jeśli typ gniazda pozwala używać portów)

Gniazdo może posiadać (na czas trwania komunikacji) dwa dodatkowe atrybuty:

  1. adres zdalny (np. adres IP, IPX, czy Ethernet)
  2. opcjonalny numer portu identyfikujący zdalny proces (jeśli typ gniazda pozwala używać portów)

Adres IP wyznacza węzeł w sieci, numer portu określa proces w węźle, a typ gniazda determinuje sposób wymiany danych.

Jeśli gniazdo używa numerów portów, to lokalny numer portu może zostać przydzielony automatycznie i nosi wtedy nazwę efemerycznego numeru portu (ang. ephemeral port number). Lokalny numer portu może też zostać wymuszony przez wykonanie przypisania (ang. bind) gniazdu numeru pożądanego przez twórcę aplikacji. Próba użycia gniazda, które wymaga zdefiniowanego lokalnego numeru portu bez uprzedniego przypisania mu go, spowoduje automatyczne przydzielenie numeru efemerycznego przez system operacyjny lub bibliotekę (zależnie od implementacji).

Dwie ostatnie właściwości gniazda (lokalny adres i lokalny numer portu) lub dwa dodatkowe atrybuty (zdalny adres, zdalny numer portu) w połączeniu z typem gniazda nazywamy półasocjacją (ang. half-association), ponieważ jest to połowa informacji potrzebnych do zaistnienia komunikacji między dwoma odległymi procesami. Asocjacją (ang. association) zaś nazywamy typ gniazda (determinujący protokół), dwa adresy i dwa numery portów, które stanowią pełną wiedzę pozwalającą na identyfikację komunikujących się poprzez sieć procesów.

W systemach typu Unix obsługa gniazd jest implementowana w jądrze, a wykonywanie na nich operacji umożliwiają funkcje systemowe podobne do tych, jakich używa się w stosunku do plików.

Nazwę "gniazdo" przejęto od określenia "gniazdo" w elektryczności, czyli element sieci elektrycznej, do którego podłącza się urządzenia.