przejście do zawartości
Jan Kończak
Narzędzia użytkownika
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
Ostatnie zmiany
Menadżer multimediów
Indeks
Jesteś tutaj:
start
»
sk1
»
transport
sk1:transport
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
===== Przypomnienie modelu warstwowego ===== ====== Protokoły warstwy transportowej ====== Przypomnienie: skąd wiadomo jaki jest używany: \\ https://pl.wikipedia.org/wiki/IPv4#Nag.C5.82.C3.B3wek_IP Lista przydzielonych numerów protokołów * http://www.iana.org/assignments/protocol-numbers * ''/etc/protocols'' (''less /etc/protocols'') ===== Port, połączenie ===== System operacyjny wybiera do jakiego programu ma trafić wiadomość na podstawie numeru **protokołu warstwy transportowej** oraz **numeru portu** – adresu na warstwie transportowej.\\ <html><small></html>Żeby system operacyjny wiedział który proces czeka na wiadomości kierowane na konkretny port, trzeba wpierw powiązać (''bind'') numer portu z procesem.<html></small></html> Lista domyślnych portów: * http://www.iana.org/assignments/service-names-port-numbers * ''/etc/services'' **Połączenie** między dwoma programami jest identyfikowane na podstawie: * adresu zdalnego, * adresu lokalnego, * protokołu, * portu zdalnego, * portu lokalnego. Protokoły warstwy transportowej używają zwykle numerów portu z zakresu 2<html><sup>16</sup></html> (0÷65535).\\ Ten zakres jest podzielony na porty [[https://tools.ietf.org/html/rfc6335#section-8.1.2|[RFC6335]]]: * uprzywilejowane (system / well-known / privileged) – 1÷1023 \\ jako lokalne porty mogą być używane tylko przez uprzywilejowanego użytkownika (root / administrator), * //zarejestrowane// ((czy ktoś zna jakieś lepsze tłumaczenie na polski nazwy "user ports" lub "registered ports"?)) (user / registered) – 1024÷<html><small>49151</small></html> \\ mogą zostać zarejestrowane (tzn. przypisane do konkretnego zastosowania w rejestrze utrzymywanym przez IANA), * efemeryczne (dynamic / private / ephemeral) – <html><small>49152</small></html>÷65535 \\ używane kiedy program nie potrzebuje stałego numeru portu (czyli zwykle kiedy program nawiązuje połączenie). \\ <html><small></html>W implementacjach systemów operacyjnych zwykle granica między user ports a ephemeral jest niższa, np. w Linuksie zakres portów efemerycznych można odczytać wykonując jedną z poniższych komend: \\ ''sysctl net.ipv4.ip_local_port_range'' \\ ''cat /proc/sys/net/ipv4/ip_local_port_range'' <html></small></html>. ===== Monitorowanie bieżących połączeń ===== * ''netstat [|-a|-l] [-t] [-u] [-p] [-n]'' (np. ''netstat -atupn'') * ''ss [|-a|-l] [-t] [-u] [-p] [-n]'' (np. ''ss -atupn'')<html><span style="font-size:80%; line-height: 100%;"><pre> Przełączniki dla netstat / ss: ┌ (domyślnie) tylko już nawiązane połączenia │ -l nasłuchujące porty (programy czekające aż ktoś do nich się połączy) └ -a nasłuchujące porty + nawiązane połączenia ┌ (domyślnie) wszystkie wspierane protokoły sieciowe │ -t połączenia protokołu TCP └ -u połączenia protokołu UDP -p nazwa i pid programu do którego należy połączenie -n pokazywanie wszystkich wartości numerycznie, np. '22' zamiast 'ssh' Więcej: netstat -h / ss -h </pre></span></html> * ''/proc/net/(tcp|udp|…)'' (np. ''cat /proc/net/tcp'') ===== Testowanie łączności na warstwie aplikacji ===== Testowanie łączności programami ''netcat'' / ''nc'' oraz ''socat'' <html><small></html> Najpopularniejszy program netcat / nc ma wiele wersji, między innymi: * [[http://netcat.sourceforge.net/|GNU netcat]] (rozpoznawanie: ''man nc'' / ''man netcat'' przedstawia się jako GNU netcat) * [[http://nc110.sourceforge.net/|"oryginalny" netcat]] (rozpoznawanie: ''man nc'' / ''man netcat'' ma kota w ASCII art) * [[http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/nc/|BSD netcat]] (rozpoznawanie: ''man nc'' / ''man netcat'' przedstawia się jako .*BSD netcat) * [[http://www.busybox.net/downloads/BusyBox.html#nc|busybox nc]] (rozpoznawanie: używasz busyboxa) <html></small></html> ^ ^ <html><small></html>Serwer (GNU / "oryginalny" / bb) <html></small></html> ^ Serwer (BSD) ^ Klient ^ | TCP|<html><small></html>''nc -l -p 12345'' <html></small></html> |''nc -l 12345'' |''nc 10.0.0.1 12345'' | | UDP|<html><small></html>''nc -u -l -p 12345'' <html></small></html> |''nc -u -l 12345'' |''nc -u 10.0.0.1 12345'' | Mniej popularny, bardziej rozbudowany (i wciąż rozwijany) [[http://www.dest-unreach.org/socat/|socat]] ^ ^ Serwer ^ Klient ^ | TCP|''socat TCP-LISTEN:12345 -'' |''socat - TCP-CONNECT:10.0.0.1:12345'' | | UDP|''socat UDP-RECV:12345 -'' |''socat - UDP-SENDTO:10.0.0.1:12345'' | | UDP|''socat UDP-LISTEN:12345 -'' |''socat - UDP:10.0.0.1:12345'' | | SCTP|''socat SCTP-LISTEN:12345 -'' |''socat - SCTP-CONNECT:10.0.0.1:12345''| <html><small></html>Socat nie rozróżnia wielkości liter, pozwala na skróty - np. ''udp-l'' jako ''udp-listen'' czy ''tcp'' jako ''tcp-connect'' \\ Adresy IPv6 podaje się w nawiasach kwadratowych (sic!), np. [::1]<html></small></html> Inne przykłady: * Przykład HTTP: Wyślij na port 80 adresu www.put.poznan.pl (np.''nc www.put.poznan.pl 80'') tekst: <code>GET / </code> (pusta linia ma znaczenie) * <html><small></html>Uruchom ''socat tcp-l:12345,fork -'', przyłącz kilka osób<html></small></html> * <html><small></html>''socat tcp-l:12345,reuseaddr -''<html></small></html> * <html><small></html>Dowiedz się po co socat ma dwa argumenty: ''socat tcp-l:8080,fork tcp:fc.put.poznan.pl:80''<html></small></html> * <html><small></html> Przykład FTP: Przez połączenie ''nc sunsite.icm.edu.pl 21'' wyślij: <code>USER anonymous PASS anonymous EPSV</code>Dalej: otwórz połączenie na ten sam adres i otrzymany w odpowiedzi port \\ Przez pierwsze połączenie wyślij: <code>LIST QUIT</code> <html></small></html> ====== UDP ====== **[[http://tools.ietf.org/html/rfc768]]** Działanie: * bezpołączeniowy, bezstanowy, * brak kontroli przepływu, * brak gwarancji dostarczenia, * przesyła wiadomości (datagramy). Wielkość **datagramów** ograniczona do 64k (zwykle wysyła się mniejsze). <html><small>Pozwala na używanie rozgłoszeń / multicastów</small></html> Protokoły / programy używające UDP: DNS, DHCP, strumieniowanie dźwięku (multimediów), gry sieciowe ====== TCP ====== Nagłówek TCP - [[http://tools.ietf.org/html/rfc793#section-3.1|[1]]] [[http://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure|[2]]] * flagi - syn, ack, fin, rst [[http://tools.ietf.org/html/rfc793#page35|[1]]], psh, * numery sekwencyjne i numery potwierdzenia, * rozmiar okna, * opcje. * Pojedyncze wiadomości TCP nazywa się **segmentami** <html><small></html>(dlatego że są częścią strumienia)<html></small></html> * **Strumieniowy** – przenosi strumień danych – zachowuje kolejność danych, ale gubi podział danych na porcje * **Kontrola przepływu**, potwierdzenia, skalowanie wielkości okna * Buforowanie * **Połączeniowy** (punkt-punkt) i **stanowy** – diagram stanów [[http://tools.ietf.org/html/rfc793#page-23|[1]]] [[http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Protocol_operation|[2]]] * nawiązanie połączenia, * podtrzymywanie połączenia, * zakończenie połączenia, półzakończenie, * zerwanie połączenia. * **[[http://www.cs.put.poznan.pl/jkonczak/tcp_flow.svg|normalny przebieg połączenia]]** * na jego podstawie zdefiniowana jest warstwa transportowa w modelu TCP/IP. <html><small></html> [[https://pl.wikipedia.org/wiki/Algorytm_Nagle'a|Algorytm Nagle'a]][[http://tools.ietf.org/html/rfc7323|window scale option, RTTM]], [[http://en.wikipedia.org/wiki/TCP_congestion-avoidance_algorithm|congestion control (przeciążenie)]], ECN [[https://tools.ietf.org/html/rfc3168|[1]]] [[http://en.wikipedia.org/wiki/Explicit_Congestion_Notification|[2]]], [[http://en.wikipedia.org/wiki/Port_scanner|skaner portów]], [[http://tools.ietf.org/html/rfc4987|SYN flood]] <html></small></html> Protokoły / programy używające TCP - "wszysto", np. http, ftp, ssh, ssl, … ===== Inne protokoły warstwy transportu ===== Poza TCP (75%-95% ruchu) i UDP (reszta) można spotkać jeszcze na warstwie transportowej następujące protokoły ogólnego przeznaczenia: * UDP-lite * DCCP * SCTP
sk1/transport.1525951228.txt.gz
· ostatnio zmienione: 2018/05/10 13:20 przez
jkonczak
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Złóż / rozłóż wszystko
Do góry