Vraag Wat is het verschil tussen Unix-socket en TCP / IP-socket?


Het is van dit antwoord:

https://stackoverflow.com/questions/2482411/is-this-pdo-bug-fixed-now/2482424#2482424


81
2018-03-20 09:13


oorsprong




antwoorden:


EEN UNIX-socket is een inter-proces communicatiemechanisme dat bidirectionele gegevensuitwisseling mogelijk maakt tussen processen die op dezelfde machine worden uitgevoerd.

IP-aansluitingen (met name TCP / IP-sockets) zijn een mechanisme dat communicatie tussen processen via het netwerk mogelijk maakt. In sommige gevallen kunt u TCP / IP-sockets gebruiken om met processen te praten die op dezelfde computer worden uitgevoerd (door de loopback-interface te gebruiken).

UNIX-domeincontactdozen weten dat ze op hetzelfde systeem worden uitgevoerd, zodat ze sommige controles en bewerkingen (zoals routering) kunnen vermijden; waardoor ze sneller en lichter zijn dan IP-sockets. Dus als u van plan bent om te communiceren met processen op dezelfde host, is dit een betere optie dan IP-sockets.

Bewerken: vanaf De opmerking van Nils Toedtmann: UNIX-domeincontacten zijn onderworpen aan bestandssysteemmachtigingen, terwijl TCP-sockets alleen op het niveau van pakketfilters kunnen worden beheerd.


145
2018-03-20 09:39



Misschien voegt u eraan toe dat UNIX-domeincontactdozen onder de machtigingen van het bestandssysteem vallen, terwijl TCP-sockets dat niet zijn. Als gevolg hiervan is het veel gemakkelijker om te bepalen welke gebruikers toegang hebben tot een UNIX-domeinaansluiting dan voor een TCP-socket. - Nils Toedtmann
@pQd, Kerel kan je het Unix IPC noemen in plaats van Unix Sockets? - Pacerier
@Pacerier Unix-sockets is eenvoudig één manier om Unix IPC te bereiken (gedeeld Interprocess-geheugen onder andere), dus het zou niet correct zijn om Unix-sockets unix IPC aan te roepen. - fyquah95
TCP-sockets worden ook door Unix afgehandeld? TCP-sockets maakt deel uit van de TCP-protocolspecificatie of kan een protocol IP-sockets gebruiken? - Federico
@Federico Ik heb een antwoord geplaatst dat probeert je vraag te beantwoorden, als je meer diepgang wilt, plaats dan een nieuwe vraag. - Peter Green


U kunt uw eigen lokale machine-unix-aansluitingen vermelden met de volgende opdracht:

netstat -a -p --unix

Veel plezier!


21
2018-03-20 13:49



Unix-sockets bestaan ​​niet op Windows. netstat werkt echter op Windows. - Mark Tomlin
@apache, vergelijkbaar in Windows genaamd "Named pipes". - expert
Benoemde pipes zijn ook aanwezig op Linux. - Sahil Singh
@expert, named pipes in Windows is gelijk aan named pipes in Unix. IPC-sockets in Unix hebben geen gelijkwaardigheid in Windows - Pacerier
Merk op dat een verschil is dat named pipes maar één client tegelijk kunnen hebben (2 processen die communiceren in totaal). UNIX-sockets, zoals IP-sockets, kunnen meerdere clients tegelijk hebben aangesloten, waarbij elk afzonderlijk afzonderlijke antwoorden krijgt. - peterflynn


Wat is het verschil tussen Unix-socket en TCP / IP-socket?

Een TCP / IP-socket wordt gebruikt voor communicatie tussen TCP / IP-netwerken. Een aangesloten TCP-socket wordt geïdentificeerd door de combinatie van lokaal IP, lokale poort, externe IP en externe poort. Een luisterende TCP-socket wordt geïdentificeerd door de lokale poort en mogelijk lokale IP. AIUI op zijn minst op Linux TCP / IP-sockets resulteren altijd in het genereren en decoderen van TCP / IP-pakketten, zelfs als de client en de server zich op dezelfde computer bevinden.

Een unix-domeinaansluiting (soms ingekort tot unix-socket) werkt daarentegen op een enkele machine. Luisterende sockets leven in de bestandssysteemhiërarchie en de toegang ertoe kan worden bestuurd door machtigingen van het bestandssysteem.

Bovendien kan een proces dat een verbinding op een Unix-socket accepteert, de gebruikers-ID bepalen van het proces dat verbinding maakt. Dit kan de noodzaak voor een authenticatiestap vermijden. In plaats van een wachtwoord voor uw databaseserver te genereren en een kopie ervan in de code van uw webapp op te nemen, kunt u de databaseserver gewoon vertellen dat de gebruiker die de webapp uitvoert toegang heeft tot het overeenkomstige gebruikersaccount in de database.


TCP-sockets worden ook door Unix afgehandeld?

Natuurlijk

TCP-sockets maken deel uit van de TCP-protocolspecificatie

Internetprotocolspecificaties hebben alleen de neiging om te maken wat er op de draad gebeurt, de TCP-specificatie bevat een definitie van Socket, maar die definitie is niet hetzelfde als hoe de term wordt gebruikt door de "sockets API".

De "sockets API" zoals wij die kennen, werd geïntroduceerd door BSD maar werd later overal gekopieerd en wordt opgenomen als onderdeel van de posix-standaard. Het basismateriaal voor TCP- en UDP-sockets is meestal hetzelfde op verschillende platforms, maar geavanceerdere dingen en dingen die communiceren met andere delen van het besturingssysteem variëren, bijvoorbeeld op unix-achtige systemen wordt een socket geïdentificeerd door een bestandsingang en kan worden gelezen / geschreven door de API's van het bestand, dit is niet het geval in Windows.

Sommige uitbreidingen van de socket-sockets zijn gedocumenteerd in rfcs, maar die RFC's zijn alleen "informatief".

of een protocol kan IP-sockets gebruiken?

Wanneer een toepassing expliciet een socket maakt met behulp van de "socket" -functie (sockets worden ook gemaakt door de accept-functie), geeft deze drie parameters door, "domein", "type" en "protocol". Samen kunnen deze drie parameters worden gebruikt om veel verschillende soorten aansluitingen te selecteren.

  • domein selecteert de familie van protocollen / adressen die wordt gebruikt, b.v. AF_INET voor ipv4, AF_INET6 voor ipv6, AF_Unix voor unix-bestandssysteempaden, enz.
  • type selecteert de communicatiesemantiek, de belangrijkste zijn datagram en stream maar er zijn ook andere, meer gespecialiseerde typen.
  • protocol selecteert het protocol dat moet worden gebruikt, als het op 0 is ingesteld, wordt een standaardprotocol voor de combinatie van domein en type gebruikt.

4
2017-09-13 17:32