7. cvičení - Protokoly TCP a UDP
Cíle cvičení
- Zjištění portů významných služeb.
- Inspekce TCP segmentu.
- Rozbor navazování TCP spojení.
- Zjistit stavy spojení z/do virtuálního počítače.
- Rozbor ukončování TCP spojení.
- Simulace ztráty segmentu a pozorování chování.
- Identifikace a pozorování posuvného okna při přenosu dat.
- Zachytávání a inspekce UDP datagramů.
- Filtrovaní aplikací.
- Programování klasických síťových aplikací - jednoduchý chat.
Zjistit porty významných služeb
Pro identifikaci programu, se kterým se má na vzdáleném počítači komunikovat se používá port. Pro běžné služby přiděluje "standardní" čísla portů organizace IANA.
Úkol: Zjistit "standardní" porty alespoň 5 služeb. Například SSH, FTP(S), SMB, SMTP, POP3(S), IMAP(S), HTTP(S), DHCP, SNMP.
Inspekce TCP segmentu
TCP segment má následující strukturu.
Úkol: Zachytit TCP segment a popište alespoň 6 jeho položek.
Rozbor navazování TCP spojení
Postup navazování TCP spojení je popsán například zde. Nebo ve slidech k 7. přednášce.
Úkol: Zachytit TCP segmenty sloužící k navázání spojení a popište jak navazování probíhá.
Zjištění portů významných služeb, inspekce TCP segmentu a Rozbor navazování TCP spojení jsou za 1 bod.
Zjistit stavy spojení z/do virtuálního počítače
Ke zjištění stavů spojení z/do počítače lze na linuxu i na Windows použít program netstat
Úkol: Zjistit stavy, zdrojové a cílové porty a zdrojové a cílové adresy spojení z/do virtuálního počítače.
Rozbor ukončování TCP spojení
Postup ukončování TCP spojení je popsán ve slidech k 7. přednášce.
Úkol: Zachytit TCP segmenty sloužící k ukončení spojení a popište jak ukončení spojení probíhá.
Zjištění stavů spojení z/do virtuálního počítače a rozbor ukončování TCP spojení jsou za 1 bod.
Simulace ztráty segmentu a pozorování chování
TCP zajišťuje spojovanou spolehlivou službu, která detekuje a znovu posílá poškozené nebo ztracené segmenty.
Úkol: Nasimulovat ztrátu segmentů (přerušením linky) a zachyťte opakované odeslání segmentů.
Identifikace a pozorování posuvného okna při přenosu dat
Při odesílání většího množství dat TCP umožňuje odesílat segmenty bez potvrzení a potvrzovat přijetí až celé sekvence segmentů a nepotvrzovat každý segment zvlášť. Tento postup zabraňuje zahlcení příjemce.
K zajištění tohoto chování se používá posuvné okno (sliding window), do kterého si příjemce ukládá přijaté nepotvrzené segmenty. Velikost okna příjemce navrhuje při navazování spojení.
Více informací o posuvném oknu je možné nalézt ve slidech k 7. přednášce.
Úkol: Zachytit segmenty při jejichž přijímání bylo použito posuvné okno. Například při stahování nějakého většího souboru.
Simulace ztráty segmentu a pozorování jeho chování a identifikace a pozorování posuvného okna při přenosu dat jsou za 1 bod.
Zachytávání a inspekce UDP datagramů
UDP datagram má následující strukturu.
Úkol: Zachytit UDP datagram například od webového prohlížeče, když zadáte dříve nepoužité doménové jméno.
Filtrovaní aplikací
Na Windows slouží k filtrovaní příchozích spojení Windows Firewall. Návod jak sním pracovat je například na této stránce.
V Linuxu slouží k filterování příchozích spojení iptables. Návod k jejich použití je například zde.
Například pravidlo pro odmítání příchozích TCP spojení na rozhraní eth1 a port 80 (HTTP). Může vypadat takto.
iptables -A INPUT -p tcp -i eth1 --dport 80 -j REJECT
Úkol: Na windows spustit vzdálený přístup (Remote Desktop) (Start -> Control Panel -> System, záložka Remote a zaškrtnout "Enable Remote Desktop on this computer"). Zapnout firewall a povolit v něm přístup spojení na Remote Desktop.
Úkol: Na linuxu nastavit odmítání spojení SSH na rozhraní eth1.
Zachytávání UDP datagramů a nastavení firewall je za 1 bod.
Programování klasických síťových aplikací - jednoduchý chat
Práce s TCP sockety je možná jak ve windows tak v linuxu.
Popis jednotlivých metod pro práci s touto rodinou socketů lze nalézt zde v části Transportní vrstva (Protokoly TCP a UDP) a jak napsat TCP server a klienta je v seriálu o Socket API na Builder.cz.
Jednotlivé díly seriálu jsou zde:
Úkol (Za 2 body): Napsat klient a server jednoduchého chatu (v kombinaci klient na linuxu a server na windows nebo obráceně klient na windows a server na linuxu).
Serveru se při startu zadá port, na kterém má naslouchat. V nekonečné smyčce přijímá TCP spojení od klientů. Přijme text z tohoto spojení a uloží si ho spolu s IP adresou klienta do paměti jako nový řádek, odešle pomocí tohoto spojení dosavadní obdržené zprávy v textové podobě a uzavře připojení.
Klient při startu obdrží IP adresu serveru a port serveru. V nekonečné smyčce čeká na vstup od uživatele. Připojí se k serveru. Odešle vstup od uživatele serveru a přijme od něj dosavadní komunikaci a vypíše ji.
Zpráva končí znakem nového řádku nebo znakem konce souboru.
Výstup klienta může vypadat takto:
$ ./tcp-klient 127.0.0.1 10000 zadejte zpravu: kratka zprava --------------------------------------- dosavadni konverzace: 192.168.1.2: predchozi zprava 127.0.0.1: kratka zprava --------------------------------------- zadejte zpravu: dalsi zprava --------------------------------------- dosavadni konverzace: 192.168.1.2: predchozi zprava 127.0.0.1: kratka zprava 127.0.0.1: dalsi zprava --------------------------------------- zadejte zpravu: