Pregunta

Esta fue una pregunta planteada por uno de los ingenieros de software en mi organización. Me interesa la definición más amplia.

No hay solución correcta

Otros consejos

Resumen

Un socket TCP es un punto final instancia definido por una dirección IP y un puerto en el contexto de una conexión TCP particular o del estado de escucha.

Un puerto es un identificador de virtualización que define un punto final de servicio (a diferencia de un punto instancia punto final conocido como identificador de sesión).

Un socket TCP es no una conexión , es el punto final de una conexión específica.

Puede haber conexiones simultáneas a un punto final del servicio , ya que una conexión se identifica mediante los puntos finales tanto locales como remotos , lo que permite que el tráfico se enrute a una instancia de servicio específica .

Solo puede haber un socket de escucha para una combinación de dirección / puerto dada .

Exposición

Esta fue una pregunta interesante que me obligó a reexaminar una serie de cosas que creía conocer al revés. Pensarías que un nombre como " socket " se explicaría por sí mismo: obviamente se eligió para evocar imágenes del punto final en el que se conecta un cable de red, existiendo fuertes paralelos funcionales. Sin embargo, en el lenguaje de la red, la palabra " socket " lleva tanto equipaje que es necesario un reexamen cuidadoso.

En el sentido más amplio posible, un puerto es un punto de ingreso o egreso. Aunque no se usa en un contexto de red, la palabra francesa porte significa literalmente puerta o pasarela , lo que enfatiza aún más el hecho de que los puertos son puntos finales de transporte, ya sea que envíe datos o grandes contenedores de acero.

Para el propósito de esta discusión, limitaré la consideración al contexto de las redes TCP-IP. El modelo OSI está muy bien, pero nunca se ha implementado completamente, y mucho menos se ha implementado ampliamente en condiciones de alto estrés y alto tráfico.

La combinación de una dirección IP y un puerto se conoce estrictamente como punto final y, a veces, se denomina socket. Este uso se origina con RFC793, la especificación TCP original.

Una conexión TCP se define por dos puntos finales, también conocidos como sockets .

Un punto final (socket) se define por la combinación de una dirección de red y un puerto identificador. Tenga en cuenta que la dirección / puerto no identifica completamente un socket (más sobre esto más adelante).

El propósito de los puertos es diferenciar múltiples puntos finales en una dirección de red determinada. Se podría decir que un puerto es un punto final virtualizado. Esta virtualización hace posible múltiples conexiones simultáneas en una única interfaz de red.

  

Es el par de zócalos (la tupla 4   que consiste en la dirección IP del cliente,   número de puerto del cliente, dirección IP del servidor,   y el número de puerto del servidor) que especifica   los dos puntos finales que únicamente   identifica cada conexión TCP en una   Internet. ( TCP-IP Illustrated Volume 1 , W. Richard Stevens)

En la mayoría de los lenguajes derivados de C, las conexiones TCP se establecen y manipulan utilizando métodos en una instancia de una clase Socket. Aunque es común operar en un nivel más alto de abstracción, generalmente una instancia de una clase NetworkStream, esto generalmente expone una referencia a un objeto de socket. Para el codificador, este objeto de socket parece representar la conexión porque la conexión se crea y manipula utilizando métodos del objeto de socket.

En C #, para establecer una conexión TCP (a un oyente existente) primero crea un TcpClient . Si no especifica un punto final para el constructor TcpClient , utiliza los valores predeterminados: de una forma u otra, se define el punto final local. Luego invocas el Conectar Método en la instancia que has creado. Este método requiere un parámetro que describa el otro punto final.

Todo esto es un poco confuso y te lleva a creer que un socket es una conexión, que es un bollock. Estaba trabajando bajo este error hasta que Richard Dorman hizo la pregunta.

Habiendo leído y pensado mucho, ahora estoy convencido de que tendría mucho más sentido tener una clase TcpConnection con un constructor que toma dos argumentos, LocalEndpoint y RemoteEndpoint . Probablemente podría admitir un solo argumento RemoteEndpoint cuando los valores predeterminados sean aceptables para el punto final local. Esto es ambiguo en las computadoras multitarjeta, pero la ambigüedad se puede resolver utilizando la tabla de enrutamiento seleccionando la interfaz con la ruta más corta hacia el punto final remoto.

La claridad se mejoraría también en otros aspectos. Un socket es no identificado por la combinación de dirección IP y puerto:

  

[...] TCP demultiplexa los segmentos entrantes utilizando los cuatro valores que comprenden las direcciones local y extranjera: dirección IP de destino, número de puerto de destino, dirección IP de origen y número de puerto de origen. TCP no puede determinar qué proceso obtiene un segmento entrante mirando solo el puerto de destino. Además, el único de los [diversos] puntos finales en [un número de puerto determinado] que recibirá solicitudes de conexión entrantes es el que está en el estado de escucha. (p255, TCP-IP Illustrated Volume 1 , W. Richard Stevens)

Como puede ver, no solo es posible sino que es muy probable que un servicio de red tenga numerosos sockets con la misma dirección / puerto, pero solo un socket de escucha en una combinación particular de dirección / puerto. Las implementaciones de bibliotecas típicas presentan una clase de socket, una instancia de la cual se utiliza para crear y administrar una conexión. Esto es extremadamente desafortunado, ya que causa confusión y ha conducido a una confusión generalizada de los dos conceptos.

Hagrawal no me cree (ver comentarios), así que aquí hay una muestra real. Conecté un navegador web a http://dilbert.com y luego ejecuté netstat -an -p tcp . Las últimas seis líneas de la salida contienen dos ejemplos del hecho de que la dirección y el puerto no son suficientes para identificar de manera única un socket. Hay dos conexiones distintas entre 192.168.1.3 (mi estación de trabajo) y 54.252.94.236:80 (el servidor HTTP remoto)

  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

Dado que un socket es el punto final de una conexión, hay dos sockets con la combinación de dirección / puerto 207.38.110.62:80 y dos más con la combinación de dirección / puerto 54.252.94.236 : 80 .

Creo que el malentendido de Hagrawal surge de mi uso muy cuidadoso de la palabra "identifica". Me refiero a que se identifica de forma completa, inequívoca y única. En el ejemplo anterior hay dos puntos finales con la combinación de dirección / puerto 54.252.94.236:80 . Si todo lo que tiene es la dirección y el puerto, no tiene suficiente información para diferenciar estos enchufes. No es suficiente información para identificar un socket.

Addendum

El párrafo dos de la sección 2.7 de RFC793 dice

  

Una conexión está completamente especificada por el par de sockets en los extremos. UNA   socket local puede participar en muchas conexiones a diferentes extranjeros   enchufes

Esta definición de socket no es útil desde una perspectiva de programación porque no es lo mismo que un objeto de socket, que es el punto final de una conexión en particular. Para un programador, y la mayoría de la audiencia de esta pregunta son programadores, esta es una diferencia funcional vital.

Referencias

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

  2. RFC793 , Information Sciences Institute, Universidad de El sur de California para DARPA

  3. RFC147 , La definición de un zócalo, Joel M. Winett, Laboratorio Lincoln

Un socket consta de tres cosas:

  1. Una dirección IP
  2. Un protocolo de transporte
  3. Un número de puerto

Un puerto es un número entre 1 y 65535 inclusive que significa una puerta lógica en un dispositivo. Cada conexión entre un cliente y un servidor requiere un socket único.

Por ejemplo:

  • 1030 es un puerto.
  • (10.1.1.2, TCP, puerto 1030) es un socket.

Un socket representa una conexión única entre dos aplicaciones de red. Estas dos aplicaciones se ejecutan nominalmente en diferentes computadoras, pero los sockets también se pueden usar para la comunicación entre procesos en una sola computadora. Las aplicaciones pueden crear múltiples sockets para comunicarse entre sí. Los sockets son bidireccionales, lo que significa que cualquiera de los lados de la conexión puede enviar y recibir datos. Por lo tanto, se puede crear un zócalo teóricamente en cualquier nivel del modelo OSI desde 2 en adelante. Los programadores a menudo usan sockets en la programación de red, aunque de manera indirecta. Las bibliotecas de programación como Winsock ocultan muchos de los detalles de bajo nivel de la programación de socket. Los enchufes han estado en uso generalizado desde principios de la década de 1980.

Un puerto representa un punto final o " canal " para comunicaciones en red. Los números de puerto permiten que diferentes aplicaciones en la misma computadora utilicen los recursos de la red sin interferir entre sí. Los números de puerto aparecen más comúnmente en la programación de red, particularmente en la programación de socket. A veces, sin embargo, los números de puerto se hacen visibles para el usuario ocasional. Por ejemplo, algunos sitios web que una persona visita en Internet usan una URL como la siguiente:

http://www.mairie-metz.fr:8080/ En este ejemplo , el número 8080 se refiere al número de puerto utilizado por el navegador web para conectarse al servidor web. Normalmente, un sitio web utiliza el número de puerto 80 y este número no necesita incluirse con la URL (aunque puede ser).

En las redes IP, los números de puerto pueden oscilar teóricamente de 0 a 65535. Sin embargo, las aplicaciones de red más populares utilizan números de puerto en el extremo inferior del rango (como 80 para HTTP).

Nota: El término puerto también se refiere a varios otros aspectos de la tecnología de red. Un puerto puede referirse a un punto de conexión física para dispositivos periféricos como puertos serie, paralelos y USB. El término puerto también se refiere a ciertos puntos de conexión Ethernet, como los de un concentrador, conmutador o enrutador.

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

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

Con alguna analogía

Aunque ya se han dado muchas cosas técnicas para sockets ... Me gustaría agregar mi respuesta, por si acaso, si alguien todavía no pudiera sentir la diferencia entre ip, puerto y sockets

Considere un servidor S ,

y diga las personas X, Y, Z necesitan un servicio (por ejemplo, el servicio de chat) de ese servidor S

entonces

La dirección IP dice - > who? es ese servidor de chat 'S' con el que X, Y, Z quieren contactar

está bien, tienes " quién es el servidor "

pero suponga que el servidor 'S' también proporciona otros servicios a otras personas, digamos que 'S' proporciona servicios de almacenamiento a la persona A, B, C

then

el puerto dice --- > ¿cuál? le da servicio a (X, Y, Z) , es decir, a un servicio de chat y no a ese servicio de almacenamiento

está bien ..., crea un servidor para saber que el 'servicio de chat' es lo que desea y no el almacenamiento

pero

usted tiene tres años y el servidor puede querer identificar a los tres de manera diferente

viene el zócalo

ahora el socket dice - > ¿cuál? conexión particular

es decir,

socket 1 para la persona X

socket 2 para la persona Y

y socket 3 para la persona Z

Espero que ayude a alguien que todavía estaba confundido :)

En primer lugar, creo que deberíamos comenzar con un poco de comprensión de lo que constituye obtener un paquete de A a B.

Una definición común para una red es el uso del Modelo OSI que separa una red en varias capas de acuerdo a la finalidad. Hay algunos importantes, que cubriremos aquí:

  • La capa de enlace de datos . Esta capa es responsable de obtener paquetes de datos de un dispositivo de red a otro y está justo por encima de la capa que realmente realiza la transmisión. Habla de direcciones MAC y sabe cómo encontrar hosts según su dirección MAC (hardware), pero nada más.
  • La capa de red es la capa que le permite transportar datos a través de máquinas y fronteras físicas, como dispositivos físicos. La capa de red esencialmente debe admitir un mecanismo adicional basado en la dirección que se relacione de alguna manera con la dirección física; Ingrese el Protocolo de Internet (IPv4). Una dirección IP puede obtener su paquete de A a B a través de Internet, pero no sabe nada sobre cómo atravesar saltos individuales. Esto es manejado por la capa superior de acuerdo con la información de enrutamiento.
  • La capa de transporte . Esta capa es responsable de definir la forma en que la información se transfiere de A a B y cualquier restricción, verificación o error en ese comportamiento. Por ejemplo, TCP agrega información adicional a un paquete, de modo que es posible deducir si los paquetes se han perdido.

TCP contiene, entre otras cosas, el concepto de ports . Estos son efectivamente puntos finales de datos diferentes en la misma dirección IP a la que se puede enlazar un Socket de Internet ( AF_INET ).

A medida que sucede, también lo hace UDP , y otros protocolos de la capa de transporte. Técnicamente, no necesitan para ofrecer puertos, pero estos puertos proporcionan una forma para que múltiples aplicaciones en las capas anteriores usen la misma computadora para recibir (y de hecho hacer) conexiones salientes.

Lo que nos lleva a la anatomía de una conexión TCP o UDP. Cada uno presenta un puerto y una dirección de origen, y un puerto y una dirección de destino. Esto es para que en cualquier sesión dada, la aplicación de destino pueda responder, así como recibir, desde la fuente.

Por lo tanto, los puertos son esencialmente una forma obligatoria de especificación de permitir que múltiples conexiones concurrentes compartan la misma dirección.

Ahora, debemos analizar cómo se comunica desde el punto de vista de una aplicación al mundo exterior. Para hacer esto, debe preguntar amablemente a su sistema operativo y dado que la mayoría de los sistemas operativos son compatibles con la forma de hacer las tomas de Berkeley, vemos que podemos crear sockets que incluyan puertos de una aplicación como esta:

int fd = socket(AF_INET, SOCK_STREAM, 0); // tcp socket
int fd = socket(AF_INET, SOCK_DGRAM, 0); // udp socket
// later we bind...

¡Genial! Así que en las estructuras sockaddr , especificaremos nuestro puerto y bam! ¡Trabajo hecho! Bueno, casi, excepto:

int fd = socket(AF_UNIX, SOCK_STREAM, 0);

también es posible. Urgh, eso ha tirado una llave en las obras!

Ok, bueno, en realidad no lo ha hecho. Todo lo que necesitamos hacer es encontrar algunas definiciones apropiadas:

  • Un socket de Internet es la combinación de una dirección IP, un protocolo y su número de puerto asociado en el que un servicio puede proporcionar datos. Entonces, el puerto 80 de TCP, stackoverflow.com es un socket de Internet.
  • Un socket Unix es un punto final de IPC representado en el sistema de archivos, por ejemplo. /var/run/database.sock .
  • Una API de socket es un método para solicitar que una aplicación pueda leer y escribir datos en un socket.

Voila! Eso arregla las cosas. Así que en nuestro esquema entonces,

  • Un puerto es un identificador numérico que, como parte de un protocolo de capa de transporte, identifica el número de servicio que debe responder a la solicitud dada.

En realidad, un puerto es un subconjunto de los requisitos para formar un socket de Internet. Desafortunadamente, da la casualidad de que el significado de la palabra socket se ha aplicado a varias ideas diferentes. Así que le recomiendo de todo corazón que nombre su próximo proyecto de socket, solo para agregar a la confusión;)

A socket = Dirección IP + un puerto (dirección numérica)
Juntos, identifican un punto final para una conexión de red en una máquina. (¿Acabo de suspender la red 101?)

En general, obtendrá una gran cantidad de información teórica, pero una de las formas más fáciles de diferenciar estos dos conceptos es la siguiente:

Para obtener un servicio, necesita un número de servicio. Este número de servicio se llama un puerto. Tan simple como eso.

Por ejemplo, el HTTP como servicio se ejecuta en el puerto 80.

Ahora, muchas personas pueden solicitar el servicio y se ha establecido una conexión de cliente-servidor. Habrá muchas conexiones. Cada conexión representa un cliente. Para mantener cada conexión, el servidor crea un socket por conexión para mantener su cliente.

Parece que hay muchas respuestas que equiparan el zócalo con la conexión entre 2 PC ... lo cual creo que es absolutamente incorrecto. Un zócalo siempre ha sido el punto final en 1 PC, que puede o no estar conectado. Seguramente todos hemos usado sockets de oyente o UDP * en algún momento. Lo importante es que es direccionable y activo. No es probable que el envío de un mensaje a 1.1.1.1:1234 funcione, ya que no hay un socket definido para ese punto final.

Los sockets son específicos del protocolo, por lo que la implementación de la singularidad es que TCP / IP y UDP / IP utiliza * (dirección ip: puerto), es diferente a, por ejemplo, IPX (Red, Nodo y ... ejem, socket, pero un socket diferente al que se entiende por el término general "socket". Los números de socket IPX son equivalentes a los puertos IP). Pero, todos ofrecen un punto final direccionable único.

Dado que IP se ha convertido en el protocolo dominante, un puerto (en términos de red) se ha convertido en sinónimo con un número de puerto UDP o TCP, que es una parte de la dirección de socket.

  • UDP no tiene conexión, lo que significa que nunca se crea ningún circuito virtual entre los 2 puntos finales. Sin embargo, todavía nos referimos a Sockets UDP como punto final. Las funciones de la API dejan en claro que ambos son tipos de sockets diferentes: SOCK_DGRAM es UDP (solo envía un mensaje) y SOCK_STREAM es TCP (creando un circuito virtual).

  • Técnicamente, el encabezado de IP contiene la dirección de IP y el protocolo en la parte superior de IP (UDP o TCP) tiene el número de puerto. Esto hace posible tener otros protocolos (por ejemplo, ICMP que no tienen números de puerto , pero tienen información de direccionamiento IP).

Breve respuesta breve.

Un puerto se puede describir como una dirección interna dentro de un host que identifica un programa o proceso.

Un socket se puede describir como una interfaz de programación que permite que un programa se comunique con otros programas o procesos, en Internet o localmente.

Son términos de dos dominios diferentes: 'puerto' es un concepto de red TCP / IP, 'socket' es una cosa de API (programación). Se hace un 'socket' (en código) tomando un puerto y un nombre de host o adaptador de red y combinándolos en una estructura de datos que puede usar para enviar o recibir datos.

Después de leer las excelentes respuestas con votos, encontré que el siguiente punto necesitaba un énfasis para mí, un recién llegado a la programación en red:

Las conexiones TCP-IP son rutas bidireccionales que conectan una combinación de dirección: puerto con otra combinación de dirección: puerto. Por lo tanto, siempre que abra una conexión de su máquina local a un puerto en un servidor remoto (por ejemplo, www.google.com:80), también está asociando un nuevo número de puerto en su máquina con la conexión, para permitir que el servidor envíe las cosas de vuelta a usted, (por ejemplo, 127.0.0.1:65234). Puede ser útil usar netstat para ver las conexiones de su máquina:

> 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
...

Una dirección de socket es una dirección IP & amp; número de puerto

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

Se produce una conexión cuando 2 sockets están unidos.

Un socket es un tipo especial de identificador de archivo que un proceso utiliza para solicitar servicios de red desde el sistema operativo. Una dirección de socket es el triple: {protocolo, dirección local, proceso local} donde el proceso local se identifica mediante un número de puerto.

En la suite TCP / IP, por ejemplo:

{tcp, 193.44.234.3, 12345}

Una conversación es el enlace de comunicación entre dos procesos que representa una asociación entre dos. Una asociación es la tupla 5 que especifica completamente los dos procesos que comprenden una conexión: {protocolo, dirección local, proceso local, dirección externa, proceso externo}

En la suite TCP / IP, por ejemplo:

{tcp, 193.44.234.3, 1500, 193.44.234.5, 21}

podría ser una asociación válida.

Una media asociación es: {protocolo, dirección local, proceso local}

o

{protocolo, dirección externa, proceso externo}

que especifican cada mitad de una conexión.

La media asociación también se denomina socket o dirección de transporte. Es decir, un socket es un punto final para la comunicación que se puede nombrar y direccionar en una red. La interfaz de socket es una de varias interfaces de programación de aplicaciones (API) para los protocolos de comunicación. Diseñado para ser una interfaz de programación de comunicación genérica, fue introducido por primera vez por el sistema 4.2BSD UNIX. Aunque no se ha estandarizado, se ha convertido en un estándar de facto de la industria.

El puerto fue la parte más fácil, es solo un identificador único para un socket. Un socket es algo que los procesos pueden usar para establecer conexiones y comunicarse entre sí. Jeff alto tenía una gran analogía con el teléfono que no era perfecta, así que decidí arreglarlo:

  • ip y puerto ~ número de teléfono
  • zócalo ~ dispositivo telefónico
  • conexión ~ llamada telefónica
  • establecer conexión ~ llamar a un número
  • procesos, aplicaciones remotas ~ personas
  • mensajes ~ discurso

Un socket es una estructura en tu software. Es más o menos un archivo; Tiene operaciones como leer y escribir. No es una cosa física; Es una forma en que su software puede referirse a cosas físicas.

Un puerto es una cosa similar a un dispositivo. Cada host tiene una o más redes (que son físicas); un host tiene una dirección en cada red. Cada dirección puede tener miles de puertos.

Un solo socket puede estar usando un puerto en una dirección. El zócalo asigna el puerto aproximadamente, al igual que la asignación de un dispositivo para la E / S del sistema de archivos. Una vez que se asigna el puerto, ningún otro socket puede conectarse a ese puerto. El puerto se liberará cuando se cierre el zócalo.

Eche un vistazo a Terminología de TCP / IP .

Una aplicación consiste en un par de procesos que se comunican a través de la red (par cliente-servidor). Estos procesos envían y reciben mensajes dentro y desde la red a través de una interfaz de software llamada socket . Teniendo en cuenta la analogía presentada en el libro "Redes de computadoras: Enfoque descendente". Hay una casa que quiere comunicarse con otra casa. Aquí, la casa es análoga a un proceso, y la puerta a un enchufe. El proceso de envío supone que hay una infraestructura en el otro lado de la puerta que transportará los datos al destino. Una vez que el mensaje llega al otro lado, pasa a través de la puerta del receptor (toma) hacia la casa (proceso). Esta ilustración del mismo libro puede ayudarte:
ingrese la descripción de la imagen aquí
Los sockets son parte de la capa de transporte, que proporciona comunicación lógica a las aplicaciones. Esto significa que, desde el punto de vista de la aplicación, ambos hosts están conectados directamente entre sí, aunque hay numerosos enrutadores y / o conmutadores entre ellos. Por lo tanto, un socket no es una conexión en sí, es el punto final de la conexión. Los protocolos de la capa de transporte se implementan solo en hosts, y no en enrutadores intermedios.
Los puertos proporcionan medios de direccionamiento interno a una máquina. El objetivo principal es permitir que múltiples procesos envíen y reciban datos a través de la red sin interferir con otros procesos (sus datos). Todos los enchufes están provistos de un número de puerto. Cuando un segmento llega a un host, la capa de transporte examina el número de puerto de destino del segmento. A continuación, reenvía el segmento al socket correspondiente. Este trabajo de entregar los datos en un segmento de la capa de transporte al socket correcto se llama des-multiplexación . Los datos del segmento se envían al proceso adjunto al socket.

de Tutorial de Java de Oracle :

  

Un socket es un punto final de un enlace de comunicación de dos vías entre dos programas que se ejecutan en la red. Un socket está vinculado a un número de puerto para que la capa TCP pueda identificar la aplicación a la que están destinados los datos.

  
    

El puerto y el zócalo se pueden comparar con la sucursal bancaria.

  

El número de edificio del " Banco " Es análogo a la dirección IP. Un banco tiene diferentes secciones como:

  1. departamento de cuentas de ahorro
  2. departamento de préstamos personales
  3. departamento de préstamos hipotecarios
  4. departamento de quejas

Por lo tanto, 1 (departamento de cuentas de ahorro), 2 (departamento de préstamos personales), 3 (departamento de préstamos hipotecarios) y 4 (departamento de reclamos) son puertos.

Ahora digamos que va a abrir una cuenta de ahorros, va al banco (dirección IP) y luego a " departamento de cuentas de ahorro " (número de puerto 1), luego se encuentra con uno de los empleados que trabajan en el departamento de cuentas de ahorro " ;. Llamémosle SAVINGACCOUNT_EMPLOYEE1 para abrir una cuenta.

SAVINGACCOUNT_EMPLOYEE1 es su descriptor de socket, por lo que puede haber SAVINGACCOUNT_EMPLOYEE1 a SAVINGACCOUNT_EMPLOYEEN. Estos son todos los descriptores de socket.

Del mismo modo, otros departamentos tendrán empleados que trabajen bajo ellos y son análogos a socket.

Estos son conceptos básicos de redes, por lo que los explicaré de manera fácil pero comprensible en los detalles.

  • Un socket es como un teléfono (es decir, un dispositivo de extremo a extremo para la comunicación)
  • IP es como su número de teléfono (es decir, la dirección de su socket)
  • Puerto es como la persona con la que desea hablar (es decir, el servicio que desea solicitar a esa dirección)
  • Un socket puede ser un cliente o un socket de servidor (es decir, en una empresa, el teléfono de asistencia al cliente es un servidor, pero un teléfono en su casa es principalmente un cliente)

Por lo tanto, un socket en una red es un dispositivo de comunicación virtual enlazado a un par (ip, puerto) = (dirección, servicio).

Nota:

  • Una máquina, una computadora, un host, un móvil o una PC pueden tener varias direcciones, varios puertos abiertos y, por lo tanto, múltiples sockets. Al igual que en una oficina, puede tener varios teléfonos con varios números de teléfono y varias personas con quienes hablar.
  • La existencia de un puerto abierto / activo requiere que tenga un socket vinculado a él, porque es el socket que hace que el puerto sea accesible. Sin embargo, es posible que tenga puertos no utilizados por el momento.
  • También tenga en cuenta que, en un socket de servidor, puede enlazarlo a (un puerto, una dirección específica de una máquina) o a (un puerto, todas las direcciones de una máquina), ya que en el teléfono puede conectar muchas líneas telefónicas (teléfono números) a un teléfono o una línea telefónica específica a un teléfono y aún puede comunicarse con una persona a través de todas estas líneas telefónicas o a través de una línea telefónica específica.
  • No puede asociar (enlazar) un socket con dos puertos, ya que en el teléfono, por lo general, no siempre puede tener dos personas utilizando el mismo teléfono al mismo tiempo.
  • Avanzado: en la misma máquina no puede tener dos sockets con el mismo tipo (cliente o servidor) y el mismo puerto e ip. Sin embargo, si usted es un cliente, puede abrir dos conexiones, con dos sockets, a un servidor porque el puerto local en cada uno de estos sockets de clientes es diferente)

Espero que te aclare dudas

Terminología TCP / IP relativa, que es lo que supongo que está implícita en la pregunta. En términos sencillos:

Un PUERTO es como el número de teléfono de una casa en particular en un código postal en particular. El código postal de la ciudad se podría considerar como la dirección IP de la ciudad y todas las casas en esa ciudad.

Por otro lado, un SOCKET es más como una llamada telefónica establecida entre los teléfonos de un par de casas que hablan entre sí. Esas llamadas pueden establecerse entre casas en la misma ciudad o dos casas en diferentes ciudades. Es ese camino temporal establecido entre el par de teléfonos que se comunican entre sí que es el SOCKET.

Un socket es un punto final de comunicación. Un socket no está directamente relacionado con la familia de protocolos TCP / IP, se puede usar con cualquier protocolo que su sistema admita. La API de socket de C espera que primero obtenga un objeto de socket en blanco del sistema que luego puede enlazar a una dirección de socket local (para recuperar directamente el tráfico entrante para protocolos sin conexión o para aceptar solicitudes de conexión entrantes para protocolos orientados a conexión) o que puede conectarse a una dirección de socket remota (para cualquier tipo de protocolo). Incluso puede hacer ambas cosas si desea controlar ambas, la dirección de socket local a la que está vinculado un socket y la dirección de socket remoto a la que está conectado un socket. Para los protocolos sin conexión, la conexión a un socket es incluso opcional, pero si no lo hace, también tendrá que pasar la dirección de destino con cada paquete que desee enviar a través del socket, ya que de otra manera el socket sabría a dónde enviar. estos datos para? La ventaja es que puede usar un solo socket para enviar paquetes a diferentes direcciones de socket. Una vez que tenga su zócalo configurado y tal vez incluso conectado, considérelo un conducto de comunicación bidireccional. Puede usarlo para pasar datos a algún destino y algún destino puede usarlo para devolverle los datos. Lo que escribes en un socket se envía y lo que se ha recibido está disponible para su lectura.

Por otro lado, los puertos son algo que solo tienen ciertos protocolos de la pila de protocolos TCP / IP. Los paquetes TCP y UDP tienen puertos. Un puerto es simplemente un número simple. La combinación de puerto de origen y puerto de destino identifica un canal de comunicación entre dos hosts. P.ej. puede tener un servidor que será a la vez, un servidor HTTP simple y un servidor FTP simple. Si ahora llega un paquete para la dirección de ese servidor, ¿cómo sabría si es un paquete para el servidor HTTP o FTP? Bueno, lo sabrá, ya que el servidor HTTP se ejecutará en el puerto 80 y el servidor FTP en el puerto 21, por lo que si el paquete llega con un puerto de destino 80, es para el servidor HTTP y no para el servidor FTP. Además, el paquete tiene un puerto de origen, ya que sin ese puerto de origen, un servidor solo podría tener una conexión a una dirección IP a la vez. El puerto de origen hace posible que un servidor distinga conexiones idénticas: todos tienen el mismo puerto de destino, por ejemplo. el puerto 80, la misma IP de destino, siempre la misma dirección del servidor y la misma IP de origen, ya que todas provienen del mismo cliente, pero como tienen puertos de origen diferentes, el servidor puede distinguirlos entre sí. Y cuando el servidor envíe respuestas, lo hará al puerto del que proviene la solicitud, de esa manera el cliente también puede distinguir las diferentes respuestas que recibe.

Un socket es un mecanismo de E / S de datos. Un puerto es un concepto contractual de un protocolo de comunicación . Un socket puede existir sin un puerto. Puede existir un puerto sin un socket específico (por ejemplo, si hay varios sockets activos en el mismo puerto, lo que puede estar permitido para algunos protocolos).

Se utiliza un puerto para determinar a qué zócalo el receptor debe enrutar el paquete, con muchos protocolos, pero no siempre es necesario y la selección del zócalo receptor se puede hacer por otros medios: un puerto es una herramienta totalmente utilizada por el Controlador de protocolo en el subsistema de red. p.ej. Si un protocolo no usa un puerto, los paquetes pueden ir a todos los sockets de escucha o a cualquier socket.

En un sentido amplio, Toma de corriente: es solo eso, una toma de corriente, igual que la toma eléctrica, de cable o de teléfono. Un punto donde " material requerido " (poder, señal, información) puede salir y entrar. Oculta muchas cosas detalladas, que no se requieren para el uso de las "cosas necesarias". En términos de software, proporciona una forma genérica de definir un mecanismo de comunicación entre dos entidades (esas entidades podrían ser cualquier cosa: dos aplicaciones, dos dispositivos físicamente separados, espacio de usuario y kernel dentro de un sistema operativo, etc.)

Un puerto es un discriminador de punto final. Se diferencia un punto final de otro. A nivel de red, diferencia una aplicación de otra, de modo que la pila de red puede pasar información a la aplicación adecuada.

Ya se han dado respuestas teóricas a esta pregunta. Me gustaría dar un ejemplo práctico a esta pregunta, que aclarará su comprensión acerca de Socket y Puerto.

Lo encontré aquí

  

Este ejemplo lo guiará a través del proceso de conexión a un sitio web, como Wiley. Debería abrir su navegador web (como Mozilla Firefox) y escribir www.wiley.com en la barra de direcciones. Su navegador web utiliza un servidor de Sistema de Nombres de Dominio (DNS) para buscar el nombre www.wiley.com para identificar su dirección IP. Para este ejemplo, la dirección es 192.0.2.100.

     

Firefox realiza una conexión a la dirección 192.0.2.100 y al puerto   donde está funcionando el servidor web de la capa de aplicación. Firefox sabe   Qué puerto esperar porque es un puerto muy conocido. La conocida   El puerto para un servidor web es el puerto TCP 80.

     

El socket de destino que Firefox intenta conectar se escribe como   socket: puerto, o en este ejemplo, 192.0.2.100:80. Este es el servidor   lado de la conexión, pero el servidor necesita saber dónde enviar el   página web que desea ver en Mozilla Firefox, por lo que tiene un socket para   el lado del cliente de la conexión también.

     

La conexión del lado del cliente se compone de su dirección IP, como   192.168.1.25, y un número de puerto dinámico elegido al azar. El zócalo asociado con Firefox parece 192.168.1.25:49175. Porque la web   los servidores operan en el puerto TCP 80, ambos sockets son sockets TCP,   mientras que si estuviera conectado a un servidor que opera en un puerto UDP,   tanto el servidor como los sockets de cliente serían sockets UDP.

Socket es una abstracción proporcionada por el kernel a las aplicaciones de usuario para la E / S de datos. Un tipo de socket se define por el protocolo de manejo, una comunicación IPC, etc. Entonces, si alguien crea un socket TCP, puede realizar manipulaciones como leer datos en socket y escribir datos mediante métodos simples y el protocolo de nivel inferior, como las conversiones de TCP y el reenvío de paquetes a protocolos de red de nivel inferior se realiza mediante la implementación del socket en particular en el kernel. La ventaja es que el usuario no tiene que preocuparse por manejar las enfermedades específicas del protocolo y solo debe leer y escribir datos en un socket como un búfer normal. Lo mismo ocurre en el caso de IPC, el usuario simplemente lee y escribe datos en el socket y el núcleo maneja todos los detalles de nivel inferior según el tipo de socket creado.

Puerto junto con IP es como proporcionar una dirección al socket, aunque no es necesario, pero ayuda en las comunicaciones de red.

Un solo puerto puede tener uno o más enchufes conectados con diferentes IP externas, como una toma eléctrica múltiple.

  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

Un socket es básicamente un punto final para la comunicación de red, que consta de al menos una dirección IP y un puerto. En Java / C # un socket es una implementación de nivel superior de un lado de una conexión bidireccional.

También, una definición en documentación de Java .

Puerto:

Un puerto puede referirse a un punto de conexión física para dispositivos periféricos como puertos serie, paralelos y USB.  El término puerto también se refiere a ciertos puntos de conexión Ethernet, s Al igual que los de un hub, switch o enrutador.

Socket:

Un socket representa una conexión única entre dos aplicaciones de red.  Estas dos aplicaciones se ejecutan nominalmente en diferentes computadoras,  pero las tomas también se pueden usar para la comunicación entre procesos en una sola computadora. Las aplicaciones pueden crear múltiples sockets para comunicarse entre sí.  Los sockets son bidireccionales, lo que significa que cualquiera de los lados de la conexión puede enviar y recibir datos.

Sé que hay muchas explicaciones. Pero, hay una manera más fácil de entender con ejemplos prácticos. Todos podemos conectarnos al puerto HTTP 80, pero ¿significa que solo un usuario puede conectarse a ese puerto a la vez? La respuesta obviamente es no'. Múltiples usuarios para múltiples propósitos pueden acceder al puerto HTTP 80 pero aún así obtienen la respuesta correcta que están esperando, desde el servidor, ¿no es así? Ahora piénsalo por un minuto, ¿cómo ?.    Sí, es correcto, su dirección IP que identifica de forma única a los diferentes usuarios que se comunican con otros fines. Si hubiera leído las respuestas anteriores antes de llegar aquí, sabría que la dirección IP es parte de la información en la que se compone el socket. Piénsalo, ¿es posible tener una comunicación sin sockets? La respuesta es 'Sí', pero no puede ejecutar más de una aplicación en un puerto, pero sabemos que no somos un conmutador 'Dump' que se ejecuta solo en hardware.

Un puerto denota un punto final de comunicación en los transportes TCP y UDP para el protocolo de red IP. Un socket es una abstracción de software para un punto final de comunicación comúnmente utilizado en implementaciones de estos protocolos (socket API). Una implementación alternativa es la API XTI / TLI.

Ver también:

Stevens, W. R. 1998, Programación de red UNIX: API de red: Sockets y XTI; Volumen 1, Prentice Hall.
Stevens, W. R., 1994, TCP / IP Illustrated, Volumen 1: Los Protocolos, Addison-Wesley.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top