7. cvičení - Protokoly TCP a UDP

Cíle cvičení

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: