Wat is het verschil tussen een poort en een socket?

Dit was een vraag gesteld door een van de software-ingenieurs in mijn organisatie. Ik ben geïnteresseerd in de breedste definitie.


1, Autoriteit 100%

Samenvatting

Een TCP-aansluiting is een eindpunt -instantie gedefinieerd door een IP-adres en een poort in de context van een bepaalde TCP-verbinding of de luisterstatus.

Een poort is een virtualisatie-ID definiëren van een Service-eindpunt (in plaats van een service exemplaar Endpoint AKA Session Identifier).

Een TCP-aansluiting is niet een verbinding , het is het eindpunt van een specifieke verbinding.

Er kunnen gelijktijdige verbindingen zijn met een Service Endpoint , omdat een verbinding wordt geïdentificeerd door zowel de lokale als op afstand eindpunten, waardoor verkeer naar een specifieke service-instantie kan worden geleid .

Er kan slechts één luisteraaraansluiting zijn voor een gegeven adres / poortcombinatie .

Expositie

Dit was een interessante vraag die me dwong om een ​​aantal dingen opnieuw te onderzoeken waarvan ik dacht dat ik van binnen wist. Je zou denken dat een naam als “socket” zelfverklarend zou zijn: het was duidelijk gekozen om beeldtoonstelling van het eindpunt op te roepen waarin je een netwerkkabel aansluit, er is een sterke functionele parallellen. Desalniettemin draagt ​​in het netwerk van het woord “Socket” zoveel bagage dat een zorgvuldig heronderzoek noodzakelijk is.

In de breedste mogelijke zin is een poort een punt van ingewikkeld of een uitgang. Hoewel niet wordt gebruikt in een netwerkcontext, betekent het Franse woord PORE letterlijk deur of gateway , nadrukkelijk het feit dat de havens vervoer eindpunten zijn of u gegevens of big stalen containers verzendt.

Voor het doel van deze discussie zal ik de overweging beperken tot de context van TCP-IP-netwerken. Het OSI-model is allemaal heel goed, maar is nooit volledig geïmplementeerd, laat staan op grote schaal toegepast in omstandigheden met veel verkeer en veel stress.

De combinatie van een IP-adres en een poort is strikt bekend als een eindpunt en wordt soms een socket genoemd. Dit gebruik is afkomstig van RFC793, de originele TCP-specificatie.

Een TCP verbindingwordt gedefinieerd door twee eindpunten, ook wel socketsgenoemd.

Een eindpunt (socket) wordt gedefinieerd door de combinatie van een netwerkadres en een poort-ID. Merk op dat adres/poort nieteen socket volledig identificeert (hierover later meer).

Het doel van poorten is om onderscheid te maken tussen meerdere eindpunten op een bepaald netwerkadres. Je zou kunnen zeggen dat een poort een gevirtualiseerd eindpunt is. Deze virtualisatie maakt meerdere gelijktijdige verbindingen op één netwerkinterface mogelijk.

Het is het socketpaar (de 4-tupel
bestaande uit het IP-adres van de klant,
client poortnummer, server IP-adres,
en serverpoortnummer) dat specificeert:
de twee eindpunten die uniek zijn
identificeert elke TCP-verbinding in een
internetten. (TCP-IP Illustrated Volume 1, W. Richard Stevens)

In de meeste van C afgeleide talen worden TCP-verbindingen tot stand gebracht en gemanipuleerd met behulp van methoden op een instantie van een Socket-klasse. Hoewel het gebruikelijk is om op een hoger abstractieniveau te werken, meestal een instantie van een NetworkStream-klasse, geeft dit over het algemeen een verwijzing naar een socket-object weer. Voor de codeur lijkt dit socket-object de verbinding te vertegenwoordigen, omdat de verbinding is gemaakt en gemanipuleerd met behulp van methoden van het socket-object.

In C #, om eerst een TCP-verbinding (naar een bestaande luisteraar) op te zetten, maakt u een TCPCLILE . Als u geen eindpunt op het TCPClient Constructor opgeven, maakt het gebruik van standaardinstellingen – op de een of andere manier het lokale eindpunt gedefinieerd. Dan roep je de aansluiten
methode op het geval dat u hebt gemaakt. Deze methode vereist een parameter die het andere eindpunt beschrijft.

Dit alles is een beetje verwarrend en leidt je om te geloven dat een socket een verbinding is, die bollocks is. Ik werkte onder deze misverstand totdat Richard Dorman de vraag vroeg.

Heeft u veel gelezen en denken, ik ben er nu van overtuigd dat het veel zinvolle betekenis zou maken om een ​​klasse TCPConnection te hebben met een constructor die twee argumenten heeft, Localendpoint en RASESTERENDPOINT . Je zou waarschijnlijk een enkel argument -bedienend kunnen ondersteunen wanneer de standaardinstellingen acceptabel zijn voor het lokale eindpunt. Dit is dubbelzinnig op multihomed computers, maar de dubbelzinnigheid kan worden opgelost met behulp van de routeringstabel door de interface te selecteren met de kortste route naar het externe eindpunt.

Duidelijkheid zou ook in andere opzichten worden verbeterd. Een socket is niet geïdentificeerd door de combinatie van IP-adres en poort:

[…] TCP demultiplexes inkomende segmenten met alle vier waarden die de lokale en buitenlandse adressen omvatten: bestemming IP-adres, bestemmingspoortnummer, bron-IP-adres en bronpoortnummer. TCP kan niet bepalen welk proces een inkomend segment krijgt door alleen naar de bestemmingspoort te kijken. Ook is de enige van de [verschillende] eindpunten bij [een bepaald poortnummer] dat inkomende verbindingsverzoeken ontvangt degene in de luisterstatus. (P255, TCP-IP geïllustreerd volume 1 , W. RICHARD STEVENS)

Zoals je kunt zien, is het niet alleen mogelijk, maar ook heel waarschijnlijk dat een netwerkservice meerdere sockets heeft met hetzelfde adres/dezelfde poort, maar slechts één listener-socket op een bepaalde adres/poort-combinatie. Typische bibliotheekimplementaties presenteren een socketklasse, waarvan een instantie wordt gebruikt om een verbinding te maken en te beheren. Dit is buitengewoon jammer, aangezien het verwarring veroorzaakt en heeft geleid tot een wijdverbreide samensmelting van de twee concepten.

Hagrawal gelooft me niet (zie opmerkingen) dus hier is een echt voorbeeld. Ik heb een webbrowser aangesloten op http://dilbert.comen heb vervolgens netstat -an -p tcp. De laatste zes regels van de uitvoer bevatten twee voorbeelden van het feit dat adres en poort niet voldoende zijn om een socket uniek te identificeren. Er zijn twee verschillende verbindingen tussen 192.168.1.3 (mijn werkstation) en 54.252.94.236:80 (de externe HTTP-server)

 TCP    192.168.1.3:63240      54.252.94.236:80       SYN_SENT
  TCP    192.168.1.3:63241      54.252.94.236:80       SYN_SENT
  TCP    192.168.1.3:63242      207.38.110.62:80       SYN_SENT
  TCP    192.168.1.3:63243      207.38.110.62:80       SYN_SENT
  TCP    192.168.1.3:64161      65.54.225.168:443      ESTABLISHED

Aangezien een socket het eindpunt van een verbinding is, zijn er twee sockets met de adres/poort-combinatie 207.38.110.62:80en nog twee met de adres/poort-combinatie 54.252.94.236:80.

Ik denk dat Hagrawal’s misverstand voortkomt uit mijn zeer zorgvuldige gebruik van het woord ‘identificeert’. Ik bedoel “volledig, ondubbelzinnig en uniek identificeert”. In het bovenstaande voorbeeld zijn er twee eindpunten met de adres/poort-combinatie 54.252.94.236:80. Als je alleen adres en poort hebt, heb je niet genoeg informatie om deze sockets uit elkaar te houden. Het is niet genoeg informatie om een socket te identificeren.

Aanvulling

Paragraaf twee van sectie 2.7 van RFC793 zegt

Een verbinding wordt volledig gespecificeerd door het paar sockets aan de uiteinden. EEN
lokale socket kan deelnemen aan veel verbindingen met verschillende buitenlandse
stopcontacten.

Deze definitie van socket is niet nuttig vanuit een programmeerperspectief omdat het niet hetzelfde is als een socket object, dat het eindpunt is van een bepaalde verbinding. Voor een programmeur, en het grootste deel van het publiek van deze vraag zijn programmeurs, is dit een essentieel functioneel verschil.

@plugwash maakt een opvallende opmerking.

Het fundamentele probleem is dat de TCP RFC-definitie van socket in strijd is met de definitie van socket die door alle belangrijke besturingssystemen en bibliotheken wordt gebruikt.

Per definitie is de RFC correct. Wanneer een bibliotheek terminologie misbruikt, vervangt dit de RFC niet. In plaats daarvan legt het een verantwoordelijkheid op de gebruikers van die bibliotheek om beide interpretaties te begrijpen en voorzichtig te zijn met woorden en context. Waar RFC’s het niet eens zijn, heeft de meest recente en meest direct toepasselijke RFC voorrang.

Referenties

  1. TCP-IP Illustrated Volume 1 The Protocols, W. Richard Stevens, 1994 Addison Wesley

  2. RFC793, Instituut voor Informatiewetenschappen, Universiteit van Zuid-Californië voor DARPA

  3. RFC147, de definitie van een stopcontact, Joel M. Winett, Lincoln Laboratorium


Antwoord 2, autoriteit 18%

Een socket bestaat uit drie dingen:

  1. Een IP-adres
  2. Een transportprotocol
  3. Een poortnummer

Een poort is een getal tussen 1 en 65535 dat een logische poort in een apparaat aangeeft.
Elke verbinding tussen een client en server vereist een unieke socket.

Bijvoorbeeld:

  • 1030 is een poort.
  • (10.1.1.2 , TCP , poort 1030) is een socket.

Antwoord 3, autoriteit 11%

Een socketstaat voor een enkele verbinding tussen twee netwerkapplicaties. Deze twee toepassingen draaien nominaal op verschillende computers, maar sockets kunnen ook worden gebruikt voor communicatie tussen processen op een enkele computer. Applicaties kunnen meerdere sockets creëren om met elkaar te communiceren. Sockets zijn bidirectioneel, wat betekent dat beide zijden van de verbinding zowel gegevens kunnen verzenden als ontvangen.
Daarom kan vanaf 2 theoretisch op elk niveau van het OSI-model een socket worden gemaakt. Programmeurs gebruiken vaak sockets bij netwerkprogrammering, zij het indirect. Programmeerbibliotheken zoals Winsock verbergen veel van de low-level details van socketprogrammering. Stopcontacten worden sinds het begin van de jaren tachtig op grote schaal gebruikt.

Een poortvertegenwoordigt een eindpunt of “kanaal” voor netwerkcommunicatie. Met poortnummers kunnen verschillende toepassingen op dezelfde computer netwerkbronnen gebruiken zonder elkaar te storen. Poortnummers komen het meest voor bij netwerkprogrammering, met name socketprogrammering. Soms worden poortnummers echter zichtbaar gemaakt voor de toevallige gebruiker. Sommige websites die iemand op internet bezoekt, gebruiken bijvoorbeeld een URL zoals de volgende:

http://www.mairie-metz.fr:8080/In dit voorbeeld , verwijst het nummer 8080 naar het poortnummer dat door de webbrowser wordt gebruikt om verbinding te maken met de webserver. Normaal gesproken gebruikt een website poortnummer 80 en dit nummer hoeft niet in de URL te worden opgenomen (hoewel dat wel kan).

In IP-netwerken kunnen poortnummers theoretisch variëren van 0 tot 65535. De meeste populaire netwerktoepassingen gebruiken echter poortnummers aan de lage kant van het bereik (zoals 80 voor HTTP).

Opmerking: de term poort verwijst ook naar verschillende andere aspecten van netwerktechnologie. Een poort kan verwijzen naar een fysiek aansluitpunt voor randapparatuur zoals seriële, parallelle en USB-poorten. De term poort verwijst ook naar bepaalde Ethernet-verbindingspunten, zoals die op een hub, switch of router.

ref http://compnetworking.about.com/od/basicnetworkingconcepts/l /bldef_port.htm

ref http://compnetworking.about.com/od/itinformationtechnology/l /bldef_socket.htm


Antwoord 4, autoriteit 9%

Met enige analogie

Hoewel hierboven al veel technische dingen zijn gegeven voor sockets
Ik zou graag mijn antwoord willen toevoegen, voor het geval, als iemand nog steeds het verschil tussen ip, poort en sockets niet kan voelen

Overweeg een server S,

en zeg dat persoon X,Y,Zeen service nodig heeft (zeg chatservice) van die server S

dan

IP-adres vertelt–> wie?is die chatserver ‘S’ waarmee X,Y,Z contact wil opnemen

oke, je hebt “wie is de server”

Maar stel dat de server ‘s’ ook een aantal andere diensten aan andere mensen biedt, zeg ‘S’ biedt opslagdiensten aan persoon A, B, C

Dan

poort vertelt — & GT; Welke? Service u (X, Y, Z) Need I.E. Chat Service en niet die opslagservice

Oké .., je maakt de server om te weten dat ‘chat service’ is wat je wilt en niet de opslag

maar

U bent drie en de -server wil misschien alle drie anders identificeren

Daar komt de socket

Nu Socket vertelt – & GT; welke? bepaalde verbinding

Dat wil zeggen, zeg,

Socket 1 voor persoon X

Socket 2 voor persoon Y

en socket 3 voor persoon z

Ik hoop dat het iemand helpt die nog steeds in de war was
🙂


Antwoord 5, autoriteit 4%

Een socket = IP-adres + een poort (numeriek adres)
Samen identificeren ze een eindpunt voor een netwerkverbinding op een machine. (Ben ik net gezakt voor netwerk 101?)


Antwoord 6, autoriteit 4%

Over het algemeen krijg je veel theoretische kennis, maar een van de gemakkelijkste manieren om onderscheid te maken tussen deze twee concepten is als volgt:

Om een service te krijgen, heb je een servicenummer nodig. Dit servicenummer wordt een poort genoemd. Zo simpel.

De HTTP as a service draait bijvoorbeeld op poort 80.

Nu kunnen veel mensen de service aanvragen en is er een verbinding van client-server tot stand gebracht. Er zullen veel verbindingen zijn. Elke verbinding vertegenwoordigt een klant. Om elke verbinding te onderhouden, maakt de server een socket per verbinding om zijn client te onderhouden.


Antwoord 7, autoriteit 3%

Er lijken veel antwoorden te zijn die socket gelijkstellen aan de verbinding tussen 2 pc’s..wat volgens mij absoluut onjuist is. Een socket is altijd het eindpuntop 1 pc geweest, die al dan niet verbonden is – we hebben vast allemaal wel eens listener- of UDP-sockets* gebruikt. Het belangrijkste is dat het adresseerbaar en actief is. Het verzenden van een bericht naar 1.1.1.1:1234 zal waarschijnlijk niet werken, omdat er geen socket is gedefinieerd voor dat eindpunt.

Sockets zijn protocolspecifiek – dus de implementatie van uniciteit die zowel TCP/ IPen UDP/IP gebruikt* (ipaddress:port), is anders dan bijvoorbeeld IPX(Netwerk, Node en…ahem, socket – maar een andere socket dan wordt bedoeld met de algemene term “socket”. IPX-socketnummers zijn gelijk aan IP-poorten). Maar ze bieden allemaal een uniek adresseerbaar eindpunt.

Sinds IP het dominante protocol is geworden, is een poort (in netwerktermen) synoniem geworden met een UDP- of TCP-poortnummer – wat een deel van het socketadres is.

  • UDP is verbindingsloos – wat betekent dat er nooit een virtueel circuit tussen de 2 eindpunten wordt gemaakt. We verwijzen echter nog steeds naar UDP-socketsals eindpunt. De API-functies maken duidelijk dat beide gewoon een ander type socket zijn – SOCK_DGRAMis UDP (alleen een bericht verzenden) en SOCK_STREAMis TCP (een virtueel circuit maken).

  • Technisch gezien bevat de IP-header het IP-adres en het protocol bovenop IP (UDP of TCP) het poortnummer. Dit maakt het mogelijk om andere protocollen te hebben (bijv. ICMPdie geen poortnummers hebben , maar hebben wel IP-adresgegevens).


Antwoord 8, autoriteit 3%

Kort kort antwoord.

Een poortkan worden omschreven als een intern adresbinnen een host die een programma of proces identificeert.

Een socketkan worden omschreven als een programmeerinterfacewaarmee een programma kan communiceren met andere programma’s of processen, op internet of lokaal.


Antwoord 9, autoriteit 3%

Dit zijn basisconcepten voor netwerken, dus ik zal ze op een eenvoudige maar uitgebreide manier uitleggen die tot in detail te begrijpen is.

  • Een stopcontactis als een telefoon (d.w.z. een end-to-end apparaat voor communicatie)
  • IPis als uw telefoonnummer (d.w.z. adres voor uw stopcontact)
  • Poortis als de persoon met wie je wilt praten (d.w.z. de service die je vanaf dat adres wilt bestellen)
  • Een socket kan een client- of een server-socket zijn (d.w.z. in een bedrijf is de telefoon van de klantenondersteuning een server, maar een telefoon in uw huis is meestal een client)

Dus een socket in een netwerk is een virtueel communicatieapparaat dat is gebonden aan een paar (ip , port) = (address , service).

Opmerking:

  • Een machine, een computer, een host, een mobiel of een pc kan meerdere adressen, meerdere open poorten en dus meerdere sockets hebben. Net als op kantoor kun je meerdere telefoons hebben met meerdere telefoonnummers en meerdere mensen om mee te praten.
  • Het bestaan van een open/actieve poort vereist dat er een socket aan is gebonden, omdat het de socket is die de poort toegankelijk maakt. Het is echter mogelijk dat u voorlopig ongebruikte poorten heeft.
  • Noteer ook, in een servercontactdoos u kunt binden aan (een poort, een specifiek adres van een machine) of naar (een poort, alle adressen van een machine) zoals in de telefoon kunt u veel telefoonlijnen aansluiten (telefoon nummers) naar een telefoon of een specifieke telefoonlijn naar een telefoon en toch kunt u een persoon bereiken via al deze telefoonlijnen of via een specifieke telefoonlijn.
  • U kunt (bind) een socket niet associëren met twee poorten zoals in de telefoon, meestal kunt u niet altijd twee mensen tegelijk gebruiken met dezelfde telefoon.
  • Geavanceerd: op dezelfde machine heeft u geen twee aansluitingen met hetzelfde type (client of server) en dezelfde poort en IP. Als u echter een klant bent, kunt u twee aansluitingen openen, met twee aansluitingen, naar een server, omdat de lokale poort in elk van de sockets van deze klant anders is)

Ik hoop dat het wist dat je twijfelt


10, Autoriteit 2%

Zij zijn termen van twee verschillende domeinen: ‘Port’ is een concept van TCP / IP-netwerken, ‘Socket’ is een API (programmering) ding. Een ‘socket’ wordt (in code) gemaakt door een poort en een hostnaam of netwerkadapter te nemen en deze te combineren in een gegevensstructuur die u kunt gebruiken om gegevens te verzenden of ontvangen.


11, Autoriteit 2%

Na het lezen van de uitstekende antwoorden, ontdekte ik dat het volgende punt de nadruk legt voor mij, een nieuwkomer tot netwerkprogrammering:

TCP-IP-verbindingen zijn bi-directionele routes die één adres verbinden: poortcombinatie met een ander adres: poortcombinatie. Daarom, wanneer u een verbinding van uw lokale machine opent naar een poort op een externe server (zeg www.google.com:80), associeert u ook een nieuw poortnummer op uw machine met de verbinding, zodat de server wordt verzonden dingen terug naar jou, (bijv. 127.0.0.1:65234). Het kan nuttig zijn om NETSTAT te gebruiken om naar de verbindingen van uw machine te kijken:

> netstat -nWp tcp (on OS X)
Active Internet connections
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0      0  192.168.0.6.49871      17.172.232.57.5223     ESTABLISHED
...

12

Een aansluiting is een speciaal type bestandshandvat dat door een proces wordt gebruikt om netwerkdiensten uit het besturingssysteem te vragen.
Een socket-adres is de triple:
{Protocol, lokaal adres, lokaal proces} waar het lokale proces wordt geïdentificeerd door een poortnummer.

In de TCP / IP-suite, bijvoorbeeld:

{TCP, 193.44.234.3, 12345}

Een gesprek is de communicatieverbinding tussen twee processen, waardoor een associatie tussen twee is.
Een associatie is de 5-tuple die volledig de twee processen specificeert die een verbinding omvatten:
{Protocol, lokaal adres, lokaal proces, buitenlands adres, buitenlands proces}

In de TCP / IP-suite, bijvoorbeeld:

{TCP, 193.44.234.3, 1500, 193.44.234.5, 21}

kan een geldige associatie zijn.

Een halve associatie is ofwel:
{protocol, lokaal adres, lokaal-proces}

of

{protocol, buitenlands adres, buitenlands proces}

die elke helft van een verbinding specificeren.

De halve associatie wordt ook een socket of een transportadres genoemd. Dat wil zeggen, een socket is een eindpunt voor communicatie die in een netwerk kan worden genoemd en aangepakt.
De Socket-interface is een van de verschillende applicatie-programmeerinterfaces (API’s) aan de communicatieprotocollen. Ontworpen om een ​​generieke communicatie-programmeerinterface te zijn, werd eerst geïntroduceerd door het 4.2BDD UNIX-systeem. Hoewel het niet is gestandaardiseerd, is het een de facto-industriestandaard geworden.


13

Een socketadres is een IP-adres & amp; poortnummer

123.132.213.231         # IP address
               :1234    # port number
123.132.213.231:1234    # socket address

Een verbinding treedt op wanneer 2 sockets samengebonden zijn.


14

Een socket is een communicatie-eindpunt. Een socket is niet direct gerelateerd aan de TCP / IP-protocolfamilie, het kan met elk protocol worden gebruikt dat uw systeem ondersteunt. De C-socket API verwacht dat u eerst een blanco socketobject krijgt van het systeem dat u vervolgens kunt binden aan een lokaal aansluitingsadres (om inkomende verkeer voor verbindingloze protocollen rechtstreeks op te halen of om inkomende verbindingsverzoeken voor aansluitgerichte protocollen te accepteren) of dat u verbinding kunt maken met een remote socketadres (voor beide soorten protocol). Je kunt zelfs beiden doen als je beide wilt bedienen, het lokale socketadres dat een socket is gebonden aan en het remote socket-adres is aangesloten op. Voor verbindingsloze protocollen is het verbinden van een socket zelfs optioneel, maar als u dat niet doet, moet u ook het bestemmingsadres doorgeven bij elk pakket dat u over het stopcontact wilt verzenden, want hoe anders zou de socket weten waar u wilt verzenden deze gegevens naar? Voordeel is dat u een enkele aansluiting kunt gebruiken om pakketten naar verschillende socketadressen te verzenden. Zodra u uw contactdoos hebt geconfigureerd en misschien zelfs verbonden, moet u rekening houden met een bidirectionele communicatiebuis. U kunt het gebruiken om gegevens naar een bepaalde bestemming te geven en sommige bestemming kan het gebruiken om gegevens terug te geven aan u. Wat u naar een socket schrijft, wordt verzonden en wat is ontvangen is beschikbaar voor het lezen.

Poorten daarentegen zijn iets dat alleen bepaalde protocollen van de TCP / IP-protocolstapel hebben. TCP- en UDP-pakketten hebben havens. Een poort is slechts een eenvoudig getal. De combinatie van bronpoort en bestemmingspoort identificeert een communicatiekanaal tussen twee hosts. B.v. Mogelijk hebt u een server die beide is, een eenvoudige HTTP-server en een eenvoudige FTP-server. Als nu een pakket arriveert voor het adres van die server, hoe zou het dan weten of dat een pakket is voor de HTTP of de FTP-server? Nou, het zal weten dat de HTTP-server op poort 80 en de FTP-server op poort 21 draait, dus als het pakket arriveert met een bestemmingspoort 80, is het voor de HTTP-server en niet voor de FTP-server. Ook heeft het pakket een bronpoort omdat zonder een dergelijke bronpoort een server slechts één verbinding kan hebben met één IP-adres per keer. De bronpoort maakt het mogelijk voor een server om anders identieke verbindingen te onderscheiden: ze hebben allemaal dezelfde bestemmingspoort, b.v. Poort 80, hetzelfde bestemming IP (het IP van de server) en dezelfde bron-IP, omdat ze allemaal uit dezelfde klant komen, maar omdat ze verschillende bronpoorten hebben, kan de server ze van elkaar onderscheiden. En wanneer de server antwoordt, zal dit doen op de haven waarvan het verzoek kwam, op die manier kan de klant ook verschillende antwoorden onderscheiden die het van dezelfde server ontvangt.


15

De poort was het eenvoudigste gedeelte, het is slechts een unieke identifier voor een socket. Een socket is iets dat processen kunnen gebruiken om verbindingen vast te stellen en om met elkaar te communiceren. Tall Jeff had een geweldige telefoonanalogie die niet perfect was, dus besloot ik het op te lossen:

  • IP en poort ~ telefoonnummer
  • Socket ~ Telefoonapparaat
  • verbinding ~ telefoongesprek
  • Breng aansluiting op ~ Oproep een nummer
  • processen, externe applicaties ~ Mensen
  • berichten ~ speech

Antwoord 16

Een applicatie bestaat uit een paar processen die communiceren via het netwerk (client-server-paar). Deze processen verzenden en ontvangen berichten van en naar het netwerk via een software-interface genaamd socket. Gezien de analogie die wordt gepresenteerd in het boek “Computer Networking: Top Down Approach”. Er is een huis dat wil communiceren met een ander huis. Hier is huis analoog aan een proces en een deur naar een stopcontact. Het verzendproces gaat ervan uit dat er aan de andere kant van de deur een infrastructuur is die de gegevens naar de bestemming zal transporteren. Zodra het bericht aan de andere kant is aangekomen, gaat het door de deur van de ontvanger (contactdoos) het huis binnen (proces). Deze illustratie uit hetzelfde boek kan je helpen:


Sockets maken deel uit van de transportlaag, die zorgt voor logische communicatie naar applicaties. Dit betekent dat vanuit het oogpunt van de applicatie beide hosts direct met elkaar verbonden zijn, ook al zijn er talloze routers en/of switches tussen. Een socket is dus zelf geen verbinding, maar het eindpunt van de verbinding. Transportlaagprotocollen worden alleen geïmplementeerd op hosts en niet op tussenliggende routers.
Ports Geef middelen voor interne adressering aan een machine. Het primaire doel om meerdere processen toe te staan ​​om gegevens over het netwerk te verzenden en te ontvangen zonder te interfereren met andere processen (hun gegevens). Alle aansluitingen zijn voorzien van een poortnummer. Wanneer een segment aankomt op een host, onderzoekt de transportlaag het bestemmingspoortnummer van het segment. Vervolgens doorstuurt het segment naar de overeenkomstige aansluiting. Deze taak van het leveren van de gegevens in een transportlaagsegment naar de juiste aansluiting wordt de-multiplexing genoemd. De gegevens van het segment worden vervolgens doorgestuurd naar het proces dat aan de aansluiting is bevestigd.


17

van Oracle Java tutorial :

Een socket is één eindpunt van een tweerichtingscommunicatiekoppeling tussen twee programma’s die op het netwerk draaien. Een socket is gebonden aan een poortnummer, zodat de TCP-laag de toepassing kan identificeren waarin gegevens zijn bestemd om naar te sturen.


18

Een socket is een structuur in uw software. Het is meer of minder een bestand; het heeft operaties zoals lezen en schrijven. Het is geen fysiek ding; Het is een manier voor uw software om te verwijzen naar fysieke dingen.

Een poort is een apparaatachtig ding. Elke host heeft een of meer netwerken (die zijn fysiek); Een host heeft een adres op elk netwerk. Elk adres kan duizenden poorten hebben.

Eén aansluiting kan alleen een poort op een adres gebruiken. De aansluiting wijst de poort ongeveer toe als het toewijzen van een apparaat voor bestandssysteem I / O. Zodra de poort is toegewezen, kan er geen andere aansluiting verbinding maken met die poort. De poort wordt bevrijd wanneer de socket gesloten is.

Bekijk TCP / IP-terminologie .


19

Poort en socket kunnen worden vergeleken met de bankfiliaal.

Het bouwnummer van de “Bank” is analoog aan het IP-adres.
Een bank heeft verschillende secties zoals:

  1. Besparingsrekeningafdeling
  2. Persoonlijke leningafdeling
  3. Home Lening Afdeling
  4. Grievance afdeling

SO 1 (afdeling Spaarrekening), 2 (Persoonlijke leningafdeling), 3 (afdeling thuislening) en 4 (Grievance-afdeling) zijn havens.

Laat ons nu zeggen dat je gaat om een ​​spaarrekening te openen, je gaat naar het bank (IP-adres), dan ga je naar “Savings Account-afdeling” (poort nummer 1), dan ontmoet je een van de werknemers die onder ” Besparingsaccountafdeling “. Laat ons hem noemen SESPAREACCOUNT_EMPLYEEE1 voor het openen van de rekening.

Savingaccount_employee1 is uw socket-descriptor, dus er kan zijn
SPARINGACCOUNT_EMPLOEEEE1 tot SAFANCEACCOUNT_EMLOWEEN. Dit zijn alle socket-descriptors.

Evenzo zullen andere afdelingen inzet hebben die onder hen werken en ze zijn analoog aan aansluiting.


20

Poort:

Een poort kan verwijzen naar een fysiek verbindingspunt
Voor perifere apparaten zoals seriële, parallelle en USB-poorten.
De term poort verwijst ook naar bepaalde Ethernet-verbindingspunten, S
uch als die op een naaf, schakelaar of router.

Socket:

Een socket vertegenwoordigt een enkele verbinding tussen twee netwerktoepassingen.
Deze twee applicaties rennen nominaal op verschillende computers,
Maar aansluitingen kunnen ook worden gebruikt voor het interprocesseren van communicatie op een enkele computer.
Toepassingen kunnen meerdere sockets maken voor het communiceren met elkaar.
Sockets zijn bidirectioneel, wat betekent dat beide zijden van de verbinding zowel gegevens kunnen verzenden als ontvangen.


Antwoord 21

Relatieve TCP/IP-terminologie waarvan ik aanneem dat deze wordt geïmpliceerd door de vraag. In lekentaal:

Een HAVEN is als het telefoonnummer van een bepaald huis in een bepaalde postcode. De postcode van de stad kan worden gezien als het IP-adres van de stad en alle huizen in die stad.

Een SOCKET daarentegen lijkt meer op een vaststaand telefoongesprek tussen telefoons van een paar huizen die met elkaar praten. Die gesprekken kunnen tot stand worden gebracht tussen huizen in dezelfde stad of twee huizen in verschillende steden. Het is dat tijdelijk vastgestelde pad tussen de twee telefoons die met elkaar praten en dat is de SOCKET.


Antwoord 22

In brede zin,
Stopcontact – is precies dat, een stopcontact, net als uw stopcontact voor elektriciteit, kabel of telefoon. Een punt waar “vereiste spullen” (stroom, signaal, informatie) kunnen uitgaan en binnenkomen. Het verbergt veel gedetailleerde dingen, die niet nodig zijn voor het gebruik van de “vereiste dingen”. In softwaretaal biedt het een generieke manier om een communicatiemechanisme tussen twee entiteiten te definiëren (die entiteiten kunnen van alles zijn – twee applicaties, twee fysiek gescheiden apparaten, gebruikers- en kernelruimte binnen een besturingssysteem, enz.)

Een poort is een eindpuntdiscriminator. Het onderscheidt het ene eindpunt van het andere. Op netwerkniveau onderscheidt het de ene applicatie van de andere, zodat de netwerkstack informatie kan doorgeven aan de juiste applicatie.


23

Een socket is eigenlijk een eindpunt voor netwerkcommunicatie, bestaande uit ten minste een IP-adres en een poort. In Java / C # is een socket een implementatie op een hoger niveau van een zijde van een tweerichtingsverbinding.

Ook een definitie in de java-documentatie .


24

Een poort geeft een communicatie-eindpunt aan in de TCP- en UDP-transporten voor het IP-netwerkprotocol. Een aansluiting is een softwareabstractie voor een communicatie-eindpunt dat vaak wordt gebruikt in implementaties van deze protocollen (SOCKET-API). Een alternatieve implementatie is de XTI / TLI API.

Zie ook:

Stevens, W. R. 1998, Unix Network Programmering: Netwerken API’s: Sockets en XTI; Volume 1, Prentice Hall.
Stevens, W. R., 1994, TCP / IP geïllustreerd, Volume 1: De protocollen, Addison-Wesley.


25

Reeds theoretische antwoorden zijn aan deze vraag gegeven. Ik wil graag een praktisch voorbeeld geven aan deze vraag, die uw begrip over de aansluiting en de poort zal wissen.

Ik heb het hier gevonden

Dit voorbeeld leidt u door het proces om verbinding te maken met een website, zoals Wiley. U opent uw webbrowser (zoals Mozilla Firefox) en typt www.wiley.com in de adresbalk. Uw webbrowser gebruikt een DNS-server (Domain Name System) om de naam www.wiley.com op te zoeken om het IP-adres te identificeren. Voor dit voorbeeld is het adres 192.0.2.100.

Firefox maakt verbinding met het 192.0.2.100-adres en met de poort
waar de webserver van de applicatielaag actief is. Firefox weet
welke poort u kunt verwachten omdat het een bekende poort is. De wel bekende
poort voor een webserver is TCP-poort 80.

De bestemmingssocket waarmee Firefox verbinding probeert te maken, wordt geschreven als
socket:port, of in dit voorbeeld 192.0.2.100:80. Dit is de server
kant van de verbinding, maar de server moet weten waarheen de
webpagina die u wilt bekijken in Mozilla Firefox, dus u heeft een socket voor
ook de client-kant van de verbinding.

De verbinding aan de clientzijde bestaat uit uw IP-adres, zoals:
192.168.1.25 en een willekeurig gekozen dynamisch poortnummer. De socket die aan Firefox is gekoppeld, ziet eruit als 192.168.1.25:49175. omdat internet
servers werken op TCP-poort 80, beide sockets zijn TCP-sockets,
terwijl als u verbinding zou maken met een server die op een UDP-poort werkt,
zowel de server- als de client-sockets zouden UDP-sockets zijn.


Antwoord 26

Een enkele poort kan een of meer stopcontacten hebben die zijn verbonden met verschillende externe IP’s, zoals een meervoudig stopcontact.

 TCP    192.168.100.2:9001     155.94.246.179:39255   ESTABLISHED     1312
  TCP    192.168.100.2:9001     171.25.193.9:61832     ESTABLISHED     1312
  TCP    192.168.100.2:9001     178.62.199.226:37912   ESTABLISHED     1312
  TCP    192.168.100.2:9001     188.193.64.150:40900   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.23.194.149:43970   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.49.73.11:38842     ESTABLISHED     1312

27

Socket is SW-abstractie van netwerken endpoint, gebruikt als de interface naar de toepassing. In Java, C # is het vertegenwoordigd door object, in Linux, Unix is ​​het een bestand.

poort is slechts een eigenschap van een socket die u hebt opgegeven als u een communicatie wilt vaststellen. Om pakket uit een socket te ontvingen, moet u deze binden aan specifieke lokale poort en NIC (met lokaal IP-adres) of alle NIC’s (Inaddr_any wordt gespecificeerd in de BIND-oproep). Om pakket te verzenden, moet u POP en IP van de externe socket opgeven.


28

Socket is een abstractie geleverd door kernel aan gebruikersaanvragen voor gegevens I / O. Een socket-type wordt gedefinieerd door het protocol dat het gebruik is, een IPC-communicatie enz. Dus als iemand een TCP-aansluiting creëert, kan hij manipulaties doen zoals het lezen van gegevens aan socket en het schrijven van gegevens door eenvoudige methoden en het protocol met een lagere level en het protocol met een lagere level. Doorste pakketten naar lagere netwerkprotocollen wordt gedaan door de specifieke implementatie van de socket in de kernel. Het voordeel is dat de gebruiker geen zorgen hoeft te maken over het afhandelen van protocolspecifieke nitenten en moet gewoon gegevens lezen en schrijven naar aansluiting als een normale buffer. Hetzelfde geldt voor het geval van IPC, de gebruiker leest en schrijft alleen gegevens aan aansluiting en de kernel behandelt alle details met lagere niveaus op basis van het type van het type socket dat is gemaakt.

Poort samen met IP is als het leveren van een adres aan de socket, hoewel het niet nodig is, maar het helpt bij netwerkcommunicatie.

Other episodes