socket sistemas que puerto protocolo programacion operativos mecanismo implementado conforma como linux sockets

linux - sistemas - socket protocolo



¿Qué es el socket RAW en la programación de socket? (5)

Cuando pasé por la programación de socket, no pude entender claramente RAW_SOCKET.

Mi entendimiento es

Si abro un socket con esta opción AF_INET, RAW_SOCKET significa que puedo crear mi encabezado ahora antes que los encabezados AF_INET, pero finalmente los datos se envían en el formato del protocolo AF_INET. Es mi entendimiento es correcto. Si me equivoco, alguien me puede explicar.

Gracias


En cada capa, el paquete tiene dos secciones separadas: Encabezado, Carga útil

el zócalo no Raw significa que solo puede determinar la Carga de la capa de transporte. es decir, es tarea del sistema crear encabezados de capa de enlace de datos, transporte y red.

El zócalo sin procesar significa que puede determinar cada sección del paquete, ya sea encabezado o carga útil. Tenga en cuenta que el socket en bruto es una palabra general. Clasifico el socket sin formato en: Socket de red y Socket de enlace de datos (o L3 Socket y L2 Socket alternativamente)

En L3 Socket puede determinar el encabezado y la carga útil del paquete en la capa de red. Por ejemplo, si el protocolo de capa de red es IPv4, puede determinar el encabezado y la carga útil de IPv4. Por lo tanto, puede configurar el encabezado / carga útil de la capa de transporte, el encabezado / carga útil ICMP, el encabezado / carga útil de los Protocolos de enrutamiento.

En L2 Socket puede establecer el encabezado y la carga útil del paquete en la capa de enlace de datos, es decir, todo en el paquete. De este modo, se hace todo lo que se hace con L3 Socket + determinar el encabezado / carga de ARP, el encabezado / carga de PPP, el encabezado / carga de PPPOE, ....

Ahora en programación:

  • socket (AF_INET, RAW_SOCKET, ...) significa socket L3, Protocolo de capa de red = IPv4
  • socket (AF_IPX, RAW_SOCKET, ...) significa socket L3, Protocolo de capa de red = IPX
  • socket (AF_INET6, RAW_SOCKET, ...) significa socket L3, Protocolo de capa de red = IPv6
  • socket (AF_PACKET, RAW_SOCKET, ...) significa socket L2, Protocolo de capa de enlace de datos = Ethernet

El tercer parámetro especifica el protocolo de carga útil.


RAW_SOCKET permite al usuario implementar su propio protocolo de capa de transporte por encima del nivel de Internet (IP). Usted es responsable de crear y analizar los encabezados de nivel de transporte y la lógica detrás de ellos. Un paquete se vería así:

------------------------------------------------------------------- | Ethernet (typically) header | IP header | Your header | payload | -------------------------------------------------------------------

EDITAR: hay una buena descripción de sockets en bruto en la página de manual de Linux , o here si está usando Windows.



También se usa para protocolos como ICMP (ping), debe conocer la estructura del paquete ICPM para crearlo. También el kernel no modifica tus paquetes.


Once the application creates RAW socket is used to send and receive packets from source to destination those all packets are treated as datagram on an unconnected socket when sending IPv4 data, an application has a choice on whether to specify the IPv4 header at the front of the outgoing datagram for the packet. If the IP_HDRINCL socket option is set to true for an IPv4 socket (address family of AF_INET), the application must supply the IPv4 header in the outgoing data for send operations. If this socket option is false (the default setting), then the IPv4 header should not be in included the outgoing data for send operations. It is important to understand that some sockets of type SOCK_RAW may receive many unexpected datagrams. For example, a PING program may create a socket of type SOCK_RAW to send ICMP echo requests and receive responses. While the application is expecting ICMP echo responses, if several SOCK_RAW sockets are open on a computer at the same time, the same datagrams may be delivered to all the open sockets. An application must have a mechanism to recognize and to ignore all others. For a PING program, such a mechanism might include inspecting the received IP header for unique identifiers in the ICMP header (the application''s process ID, for example) TCP data cannot be sent by using raw socket Referred from below link : https://msdn.microsoft.com/en-us/library/windows/desktop/ms740548%28v=vs.85%29.aspx