Narzędzia użytkownika

Narzędzia witryny


Pasek boczny

sk1:transport

To jest stara wersja strony!


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

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.
Żeby system operacyjny wiedział który proces czeka na wiadomości kierowane na konkretny port, trzeba wpierw powiązać (bind) numer portu z procesem.

Lista domyślnych portów:

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 216 (0÷65535).
Ten zakres jest podzielony na porty [RFC6335]:

  • uprzywilejowane (system / well-known / privileged) – 1÷1023
    jako lokalne porty mogą być używane tylko przez uprzywilejowanego użytkownika (root / administrator),
  • zarejestrowane 1) (user / registered) – 1024÷49151
    mogą zostać zarejestrowane (tzn. przypisane do konkretnego zastosowania w rejestrze utrzymywanym przez IANA),
  • efemeryczne (dynamic / private / ephemeral) – 49152÷65535
    używane kiedy program nie potrzebuje stałego numeru portu (czyli zwykle kiedy program nawiązuje połączenie).
    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
    .

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:

  • GNU netcat (rozpoznawanie: man nc / man netcat przedstawia się jako GNU netcat)
  • "oryginalny" netcat (rozpoznawanie: man nc / man netcat ma kota w ASCII art)
  • BSD netcat (rozpoznawanie: man nc / man netcat przedstawia się jako .*BSD netcat)
  • busybox nc (rozpoznawanie: używasz busyboxa)

Serwer (GNU / "oryginalny" / bb) Serwer (BSD) Klient
TCPnc    -l -p 12345 nc    -l 12345 nc    10.0.0.1 12345
UDPnc -u -l -p 12345 nc -u -l 12345 nc -u 10.0.0.1 12345

Mniej popularny, bardziej rozbudowany (i wciąż rozwijany) socat

Serwer Klient
TCPsocat TCP-LISTEN:12345 - socat - TCP-CONNECT:10.0.0.1:12345
UDPsocat UDP-RECV:12345 - socat - UDP-SENDTO:10.0.0.1:12345
UDPsocat UDP-LISTEN:12345 - socat - UDP:10.0.0.1:12345
SCTPsocat SCTP-LISTEN:12345 - socat - SCTP-CONNECT:10.0.0.1:12345

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]

Inne przykłady:

  • Przykład HTTP: Wyślij na port 80 adresu www.put.poznan.pl (np.nc www.put.poznan.pl 80) tekst:
    GET /
    
    

    (pusta linia ma znaczenie)

  • Uruchom socat tcp-l:12345,fork -, przyłącz kilka osób
  • socat tcp-l:12345,reuseaddr -
  • Dowiedz się po co socat ma dwa argumenty: socat tcp-l:8080,fork tcp:fc.put.poznan.pl:80
  • Przykład FTP: Przez połączenie nc sunsite.icm.edu.pl 21 wyślij:
    USER anonymous
    PASS anonymous
    EPSV

    Dalej: otwórz połączenie na ten sam adres i otrzymany w odpowiedzi port
    Przez pierwsze połączenie wyślij:

    LIST
    QUIT

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).

Pozwala na używanie rozgłoszeń / multicastów

Protokoły / programy używające UDP: DNS, DHCP, strumieniowanie dźwięku (multimediów), gry sieciowe

TCP

Nagłówek TCP - [1] [2]

  • flagi - syn, ack, fin, rst [1], psh,
  • numery sekwencyjne i numery potwierdzenia,
  • rozmiar okna,
  • opcje.
  • Pojedyncze wiadomości TCP nazywa się segmentami (dlatego że są częścią strumienia)
  • 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 [1] [2]
    • nawiązanie połączenia,
    • podtrzymywanie połączenia,
    • zakończenie połączenia, półzakończenie,
    • zerwanie połączenia.
  • na jego podstawie zdefiniowana jest warstwa transportowa w modelu TCP/IP.

Algorytm Nagle'awindow scale option, RTTM, congestion control (przeciążenie), ECN [1] [2], skaner portów, SYN flood

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
1) czy ktoś zna jakieś lepsze tłumaczenie na polski nazwy "user ports" lub "registered ports"?
sk1/transport.1525945183.txt.gz · ostatnio zmienione: 2018/05/10 11:39 przez jkonczak