Netstrings: un formato minimalista para codificar cadenas en red

Fuentes: Netstrings: a minimal self-delimiting string encoding

El documento de D. J. Bernstein, fechado el 1 de febrero de 1997, define un mecanismo muy sencillo para representar cadenas de bytes de forma auto-delimitada: los netstrings. La idea central es que cualquier cadena puede codificarse como una secuencia de caracteres con la estructura longitud":"contenido"," —es decir, la longitud decimal de los datos seguida de dos puntos, los datos y una coma final. La cadena vacía, por ejemplo, se codifica como "0:,", mientras que "hello world!" se representa como "12:hello world!,".

Los netstrings no imponen restricciones sobre la longitud ni sobre los bytes permitidos, lo que los hace aplicables a cualquier contenido binario o textual. Una de sus principales ventajas es que declaran el tamaño de la cadena por adelantado, lo que permite a la aplicación receptora reservar memoria exacta antes de leer los datos y evitar así los temidos desbordamientos de búfer. Bernstein acompaña la especificación con dos fragmentos breves de código en C: uno para imprimir un búfer como netstring mediante printf, fwrite y putchar, y otro para leerlo con scanf, getchar, malloc y fread, asumiendoASCII local y modo binario en los flujos.

El autor plantea que los netstrings son un bloque básico para construir protocolos de red fiables sobre flujos como TCP, y subraya que pueden anidarse recursivamente: una secuencia de netstrings es, a su vez, una cadena codificable. En la sección de seguridad, contrasta este formato con la codificación CRLF usada por el servicio Finger —carente de tamaño declarado y origen del famoso agujero de seguridad de Finger— y argumenta que la adopción generalizada de netstrings podría mejorar la seguridad de los protocolos de red al simplificar la escritura de analizadores sintácticos correctos.