socket foco electrico sockets network-programming

sockets - foco - Entender los conceptos básicos del socket



sockets java (3)

Socket es un mecanismo de software proporcionado por el sistema operativo. Como su nombre lo indica, se puede considerar como un "tomacorriente" o algún conector eléctrico, aunque el zócalo no es un dispositivo físico, sino un mecanismo de software. En el mundo real, cuando tiene dos conectores eléctricos, puede conectarlos con un cable. De la misma manera, en la programación de red puede crear un socket en una computadora y otro socket en otra computadora y luego conectar esos sockets. Y cuando escribe datos en uno de ellos, lo recibe en el otro. También hay algunos tipos diferentes de enchufes. Por ejemplo, si está programando un software de servidor, desea tener un socket de escucha que nunca envíe o reciba datos reales, sino que solo escuche y acepte conexiones entrantes y cree un nuevo socket para cada conexión nueva.

He estado leyendo acerca de la programación básica de la red, pero estoy teniendo dificultades para encontrar una explicación directa de qué es exactamente y socket, y cómo se relaciona con la pila OSI o TCP / IP.

  1. ¿Puede alguien explicarme qué es un enchufe? ¿Es una estructura de datos definida por API o programador, o es un dispositivo de hardware en una tarjeta de red?

  2. ¿Qué capas de los modelos de red mencionados se ocupan de los zócalos "crudos"? ¿Capa de transporte? ¿Capa de red?

  3. En términos de los datos que pasan entre ellos, ¿son socket basados ​​en texto o binarios?

  4. ¿Hay una alternativa a la programación de red basada en sockets? ¿O todas las aplicaciones en red usan alguna forma de socket?

Si puedo obtener tanto, debería tener una comprensión bastante clara de todo lo demás que estoy leyendo. ¡Gracias por cualquier ayuda!


Un socket, en lenguaje C, es una estructura de datos en el espacio del kernel, que corresponde a un punto final de una sesión UDP o TCP (estoy usando la sesión de manera muy flexible cuando hablo de UDP). Normalmente está asociado a un único número de puerto en el lado local y rara vez a más de un número "bien conocido" en cada lado de la sesión.

Un "socket sin formato" es un punto final en, más o menos, el transporte físico. Raramente se utilizan en la programación de aplicaciones, pero a veces se usan para varias cosas de diagnóstico (traceroute, ping, posiblemente otros) y pueden requerir privilegios elevados para abrirse.

Los zócalos son, en su naturaleza, un octeto-transporte binario. No es raro tratar los sockets (sockets TCP, al menos) como flujos basados ​​en texto.

Todavía no he visto un modelo de programación que no involucre algo como enchufes, si cavas lo suficientemente profundo, pero ciertamente ha habido otros modelos de hacer redes. El pseudo sistema de archivos "/ net /", donde abrir "/net/127.0.0.0.1/tcp/80" (o "tcp / www") le daría un manejador de archivo donde las escrituras terminan en un servidor web en localhost es solo uno.


Respuestas cortas:

  1. Socket es una abstracción de un punto final de conexión IP, por lo que si lo considera una estructura API, no está muy lejos. Por favor, lea http://en.wikipedia.org/wiki/Internet_socket
  2. Capa de Internet, es decir, protocolo de IP. En la práctica, generalmente se usan zócalos explícitos que se unen a ciertos parámetros de la capa de transporte (datagrama / UDP o stream / TCP)
  3. Los sockets envían datos, en orden de bytes de red, ya sea de texto o binario, depende del protocolo de capa superior.
  4. Teóricamente, probablemente sí, pero en la práctica todo el tráfico de IP se hace usando ''sockets''