# Kermit (protocolo)

Kermit es un protocolo de transferencia de ficheros, muy conocido, que se usa en numerosos paquetes de software diseñados para la comunicación a través de líneas telefónicas. Prácticamente cualquier protocolo de transferencia de ficheros que se use en microodenadores utiliza una unidad básica llamada paquete: agrupación de varios elementos o campos formados por bytes.

## Historia General

Fue escrito por Frank da Cruz y Bill Catchings en 1981 y es de dominio público sin ningún propósito comercial. Fue desarrollado en la universidad estadounidense de Columbia principalmente como un método de transferencia de información entre microordenadores y mainframes.
Es un protocolo muy conocido que se utiliza en numerosos paquetes de software diseñados para la comunicación a través de líneas telefónicas.
Kermit puede usarse para transferir archivos o para emulación de terminal. Suele usarse con conexiones por módem aunque también soporta comunicaciones vía otros mecanismos de transporte, como ser TCP/IP. Kermit se destaca por su precisión en las transmisiones y bajas velocidades de transferencia debido a sus configuraciones predeterminadas, optimizadas para el lado de la precisión.
En los años 1980 fue muy importante debido a la proliferación de los sistemas (PC, Macintosh, Unix, mainframes) al recomponer los caracteres de 7 a 8 bits que emplea un formato del paquete variable. Según las condiciones de ruido en la línea, pudiendo llegar hasta los 9 kB. Es un protocolo multifichero que conserva el nombre y la longitud de los ficheros. Suele tener éxito cuando otros fallan.
No es utilizado por el público en general, pero la Universidad de Columbia permite que la gente use el protocolo gratuitamente, de modo que casi todos los productos de comunicaciones lo soportan. Sin embargo, no todas las implementaciones soportan el protocolo completo. Esto ha hecho que algunas personas se refieran a una versión avanzada del Kermit como Super Kermit. Actualmente sólo existe una versión del protocolo Kermit, que soporta todas las características avanzadas, usualmente atribuidas al Super Kermit, como ser paquetes más grandes.

## Características

Las principales características de este protocolo son:
* La longitud de los bloques es variable y se indica en el segundo carácter del bloque.
* Existen diferentes tipos de bloques; de cabecera, de datos, de acuse de recibo, etc….
* Ambos dispositivos no intercambian caracteres sueltos, sino que siempre mandan bloques.

## Estructura

La estructura de cada bloque es la siguiente: primero se manda el carácter SOH (primer carácter, el único carácter menor que 32; que no se modifica). A continuación la Longitud del mensaje “caracterizada” (longitud + 32). Después una carácter que indica el tipo de mensaje.
Por ejemplo:
* La “S” indica paquete inicial.
* La “D” indica Datos.
* La “Y” indica acuse de recibo (ack).
* La “N” indica No reconocimiento.
* La “Z” indica fin de fichero.
* Etc.
A continuación se mandan los datos, codificando los menores de 32, y por último el checksum “caracterizado”.
|| SOH ||| LONGITUD ||| TIPO ||||||||||||| "DATOS" ||||||||||||| CHECKSUM ||

## Comunicación

El desarrollo de una comunicación es el siguiente: la comunicación la inicia el receptor mandando un NAK y a continuación el emisor manda el bloque inicial, en el que se indican los parámetros de la transmisión (longitud máxima del mensaje, tiempo máximo de espera de respuesta, etc.). Después se espera a que el receptor mande el paquete de acuse de recibo correcto o incorrecto, y si no lo reconoce se manda de nuevo. Este proceso de hace después de enviar cada bloque.
Una vez mandado el bloque inicial, se manda el bloque de cabecera de fichero, donde se inicia el nombre del fichero. A continuación se mandan los bloques de datos hasta acabar el fichero. Por último se manda el bloque final del fichero. Si se desea mandar otro fichero se manda de nuevo el bloque de cabecera y se repite el proceso a partir de ese punto. Si no se desea mandar más ficheros se manda el bloque de final de transmisión para finalizar el proceso.
Los caracteres que se mandan son siempre imprimibles, lo que implica que sean mayores del ASCII 32. Para mandar caracteres menores, se codifican de manera que aumente su ASCII y se descodifican en el receptor.

## Caracterización y Codificación

El protocolo Kermit utiliza dos estrategias para tratar caracteres menores de 32: caracterización y codificación.
La caracterización consiste en sumar 32 al carácter y para descaracterizarlo será por tanto preciso restar 32. Este método no se emplea con los bytes de datos, ya que para datos mayores de 223 no valdría.
Los bytes(Byte) de datos no se codifican todos, sino que sólo se codifican los menores de 32 y para ello se hace la función XOR con el dato y con 64. Para decodificarlo se hace la función XOR con 64 de nuevo. Así mismo, delante del dato codificado se inserta el carácter #. Si realmente se manda el carácter # como dato, entonces éste se manda dos veces.
El hecho de no mandar caracteres con códigos ASCII menores al 32, se debe a que en algunos sistemas estos caracteres pueden tener asignada una misión especial que perturbe el funcionamiento de la transmisión.