redes protocolos protocolo pila modelo funciona como capa aplicacion debugging networking tcp-ip

debugging - protocolos - Pasando por una pila de TCP/IP



protocolos de red (8)

Estaba trabajando como ingeniero de QA para un sistema operativo incorporado patentado. Construyeron su propia pila ATN y, aunque con depurador, fue la experiencia más reveladora que he tenido con la creación de redes. Ver cada capa de la pila construir su parte del paquete fue increíble. Luego, finalmente, poder ver el paquete integrado en el cable tenía más significado.

Como educador, me gustaría compartir esta experiencia con otros. ¿Alguien sabe de un método sencillo para avanzar a través de una pila de TCP / IP? Idealmente, me gustaría algo más sencillo que depurar un Kernel * BSD o Linux, aunque si esta es la única opción, algunos consejos y trucos para este proceso serían buenos. Una pila de referencia escrita en C / C ++ que podría ejecutarse en modo de usuario con Visual Studio o Eclipse sería ideal.


De hecho, escribí un pequeño subconjunto de una pila de TCP / IP en una 8051 , fue una experiencia muy esclarecedora.

Creo que la mejor manera de aprender algo es haciéndolo. Una vez que haya terminado su tarea, obtenga retroalimentación con otros desarrolladores y compare su implementación con otras existentes.

Mi opinión puede estar sesgada aquí, pero creo que hacerlo en una plataforma integrada es la mejor manera de hacerlo. Lo que intenta hacer es un nivel muy bajo, y una PC simplemente agregará más complejidad al problema. Un chip integrado no tiene un sistema operativo para interponerse en su camino. Además de eso, es muy satisfactorio ver que un simple 8051 responde a solicitudes de ping y llamadas telnet.

La clave es comenzar de a poco, no intente crear una pila completa de TCP / IP a la vez. Escriba el código para manejar primero el MAC, luego IP, Ping, UDP y finalmente TCP.

No creo que estudiar una implementación existente sea una buena idea. Las implementaciones de TCP / IP tienden a estar infladas con código que no está relacionado con su objetivo.


Esto no es exactamente lo que estás buscando, pero espero que esto ayude

1995 - TCP / IP Illustrated, Volumen 2: La implementación (con Gary R. Wright) - ISBN 0-201-63354-X

Simplemente revise el código al lado del otro. Cerca de caminar a través de la experiencia. El Sr. Steven también explica las variables clave. Simplemente impresionante. Nota: El código puede haber cambiado desde el libro, pero aún es impresionante.


Me gustaría ejecutar Minix en una máquina virtual y depurar eso. Es perfecto para esto

Minix es un sistema operativo completo con pila TCP / IP, por lo que tiene el código que necesita. Sin embargo, a diferencia de Linux / BSD, sus raíces y su objetivo de diseño son ser una herramienta de enseñanza, por lo que evita un cierto nivel de complejidad a favor de ser claro. De hecho, este es el sistema operativo que Linus Torvalds comenzó a piratear cuando comenzó con Linux :-)

Puede ejecutar minix en una VM como VirtualBox o VMware y depurarlo. Hay instrucciones en el sitio web: http://www.minix3.org/


Personalmente aprendí la pila de TCP / IP usando DOS y SoftICE (oops, se filtró que soy un tipo viejo). Usar DOS en una máquina virtual y depurar a través de un controlador TCP / IP será mucho más simple ya que su objetivo es educar cómo funciona TCP / IP. El sistema operativo moderno realiza muchas optimizaciones en E / S de red y no es fácil depurarlo.

http://www.crynwr.com/ tiene un montón de controladores de paquetes de código abierto. La depuración con el código fuente será un poco más fácil.


Probablemente , lo que está buscando es un proyecto lwIP porque se puede ejecutar sin un sistema operativo .

En cuanto a la depuración del kernel de Linux, no es muy simple, pero es una forma muy conocida de hacerlo. Use KGDB . Instale la versión de depuración del kernel de Linux en la máquina virtual o en un cuadro separado. Y conecte de forma remota GDB a esta máquina. Probablemente le gustaría usar alguna interfaz de GDB en lugar de una interfaz de solo texto. Si necesita más detalles sobre la depuración del kernel de personas más competentes, simplemente agregue la etiqueta "linux" a la pregunta.



Todo esto depende de en lo que te quieras enfocar. A partir de su pregunta, lo que más le interesa es el flujo de datos a través de las diferentes capas (flujo de espacio de usuario -> voltaje en el cable).

Para esto, propongo que uses http://www.csse.uwa.edu.au/cnet/ , que es un simulador de red completo. Te permite pasar por todos los niveles de la pila.

Los sistemas reales siempre tendrán una clara distinción entre Layer3, Layer2 y Layer1 (Ethernet y CRC-checking firmware en chip, hardware MAC). Tendrá problemas para ingresar al sistema operativo y algunos detalles de implementación serán complicados y confusos para los estudiantes. Para Linux, tendrá que explicar la infraestructura del núcleo para darle sentido al diseño de la pila TCP / IP.

Si solo está interesado en la parte TCP / IP, le recomiendo que use una pila TCP / IP incrustada como http://www.sics.se/~adam/lwip/ . Puede incorporar esto en un simple programa de espacio de usuario y construir completamente el paquete TCP / IP.

Tenga en cuenta que hay muchos aspectos de comunicación de red que no puede abordar al pasar por la pila de TCP / IP. Todavía hay un chip MAC entre el cual se regula el acceso al medio, colisiones, etc. Debajo de eso, hay un chip PHY que traduce todo en señales eléctricas / ópticas, e incluso hay un protocolo que maneja la comunicación entre MAC y PHY. Además, no está viendo todos los aspectos relacionados con la colas, la concurrencia, la asignación de recursos del sistema operativo ea. Una imagen completa debe incluir todos estos aspectos, que solo se pueden ver en un simulador de red.


Yo trabajo en la industria de TCP / IP. En BSD y variantes, la función tcp_input () es un punto de partida ideal para explorar las entrañas de TCP. Establecer un punto de interrupción en esta función y recorrerlo en un sistema en vivo puede dar mucha información. Si eso es difícil, simplemente puede navegar a través de la fuente para obtener una sensación general:

http://fxr.watson.org/fxr/source/netinet/tcp_input.c

Llevará tiempo, al menos varias semanas, comprender el panorama general. Muy emocionante. :-)