¿Cómo se implementan exactamente los protocolos de red?

En primer lugar, le recomiendo que lea este libro: Programación de redes UNIX: API de redes: sockets y XTI; Volumen 1: W. Richard Stevens: 9780134900124: Amazon.com: Libros
Su pregunta merece una respuesta larga. (Pero en este momento tengo poco tiempo e intentaré explicarlo de manera sucinta. Tengo una entrevista en una hora)
1) Los protocolos están escritos en lenguaje de bajo nivel. Generalmente C.

2) Se almacenan en diferentes capas. En la base, el hardware funciona leyendo flujos de bits. Implementa protocolos de nivel de enlace de datos. Por encima, la capa de red se implementa en software (no es un software que se ejecuta solo; su sistema operativo debe admitirlo). Arriba hay TCP, nuevamente implementado en Software. TCP se comunica con los programas de usuario a través de sockets.

3) Se implementan como servicios / procesos en ejecución en su sistema. No tengo claro qué quiere decir con “¿Cómo se usan?”. En general, un programa de usuario, como FTP, se unirá a un puerto (algunas aplicaciones tienen un puerto predefinido, como FTP o HTTP. Pero puede usar cualquier puerto libre en un cierto rango). Los datos que necesite enviar llegarán a la IP del host en este puerto (si es un servidor, entonces recibe mensajes en la IP del host en este puerto). Enviará la información del sistema operativo con respecto a la IP de destino y los datos. El resto es manejado por el anfitrión.

Nuevamente, es una vista de muy alto nivel. Además, es una vista de solo los sistemas operativos populares ‘. Los sistemas como enrutadores, etc. tienen una configuración diferente. Realizan algunos cálculos adicionales (como debe haber estudiado) y es posible que no implementen capas de aplicación. En resumen, falta mucho en esta respuesta, pero debería ayudarlo a comenzar.

Esta es una pregunta muy amplia. Como tal, algo como SSH opera en un espacio muy diferente de algo como TCP / IP (SSH se ejecuta sobre TCP). Hay dos partes generales en cómo se convierten estos protocolos: estándar e implementación (términos inventados en los últimos 30 segundos).

Estándar

Un grupo de personas se unen y elaboran un estándar o una especificación. Esto generalmente se transmite como un RFC. Estos explican (a menudo con gran detalle) cómo se espera que se comporten exactamente dos entidades que hablan el protocolo. Esencialmente, establecen las reglas de interacción e intentan cubrir todas las bases relacionadas con el protocolo. Puede pasar por el TCP RFC original aquí.

Implementación

Una vez que se ha establecido el estándar (generalmente como un RFC), los programadores trabajan para codificarlo en el software (ya sea como parte del sistema operativo o como una aplicación) de manera que el software cumpla con las reglas descritas en el documento de estándares. Esto no es muy diferente de la codificación de una especificación dada. Sin embargo, no todos los protocolos de red se implementan en el software. Algunos de ellos (especialmente en el espacio de redes ópticas) también se implementan en hardware.

En pocas palabras, un protocolo primero se define claramente en un documento estándar y luego se implementa en un lenguaje de programación (o en hardware) para que coincida con ese estándar. No hace falta decir, sin embargo, que la necesidad es la madre de toda invención aquí también.

Requisitos básicos de protocolos

Obtener los datos a través de una red es solo una parte del problema para un protocolo. Los datos recibidos deben evaluarse en el contexto del progreso de la conversación, por lo que un protocolo debe especificar reglas que describan el contexto. Se dice que este tipo de reglas expresan la sintaxis de las comunicaciones. Otras reglas determinan si los datos son significativos para el contexto en el que tiene lugar el intercambio. Se dice que este tipo de reglas expresan la semántica de las comunicaciones.

Los mensajes se envían y reciben en sistemas de comunicación para establecer comunicaciones. Por lo tanto, los protocolos deben especificar las reglas que rigen la transmisión. En general, se debe abordar gran parte de lo siguiente:

  • Formatos de datos para el intercambio de datos . Se intercambian cadenas de bits de mensajes digitales. Las cadenas de bits se dividen en campos y cada campo lleva información relevante para el protocolo. Conceptualmente, la cadena de bits se divide en dos partes llamadas área de encabezado y área de datos . El mensaje real se almacena en el área de datos, por lo que el área del encabezado contiene los campos con más relevancia para el protocolo. Los bitstrings más largos que la unidad de transmisión máxima (MTU) se dividen en piezas de tamaño apropiado.
  • Formatos de dirección para el intercambio de datos . Las direcciones se utilizan para identificar tanto al remitente como a los destinatarios previstos. Las direcciones se almacenan en el área de encabezado de las cadenas de bits, lo que permite a los receptores determinar si las cadenas de bits están pensadas para sí mismas y si deben procesarse o ignorarse. Se puede identificar una conexión entre un remitente y un receptor utilizando un par de direcciones (dirección del remitente, dirección del receptor) . Por lo general, algunos valores de dirección tienen significados especiales. Se podría considerar que una dirección de todo 1 significa un direccionamiento de todas las estaciones en la red, por lo que enviar a esta dirección daría como resultado una transmisión en la red local. Las reglas que describen los significados del valor de la dirección se denominan colectivamente un esquema de direccionamiento .
  • Mapeo de direcciones . A veces, los protocolos necesitan asignar direcciones de un esquema en direcciones de otro esquema. Por ejemplo, para traducir una dirección IP lógica especificada por la aplicación a una dirección de hardware Ethernet. Esto se conoce como mapeo de direcciones .
  • Enrutamiento Cuando los sistemas no están conectados directamente, los sistemas intermediarios a lo largo de la ruta al receptor o destinatarios deben reenviar mensajes en nombre del remitente. En Internet, las redes están conectadas mediante enrutadores. Esta forma de conectar redes se llama internetworking .
  • La detección de errores de transmisión es necesaria en redes que no pueden garantizar un funcionamiento sin errores. En un enfoque común, los CRC del área de datos se agregan al final de los paquetes, haciendo posible que el receptor detecte las diferencias causadas por errores. El receptor rechaza los paquetes en diferencias CRC y organiza de alguna manera la retransmisión.
  • Se requieren acuses de recibo de la recepción correcta de los paquetes para la comunicación orientada a la conexión. Los acuses de recibo se envían desde los receptores a sus respectivos remitentes.
  • Pérdida de información: tiempos de espera y reintentos . Los paquetes pueden perderse en la red o sufrir largas demoras. Para hacer frente a esto, bajo algunos protocolos, un remitente puede esperar un acuse de recibo de la recepción correcta del receptor dentro de un cierto período de tiempo. En tiempos de espera, el remitente debe asumir que el paquete no se recibió y retransmitirlo. En caso de un enlace roto permanentemente, la retransmisión no tiene efecto, por lo que el número de retransmisiones es limitado. Exceder el límite de reintentos se considera un error.
  • La dirección del flujo de información debe abordarse si las transmisiones solo pueden ocurrir en una dirección a la vez como en los enlaces half-duplex. Esto se conoce como Control de acceso a medios. Deben hacerse arreglos para acomodar el caso cuando dos partes desean obtener el control al mismo tiempo.
  • Control de secuencia . Hemos visto que las cadenas de bits largas se dividen en partes y luego se envían a la red individualmente. Las piezas pueden perderse o retrasarse o tomar diferentes rutas a su destino en algunos tipos de redes. Como resultado, las piezas pueden llegar fuera de secuencia. Las retransmisiones pueden resultar en piezas duplicadas. Al marcar las piezas con información de secuencia en el remitente, el receptor puede determinar qué se perdió o se duplicó, solicitar las retransmisiones necesarias y volver a ensamblar el mensaje original.
  • El control de flujo es necesario cuando el emisor transmite más rápido de lo que el receptor o el equipo de red intermedio puede procesar las transmisiones. El control de flujo se puede implementar enviando mensajes desde el receptor al remitente

Protocolos y lenguajes de programación.

Los protocolos son para las comunicaciones lo que los algoritmos o lenguajes de programación son para los cálculos.

Esta analogía tiene importantes consecuencias tanto para el diseño como para el desarrollo de protocolos. Hay que tener en cuenta el hecho de que los algoritmos, los programas y los protocolos son solo diferentes formas de describir el comportamiento esperado de los objetos que interactúan. Un ejemplo familiar de un lenguaje de protocolo es el lenguaje HTML utilizado para describir páginas web que son los protocolos web reales.

En los lenguajes de programación, la asociación de identificadores a un valor se denomina definición . El texto del programa se estructura utilizando construcciones de bloques y las definiciones pueden ser locales para un bloque. La asociación localizada de un identificador a un valor establecido por una definición se denomina enlace y la región del texto del programa en la que un enlace es efectivo se conoce como su alcance .

El estado computacional se mantiene utilizando dos componentes: el entorno , utilizado como un registro de enlaces de identificador, y la tienda , que se utiliza como un registro de los efectos de las asignaciones.

En las comunicaciones, los valores de los mensajes se transfieren utilizando medios de transmisión. Por analogía, el equivalente de una tienda sería una colección de medios de transmisión, en lugar de una colección de ubicaciones de memoria. Una asignación válida en un protocolo (como un análogo del lenguaje de programación) podría ser Ethernet: = ‘mensaje’ , lo que significa que se debe transmitir un mensaje en el ethernet local.

En un medio de transmisión puede haber muchos receptores. Por ejemplo, una dirección MAC identifica una tarjeta de red ether en el medio de transmisión (el ‘ether’). En nuestro protocolo imaginario, la asignación ethernet [dirección-mac]: = valor del mensaje podría tener sentido.

Al extender la declaración de asignación de un lenguaje de programación existente con la semántica descrita, se podría imaginar fácilmente un lenguaje de protocolo.

Los sistemas operativos proporcionan medios confiables de comunicación y sincronización para comunicar objetos confinados al mismo sistema por medio de bibliotecas del sistema . Un programador que usa un lenguaje de programación de propósito general (como C o Ada) puede usar las rutinas en las bibliotecas para implementar un protocolo, en lugar de usar un lenguaje de protocolo dedicado.

1) Dos cosas son importantes en la creación o en cualquier protocolo: mensaje y máquina de estado que procesa el mensaje. Por cierto, se pueden implementar en cualquiera de los idiomas o se pueden cablear si la velocidad es realmente importante.
2) Parte del sistema operativo o Hardward o necesidad de instalar como paquete
3) Los protocolos se utilizan para permitir que dos sistemas independientes se comuniquen entre sí.

Históricamente el lenguaje de señas fue un protocolo .. 🙂

Creo que comprender y escribir código para máquinas de estado finito (FSM) es muy importante para implementar protocolos de red. Por ejemplo, un RFC podría dar una explicación del comportamiento de qué operaciones deberían ocurrir durante los diferentes estados (Solicitud / Respuesta / Indicadores de error, etc.) definidos en el protocolo. Por lo tanto, implementar el protocolo significará asignar estas operaciones a una “máquina de estado” real e implementarlo.