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.