Co je zásuvka?

Mohl by mi někdo vysvětlit, co je to socket? Vidím to v mnoha zkratkách v kontextu SSL atd.

Proč se tomu říká socket? Je to čistě proto, že to bylo to, co vymysleli? Nebo to bylo první jméno, které vymysleli?

Komentáře

  • Laicky řečeno ‚: zásuvka je telefon. Je to ‚ ta věc, kterou držíte v ruce a umožňuje vám konverzovat s jiným telefonem. Analogie se trochu rozpadá: Většina telefonních rozhovorů probíhá peer-to-peer. Soketová připojení jsou klient na server. Klient (jako je například pracovní stanice se softwarem, jako jsou prohlížeče), se připojuje k serveru (například k webovému serveru, souborovému serveru, ověřovacímu serveru apod.). Další chyba v analogii: když zavřete připojení soketu, soket se zničí a před vytvořením nového připojení musíte vytvořit nový soket.
  • It ‚ to není tak špatné pro analogii. Server je pouze call-centrum a může mít najednou stovky aktivních hovorů.

Odpovědět

Zásuvka je pouze logickým koncovým bodem pro komunikaci. Existují na transportní vrstvě. Můžete odesílat a přijímat věci na soketu, můžete svázat a poslouchat soket. Soket je specifický pro protokol, stroj a port a je jako takový adresován v záhlaví paketu.

Beejovi průvodci po síti Programování a Meziprocesová komunikace mají dobré informace o tom, jak používat zásuvky, a dokonce i odpovězte na tuto přesnou otázku .

Odpovědět

V nejjednodušších termínech je soket pseudo soubor, který představuje síťové připojení. Jakmile je soket vytvořen (pomocí správných primitiv a správných parametrů k identifikaci druhého hostitele), zápisy do soketu jsou přeměněny na síťové pakety, které jsou odesílány, a lze číst data přijatá ze sítě ze zásuvky.

V jednom ohledu jsou zásuvky velmi podobné trubkám: vypadají stejně jako soubory programů, které je používají, ale nevedou ke čtení nebo zápisu na disk; spíše umožňují komunikaci s jiným programem (místní v případě potrubí a po pravděpodobně vzdálený v případě zásuvek). Nabízejí také, jak jste zmínili, obousměrnou komunikaci (podobně jako pár správně připojených kanálů).

Nakonec je běžné, že programy na jednom počítači komunikují pomocí standardních síťových protokolů, jako je TCP ; bylo by zbytečné jít až k síťovému hardwaru (pokud existuje!), k výpočtu kontrolních součtů atd., jen aby se vrátil ke stejnému hostiteli: to je místo, kde přicházejí zásuvky unixových domén. Ty jsou podobné běžným soketům , kromě toho, že spojují procesy na stejném hostiteli spíše než vzdálené procesy a vůbec se nepokoušejí používat žádné síťové prostředky. Tímto způsobem jsou prostředkem meziprocesní komunikace.

Jak zmínil tripleee , v průběhu historie BSD byly trubky zavedeny dříve než sokety a byly znovu implementovány pomocí soketů, jakmile existovaly. Stejný odkaz, Návrh a implementace operačního systému FreeBSD , uvádí, že roury poté byly z důvodu výkonu vráceny k implementaci bez soketu: to rozhodně podtrhuje skutečnost, že kanály sdílejí podobnosti.

Komentáře

  • Možná také zmíním, že trubky předcházejí sokety, ale jakmile bylo rozhraní soketů přidáno do Unixu, mělo to smysl o reimplementujte potrubí pomocí místních zásuvek.
  • @tripleee: To ‚ je skvělý historický bod. Chcete poskytnout odkaz?
  • Rychlé googling zobrazí strana 40 v Návrh a implementace operačního systému FreeBSD ; text zmiňuje tuto změnu ve verzi 4.2BSD, ale také objasňuje, že to již z důvodů výkonu není ‚ provedeno.
  • Skvělé, I ‚ Přidám toto k mé odpovědi.
  • Nejlepší technická odpověď ve všech

Odpověď

Co je to?

Socket neboli „socket“ může být několik věcí:

Nejprve je to myšlenka model a aplikační programovací rozhraní (API) . To znamená, že máte sadu pravidel, která musíte dodržovat, a sadu funkcí, které můžete použít k psaní programů, které něco dělají, podle přesně stanovené smlouvy. V tomto konkrétním případě znamená něco výměnu dat s jiným programem.

Sockets API obecně abstrahuje podrobnosti „komunikace“ obecně. Zapouzdřuje, s kým a jak, a to prostřednictvím jednoho (téměř) konzistentního a identického formuláře pro vyřezávání souborů cookie.
Sokety můžete vytvářet v různých „doménách“ (například např.„unixová zásuvka“ nebo „internetová zásuvka“) a různých typů komunikace (např. zásuvka „datagramu“ nebo „streamu“) a hovořit s různými příjemci a vše funguje přesně stejně (dobře, 99%, očividně existují drobné rozdíly, za které budete muset odpovídat).

Nepotřebujete vědět (a ani to nechcete vědět!), zda mluvíte s jiným programem na stejném počítači nebo na jiném počítači, nebo zda je mezi těmito počítači síť IPv4 nebo IPv6, nebo možná nějaký jiný protokol, o kterém jste nikdy neslyšeli.

socket je také název funkce knihovny (nebo syscall), která vytváří „soket „, což je speciální druh souboru (vše v Unixu je soubor).

Jak je to v porovnání s …

zásuvky spadají do stejné kategorie jako potrubí a pojmenovat roury

Trubka je prostředkem o ne cesta komunikace mezi čtenářem a zapisovatelem (oba programy) na stejném počítači. Simuluje proud dat (stejně jako např. TCP).
To znamená, že z pohledu kanálu neexistují žádné jednotlivé „zprávy“ nebo „bloky dat“. Můžete kopírovat jakékoli množství dat na „jeden konec“ a někdo jiný může číst jakékoli množství dat (ne nutně stejné a ne nutně najednou) na „druhém konci“ ve stejném pořadí bajtů, ve kterém jste je vložili .

Potrubí pojmenované je jednoduše potrubí , které vlastní název v souborovém systému . To znamená, že je to něco, co vypadá a chová se jako soubor, objeví se v seznamu adresářů a můžete jej otevřít, zapsat do něj atd. Všimněte si, že můžete také vytvořit speciální soubory soketu (to by bylo pojmenované soket).

Soket je naopak prostředkem obousměrného (“ duplex „) komunikace, to znamená, že můžete psát a číst ze stejné zásuvky a pro obousměrnou komunikaci nepotřebujete dvě samostatné zásuvky.
Soket může také fungovat jako proud (identický s rourou ), nebo může posílat diskrétní, nespolehlivé zprávy nebo může posílat diskrétní, seřazené zprávy (první dvě fungují na jakékoli doméně, poslední pouze na „unixové doméně“). Může posílat zprávy (nebo simulovat stream) někomu na úplně jiném počítači. Zásuvka může za určitých podmínek dokonce provádět formu komunikace typu „n-to-many“ (vícesměrové vysílání).

S ohledem na to je jasné, že sokety dělají něco mnohem komplikovanějšího a obecně mají více režijních nákladů než potrubí (což v zásadě není nic jiného než jednoduchá memcpy do az vyrovnávací paměti!), ale pokud vytvoříte místní zásuvky (tj. na stejném počítači), operační systém obvykle používá silně optimalizovanou rychlou cestu, takže tam opravdu není velký rozdíl.

meziprocesová komunikace někdy zmiňováno s ohledem na sítě

Ano, zásuvky jsou jedním z možných způsobů meziprocesové komunikace (sdílená paměť a roury jsou příklady alternativ). Všechny jsou současně používány pro „networking“, jak je vysvětleno výše.

Odpověď

Zásuvka abstrakce . Poskytuje rozhraní pro aplikace využívající systémový prostředek (v tomto případě síťové připojení) způsobem, který umožňuje operačnímu systému zprostředkovat a organizovat použití omezeného zdroje libovolným počtem aplikací.

Pokud lze data odesílaná přes soket považovat za obálky pošty, pak by soket byl vaší poštovní schránkou. Do svého domu (programu) připojíte poštovní schránku (zásuvku) a do ní vložíte odchozí poštu (data). V naplánovanou dobu přijde poštovní doručovatel (operační systém), vyzvedne vaši odchozí poštu a odevzdá veškerou příchozí poštu ve stejné poštovní schránce. Vaše odchozí pošta je za vás doručována příjemci prostřednictvím poštovního vozíku (síťové připojení) spolu s poštou všech vašich sousedů. To vám umožní komunikovat s lidmi daleko, aniž byste museli náklady, čas, potíže atd. Doručovat sami.

Pokud jde o to, proč se jim „říká“ zásuvky, pojem, že vynálezci to nazývají, jak chtějí, tam pravděpodobně hrají velkou roli. Podle mého názoru to není špatné jméno 🙂

Odpovědět

U udp nebo tcp over IP,

soketová adresa je kombinací IP adresy a čísla portu.

IP adresa je adresa stroj na internetu, např unix.stackexchange.com has address 198.252.206.140

Každý stroj však musí být schopen poskytovat více než jednu službu, takže většina strojů bude poskytovat porty http (webové stránky) na portu 80 a ssh na portu 22 atd.

Takže unix.stackexchange.com:80 port 80 z unix.stackexchange.com (zásuvka) je přístupový bod tohoto webu.

Existují však i jiné typy soketů, viz komentáře níže.

Komentáře

  • tcp / ip je pouze jeden druh zásuvka. Existují další, které nemají nic společného s tcp / ip.
  • kolik různých druhů zásuvek je k dispozici?
  • @AbdulAlHazred, znám čtyři běžné typy používané v IP síti, to samé s ip6, dva s unixem a dva s IPX. Nedíval jsem se na ax25, atm nebo appletalk. Linux podporuje i jiné protokoly a Linux nepodporuje. Ve většině případů má každý protokol zásuvky pro stream (tcp) a datagram (udp). Běžné zásuvky jsou také běžné a imcp může mít také rozhraní zásuvky.
  • Jde o to, že tato odpověď je neúplná v tom, že pokrývá pouze jeden typ zásuvky, a zavádějící v tom, že obecně představuje zásuvky pokud to byly vždy síťové zásuvky, a konkrétně IP (AF_INET) zásuvky.

Odpovědět

Věřím, že jste se zeptali na síť. Služby TCP tedy používají sokety jako bod pro komunikaci a jsou tvořeny IP adresou, protokolem a číslem portu.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *