networking - son - ¿Cuál es la diferencia entre un puerto y un socket?
ventajas de los sockets (30)
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. El banco tiene diferentes secciones como: 1) DEPARTAMENTO DE CUENTA DE AHORROS 2) DEPARTAMENTO DE PRÉSTAMOS PERSONALES 3) DEPARTAMENTO DE PRÉSTAMOS PARA EL HOGAR 4) DEPARTAMENTO DE QUEJAS.
por lo que 1 (DEPARTAMENTO DE CUENTA DE AHORROS), 2 (DEPARTAMENTO DE PRÉSTAMO PERSONAL), 3 (DEPARTAMENTO DE PRÉSTAMOS PARA EL HOGAR) y 4 (DEPARTAMENTO DE QUEJAS) son puertos.
Ahora, digamos que va a abrir una cuenta de ahorros, va al Banco (dirección IP), luego va al "DEPARTAMENTO DE CUENTAS DE AHORRO" (número de puerto 1) y luego se encuentra con uno de los empleados que trabaja en el "DEPARTAMENTO DE CUENTA DE AHORROS". llámalo como SAVINGACCOUNT_EMPLOYEE1 para abrir una cuenta.
SAVINGACCOUNT_EMPLOYEE1 es su descriptor de socket, por lo que puede haber SAVINGACCOUNT_EMPLOYEE1 a SAVINGACCOUNT_EMPLOYEEN todos estos son descriptores de socket.
Del mismo modo, otros departamentos tendrán empleados que trabajen bajo ellos y son análogos a socket.
Espero que esto ayude !!
Esta fue una pregunta planteada por uno de los ingenieros de software en mi organización. Estoy interesado en la definición más amplia.
Una dirección de socket es una dirección IP y 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 tomas están unidas entre sí.
Resumen
Un socket TCP es una instancia de punto final definida 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 final de instancia de servicio, también conocido como identificador de sesión).
Un socket TCP no es una conexión , es el punto final de una conexión específica.
Puede haber conexiones simultáneas a un punto final del servicio , porque una conexión se identifica por sus puntos finales locales y 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 desde adentro hacia afuera. Uno pensaría 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 red, la palabra "zócalo" 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 contenedores grandes de acero.
Para los fines 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 un punto final y, a veces, se denomina socket. Este uso se origina con RFC793, la especificación TCP original.
Una conexión TCP está definida 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 identificador de puerto . 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 de 4 que consta de la dirección IP del cliente, el número de puerto del cliente, la dirección IP del servidor y el número de puerto del servidor) lo que especifica los dos puntos finales que identifican de forma única cada conexión TCP en una Internet. ( TCP-IP Ilustrado Volumen 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. A continuación, invoca el método Connect en la instancia que ha creado. Este método requiere un parámetro que describe 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.
Después de haber leído y pensado mucho, ahora estoy convencido de que tendría mucho más sentido tener una clase TcpConnection con un constructor que tome dos argumentos, LocalEndpoint y RemoteEndpoint . Probablemente podría admitir un solo argumento RemoteEndpoint cuando los valores predeterminados son 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 en otros aspectos, también. Un socket no se identifica 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 [varios] 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 forma única un socket. Hay dos conexiones distintas entre 192.168.1.3 (mi estación de trabajo) y 54.252.92.236:80
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 "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.
Apéndice
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. Un socket local puede participar en muchas conexiones a diferentes sockets extranjeros.
Esta definición de socket no es útil desde una perspectiva de programación porque no es lo mismo que un objeto 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
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?)
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 puede describirse como una interfaz de programación que permite que un programa se comunique con otros programas o procesos, en Internet o localmente.
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
...
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í. El alto Jeff tenía una gran analogía telefónica que no era perfecta, así que decidí arreglarlo:
- ip y puerto ~ número de teléfono
- dispositivo de teléfono ~ socket
- conexión ~ llamada telefónica
- estableciendo conexión ~ llamando a un número
- procesos, aplicaciones remotas ~ personas
- mensajes ~ discurso
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. Simple como eso.
Por ejemplo, el HTTP como servicio se está ejecutando 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 una de las conexiones, el servidor crea un socket por conexión para mantener su cliente.
Espero que esto ayude. Gracias.
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 según el propósito. 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 transmite. 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 capa de transporte. Técnicamente no necesitan tener 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 la 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 manera de hacer las tomas de Berkeley, vemos que podemos crear sockets que incluyan puertos desde 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 conector 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, .com es un conector 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.
Entonces, realmente 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;)
La terminología TCP / IP relativa, que es lo que supongo, está implícita en la pregunta. En términos sencillos:
Un PUERTO es como el número de teléfono de una casa particular en un código postal 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.
Un SOCKET, por otra parte, es más como una llamada telefónica establecida entre 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 hablan entre sí que es el SOCKET.
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 socket siempre ha sido el punto final en 1 PC, que puede o no estar conectado. Seguramente todos hemos usado escuchas o sockets UDP * en algún momento. La parte importante es que es direccionable y activa. Es probable que el envío de un mensaje a 1.1.1.1:1234 no 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 que utilizan TCP / IP y UDP / IP * (ipaddress: puerto), es diferente a, por ejemplo, IPX (Network, Node, y ... ejem, socket, pero diferente socket 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 el 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) ySOCK_STREAM
es TCP (que crea un circuito virtual).Técnicamente, el encabezado IP contiene la dirección 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 de IP).
Son términos de dos dominios diferentes: ''puerto'' es un concepto de redes 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.
Un socket es un punto final de comunicación. Un socket no está directamente relacionado con la familia de protocolos TCP / IP, puede usarse 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 como 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 se escribe 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 ciertos protocolos de la pila de protocolos TCP / IP tienen. 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. Por ejemplo, puede tener un servidor que debe 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 de servidor y la misma IP de origen, ya que todos provienen de la misma 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 tipo especial de identificador de archivo que utiliza un proceso 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 extranjera, proceso extranjero}
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.
Un socket es una estructura en su software. Es más o menos un archivo; Tiene operaciones como leer y escribir. No es una cosa física; Es una forma para que su software se refiera 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.
Echa un vistazo a la terminología de TCP / IP .
Un zócalo consta de tres cosas:
- Una direccion IP
- Un protocolo de transporte
- Un numero 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.
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, desde y hacia la red a través de una interfaz de software llamada socket . Teniendo en cuenta la analogía presentada en el libro "Redes de ordenadores: enfoque de arriba hacia abajo". 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 a:
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. Luego reenvía el segmento al zócalo correspondiente. Este trabajo de entregar los datos en un segmento de la capa de transporte al socket correcto se denomina des-multiplexación . Los datos del segmento se reenvían al proceso adjunto al socket.
de Oracle Java Tutorial :
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.
Con alguna analogia
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 que las personas X, Y, Z necesitan un servicio (por ejemplo, servicio de chat) de ese servidor S
entonces
La dirección IP dice -> quién? es ese servidor de chat ''S'' que X, Y, Z quieren contactar
ok tienes "quien 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
entonces
puerto dice ---> cual? servicio que usted (X, Y, Z) necesita, es decir, servicio de chat y no ese servicio de almacenamiento
ok .., creas un servidor para saber que el ''servicio de chat'' es lo que quieres y no el almacenamiento
pero
usted es tres y el servidor podría querer identificar a los tres de manera diferente
ahí viene el zócalo
ahora zócalo dice -> cuál? conexión particular
es decir,
zócalo 1 para persona X
zócalo 2 para persona Y
y zócalo 3 para persona Z
Espero que ayude a alguien que todavía estaba confundido :)
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 enchufes son bidireccionales, lo que significa que ambos lados de la conexión pueden 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 indirectamente. 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 los años ochenta.
Un puerto representa un punto final o "canal" para las comunicaciones de red. Los números de puerto permiten que diferentes aplicaciones en la misma computadora utilicen recursos de 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 zócalos. 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
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, como los de un concentrador, conmutador o enrutador.
Enchufe:
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 enchufes son bidireccionales, lo que significa que ambos lados de la conexión pueden enviar y recibir datos.
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
En un sentido amplio, Socket - es solo eso, una toma, al igual que su toma de corriente, cable o teléfono. Un punto donde las "cosas requeridas" (potencia, señal, información) pueden salir y salir. Oculta muchas cosas detalladas, que no son necesarias 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 apropiada.
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 adecuada que están esperando, desde el servidor, ¿no es así? Ahora piénsalo por un minuto, ¿cómo ?. Sí, es correcto, su dirección IPque identifica de forma única a los diferentes usuarios que contactan para diferentes propósitos. Si hubiera leído las respuestas anteriores antes de llegar aquí, sabría que la dirección IP es parte de la información que contiene 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.
Socket es la abstracción de SW del punto final de red, que se utiliza como interfaz para la aplicación. En Java, C # está representado por un objeto, en Linux, Unix es un archivo.
El puerto es solo una propiedad de un socket que ha especificado si desea establecer una comunicación. Para recibir un paquete de un socket, debe enlazarlo a un puerto local específico y NIC (con dirección IP local) o todas las NIC (se especifica INADDR_ANY en la llamada de enlace). Para enviar el paquete, debe especificar el puerto y la IP del socket remoto.
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 hacer 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 los 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 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, WR 1998, UNIX Programación de red: API de red: Sockets y XTI; Volumen 1, Prentice Hall.
Stevens, WR, 1994, TCP / IP Illustrated, Volumen 1: Los Protocolos, Addison-Wesley.
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.
Además, una definición en la documentación de Java .
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 completamente una herramienta utilizada por el controlador de protocolo en El subsistema de red. por ejemplo, si un protocolo no utiliza un puerto, los paquetes pueden ir a todos los zócalos de escucha o a cualquier zócalo.
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é here
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 opera el servidor web de la capa de aplicación. Firefox sabe qué puerto esperar porque es un puerto conocido. El puerto conocido 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 lado del servidor de la conexión, pero el servidor necesita saber dónde enviar la página web que desea ver en Mozilla Firefox, por lo que también tiene un socket para el lado del cliente de la conexión.
La conexión del lado del cliente está formada por su dirección IP, como 192.168.1.25, y un número de puerto dinámico elegido al azar. El socket asociado con Firefox parece 192.168.1.25:49175. Debido a que los servidores web operan en el puerto TCP 80, ambos sockets son sockets TCP, mientras que si se conectara a un servidor que opera en un puerto UDP, tanto el servidor como los sockets de cliente serían sockets UDP.