Narzędzia użytkownika

Narzędzia witryny


sk1:transport

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
sk1:transport [2018/05/10 13:20]
jkonczak [Monitorowanie bieżących połączeń] aghr...
sk1:transport [2018/05/13 23:42] (aktualna)
jkonczak [TCP]
Linia 3: Linia 3:
 ====== Protokoły warstwy transportowej ====== ====== Protokoły warstwy transportowej ======
  
-Przypomnienieską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
Linia 11: Linia 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:
Linia 33: Linia 39:
 ===== 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''​)<​html><​span style="​font-size:​80%;​ line-height:​ 100%;"><​pre>​+  * ''​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: Przełączniki dla netstat / ss:
 ┌      (domyślnie) tylko już nawiązane połączenia ┌      (domyślnie) tylko już nawiązane połączenia
Linia 46: Linia 52:
 </​pre></​span></​html> ​ </​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 ​ =====
Linia 52: Linia 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 ======
Linia 105: Linia 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,
Linia 123: Linia 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.1525951228.txt.gz · ostatnio zmienione: 2018/05/10 13:20 przez jkonczak