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/protocol-numbers.xhtml * ''/etc/protocols'' (''less /etc/protocols'') ===== Port, połączenie ===== System operacyjny wybiera do jakiego programu ma trafić wiadomość na podstawie **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 0÷65535.\\ Ten zakres jest podzielony na porty: * uprzywilejowane (system / well-known / privileged) – 1÷1023, * //zarejestrowane// (polskie tłumaczenie?) (user / registered) – 1024 ÷ 49151, * efemeryczne (dynamic / private / ephemeral) – 49152÷65535. ===== 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'') * ''/proc/net/(tcp|udp|…)'' (np. ''cat /proc/net/tcp'') ===== Testowanie łączności na warstwie aplikacji ===== Testowanie łączności programami ''netcat'' / ''nc'' oraz ''socat'' 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) ^ ^ Serwer (GNU / "oryginalny" / bb) ^ Serwer (BSD) ^ Klient ^ | TCP|''nc -l -p 12345'' |''nc -l 12345'' |''nc 10.0.0.1 12345'' | | UDP|''nc -u -l -p 12345'' |''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: * Wyślij na port 80 adresu www.put.poznan.pl (np.''nc www.put.poznan.pl 80'') tekst ''GET /'' zakończony dwoma pustymi liniami * ''socat tcp-l:12345,reuseaddr -'' * Uruchom ''socat tcp-l:12345,fork -'', przyłącz kilka osób * <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> ====== UDP ====== http://tools.ietf.org/html/rfc768 Nagłówek Działanie: * bezpołączeniowy, bezstanowy, * brak kontroli przepływu, * brak gwarancji dostarczenia, * przesyła wiadomości (datagramy). Wielkość **datagramów**, suma kontrolna. Relizuje dokładnie zadania warstwy transportu w modelu ISO/OSI <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. * **Segment** TCP * **Strumieniowy** – strumień (kolejnść!) danych * **Kontrola przepływu**, potwierdzenia, wielkość okna * Buforowanie * **Połączeniowy** (punkt-punkt) i **stanowy** [[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]]. * Relizuje zadania warstwy transportu i sesji (!) w modelu ISO/OSI, * na jego podstawie zdefiniowana jest warstwa transportowa w modelu TCP/IP. * [extra] [[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]] Protokoły / programy używające TCP - "wszysto", np. http, ftp, ssh, ssl, … ===== Inne protokoły warstwy transportu ===== UDPlite\\ DCCP\\ SCTP
sk1/transport.1462817661.txt.gz
· ostatnio zmienione: 2016/05/09 20:14 przez
jkonczak
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Złóż / rozłóż wszystko
Do góry