Laboratorium Technologie Sieciowe Podstawowe protokoły transportowe stosowane w sieciach IP cz.1 Wprowadzenie Ćwiczenie przedstawia praktyczną stronę następujących zagadnień: połączeniowy i bezpołączeniowy model komunikacji cechy protokołu UDP cechy protokołu TCP o dzielenie przesyłanych danych na segmenty o logiczną połączeniowość (logical connections, nawiązywanie i rozwiązywanie sesji, three-way handshake) o kontrola przepływu (flow control) wskazywanie przez odbiornik maksymalnego numeru sekwencyjnego opisującego ile pakietów moŝe zostać odebranych bez przepełnienia bufor odbiorczego o bezstratność transmisji - technika numerów sekwencyjnych i kontroli czasu przedawnienia pakietu (time-out): mechanizm potwierdzeń wykrywanie strat pakietów retransmisje o zaleŝność pomiędzy optymalną wielkością okna TCP a iloczynem przepustowości sieci (bandwidth, BW) i opóźnienia dwukierunkowego (ang. Round Trip Time, RTT). Na ćwiczenie składają się 2 zajęcia laboratoryjne. Zaleca się zapamiętywanie dotychczas osiągniętych rezultatów w poprzez zapisywanie stanu maszyny wirtualnej (tzw. snapshot). Stany te najlepiej zgrać sobie na pen-drive. Źródła Postel J., Transmission Control Protocol, IEFT RFC793, 1981. Postel J., User Datagram Protocol, IETF RFC768, 1980. Zadania 1. Ze strony http://sourceforge.net/projects/iperf ściągnąć aplikację JPerf 2.0.0. Jeśli w systemie Windows nie jest zainstalowana wirtualna maszyna Java, naleŝy ją ściągnąć i zainstalować. Jperf uruchamiamy plikiem jperf.bat. Program ten słuŝy do pomiaru szerokości pasma TCP/UDP oraz raportowania róŝnego rodzaju informacji związanych z przesyłanymi danymi, opóźnieniami, stratami pakietów itd. 2. Sprawdzić obecność oraz aktywność w rzeczywistym systemie Windows interfejsu VirtualBox Host-Only Network. 3. Ustawić w maszynie R1 czwartą kartę sieciową tak aby była nią PCnet-FAST III (Sieć izolowana (host-only), 'VirtualBox Host-Only Ethernet Adapter'). 4. Uruchomić obie maszyny wirtualne: A1 (brama Linux) i R1 (router Linux). 5. Przy pomocy poleceń: ifconfig, route w systemie Linux oraz route, ipconfig w systemie Windows naleŝy skonfigurować sieć przedstawioną na rysunku 1. 1
2 Rysunek 1. Schemat sieci wykorzystywanej w ćwiczeniu. Upewnić się, Ŝe funkcja przekazywania pakietów IP przez bramę Linux jest włączona (plik /proc/sys/net/ipv4/ip_forward powinien mieć treść 1 ). 6. Sprawdzić czy tablice routingu w kaŝdym z systemów umoŝliwiają przesył pakietów. 7. Zweryfikować połączenia pomiędzy wszystkimi maszynami za pomocą polecenia ping. Szczególnie waŝne jest, aby rzeczywisty system Windows miał połączenie z systemem wirtualnym B. Wszystkie połączenia powinny działać w obie strony. 8. Korzystając z aplikacji ping dokonać pomiaru średniej wartości parametru RTT pomiędzy hostem rzeczywistym Windows a wirtualnym hostem Linux B obserwując jednocześnie statystyki generowane przez program tcpdump uruchomionym na wirtualnym routerze Linux A w sieci 192.168.0.0. Zanotować uzyskane wyniki. 9. W systemie Linux A zapoznać się z opcjami konfiguracyjnymi emulatora warunków transmisyjnych sieci - NetEm. 10. Skonfigurować emulator NetEm tak, aby wprowadzał on dodatkowe opóźnienie 1000ms. 11. Powtórzyć pomiar średniej wartości parametru RTT pomiędzy hostem rzeczywistym a wirtualnym hostem Linux B obserwując jednocześnie statystyki generowane przez tcpdump (sieć 192.168.0.0, host Linux A). Zanotować uzyskane wyniki. 12. Przywrócić zerowe opóźnienie wprowadzane przez emulator NetEm. 13. W wirtualnym systemie Linux B uruchomić generator ruchu testowego Iperf w trybie instrukcji uŝytkowania (iperf h) zapoznać się z instrukcją. 14. W wirtualnym systemie Linux B uruchomić generator Iperf w trybie serwera działającego przy domyślnej konfiguracji. 15. W rzeczywistym systemie Windows uruchomić analizator Wireshark i rozpocząć rejestrację pakietów przesyłanych przez urządzenie sieciowe odpowiedzialne za połączenie z systemem Linux A, czyli 'VirtualBox Host-Only Ethernet Adapter'. 16. W rzeczywistym systemie Windows uruchomić generator Jperf w trybie klienta działającego przy domyślnej konfiguracji. Połączyć się z serwerem. 17. Podczas testu obserwować statystyki generowane przez tcpdump na hoście Linux A (sieć 192.168.0.0). Zanotować wszystkie uzyskane wyniki, w tym wielkość okna TCP uŝywanego podczas sesji.
18. Zaobserwować procedurę nawiązywania połączenia. Odnaleźć fragment rejestracji - serię pakietów - odpowiadającą przesłaniu trzech komunikatów słuŝących nawiązaniu sesji (ang. three-way handshake). Zapisać wartości odpowiednich znaczników TCP. 3
4 19. Zapisać sekwencję analizowanych pakietów w postaci prostego diagramu interakcji pomiędzy klientem a serwerem (przypominającego diagram sekwencji UML). 20. Zaobserwować analogiczna procedurę rozwiązywania połączenia. Wskazać odpowiednie pakiety. Zapisać wartości odpowiednich znaczników TCP. 21. Zapisać sekwencję analizowanych pakietów w postaci prostego diagramu interakcji pomiędzy klientem a serwerem. 22. Zidentyfikować i ułoŝyć w chronologiczną listę pakiety, których przesłanie wiąŝe się ze zmianami stanów wewnętrznych serwera i klienta TCP. Wskazanym pakietom przypisać stany przedstawione na diagramach:
Źródło: http://en.wikipedia.org/wiki/transmission_control_protocol Basic 3-Way Handshake for Connection Synchronization: TCP A TCP B 1. CLOSED LISTEN 2. SYN-SENT --> <SEQ=100><CTL=SYN> --> SYN-RECEIVED 3. ESTABLISHED <-- <SEQ=300><ACK=101><CTL=SYN,ACK> <-- SYN-RECEIVED 4. ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK> --> ESTABLISHED 5. ESTABLISHED --> <SEQ=101><ACK=301><CTL=ACK><DATA> --> ESTABLISHED Normal Close Sequence: TCP A TCP B 1. ESTABLISHED ESTABLISHED 2. (Close) FIN-WAIT-1 --> <SEQ=100><ACK=300><CTL=FIN,ACK> --> CLOSE-WAIT 3. FIN-WAIT-2 <-- <SEQ=300><ACK=101><CTL=ACK> <-- CLOSE-WAIT 4. (Close) TIME-WAIT <-- <SEQ=300><ACK=101><CTL=FIN,ACK> <-- LAST-ACK 5. TIME-WAIT --> <SEQ=101><ACK=301><CTL=ACK> --> CLOSED 6. (2 MSL) CLOSED 5