Spis treści

Przypomnienie modelu warstwowego

Protokoły warstwy transportowej

Przypomnienie skąd wiadomo jaki protokół warstwy transportowej 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.

Program który chce używać sieci może:

Żeby system operacyjny wiedział który proces czeka na wiadomości kierowane na konkretny port (nasłuchuje), proces musi wpierw zażądać nasłuchiwania na wybranym porcie.

Lista domyślnych portów:

Połączenie między dwoma programami jest identyfikowane na podstawie:

Protokoły warstwy transportowej używają zwykle numerów portu z zakresu 216 (0÷65535).
Ten zakres jest podzielony na porty [RFC6335]:

Monitorowanie bieżących połączeń

# netstat -atunp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      13830/sshd
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      28693/exim4
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      26745/cupsd
tcp        0    780 10.0.1.1:22             150.254.33.66:38126     ESTABLISHED 19424/sshd: usernam
tcp        0      0 10.0.1.1:38596          150.254.30.199:443      ESTABLISHED 19481/weechat
tcp6       0      0 :::22                   :::*                    LISTEN      13830/sshd
udp        0      0 0.0.0.0:68              0.0.0.0:*                           14541/dhclient
udp        0      0 10.0.1.1:53             0.0.0.0:*                           22173/named
udp      768      0 0.0.0.0:35722           0.0.0.0:*                           21533/snmpwalk

Testowanie łączności na warstwie aplikacji

Testowanie łączności programami netcat / nc oraz socat

Najpopularniejszy program netcat / nc ma wiele wersji [1], między innymi:

  • "oryginalny" netcat (rozpoznawanie: man nc / man netcat ma kota w ASCII art lub informację "Netcat was written by a guy we know as the Hobbit")
  • GNU netcat (rozpoznawanie: man nc / man netcat przedstawia się jako GNU netcat)
  • BSD netcat (rozpoznawanie: man nc / man netcat zawiera tekst BSD)
  • 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 STDIO socat STDIO TCP-CONNECT:10.0.0.1:12345
UDPsocat UDP-RECV:12345 STDIO socat STDIO UDP-SENDTO:10.0.0.1:12345
UDPsocat UDP-LISTEN:12345 STDIO socat STDIO UDP:10.0.0.1:12345
SCTPsocat SCTP-LISTEN:12345 STDIO socat STDIO SCTP-CONNECT:10.0.0.1:12345

Zamiast STDIO możesz pisać - (dodatkowo w większości dystrybucji można też skorzystać z readline)

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, np. [::1]

Przykłady:

UDP

http://tools.ietf.org/html/rfc768

Działanie:

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]

Algorytm Nagle'awindow scale option, RTTM, sliding window, 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:

1) czy ktoś zna jakieś lepsze tłumaczenie na polski nazwy "user ports" lub "registered ports"?