it-swarm-eu.dev

Co je soket?

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

Proč se také říká soket? Je to čistě proto, že to bylo jméno, které vymysleli? Nebo to bylo křestní jméno, se kterým přišli?

57
chrisjlee

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

Beejovi průvodci Programování v síti a Komunikace mezi procesy mají dobré informace o tom, jak používat sokety, a dokonce odpověď na tuto přesnou otázk .

48
Shawn J. Goff

Zjednodušeně řečeno, soket je pseudosoubor, který představuje síťové připojení. Jakmile je soket vytvořen (pomocí správných primitiv a odpovídajících parametrů k identifikaci dalšího hostitele), zápisy do soketu jsou převedeny na síťové pakety, které jsou vysílány, a data přijatá ze sítě mohou být čtena ze soketu.

V jednom ohledu jsou sokety velmi podobné potrubí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 (lokálním v případě potrubí a případně vzdáleným v případě soketů). Nabízejí také, jak jste zmínil, obousměrnou komunikaci (podobně jako pár správně připojených kanálů).

Konečně 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 celou cestou k síťovému hardwaru (pokud existuje!), výpočetním kontrolním součtu atd., stačí se vrátit ke stejnému hostiteli: odtud přicházejí zásuvky Unixových domén. Jsou to jako běžné zásuvky, kromě spojují procesy na stejném hostiteli místo vzdálených procesů a nepokoušejí se použít žádné síťové prostředky. Tímto způsobem jsou prostředkem meziprocesové 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 potrubí bylo poté z důvodů výkonu vráceno k implementaci bez soketu: to jistě zdůrazňuje skutečnost, že potrubí sdílejí podobnosti.

74
dhag

Co je to?

Zásuvka nebo „zásuvka“ může být několik věcí:

Nejprve to je myšlenkový 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ě něco znamená výměnu dat s jiným programem.

API soketů široce abstrahuje podrobnosti o „komunikaci“ obecně. Zapouzdřuje, s kým mluvíte a jak, to vše prostřednictvím jednoho (téměř) konzistentního a identického formuláře pro řezání souborů cookie.
Můžete vytvářet sokety v různých "doménách" (např. "Unixový soket" nebo "internetový soket") a různých typů komunikace (např. "Datagramový" soket nebo "streamový" soket) a hovořit s různými příjemci a všechno funguje naprosto stejně (dobře, 99%, zjevně existují drobné rozdíly, za které budete muset odpovídat).

Nemusíte vědět (a nechcete ani 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 IPv4 nebo IPv6 síť, 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 zvláštní druh souboru (vše v Unixu je soubor).

Jak to ve srovnání s ...

zásuvky spadají do stejné kategorie jako trubky a jmenovky

Potrubí je prostředkem jednosměrné komunikace mezi čtečkou a zapisovačem (oba jsou programy) na stejném počítači. Simuluje stream dat (stejně jako např. TCP).
To znamená, že z pohledu potrubí neexistují žádné jednotlivé „zprávy“ nebo „bloky dat“. Můžete zkopírovat libovolné množství dat na „jeden konec“ a někdo jiný může číst libovolné množství dat (ne nutně stejné a nutně najednou) na „druhém konci“ ve stejném pořadí bajtů, jako jste vy vtlačil to dovnitř.

A pojmenováno roura je prostě roura která vlastní jméno v souborovém systému. To znamená, že je to něco, co vypadá a chová se stejně jako soubor, objeví se v seznamu adresářů a můžete jej otevřít, zapsat do něj atd. Poznámka: Můžete také vytvořit speciální soubory soketu (to by byl pojmenovaný soket) .

Soket je naproti tomu prostředkem obousměrné ("duplexní") komunikace, což znamená, že do něj můžete zapisovat a číst soketu a pro obousměrnou komunikaci nepotřebujete dvě oddělené zásuvky.
Soket může také fungovat jako tok (identický s kanálem) nebo může odesílat diskrétní nespolehlivé zprávy nebo může odesílat diskrétní objednané zprávy (první dvě práce na jakékoli doméně, poslední pouze na „unixové doméně“). Může odesílat zprávy (nebo simulovat proud) někomu na zcela jiném počítači. Soket může za určitých podmínek dokonce vytvořit formu komunikace typu jeden k mnoha (vícesměrové vysílání).

S ohledem na to je jasné, že sokety dělají něco mnohem složitějšího a obecně mají více režijních nákladů než trubky (které v zásadě nejsou víc než jednoduché memcpy do az od buffer!), ale pokud vytvoříte místní sokety (tj. na stejném počítači), operační systém obvykle použije silně optimalizovanou rychlou cestu, takže ve skutečnosti není příliš rozdíl.

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

Ano, zásuvky jsou jedním z možných způsobů meziprocesové komunikace (sdílená paměť a potrubí jsou příklady alternativ). Současně se používají pro „vytváření sítí“, jak je vysvětleno výše.

8
Damon

Zásuvka abstrakce. Poskytuje rozhraní pro aplikace, které využívají 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 soket bude vaší poštovní schránkou. Ke svému domu (programu) připojíte poštovní schránku (soket) a do ní vložíte odchozí poštu (data). V naplánovaném čase přijde mailman (operační systém), vyzvedne vaši odchozí poštu a odloží veškerou příchozí poštu ve stejné schránce. Vaše odchozí pošta je doručena vaším jménem příjemci prostřednictvím nákladního automobilu pošta (síťové připojení) spolu s poštou všech sousedů. To vám umožní komunikovat s lidmi daleko bez nutnosti nákladu, času, obtíží atd. Doručení dopisu sami.

Pokud jde o důvod, proč se jim říká „zásuvky“, hraje v nich pravděpodobně velká představa, že vynálezci to nazývají, co chtějí. Přesto to podle mého názoru není špatné jméno :)

7
Andrew Lambert

Pro udp nebo tcp přes IP

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

IP adresa je adresa stroje 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 počítačů poskytne http (webové stránky) na portu 80 a ssh na portu 22 atd.

Tak unix.stackexchange.com:80 přístav 80 z unix.stackexchange.com (soket) je přístupový bod tohoto webu.

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

2
ctrl-alt-delor

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

0
Dragos Alexe