Hálózati aljzat - Network socket

A hálózati aljzat egy számítógépes hálózat hálózati csomópontján belüli szoftverstruktúra , amely végpontként szolgál az adatok küldésére és fogadására a hálózaton keresztül. Az aljzat szerkezetét és tulajdonságait a hálózati architektúra alkalmazásprogramozási interfésze (API) határozza meg. Az aljzatok csak a csomópontban futó alkalmazások folyamata során jönnek létre .

Mivel a szabványosítás a TCP / IP protokoll a fejlesztés az internet , a kifejezés hálózati csatlakozó leggyakrabban használt keretében az Internet protokollkészletnek, és ezért gyakran nevezik Internet csatlakozó . Ebben az összefüggésben egy foglalatot külső gazdagépek a socket címe alapján azonosítanak , amely a szállítási protokoll , az IP -cím és a portszám hármasa .

A socket kifejezést a csomópont-belső folyamatok közötti kommunikáció (IPC) szoftver végpontjára is használják , amely gyakran ugyanazt az API-t használja, mint a hálózati aljzat.

Használat

Az aljzat kifejezés használata a szoftverekben analóg az elektromos hüvelyes csatlakozó funkciójával, amely hardveres eszköz az elektromos kábellel összekapcsolt csomópontok közötti kommunikációhoz . Hasonlóképpen, a port kifejezést külső csomópontok vagy eszközök külső fizikai végpontjaira használják.

Az alkalmazás programozási felület (API) a hálózati protokoll létrehoz egy fogantyú minden socket létrehozott egy alkalmazást, közkeletű nevén a socket leíró . A Unix-szerű operációs rendszerek , ez a leíró egy olyan típusú fájl leíró . Az alkalmazás tárolja, és a kommunikációs csatornán minden olvasási és írási művelethez használja.

Az API -val történő létrehozáskor a hálózati aljzat egy átviteli célra használt hálózati protokoll, a gazdagép hálózati címe és a portszám kombinációjához van kötve . A portok számozott erőforrások, amelyek a csomópont más típusú szoftverstruktúráját képviselik. Ezeket szolgáltatástípusként használják, és miután egy folyamat létrehozza őket, külső (a hálózatról) címezhető helykomponensként szolgálnak, hogy más gazdagépek kapcsolatot létesíthessenek.

A hálózati aljzatok lehetnek dedikáltak a két csomópont közötti kommunikációhoz szükséges állandó kapcsolatokhoz, vagy részt vehetnek a kapcsolat nélküli és multicast kommunikációban.

A gyakorlatban az interneten használt TCP/IP protokollok elterjedése miatt a hálózati socket kifejezés általában az Internet Protocol (IP) használatára utal . Ezért gyakran internetes aljzatnak is nevezik .

Socket címek

Egy alkalmazás kommunikálhat egy távoli folyamattal úgy, hogy adatokat cserél a TCP/IP protokollal, ismerve a protokoll típusát, az IP -címet és a portszámot. Ezt a kombinációt gyakran socket címként ismerik . Ez a hálózati aljzat hálózat felé néző hozzáférési fogantyúja. A távoli folyamat létrehoz egy hálózati socketet a protokollköteg saját példányában, és a hálózati API segítségével csatlakozik az alkalmazáshoz, bemutatva saját socket címét az alkalmazás számára.

Végrehajtás

A protokollköteg , amelyet általában az operációs rendszer biztosít (nem például külön könyvtárként), olyan szolgáltatások összessége, amelyek lehetővé teszik a folyamatok számára, hogy a verem által megvalósított protokollok segítségével kommunikáljanak hálózaton keresztül. Az operációs rendszer továbbítja a bejövő IP -csomagok hasznos terhét a megfelelő alkalmazáshoz úgy, hogy kibontja a socketcím -információkat az IP- és a szállítási protokoll fejlécéből, és eltávolítja a fejléceket az alkalmazásadatokból.

Az alkalmazásprogramozási felületet (API), amelyet a programok a hálózati socketek használatával kommunikálnak a protokollköteggel, socket API -nak neveznek . Ezt az API -t használó alkalmazásprogramok fejlesztését socket programozásnak vagy hálózati programozásnak nevezzük . Az internetes socket API -k általában a Berkeley sockets szabványon alapulnak . A Berkeley sockets szabványban az aljzatok a fájlleíró egy formája , a Unix filozófiája szerint "minden egy fájl", valamint az aljzatok és a fájlok közötti analógiák. Mindkettőnek van funkciója olvasni, írni, megnyitni és bezárni. A gyakorlatban a különbségek megerőltetik az analógiát, és különböző interfészeket (küldés és fogadás) használnak egy foglalaton. A folyamatok közötti kommunikációban általában mindegyik végnek saját aljzata van.

A szabványos TCP és UDP internetes protokollokban a foglalatcím egy IP -cím és egy portszám kombinációja , hasonlóan a telefonkapcsolat egyik végéhez a telefonszám és egy adott mellék kombinációja . Az aljzatoknak nem kell rendelkezniük forráscímmel, például csak adatok küldésére, de ha egy program egy foglalatot köt egy forráscímhez, akkor az aljzat használható az erre a címre küldött adatok fogadására. E cím alapján az internetes aljzatok a bejövő adatcsomagokat továbbítják a megfelelő alkalmazási folyamathoz .

A Socket gyakran kifejezetten egy internetes vagy TCP -aljzatra utal. Az internetes aljzatot minimálisan a következők jellemzik:

  • helyi aljzatcím, amely a helyi IP -címből és (TCP és UDP, de nem IP) portszámból áll
  • protokoll: Szállítási protokoll, pl. TCP, UDP, nyers IP. Ez azt jelenti, hogy (helyi vagy távoli) végpontok 53 TCP és UDP 53 porttal különálló foglalatok, míg az IP nem rendelkezik portokkal.
  • Az aljzatnak, amelyet egy másik aljzathoz csatlakoztattak, például egy TCP -kapcsolat létrehozása során, távoli socket címe is van.

Meghatározás

Az aljzat (belső ábrázolás), a socketleíró (absztrakt azonosító) és a socketcím (nyilvános cím) közötti különbségek finomak, és ezeket nem mindig különböztetik meg a mindennapi használatban. Ezenkívül az aljzat specifikus definíciói eltérnek a szerzők között. Az IETF megjegyzéskérésében , internetes szabványaiban , sok tankönyvben, valamint ebben a cikkben a socket kifejezés olyan entitásra utal, amelyet egyedileg azonosít a socket száma. Más tankönyvekben a socket kifejezés egy helyi socket címre utal, azaz "egy IP -cím és egy portszám kombinációja". Az RFC 147 -ben megadott foglalat eredeti definíciójában , mivel az 1971 -ben az ARPA hálózathoz kapcsolódott , "az aljzat 32 bites számként van megadva, páros socketekkel azonosítva a fogadó socketeket és páratlan socketekkel azonosítva a küldő socketeket". Ma azonban az aljzatkommunikáció kétirányú.

Az operációs rendszeren és a socketet létrehozó alkalmazáson belül a foglalatra egyedi egész szám hivatkozik, amelyet socket descriptor -nak hívnak .

Eszközök

Unix-szerű operációs rendszereken és Microsoft Windows rendszeren a netstat vagy ss parancssori eszközöket használják a létrehozott foglalatok és a kapcsolódó információk listázására.

Példa

Ez a példa a Berkeley socket interfész szerint modellezve elküldi a "Hello, world!" Karakterláncot. TCP -n keresztül az 1.2.3.4 címmel rendelkező gazdagép 80 -as portjára. Egy aljzat (getSocket) létrehozását, a távoli gazdagéphez való csatlakoztatását, a karakterlánc elküldését és végül az aljzat bezárását szemlélteti:

Socket mysocket = getSocket(type = "TCP")
connect(mysocket, address = "1.2.3.4", port = "80")
send(mysocket, "Hello, world!")
close(mysocket)

Típusok

Többféle internetes aljzat áll rendelkezésre:

Datagram aljzatok
Kapcsolat nélküli aljzatok, amelyek User Datagram Protocol (UDP) protokollt használnak . Minden datagram aljzaton küldött vagy fogadott csomagot egyedileg címeznek és irányítanak. A rend és a megbízhatóság nem garantált a datagram aljzatokkal, így az egyik gépről vagy folyamatról a másikra küldött több csomag bármilyen sorrendben érkezhet, vagy egyáltalán nem. Speciális konfigurációra lehet szükség az adások datagram aljzaton történő küldéséhez . A broadcast csomagok fogadásához a datagram socketet nem szabad egy meghatározott címhez kötni, bár egyes megvalósítások esetén a broadcast csomagok is fogadhatók, ha a datagram socket egy adott címhez van kötve.
Stream aljzatok
Kapcsolat-orientált aljzatok, amelyek Transmission Control Protocol (TCP), Stream Control Transmission Protocol (SCTP) vagy Datagram Congestion Control Protocol (DCCP) protokollt használnak . A patak socket szekvenált és egyedi áramlását hibamentes adatokat anélkül, hogy rekord határokat, jól meghatározott mechanizmusok létrehozása és megsemmisítése kapcsolatok és jelentési hibák. A stream aljzat megbízhatóan , sorrendben és sávon kívüli képességekkel továbbítja az adatokat . Az interneten a stream aljzatok általában TCP használatával valósulnak meg, így az alkalmazások bármilyen hálózaton futhatnak TCP/IP protokoll használatával.
Nyers aljzatok
IP-csomagok közvetlen küldésének és fogadásának engedélyezése protokoll-specifikus szállítási réteg formázása nélkül. Más típusú csatlakozó, a hasznos teher automatikusan zárt a választott szállítási réteg protokoll (pl TCP, UDP), és az aljzat felhasználó nincs tudatában a létezésének protokoll fejlécek , hogy sugározzák a hasznos teher. Amikor nyers aljzatból olvas, a fejlécek általában szerepelnek. Amikor csomagokat nyers aljzatból továbbít, a fejléc automatikus hozzáadása opcionális.
A legtöbb socket alkalmazásprogramozási interfész (API), például a Berkeley aljzatokon alapuló , támogatja a nyers aljzatokat. A Windows XP 2001 -ben jelent meg a Winsock felületen megvalósított nyers socket támogatással , de három évvel később a Microsoft biztonsági okok miatt korlátozta a Winsock nyers aljzat támogatását.
A nyers aljzatokat olyan biztonsággal kapcsolatos alkalmazásokban használják, mint az Nmap . A nyers aljzatok egyik felhasználási módja az új szállítási rétegű protokollok implementálása a felhasználói térben . A nyers aljzatok általában hálózati berendezésekben állnak rendelkezésre, és olyan útválasztási protokollokhoz használhatók, mint például az Internet Group Management Protocol (IGMP) és az Open Shortest Path First (OSPF), valamint az Internet Control Message Protocol (ICMP), amelyet többek között az a ping segédprogram .

Más foglalat típusok más szállítási protokollokon keresztül valósulnak meg, mint például a rendszerhálózati architektúra és a Unix tartomány aljzatai a folyamatok közötti belső kommunikációhoz.

Socket állapotok az ügyfél-szerver modellben

Az alkalmazási szolgáltatásokat nyújtó számítógépes folyamatokat szervereknek nevezik , és indításkor foglalatokat hoznak létre, amelyek hallgatási állapotban vannak . Ezek az aljzatok várják az ügyfélprogramok kezdeményezéseit .

Egy TCP -kiszolgáló több ügyfelet is kiszolgálhat egyszerre, ha egyedi dedikált socketet hoz létre minden egyes ügyfélkapcsolathoz egy új gyermekfolyamatban vagy feldolgozási szálban minden ügyfél számára. Ezek a kialakult állapotban vannak, amikor a távoli foglalattal létrejön egy socket-to-socket virtuális kapcsolat vagy virtuális áramkör (VC), más néven TCP- munkamenet , amely duplex bájtfolyamot biztosít .

Egy szerver létrehozhat több egyidejűleg létrehozott TCP socketet ugyanazzal a helyi portszámmal és helyi IP-címmel, amelyek mindegyike a saját szerver-utód folyamatához van hozzárendelve, és kiszolgálja a saját ügyfélfolyamatát. Az operációs rendszer különböző aljzatként kezeli őket, mivel a távoli foglalat címe (az ügyfél IP -címe vagy portszáma) eltérő; azaz mivel ezek különböző foglalat párból sorokat.

Az UDP aljzatok nem rendelkeznek állapottal , mivel a protokoll kapcsolat nélküli . Az UDP kiszolgáló folyamata az összes távoli ügyfél bejövő datagramját egymás után kezeli ugyanazon a foglalaton keresztül. Az UDP aljzatokat nem a távoli cím, hanem csak a helyi cím azonosítja, bár minden üzenethez tartozik egy távoli cím, amely a hálózati alkalmazásprogramozási interfésszel (API) minden adatgramból lekérhető.

Aljzatpárok

Kommunikáció a helyi és a távoli aljzatok nevezzük aljzat párokat . Mindegyik foglalatpárt egy egyedi 4-sor írja le, amely forrás- és cél-IP-címekből és portszámokból áll, azaz helyi és távoli socket címekből. Amint azt fentebb tárgyaltuk, a TCP esetben egy aljzatpár a kapcsolat mindkét végén egy egyedi 4-es sorral van társítva.

Történelem

A socket kifejezés az RFC 147 1971 -es kiadásából származik, amikor az ARPANET -ben használták. A foglalatok legtöbb modern megvalósítása Berkeley aljzatokon (1983) és más kötegeken, például Winsockon (1991) alapul. A Berkeley sockets API a Berkeley Software Distribution (BSD) -ben , a 4.2BSD Unix operációs rendszertől származik API -ként. Az UC Berkeley azonban csak 1989-ben adhatta ki operációs rendszerének és hálózati könyvtárának verzióit az AT&T szerzői joggal védett Unix licencszerződései alól .

A c. 1987 -ben az AT&T bevezette a STREAMS -alapú szállítási réteg interfészt (TLI) a UNIX System V 3. kiadásában (SRV3). és folytatódott a 4. kiadásban (SVR4).

Más korai megvalósításokat írtak a TOPS-20 , MVS , VM , IBM-DOS (PCIP) rendszerekhez.

Aljzatok a hálózati berendezésekben

Az aljzat elsősorban az Internet protokollkészlet szállítási rétegében vagy az OSI modell munkamenetrétegében használt fogalom . Hálózati eszközök, mint például útválasztók , amelyek működnek az internet réteg , és kapcsolókat , amelyek működnek a kapcsolati réteg , nem igényelnek megvalósítások a szállítási réteg. Az állapotos hálózati tűzfalak , a hálózati címfordítók és a proxykiszolgálók azonban nyomon követik az aktív socketpárokat. A többrétegű kapcsolókban és a szolgáltatásminőség (QoS) támogatásában az útválasztókban a csomagáramok azonosíthatók az aljzatpárokra vonatkozó információk kinyerésével.

A nyers aljzatok általában hálózati berendezésekben állnak rendelkezésre, és az útválasztási protokollokhoz , például IGRP és OSPF , valamint az Internet Control Message Protocol (ICMP) protokollokhoz használatosak .

Lásd még

Hivatkozások

További irodalom

  • Jones, Anthony; Ohlund, Jim (2002). Hálózati programozás Microsoft Windows rendszerhez . ISBN 0-7356-1579-9.

Külső linkek