Przechodzenie przez stos TCP / IP

Pracowałem jako inżynier QA dla zastrzeżonego wbudowanego systemu operacyjnego. Zbudowali swój własny stos ATN i przejście przez debugger było najbardziej otwierającym oczy doświadczeniem, jakie miałem z networkingiem. Obserwowanie, jak każda warstwa stosu buduje swoją część pakietu, było niesamowite. W końcu możliwość zobaczenia zbudowanego pakietu na przewodzie miała większe znaczenie.

Jako pedagog chciałbym podzielić się tym doświadczeniem z innymi. Czy ktoś wie o prosta metoda przechodzenia przez stos TCP / IP? Idealnie chciałbym coś prostszego niż debugowanie * BSD lub jądra Linuksa, chociaż jeśli jest to jedyna opcja, to kilka wskazówek i trików dla tego procesu byłoby miłe. Stos odniesienia napisany w C / C++ , który może być uruchomiony w trybie użytkownika z Visual Studio lub Eclipse byłby idealny.

Author: Andrew Barber, 2011-12-27

8 answers

To wszystko zależy od tego, na czym chcesz się skupić. Z twojego pytania najbardziej interesuje Cię przepływ danych w różnych warstwach (strumień przestrzeni użytkownika - > napięcie na kablu).

Do tego proponuję użyć http://www.csse.uwa.edu.au/cnet / , który jest pełnym symulatorem sieci. To pozwala przejść przez wszystkie poziomy stosu.

Rzeczywiste systemy zawsze będą miały wyraźne rozróżnienie między warstwami Layer3, Layer2 i Layer1 (Ethernet i CRC-sprawdzanie firmware na chipie, hardware MAC). Będziesz miał problemy z dostaniem się do systemu operacyjnego, a niektóre szczegóły implementacji będą niechlujne i mylące dla uczniów. W przypadku Linuksa będziesz musiał wyjaśnić infrastrukturę jądra, aby nadać sens projektowi stosu TCP / IP.

Jeśli interesuje Cię tylko część TCP / IP, polecam użycie wbudowanego stosu TCP / IP, takiego jak http://www.sics.se / ~ adam / lwip/. Można to włączyć do prostego programu przestrzeni użytkownika i w pełni skonstruować Pakiet TCP / IP.

Należy pamiętać, że istnieje wiele aspektów komunikacji sieciowej, których nie można rozwiązać przechodząc przez stos TCP / IP. Nadal istnieje układ MAC, pomiędzy którym reguluje dostęp do medium, kolizje itp. Poniżej znajduje się układ PHY, który przekłada wszystko na sygnały elektryczne / optyczne, a nawet protokół, który obsługuje komunikację między MAC i PHY. Ponadto nie widzisz wszystkich aspektów związanych z kolejkowaniem, współbieżnością, zasobem systemu operacyjnego przydział ea. Pełny obraz powinien zawierać wszystkie te aspekty, które można zobaczyć tylko w symulatorze sieciowym.

 15
Author: parasietje,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-05 13:19:53

Uruchomiłbym Minixa na maszynie wirtualnej i debugował to. Jest idealny do tego.

Minix jest pełnym systemem operacyjnym ze stosem TCP / IP, więc masz kod, którego potrzebujesz. Jednak w przeciwieństwie do Linuksa / BSD jego korzenie i cel projektowy mają być narzędziem nauczania, więc unika pewnego poziomu złożoności na rzecz bycia jasnym. W rzeczywistości jest to OS Linus Torvalds zaczął hacking na kiedy zaczął z Linuksem: -)

Można uruchomić minix w maszynie wirtualnej, takiej jak VirtualBox lub VMware i debugować go. Są instrukcja na stronie: http://www.minix3.org/

 13
Author: gby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-03 08:23:25

Osobiście nauczyłem się stosu TCP / IP przy użyciu DOS i SoftICE(UPS, przeciekło, że jestem stary). Korzystanie z DOS na maszynie wirtualnej i debugowanie przez sterownik TCP / IP będzie znacznie prostsze, ponieważ twoim celem jest edukacja, jak działa TCP / IP. Nowoczesny system operacyjny wykonuje wiele optymalizacji we/wy sieci i nie jest łatwo go debugować.

Http://www.crynwr.com/ ma kilka sterowników pakietów open source. Debugowanie kodem źródłowym powinno być nieco łatwiejsze.

 11
Author: Peon the Great,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-29 18:36:23

To nie jest dokładnie to, czego szukasz, ale mam nadzieję, że to pomoże

1995-TCP / IP Illustrated, Volume 2: The Implementation ( with Gary R. Wright) - ISBN 0-201-63354-X

Wystarczy przejść przez kod obok siebie. Prawie przechodząc przez doświadczenie. Pan Steven wyjaśnia też kluczowe zmienne. Po prostu super. Uwaga: kod może się zmienić od czasu książki, ale nadal niesamowite.

 7
Author: kgunjikar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-04 01:11:19

Prawdopodobnie projekt lwIP jest tym, czego szukasz, ponieważ może być uruchamiany bez systemu operacyjnego.

Jeśli chodzi o debugowanie jądra Linuksa, nie ma na to zbyt prostego, ale dobrze znanego sposobu. Użyj KGDB . Zainstaluj debugującą wersję jądra Linuksa na maszynie wirtualnej lub na oddzielnym pudełku. I zdalnie podłączyć GDB do tego urządzenia. Prawdopodobnie chciałbyś użyć interfejsu GDB zamiast interfejsu tekstowego. Jeśli potrzebujesz więcej szczegółów na temat debugowania jądra z bardziej kompetentnych ludzi, wystarczy dodać tag "linux" do pytania.

 6
Author: Evgeny Kluev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-04 01:15:37

Napisałem mały podzbiór stosu TCP / IP w 8051 kiedyś było to bardzo pouczające doświadczenie.

Uważam, że najlepszym sposobem na nauczenie się czegoś jest zrobienie tego. Po zakończeniu zadania uzyskaj informacje zwrotne od innych programistów i porównaj swoją implementację z innymi istniejącymi.

Moja opinia może być stronnicza, ale myślę, że zrobienie tego na wbudowanej platformie jest najlepszym sposobem. To, co próbujesz zrobić, to bardzo niski poziom, a komputer tylko zwiększy złożoność problemu. Wbudowany chip nie ma systemu operacyjnego, aby wejść Ci w drogę. Poza tym bardzo satysfakcjonujące jest to, że prosty 8051 reaguje na żądania ping i połączenia telnet.

Kluczem jest zacząć od małego, nie próbuj tworzyć pełnego stosu TCP / IP naraz. Napisz najpierw kod do obsługi komputera MAC, potem IP, Ping, UDP i wreszcie TCP.

Uważam, że studiowanie istniejącej implementacji nie jest dobrym pomysłem. Implementacje TCP / IP są zazwyczaj nadęty kodem, który nie ma związku z Twoim celem.

 3
Author: Cesar Canassa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-05 18:27:32

Pracuję w branży TCP / IP. W BSD i wariantach funkcja tcp_input () jest idealnym punktem wyjścia do eksploracji wnętrz TCP. Ustawienie punktu przerwania tej funkcji i przejście przez nią w systemie NA ŻYWO może dać wiele oświecenia. Jeśli jest to trudne, możesz po prostu przejrzeć źródło, aby uzyskać szerokie odczucie:

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

Potrzeba czasu, przynajmniej wielu tygodni, aby zrozumieć szerszy obraz. Całkiem radosne. :-)

 1
Author: Deepak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-18 20:31:42

Możesz uruchomić stos IP NetBSD w przestrzeni użytkownika w Linuksie lub innym systemie operacyjnym, z gdb lub cokolwiek zobacz http://www.netbsd.org/docs/rump/ i https://github.com/anttikantee/buildrump.sh a następnie np karmić go do urządzenia tun / tap, dzięki czemu można zobaczyć, co na przewodzie.

 0
Author: Justin Cormack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-01 11:20:47