.\" -*- coding: UTF-8 -*- .\" Copyright 1999, Andi Kleen .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-1-para .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH ip 7 "8 lutego 2026 r." "Linux man\-pages 6.18" .SH NAZWA ip \- Implementacja protokołu IPv4 dla systemu Linux .SH SKŁADNIA .nf .\" .B #include -- does not exist anymore .\" .B #include -- never include \fB#include \fP \fB#include \fP \fB#include \fP /* nadzbiór poprzedniego */ .P \fItcp_socket\fP\fB = socket(AF_INET, SOCK_STREAM, 0);\fP \fIudp_socket\fP\fB = socket(AF_INET, SOCK_DGRAM, 0);\fP \fIraw_socket\fP\fB = socket(AF_INET, SOCK_RAW, \fP\fIprotocol\fP\fB);\fP .fi .SH OPIS Linux implementuje protokół IPv4 opisany w RFC\ 791 i RFC\ 1122. \fBip\fP zawiera drugi poziom implementacji adresowania grupowego (multicasting) zgodny z RFC\ 1112. Zawiera też router IP, włączając w to filtr pakietów. .P Interfejs programistyczny jest zgodny z gniazdami BSD. Więcej informacji na temat gniazd można znaleźć, przeglądając \fBsocket\fP(7). .P Gniazdo IP jest tworzone za pomocą \fBsocket\fP(2): .P .in +4n .EX socket(AF_INET, typ_gniazda, protokół); .EE .in .P Prawidłowe typy gniazd obejmują \fBSOCK_STREAM\fP do otwarcia gniazda strumieniowego, \fBSOCK_DGRAM\fP do otwarcia gniazda datagramowego i \fBSOCK_RAW\fP do otwarcia gniazda \fBraw\fP(7) w celu bezpośredniego dostępu do protokołu IP. .P \fIprotocol\fP jest protokołem IP w nagłówku IP, który ma być otrzymany lub wysłany. Prawidłowe wartości \fIprotocol\fP to: .IP \[bu] 3 0 i \fBIPPROTO_TCP\fP dla gniazd strumieniowych \fBtcp\fP(7); .IP \[bu] 0 i \fBIPPROTO_UDP\fP dla gniazd datagramowych \fBudp\fP(7); .IP \[bu] \fBIPPROTO_SCTP\fP dla gniazd strumieniowych \fBsctp\fP(7); oraz .IP \[bu] \fBIPPROTO_UDPLITE\fP dla gniazd datagramowych \fBudplite\fP(7). .P W przypadku \fBSOCK_RAW\fP można podać prawidłowe liczby przypisane w RFC\ 1700 protokołowi IP IANA. .P Kiedy proces chce odbierać nowe, nadchodzące pakiety lub połączenia, powinien podłączyć gniazdo do adresu lokalnego interfejsu za pomocą funkcji \fBbind\fP(2). W takim przypadku do dowolnej lokalnej pary (adres, port) można podłączyć tylko jedno gniazdo IP. Gdy w wywołaniu \fBbind\fP(2) podana jest wartość \fBINADDR_ANY\fP, to gniazdo zostanie dowiązane do \fIwszystkich\fP lokalnych interfejsów sieciowych. Gdy do niedowiązanego gniazda wywoływane jest \fBlisten\fP(2), to gniazdo zostanie automatycznie dowiązane do losowo wybranego wolnego portu, przy czym adres lokalny zostanie ustawiony na \fBINADDR_ANY\fP. Gdy dla niedowiązanego gniazda zostanie wywołane \fBconnect\fP(2), gniazdo to zostanie automatycznie dowiązane do losowo wybranego wolnego portu lub do używalnego portu dzielonego, przy czym adres lokalny zostanie ustawiony na \fBINADDR_ANY\fP. .P Przypisywanie (często w literaturze: "nazywanie") lokalnego gniazda TCP jest niemożliwe przez pewien okres czasu po jego zamknięciu, chyba że zostanie dla tego gniazda ustawiony atrybut \fBSO_REUSEADDR\fP. Należy używać tego atrybutu z rozwagą, gdyż czyni on TCP mniej niezawodnym. .SS "Format adresu" Adres gniazda IP jest przedstawiony za pomocą kombinacji adresu interfejsu IP i 16\-bitowego numeru portu. Podstawowy protokół IP nie zawiera numerów portów, są one zaimplementowane w protokołach wyższej warstwy, takich jak \fBudp\fP(7) i \fBtcp\fP(7). Dla gniazd surowych \fI.sin_port\fP jest ustawione na protokół IP. .P Patrz \fBsockaddr_in\fP(3type). .P \&\fI.sin_family\fP ma zawsze wartość \fBAF_INET\fP. Jest to wymagane; w Linuksie 2.2 większość funkcji sieciowych zwraca \fBEINVAL\fP, jeśli brakuje tego ustawienia. \fI.sin_port\fP zawiera numer portu podany w sieciowej kolejności bajtów. Numery portów niższe niż 1024 są nazywane \fIportami uprzywilejowanymi\fP (lub czasem \fIportami zarezerwowanymi\fP). Tylko procesy uprzywilejowane (na Linuksie: proces z przywilejem \fBCAP_NET_BIND_SERVICE\fP w przestrzeni nazw użytkownika zarządzającą swoją sieciową przestrzenią nazw) mogą wywołać \fBbind\fP(2) dla tego rodzaju gniazd. Należy zauważyć, że surowy protokół IPv4 jako taki nie zawiera pojęcia portu (takie rozróżnienie jest dopiero w warstwie transportowej, a to jest warstwa sieciowa). Numery portów występują dopiero w protokołach wyższej warstwy, takich jak \fBtcp\fP(7) i \fBudp\fP(7). .P \&\fI.sin_addr\fP to adres IP komputera (stacji). Pole \fIs_addr\fP struktury \fBin_addr\fP(3type) zawiera adres interfejsu stacji w sieciowej kolejności bajtów. \fBin_addr\fP(3type) należy albo przypisać jedną z wartości \fBINADDR_*\fP (np. \fBINADDR_LOOPBACK\fP) za pomocą \fBhtonl\fP(3), albo użyć funkcji bibliotecznych \fBinet_aton\fP(3), \fBinet_addr\fP(3), \fBinet_makeaddr\fP(3) do ustawienia wartości, albo ustawić bezpośrednio przez funkcję obsługi nazw (patrz też \fBgethostbyname\fP(3)). .P .\" Leave a loophole for XTP @) Adresy IPv4 dzielimy na pojedyncze (unicast), rozgłoszeniowe (broadcast) i grupowe (multicast). Adresy pojedyncze określają pojedynczy interfejs maszyny, adresy rozgłoszeniowe określają wszystkie maszyny w obrębie jakiejś sieci (podsieci), a adresy grupowe wszystkie maszyny w obrębie jakiejś grupy odbiorców. Datagramy kierowane do adresów rozgłoszeniowych trafiają do odbiorcy tylko wtedy, gdy jego gniazdo ma ustawiony atrybut rozgłoszenia \fBSO_BROADCAST\fP. Ten sam atrybut musi być też ustawiony, gdy zachodzi potrzeba wysłania datagramów rozgłoszenia. W obecnej implementacji gniazda połączeniowe mogą używać wyłącznie adresów pojedynczych. .P Należy zauważyć, że dla adresu i portu zawsze jest używana sieciowa kolejność bajtów. W szczególności oznacza to, że trzeba używać funkcji \fBhtons\fP(3) dla numeru przypisanego do portu. Wszystkie funkcje standardowej biblioteki manipulujące adresem/portem automatycznie przekształcają podaną wartość na jej sieciową reprezentację. .SS "Adresy specjalne i zarezerwowane" Istnieje wiele adresów specjalnych: .TP \fBINADDR_LOOPBACK\fP (127.0.0.1) zawsze odnosi się do komputera lokalnego za pośrednictwem urządzenia pętli zwrotnej (loopback); .TP \fBINADDR_ANY\fP (0.0.0.0) oznacza każdy adres, do kojarzenia gniazd; .TP \fBINADDR_BROADCAST\fP (255.255.255.255) Pakiet zaadresowany do \fBINADDR_BROADCAST\fP za pośrednictwem gniazda z ustawionym \fBSO_BROADCAST\fP będzie rozgłaszał do wszystkich stacji w segmencie sieci lokalnej, tak długo, jak połączenie ma możliwość rozgłaszania. .TP Najwyższe numery adresów .TQ Najniższe numery adresów .\" commit 58fee5fc83658aaacf60246aeab738946a9ba516 W każdej podsieci lokalnej, innej niż punkt do punktu, z połączeniem obsługującym rozgłaszanie, adres o najwyższym możliwym numerze (np. adres \&.255 w podsieci z maską sieciową 255.255.255.0) służy jako adres rozgłoszeniowy. Nie można go użytecznie przypisać do indywidualnego interfejsu i można go zaadresować jedynie gniazdem z ustawioną opcją \fBSO_BROADCAST\fP. Standardy internetowe historycznie rezerwowały również adres o najniższym możliwym numerze (np. adres .0 w podsieci z maską sieciową 255.255.255.0) do rozgłaszania, choć nazywały go \[Bq]przestarzałym\[rq] do tego celu (część źródeł odnosi się do niego również jako do \[Bq]adresu sieci\[rq]). Od Linuksa 5.14 jest on traktowany jako standardowy adres pojedynczy i może być przypisany do interfejsu. .P Standardy internetowe tradycyjnie rezerwowały również różne adresy do określonych celów, choć Linux części z nich nie traktuje już w specjalny sposób. .TP [0.0.0.1, 0.255.255.255] .TQ [240.0.0.0, 255.255.255.254] .\" commit 96125bf9985a75db00496dd2bc9249b777d2b19b .\" commit 1e637c74b0f84eaca02b914c0b8c6f67276e9697 Adresy w tych zakresach (0/8 i 240/4) są zarezerwowane globalnie. Od Linuksa 5.3 i Linuksa 2.6.25 adresy, odpowiednio, 0/8 i 240/4, inne niż \fBINADDR_ANY\fP i \fBINADDR_BROADCAST\fP są traktowane jako zwykłe adresy pojedyncze. Systemy przestrzegające tradycyjnego zachowania mogą nie współpracować z tymi zakresami historycznie zarezerwowanych adresów. .TP [127.0.0.1, 127.255.255.254] Adresy w tym zakresie (127/8) są traktowane jako adresy pętli zwrotnej, podobnie do standardowego adresu pętli zwrotnej \fBINADDR_LOOPBACK\fP (127.0.0.1); .TP [224.0.0.0, 239.255.255.255] Adresy w tym zakresie (224/4) są przeznaczone do użycia grupowego (multicast). .SS "Opcje gniazda" Patrz \fBIPPROTO_IP\fP(2const). .SS "Interfejsy /proc" Patrz \fBproc_sys_net_ipv4\fP(5). .SS "Kontrolki systemowe (ioctl)" Do protokołu \fBip\fP mają zastosowanie wszystkie kontrolki wejścia/wyjścia opisane w \fBsocket\fP(7). .P .\" FIXME Add a discussion of multicasting Kontrolki konfigurowania ogólnych parametrów urządzenia są opisane w \fBnetdevice\fP(7). .SH BŁĘDY .\" FIXME document all errors. .\" We should really fix the kernels to give more uniform .\" error returns (ENOMEM vs ENOBUFS, EPERM vs EACCES etc.) .TP \fBEACCES\fP Użytkownik próbował wykonać operację, nie mając potrzebnych praw. Obejmuje to: wysyłanie pakietu na adres rozgłoszeniowy bez ustawionego znacznika \fBSO_BROADCAST\fP, wysyłanie pakietu \fIzakazaną\fP drogą, próbę modyfikacji ustawień zapory sieciowej, nie mając uprawnień administratora (ustawionego przywileju \fBCAP_NET_ADMIN\fP), próbę przypisania uprzywilejowanego portu, nie mając uprawnień administratora (ustawionego przywileju \fBCAP_NET_BIND_SERVICE\fP). .TP \fBEADDRINUSE\fP Próbowano przypisać port do adresu będącego już w użyciu. .TP \fBEADDRNOTAVAIL\fP Zażądano nieistniejącego interfejsu lub żądany adres źródłowy nie jest adresem lokalnym. .TP \fBEAGAIN\fP Operacja na gnieździe z wyłączonym blokowaniem spowodowałaby zablokowanie. .TP \fBEALREADY\fP Operacja łączenia na gnieździe nieblokującym już trwa. .TP \fBECONNABORTED\fP Połączenie zostało zamknięte podczas \fBaccept\fP(2). .TP \fBEHOSTUNREACH\fP Brak wpisu określającego adres docelowy w tabeli trasowania. Błąd ten może być wywołany przez komunikat ICMP od zdalnego routera lub dla lokalnej tabeli trasowania. .TP \fBEINVAL\fP Przypisano niewłaściwy argument. W przypadku operacji wysyłania może to być spowodowane przez wysyłanie drogą przypisaną do \fIczarnej dziury\fP. .TP \fBEISCONN\fP \fBconnect\fP(2) była wywołana na już połączonym gnieździe. .TP \fBEMSGSIZE\fP Datagram jest większy niż wartość MTU po drodze do celu i nie może być podzielony. .TP \fBENOBUFS\fP .TQ \fBENOMEM\fP Niewystarczająca ilość dostępnej pamięci. Często oznacza to, że przydzielanie pamięci jest ograniczone przez ograniczenia bufora gniazda, a nie przez ograniczenia pamięci systemowej. Jednak nie jest to pewne na 100%. .TP \fBENOENT\fP \fBSIOCGSTAMP\fP było wywołane na gnieździe, do którego nie dotarł żaden pakiet. .TP \fBENOPKG\fP Podsystem jądra nie był konfigurowany. .TP \fBENOPROTOOPT\fP .TQ \fBEOPNOTSUPP\fP Przypisano niewłaściwą opcję gniazda. .TP \fBENOTCONN\fP Operacja może być wykonana tylko na połączonym gnieździe, a gniazdo nie zostało połączone. .TP \fBEPERM\fP Użytkownik nie ma praw do ustawiania wysokiego priorytetu, zmiany konfiguracji lub wysyłania sygnałów do żądanych procesów lub grup procesów. .TP \fBEPIPE\fP Połączenie zostało nieoczekiwanie zamknięte lub wyłączył się drugi koniec. .TP \fBESOCKTNOSUPPORT\fP Gniazdo nie jest skonfigurowane lub zażądano nieznanego typu gniazda. .P Inne błędy mogą być generowane przez protokoły wyższych warstw; obejrzyj \fBtcp\fP(7), \fBraw\fP(7), \fBudp\fP(7) i \fBsocket\fP(7). .SH UWAGI Należy być bardzo ostrożnym przy stosowaniu opcji \fBSO_BROADCAST\fP \- nie jest ona w systemie Linux uprzywilejowana, jest więc łatwo przeciążyć sieć za pomocą niedbale użytych rozgłoszeń. W przypadku protokołów nowych aplikacji lepiej używać grupy adresowej zamiast rozgłoszeń. Stosowanie adresów rozgłoszeniowych jest niezalecane. W RFC 6762 pokazany jest przykład protokołu (mDNS) korzystającego z nowocześniejszego podejścia do komunikacji z otwartą grupą stacji w sieci lokalnej. .P Używanie poziomu opcji gniazd \fBSOL_IP\fP jest nieprzenośne; gniazda oparte na BSD używają poziomu \fBIPPROTO_IP\fP. .P \fBINADDR_ANY\fP (0.0.0.0) i \fBINADDR_BROADCAST\fP (255.255.255.255) są neutralne pod kątem kolejności bajtów. Oznacza to, że nie wpływa na nie \fBhtonl\fP(3). .SS Zgodność Dla zgodności z Linuksem 2.0, wciąż jest dopuszczalna przestarzała składnia \fBsocket(AF_INET, SOCK_PACKET, \fP\fIprotokół\fP\fB)\fP, by stworzyć gniazdo typu \fBpacket\fP(7). Nie jest to zbyt poprawne i powinno być zastępowane przez \fBsocket(AF_PACKET, SOCK_RAW, \fP\fIprotokół\fP\fB)\fP. Głównym powodem jest różnica w strukturze adresowej \fIsockaddr_ll\fP przechowującej informacje dla warstwy łącza (dokładniej: warstwy kanałowej), które kiedyś przechowywane były w \fBsockaddr_pkt\fP. .SH USTERKI Jest zbyt wiele nieokreślonych wartości błędów. .P Błąd używany do zdiagnozowania wyczerpania się zakresu portów efemerycznych różni się między poszczególnymi wywołaniami systemowymi (\fBconnect\fP(2), \fBbind\fP(2), \fBlisten\fP(2), \fBsendto\fP(2)), które przypisują porty efemeryczne. .P .\" .P .\" Some versions of glibc forget to declare .\" .IR in_pktinfo . .\" Workaround currently is to copy it into your program from this man page. Nie są opisane kontrolki wejścia/wyjścia do konfigurowania specyficznych dla IP opcji interfejsu i tabele ARP. .P .\" .SH AUTHORS .\" This man page was written by Andi Kleen. Pobieranie pierwotnego adresu docelowego za pomocą wywołania \fBrecvmsg\fP(2) z \fBMSG_ERRQUEUE\fP w \fImsg_name\fP nie działa w niektórych jądrach Linux 2.2. .SH "ZOBACZ TAKŻE" \fBIPPROTO_IP\fP(2const), \fBrecvmsg\fP(2), \fBsendmsg\fP(2), \fBbyteorder\fP(3), \fBcapabilities\fP(7), \fBicmp\fP(7), \fBipv6\fP(7), \fBnetdevice\fP(7), \fBnetlink\fP(7), \fBraw\fP(7), \fBsocket\fP(7), \fBtcp\fP(7), \fBudp\fP(7), \fBip\fP(8) .P Plik źródeł jądra \fIDocumentation/networking/ip\-sysctl.rst\fP. .P RFC\ 791 \- oryginalny opis IP. RFC\ 1122 \- wymagania stacji IPv4. RFC\ 1812 \- wymagania rutera IPv4. .PP .SH TŁUMACZENIE Tłumaczenie niniejszej strony podręcznika: Paweł Wilk , Robert Luberda i Michał Kułach . .PP Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License w wersji 3 .UE lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. .PP Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej .MT manpages-pl-list@lists.sourceforge.net .ME .