User Tools

Site Tools


sk1:transport

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
sk1:transport [2018/05/10 09:39] – [Port, połączenie] jkonczaksk1:transport [2018/05/13 21:42] (current) – [TCP] jkonczak
Line 3: Line 3:
 ====== Protokoły warstwy transportowej ====== ====== Protokoły warstwy transportowej ======
  
-Przypomnienie: skąd wiadomo jaki jest używany: \\ https://pl.wikipedia.org/wiki/IPv4#Nag.C5.82.C3.B3wek_IP+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 Lista przydzielonych numerów protokołów
Line 11: Line 11:
 ===== Port, połączenie ===== ===== 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.\\ +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>+ 
 +Program który chce używać sieci może: 
 +  * **nasłuchiwać** – czekać na nowe wiadomości / nowe połączenia – nazywa się go wtedy **serwerem** 
 +  * wysłać wiadomość / połączyć się pod wskazany adres – nazywa się go wtedy **klientem** \\ <html><small>(program może jednocześnie pełnić rolę serwerów i klienów)</small></html> 
 + 
 +Ż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: Lista domyślnych portów:
Line 32: Line 38:
      
 ===== Monitorowanie bieżących połączeń ===== ===== Monitorowanie bieżących połączeń =====
-  * ''netstat [-a|-l] [-t] [-u] [-p] [-n]'' (np. ''netstat -atupn'') +  * ''netstat [|-a|-l] [-t] [-u] [-p] [-n]'' (np. ''netstat -atupn'') 
-  * ''ss      [-a|-l] [-t] [-u] [-p] [-n]'' (np. ''ss -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'')   * ''/proc/net/(tcp|udp|…)'' (np. ''cat /proc/net/tcp'')
 +
 +<html><pre>
 +# netstat -atunp
 +Active Internet connections (servers and established)
 +Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
 +<span title="Program nasłuchujący na porcie 22 (porcie serwera SSH) na nowe połączenia TCP" style="background-color:rgba(0,255,0,0.2)">tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      13830/sshd</span>
 +tcp        0      0 <span title="Program nasłuchujący na IP 0.0.0.0 odbierze połączenia kierowane na dowolny adres IP tego komputera" style="background-color:rgba(255,0,255,0.2)">0.0.0.0</span>:25              0.0.0.0:*               LISTEN      <span title="PID i nazwa programu do którego należy połączenie" style="background-color:rgba(0,0,0,0.2)">28693/exim4</span>
 +tcp        0      0 <span title="Program nasłuchujący na IP 127.0.0.1 odbierze połączenia kierowane **tylko** na adres 127.0.0.1" style="background-color:rgba(255,0,255,0.2)">127.0.0.1</span>:631           0.0.0.0:*               LISTEN      26745/cupsd
 +<span title="Nawiązane połączenie TCP" style="background-color:rgba(0,0,255,0.15)">tcp        0    780 10.0.1.1:22             150.254.33.66:38126     ESTABLISHED 19424/sshd: usernam</span>
 +tcp        0      0 <span title="Adres lokalny: jedno z IP tego komutera i port 38596 (efemeryczny – najpewniej wylosowany przez system operacyjny przed nawiązywaniem połączenia)" style="background-color:rgba(255,0,255,0.2)">10.0.1.1:38596</span>          <span title="Adres zdalny: IP 150.254.30.199 i port https" style="background-color:rgba(255,0,255,0.2)">150.254.30.199:443</span>      ESTABLISHED 19481/weechat
 +<span title="tcp6 oznacza IPv6 i TCP – program nasłuchuje na dowolnym adresie (czyli ::)" style="background-color:rgba(0,255,0,0.2)">tcp6       0      0 :::22                   :::*                    LISTEN      13830/sshd</span>
 +<span title="połączenie UDP – może być zarówno klientem jak i serwerem" style="background-color:rgba(255,255,0,0.3)">udp        0      0 0.0.0.0:68              0.0.0.0:*                           14541/dhclient</span>
 +udp        0      0 10.0.1.1:53             0.0.0.0:*                           22173/named
 +<span title="przykład programu który jest klientem UDP" style="background-color:rgba(0,255,255,0.3)">udp      768      0 0.0.0.0:35722           0.0.0.0:*                           21533/snmpwalk</span>
 +</pre></html>
  
 ===== Testowanie łączności na warstwie aplikacji  ===== ===== Testowanie łączności na warstwie aplikacji  =====
Line 41: Line 73:
  
 <html><small></html> <html><small></html>
-Najpopularniejszy program netcat / nc ma wiele wersji, między innymi: + 
 +Najpopularniejszy program netcat / nc ma wiele wersji [[https://en.wikipedia.org/wiki/Netcat#Ports_and_reimplementations|[1]]], między innymi:  
 +  * [[http://nc110.sourceforge.net/|"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")
   * [[http://netcat.sourceforge.net/|GNU netcat]] (rozpoznawanie: ''man nc'' / ''man netcat'' przedstawia się jako GNU netcat)   * [[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'' zawiera tekst BSD)
-  * [[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)   * [[http://www.busybox.net/downloads/BusyBox.html#nc|busybox nc]] (rozpoznawanie: używasz busyboxa)
 <html></small></html> <html></small></html>
  
 ^     ^ <html><small></html>Serwer (GNU / "oryginalny" / bb) <html></small></html>   ^ Serwer (BSD)      ^  Klient                 ^ ^     ^ <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'' |+|  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'' | |  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]] Mniej popularny, bardziej rozbudowany (i wciąż rozwijany) [[http://www.dest-unreach.org/socat/|socat]]
 ^      ^ Serwer                        ^ Klient                                ^ ^      ^ Serwer                        ^ Klient                                ^
-|   TCP|''socat TCP-LISTEN:12345 -''   |''socat - TCP-CONNECT:10.0.0.1:12345'' | +|   TCP|''socat TCP-LISTEN:12345 STDIO''   |''socat STDIO TCP-CONNECT:10.0.0.1:12345'' | 
-|   UDP|''socat UDP-RECV:12345 -''     |''socat - UDP-SENDTO:10.0.0.1:12345''  | +|   UDP|''socat UDP-RECV:12345 STDIO''     |''socat STDIO UDP-SENDTO:10.0.0.1:12345''  | 
-|   UDP|''socat UDP-LISTEN:12345 -''   |''socat - UDP:10.0.0.1:12345''         | +|   UDP|''socat UDP-LISTEN:12345 STDIO''   |''socat STDIO UDP:10.0.0.1:12345''         | 
-|  SCTP|''socat SCTP-LISTEN:12345 -''  |''socat - SCTP-CONNECT:10.0.0.1:12345''|+|  SCTP|''socat 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'')
  
 <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'' \\ <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>+Adresy IPv6 podaje się w nawiasach kwadratowych, np. [::1]<html></small></html>
  
-Inne przykłady: +++++ 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 /+  * HTTP: Wyślij na port 80 adresu www.put.poznan.pl tekst: \\ (możesz też wykorzystać TCP+SSL: ''socat <nowiki>ssl:www.put.poznan.pl:443</nowiki> readline''): <html><pre style="margin-bottom: 0px">GET / HTTP/1.0
  
  
-</code> (pusta linia ma znaczenie) +</pre></html>(pusta linia ma znaczenie) 
-  * <html><small></html>Uruchom ''socat tcp-l:12345,fork -'', przyłącz kilka osób<html></small></html> +  * Uruchom ''socat tcp-l:12345,fork -'', przyłącz kilka osób 
-  * <html><small></html>''socat tcp-l:12345,reuseaddr -''<html></small></html> +  * Dowiedz się po co socat ma dwa argumenty: ''socat tcp-l:8080,fork tcp:fc.put.poznan.pl:80'' + http://localhost:8080 
-  * <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> +  * FTP: Przez połączenie ''nc sunsite.icm.edu.pl 21'' wyślij: <code>USER anonymous
-  * <html><small></html> Przykład FTP: Przez połączenie ''nc sunsite.icm.edu.pl 21'' wyślij: <code>USER anonymous+
 PASS 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 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> QUIT</code>
-  <html></small></html>+ 
 +++++
  
 ====== UDP ====== ====== UDP ======
Line 94: Line 128:
 ====== TCP ====== ====== 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]]] 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,+  * flagi - syn, ack, fin, rst [[http://tools.ietf.org/html/rfc793#page-36|[1]]], psh,
   * numery sekwencyjne i numery potwierdzenia,   * numery sekwencyjne i numery potwierdzenia,
   * rozmiar okna,   * rozmiar okna,
Line 112: Line 146:
   * na jego podstawie zdefiniowana jest warstwa transportowa w modelu TCP/IP.   * 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> [[https://pl.wikipedia.org/wiki/Algorytm_Nagle'a|Algorytm Nagle'a]][[http://tools.ietf.org/html/rfc7323|window scale option, RTTM]], [[https://en.wikipedia.org/wiki/Sliding_window_protocol|sliding window]], [[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> <html></small></html>
  
sk1/transport.1525945183.txt.gz · Last modified: (external edit)