2011-05-30 15 views
7

Suponiendo que ha determinado que para un caso de nicho dado, ni TCP ni UDP son ideales, ¿cómo haría para escribir su propio protocolo basado en IP?¿Cómo se escribe su propio protocolo IP? (Suponiendo que TCP y UDP no son adecuados)

Por ejemplo, si está desarrollando en Linux, ¿dónde buscaría en el núcleo para "enganchar" su protocolo?

¿Dónde comenzarías?

+3

@Ignacio No aprendería nada, ¿o sí? A veces necesitas experimentar y probar nuevas ideas, aunque solo sea para aprender que era una idea terriblemente mala para empezar. He escrito varios protocolos simples sobre TCP y UDP, pero mi desafío actual tampoco es perfecto. Como no he trabajado directamente en este nivel bajo anteriormente, pensé que buscaría consejo :) – PeterM

+0

Simplemente curioso, pero ¿cómo TCP o UDP no cumplen con tus requisitos? – jdt141

+0

También hay otros protocolos establecidos, como [SCTP] (http://en.wikipedia.org/wiki/Stream_Control_Transmission_Protocol). Apuesto a que hay un protocolo existente que funcionará para ti. – Keith

Respuesta

9

Puede hacerlo a través de un módulo kernel. Comenzaría leyendo cómo funciona arp, por ejemplo. Ese es un protocolo más simple ya que el espacio de usuario no envía paquetes directamente con él.

El punto de entrada para crear un nuevo protocolo de red es dev_add_pack, y el código para arp se puede encontrar en here.

+0

Eso es lo que estaba buscando. Por alguna razón en mi cuadro de Fedora, net/ipv4 solo tiene el directorio netfilter en él. Supongo que debería haber verificado la fuente de kernel.org y comprobó eso antes de publicar :) – PeterM

1

Lectura en sockets y redes UNIX. No se trata tanto de "enganchar" al kernel, sino de abrir un socket y enviar sus datos binarios sobre eso.

+0

@Matty Supongo que puedo usar sockets sin formato, pero si quisiera un soporte integrado para el protocolo, hubiera pensado que necesitaría algo más :) – PeterM

+0

@PeterM Built in support? No crearía un módulo kernel para admitir un protocolo. Solo estás intercambiando bits en un formato predeterminado. Tendría un oyente (un servidor) en un extremo y un cliente en el otro que comprende su protocolo. Solo usaría tomas sin procesar. No estoy seguro de qué otra cosa lo harías. – Matty

+0

@Matty Las aplicaciones individuales no tienen sus propias pilas TCP o UDP. Por ejemplo, si haces ping a una máquina, la respuesta es algo que supongo sería manejado por el núcleo en lugar de una aplicación en ejecución. – PeterM

3

Si su protocolo puede implementarse directamente sobre IP, también se puede implementar envuelto en paquetes UDP, y este último tiene la ventaja de que pasará a través de dispositivos NAT existentes y cortafuegos que simplemente dejarán caer su personalización protocolo.

+1

+1, especialmente para la experimentación, que es una ruta mucho más fácil que escribir un protocolo real basado en IP: se puede hacer en un puro espacio de usuario. –

Cuestiones relacionadas