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.
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.
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/
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.
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.
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.
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.
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. :-)
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.
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