Provided by:
manpages-pl_20060617-4_all 
NAZWA
ip - implementacja protokolu IPv4 dla systemu Linux
SK/LADNIA
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/ip.h> /* nadzbior poprzedniego */
tcp_socket = socket(PF_INET, SOCK_STREAM, 0);
udp_socket = socket(PF_INET, SOCK_DGRAM, 0);
raw_socket = socket(PF_INET, SOCK_RAW, protok'o/l);
OPIS
Linux implementuje protokol IPv4 opisany w RFC 791 i RFC 1122. ip
zawiera drugi poziom implementacji adresowania grupowego (multicasting)
zgodny z RFC 1112. Zawiera te router IP, wlczajc w to filtr pakietow.
Interfejs programistyczny jest zgodny gniazdami BSD. Wicej informacji
na temat gniazd mona znale, przegldajc socket(7).
Gniazdo IP jest tworzone poprzez wywolanie funkcji socket(2) jako
socket(PF_INET, rodzaj_gniazda, protok'o/l). Poprawne typy gniazd to
SOCK_STREAM sluce do tworzenia gniazd poredniczcych w obsludze
protokolu tcp(7), take SOCK_DGRAM obslugujce protokol udp(7), a nawet
SOCK_RAW pozwalajce tworzy gniazda raw(7) (surowe) umoliwiajce
bezporedni dostp do protokolu IP. protok'o/l jest protokolem bazujcym na
IP. Informacja o nim jest umieszczana w naglowku wysylanego bd
odbieranego pakietu IP. Dla gniazd TCP poprawnymi wartociami s tylko 0
i IPPROTO_TCP, a dla gniazd UDP - 0 i IPPROTO_UDP. Dla SOCK_RAW mona
poda dowolny prawidlowy numer protokolu IP okrelony przez IANA w
RFC 1700.
Kiedy proces chce odbiera nowe, nadchodzce pakiety lub polczenia,
powinien podlczy gniazdo do adresu lokalnego interfejsu za pomoc
funkcji bind(2). Do dowolnej lokalnej pary (adres, port) mona podlczy
tylko jedno gniazdo IP. Gdy w wywolaniu bind podana jest warto
INADDR_ANY, to gniazdo zostanie dowizane do wszystkich lokalnych
interfejsow sieciowych. Gdy dla niedowizanego gniazda zostanie wywolane
listen(2) lub connect(2), gniazdo to zostanie automatycznie dowizane do
losowo wybranego wolnego portu, przy czym adres lokalny zostanie
ustawiony na INADDR_ANY.
Przypisywanie (czsto w literaturze: "nazywanie") lokalnego gniazda TCP
jest niemoliwe przez pewien okres czasu po jego zamkniciu, chyba e
zostanie dla tego gniazda ustawiony atrybut SO_REUSEADDR. Naley uywa
tego atrybutu z rozwag, gdy czyni on TCP mniej niezawodnym.
FORMAT ADRESU
Adres gniazda IP jest przedstawiony za pomoc kombinacji adresu
interfejsu IP i 16-bitowego numeru portu. Podstawowy protokol IP nie
zawiera numerow portow, s one zaimplementowane w protokolach wyszej
warstwy, takich jak udp(7) i tcp(7). Dla gniazd surowych sin_port jest
ustawione na protokol IP.
struct sockaddr_in {
sa_family_t sin_family; /* rodzina adresow: AF_INET */
u_int16_t sin_port; /* port - sieciowa kolejno bajtow */
struct in_addr sin_addr; /* adres internetowy */
};
/* Adres internetowy */
struct in_addr {
u_int32_t s_addr; /* adres - sieciowa kolejno bajtow */
};
sin_family ma zawsze warto AF_INET. Jest to wymagane; w Linuksie 2.2
wikszo funkcji sieciowych zwraca EINVAL jeli brakuje tego ustawienia.
sin_port zawiera numer portu podany w sieciowej kolejnoci bajtow.
Numery portow nisze ni 1024 s nazywane portami zarezerwowanymi. Tylko
procesy uprzywilejowane (tj. z ustawionym atrybutem
CAP_NET_BIND_SERVICE) mog wywola bind(2) dla tego rodzaju gniazd. Naley
zauway, e surowy protokol IPv4 jako taki nie zawiera pojcia portu
(takie rozronienie jest dopiero w warstwie transportowej, a to jest
warstwa sieciowa). Numery portow wystpuj dopiero w protokolach wyszej
warstwy, takich jak tcp(7) i udp(7).
sin_addr to adres IP hosta (maszyny). Pole s_addr struktury struct
in_addr zawiera adres interfejsu maszyny w sieciowej kolejnoci bajtow.
Polu in_addr naley albo przypisa jedn z wartoci INADDR_* (np.
INADDR_ANY), albo uy funkcji bibliotecznych inet_aton(3), inet_addr(3),
inet_makeaddr(3) do ustawienia wartoci, albo ustawi bezporednio przez
resolvera (patrz te gethostbyname(3)). Adresy IPv4 dzielimy na
pojedyncze (unicast), rozgloszeniowe (broadcast) i grupowe (multicast).
Adresy pojedyncze okrelaj pojedynczy interfejs maszyny, adresy
rozgloszeniowe okrelaj wszystkie maszyny w obrbie jakiej sieci
(podsieci), a adresy grupowe wszystkie maszyny w obrbie jakiej grupy
odbiorcow. Datagramy kierowane do adresow rozgloszeniowych trafiaj do
odbiorcy tylko wtedy, gdy jego gniazdo ma ustawiony atrybut
rozgloszenia SO_BROADCAST. Ten sam atrybut musi by te ustawiony, gdy
zachodzi potrzeba wyslania datagramow rozgloszenia. W aktualnej
implementacji gniazda polczeniowe mog uywa wylcznie adresow
pojedynczych.
Naley zauway, e dla adresu i portu zawsze jest uywana sieciowa kolejno
bajtow. W szczegolnoci oznacza to, e trzeba uywa funkcji htons(3) dla
numeru przypisanego do portu. Wszystkie funkcje standardowej biblioteki
manipulujce adresem/portem automatycznie przeksztalcaj podan warto na
jej sieciow reprezentacj.
Istnieje kilka adresow specjalnych: INADDR_LOOPBACK (127.0.0.1) zawsze
odnosi si do lokalnego hosta poprzez urzdzenie loopback; INADDR_ANY
(0.0.0.0) oznacza przy dowizywaniu dowolny adres; INADDR_BROADCAST
(255.255.255.255) oznacza dowolny host i ze wzgldow historycznych
zachowuje si przy dowizywaniu tak samo jak INADDR_ANY.
OPCJE GNIAZD
IP wspiera niektore opcje specyficzne dla protokolu, ktore mog by
ustawione przy uyciu setsockopt(2) i odczytane z pomoc getsockopt(2).
Poziom opcji gniazda dla IP to IPPROTO_IP. Dla kadego ze znacznikow
logicznych warto calkowita zero oznacza falsz, a kada inna - prawd.
IP_OPTIONS
Ustawia lub pobiera opcje IP, ktore bd wysylane z kadym pakietem
z danego gniazda. Argumenty s wskanikiem do bufora pamici
zawierajcego opcje i ich dlugoci. setsockopt(2) ustawia opcje IP
skojarzone z gniazdem. Maksymalny rozmiar opcji dla IPv4 to 40
bajtow. Zobacz RFC 791, by pozna moliwe opcje. Gdy pakiet
wstpnego potwierdzenia polczenia (ACK) dla gniazda typu
SOCK_STREAM zawiera opcje IP, to opcje wychodzcego pakietu IP bd
automatycznie pobrane z opcji IP pobranego pakietu z odwroconymi
naglowkami mowicymi o trasie. Po ustanowieniu polczenia
przychodzce pakiety nie s uprawnione do zmiany swoich opcji.
Przetwarzanie wszystkich przychodzcych opcji rodla jest domylnie
wylczone, ale mona je wlczy za pomoc kontrolki systemowej
accept_source_route. W przypadku gniazd datagramowych opcje IP
mog by ustawione jedynie przez uytkownika lokalnego. Funkcja
getsockopt(2) z argumentem IP_OPTIONS zwroci obecnie wyslane
opcje przez umieszczenie ich w dostarczonym buforze.
IP_PKTINFO
Przekazuje pomocniczy komunikat IP_PKTINFO zawierajcy struktur
pktinfo dostarczajc troch informacji o przychodzcym pakiecie.
Dziala to jedynie dla gniazd datagramowych. Argument jest
znacznikiem mowicym gniazdu, czy naley przekaza komunikat
IP_PKTINFO, czy te nie. Sam komunikat moe zosta
przeslany/otrzymany wraz z pakietem jedynie jako komunikat
sterujcy za pomoc recvmsg(2) lub sendmsg(2).
struct in_pktinfo {
unsigned int ipi_ifindex; /* Indeks interfejsu */
struct in_addr ipi_spec_dst; /* Adres lokalny */
struct in_addr ipi_addr; /* Naglowek adresu
docelowego */
};
ipi_ifindex jest unikatowym indeksem interfejsu, przez ktory
pakiet zostal odebrany. Adres ipi_spec_dst jest lokalnym adresem
pakietu, a ipi_addr jest adresem docelowym wynikajcym z naglowka
pakietu. Jeli IP_PKTINFO jest przekazane do sendmsg(2), a
ipi_spec_dst ma warto niezerow, to IP_PKTINFO zostanie uyte jako
rodlowy adres lokalny podczas przeszukiwania tablicy routingu i
dla ustawienia opcji routingu wg adresu rodlowego. Gdy
ipi_ifindex ma warto niezerow, to podstawowy adres lokalny
interfejsu wskazywanego przez ten indeks nadpisuje ipi_spec_dst
podczas przeszukiwania tablicy routingu.
IP_RECVTOS
Jeli jest ustawione, to pomocniczy komunikat IP_TOS jest
przepuszczany razem z nadchodzcymi pakietami. Zawiera on bajt,
ktory okrela pole zdefiniowane take jako bajt znajdujce si w
naglowku pakietu, a zwane Typ Uslugi/Pierwszestwa. Wymaga
logicznego znacznika w postaci liczby calkowitej.
IP_RECVTTL
Gdy ten znacznik jest ustawiony, przepuszczany jest komunikat
pomocniczy IP_TTL, zawierajcy pole okrelane mianem "czas ycia"
odbieranego pakietu w postaci bajtu. Nie jest to wspierane w
przypadku strumieniowych gniazd typu SOCK_STREAM.
IP_RECVOPTS
Przekazuje uytkownikowi wszystkie nadchodzce opcje IP z
komunikatu sterujcego IP_OPTIONS. Naglowek wyboru trasy i inne
opcje s ju wstpnie wypelnione informacjami o lokalnej maszynie.
Nie obslugiwane w przypadku gniazd typu SOCK_STREAM.
IP_RETOPTS
Dzialanie identyczne do IP_RECVOPTS, ale zwraca surowe,
nieprzetworzone opcje, wlcznie z rekordem opcji, mowicym o
znaczniku czasowym i trasie, nie wypelnionym wartociami w tym
przejciu pakietu.
IP_TOS Ustawia lub pobiera pole znacznika Typ-Uslugi (ang.
Type-Of-Service, w skrocie TOS), ktore jest przesylane z kadym
pakietem IP pochodzcym z danego gniazda. Sluy do ustalenia
priorytetow pakietow w sieci. TOS jest bajtem. Oto definicje
niektorych standardowych znacznikow TOS: IPTOS_LOWDELAY -
minimalizacja oponienia we wzajemnym ruchu, IPTOS_THROUGHPUT -
optymalizacja wyjcia, IPTOS_RELIABILITY - optymalizacja pod ktem
niezawodnoci, a IPTOS_MINCOST powinna by uywana jako "dane
wypelniajce" tam, gdzie szybko transmisji nie ma wikszego
znaczenia. Mona poda najwyej jedn z powyszych wartoci TOS. Inne
bity s niepoprawne i powinny by wyzerowane. Linux domylnie
wysyla najpierw datagram IPTOS_LOWDELAY, ale dokladne zachowanie
zaley od konfiguracji wlaciwoci szeregowania. Niektore poziomy o
wysokim priorytecie mog wymaga uprawnie administratora
(ustawionego atrybutu CAP_NET_ADMIN). Priorytet mona te ustawi w
sposob niezaleny od protokolu poprzez opcj gniazda (SOL_SOCKET,
SO_PRIORITY) (patrz te socket(7)).
IP_TTL Ustawia lub pobiera pole "czas ycia" (ang. Time-To-Live, w
skrocie TTL) dla kadego wychodzcego z danego gniazda pakietu IP.
IP_HDRINCL
Jeli wlczone to dopuszczalne jest tworzenie przez uytkownika
wlasnego naglowka IP przed danymi uytkownika. Dziala to jedynie
dla gniazd SOCK_RAW. Patrz raw(7), by uzyska wicej informacji.
Gdy ten znacznik jest wlczony, to wartoci ustawiane przez
IP_OPTIONS, IP_TTL i IP_TOS s ignorowane.
IP_RECVERR (zdefiniowane w <linux/errqueue.h>)
Wlcza zwikszon pewno przy realizowaniu zawiadomie o bldach. Gdy
jest to ustawione w gniedzie datagramowym to wszystkie
generowane bldy bd zapamitane w specjalnej kolejce bldow
przypisanej do gniazda. Gdy uytkownik (proces uytkownika)
otrzyma bld (przez zwrocony kod bldu operacji na gniedzie) to
bldy mog by odebrane przy uyciu funkcji recvmsg(2) z ustawionym
znacznikiem MSG_ERRQUEUE. Struktura opisujca bld
sock_extended_err zostanie przekazana w pomocniczym komunikacie
o typie IP_RECVERR i poziomie IPPROTO_IP. Jest to niezwykle
pomocne przy niezawodnym przechwytywaniu bldow niepolczonych
gniazd. Odbierana z kolejki bldow porcja danych zawiera pakiet z
informacj o bldzie.
Komunikat sterujcy IP_RECVERR zawiera struktur sock_extended_err
zdefiniowan nastpujco:
#define SO_EE_ORIGIN_NONE 0
#define SO_EE_ORIGIN_LOCAL 1
#define SO_EE_ORIGIN_ICMP 2
#define SO_EE_ORIGIN_ICMP6 3
struct sock_extended_err {
u_int32_t ee_errno; /* numer bldu */
u_int8_t ee_origin; /* rodlo bldu */
u_int8_t ee_type; /* typ */
u_int8_t ee_code; /* kod */
u_int8_t ee_pad;
u_int32_t ee_info; /* informacje dodatkowe */
u_int32_t ee_data; /* inne dane */
/* Dalej mog wystpi dodatkowe informacja */
};
struct sockaddr *SO_EE_OFFENDER(struct sock_extended_err *);
ee_errno zawiera numer errno bldu kolejki. ee_origin jest kodem
miejsca pochodzenia bldu. Pozostale pola s zalene od protokolu.
Makro SO_EE_OFFENDER zwraca wskanik do adresu obiektu
sieciowego, z ktorego pochodzil bld o zadanym wskaniku do
komunikatu pomocniczego. Gdy ten adres nie jest znany, pole
sa_family struktury sockaddr zawiera warto AF_UNSPEC a pozostale
pola tej struktury sockaddr s niezdefiniowane.
IP uywa struktury sock_extended_err w nastpujcy sposob:
ee_origin ustawione na SO_EE_ORIGIN_ICMP dla bldow odbieranych
jako pakiet ICMP albo te SO_EE_ORIGIN_LOCAL dla bldow
generowanych lokalnie. Nieznane wartoci naley ignorowa. ee_type
i ee_code s ustawiane zgodnie z typem i kodem pol w naglowku
ICMP. ee_info zawiera rozpoznan warto MTU dla bldow EMSGSIZE.
Komunikat zawiera rownie sockaddr_in wz/la, ktory spowodowal bld,
a do ktorego mona uzyska dostp za pomoc makra SO_EE_OFFENDER.
Pole sin_family adresu SO_EE_OFFENDER ma warto AF_UNSPEC, gdy
rodlo bldu nie jest znane. Gdy bld pochodzi z sieci, wszystkie
opcje IP (IP_OPTIONS, IP_TTL itd.) wlczone w gniedzie i zawarte
w pakiecie bldu s przekazywane jako komunikaty kontrolne.
Wlaciwe dane pakietu, ktory spowodowal bld s zwracane jako
normalne dane. Naley zauway, e TCP nie ma kolejki bldow;
MSG_ERRQUEUE jest niedozwolone w przypadku gniazd SOCK_STREAM.
Wszystkie bldy s przekazywane poprzez zwracan warto funkcji albo
SO_ERROR.
Dla gniazd surowych, IP_RECVERR wlcza przepuszczanie do
aplikacji wszystkich odebranych komunikatow ICMP o bldach, w
przeciwnym przypadku bldy s zglaszane tylko dla gniazd
polczonych.
Mamy tu do czynienia ze znacznikiem logicznym zapisanym za pomoc
liczby calkowitej IP_RECVERR, domylnie wylczonym.
IP_MTU_DISCOVER
Ustawia lub pobiera opcj badania MTU cieki (ang. Path MTU
Discovery) dla gniazda. Gdy opcja ta jest wlczona, to Linux
bdzie przeprowadzal badanie MTU cieki dla tego gniazda zgodnie z
definicj zawart w RFC 1191. Znacznik zakazu fragmentacji jest
ustawiany we wszystkich pakietach wychodzcych. Ogolne, domylne
zachowanie okrelone dla danego systemu jest ustawiane przez
"kontrolk systemow" ip_no_pmtu_disc dla gniazd typu SOCK_STREAM
i wylczone dla wszystkich innych typow gniazd. W przypadku
gniazd innych ni SOCK_STREAM za odpowiednie, zgodne z wartoci
MTU, spakietowanie danych i za wykonanie ewentualnych
retransmisji jest odpowiedzialny program uytkownika. Jdro
odrzuci pakiety wiksze ni znane MTU cieki, gdy ten znacznik jest
ustawiony (lcznie z EMSGSIZE ).
Znaczniki badania MTU cieki Znaczenia
IP_PMTUDISC_WANT Uywaj ustawie zalenych od trasy.
IP_PMTUDISC_DONT Nie badaj MTU cieki.
IP_PMTUDISC_DO Zawsze badaj MTU cieki
Gdy wlczone jest badanie MTU cieki, jdro automatycznie namierza
wartoci MTU cieki dla kadego hosta docelowego. Gdy aktywne jest
polczenie z danym hostem, mona wygodnie odczyta aktualnie
rozpoznan warto MTU cieki za pomoc connect(2) uywajc opcji
gniazda IP_MTU (np. po wystpieniu bldu EMSGSIZE). Moe ona si
zmienia z czasem. Dla gniazd bezpolczeniowych z wieloma hostami
docelowymi, MTU dla danego, rownie nowego, hosta docelowego mona
uzyska za pomoc kolejki bldow (zobacz IP_RECVERR). Po nadejciu
kadej aktualizacji MTU zostanie skolejkowany nowy bld.
W trakcie rozpoznawania MTU, pakiety inicjujce z gniazd
datagramowych mog zosta porzucone. Programy korzystajce z UDP
powinny by tego wiadome i nie bra tego pod uwag w swojej
strategii retransmisji pakietow.
Aby zainicjowa proces badania MTU cieki dla gniazd niepolczonych
mona rozpocz z duym rozmiarem datagramu (do 64K-naglowek bajtow)
i pozwoli na jego zmniejszenie w wyniku aktualizacji MTU cieki.
Aby oszacowa inicjalne MTU cieki, naley podlczy gniazdo
datagramowe do adresu docelowego za pomoc connect(2) i pobra
MTU, wolajc getsockopt(2) z opcj IP_MTU.
IP_MTU Pobiera znan aktualnie warto MTU cieki obecnego gniazda. Jest to
poprawne tylko, gdy gniazdo zostalo polczone. Zwraca liczb
calkowit. Dziala tylko z getsockopt(2).
IP_ROUTER_ALERT
Przekazuje wszystkie pakiety z opcj Alarmu Rutera IP, ktore
mialyby by przekazywane (ang. forwarded) do tego gniazda. Dziala
tylko dla gniazd surowych. Jest to przydatne na przyklad dla
demonow RSVP dzialajcych w przestrzeni uytkownika. Wykorzystane
pakiety nie s przekazywane (ang. forwarded) przez jdro. Ponowne
ich wyslanie naley do obowizkow programu uytkownika. Dowizywanie
gniazda jest w tym przypadku ignorowane, pakiety te s filtrowane
jedynie w oparciu o protokol. Wymaga liczby calkowitej jako
argumentu.
IP_MULTICAST_TTL
Ustawia lub pobiera warto czas-ycia-pakietu dla wychodzcych z
tego gniazda pakietow grupowych. Jest bardzo istotnym w
przypadku adresowania grupowego by ustawi najmniejsz moliw warto
TTL. Domylnie jest to 1, co oznacza, e pakiety grupowe nie
opuszczaj sieci lokalnej, chyba e program uytkownika wyranie
tego da. Argument jest liczb calkowit.
IP_MULTICAST_LOOP
Ustawia lub pobiera logiczny argument typu calkowitego, mowicy o
tym, czy przesylane pakiety grupowe powinny wraca do lokalnego
gniazda.
IP_ADD_MEMBERSHIP
Przylcza grup adresow. Argumentem jest struktura ip_mreqn .
struct ip_mreqn {
struct in_addr imr_multiaddr; /* grupowy adres IP */
struct in_addr imr_address; /* adres IP interfejsu
lokalnego */
int imr_ifindex; /* indeks interfejsu */
};
imr_multiaddr zawiera adres grupy, ktor aplikacja chce podlczy
lub rozlczy. Musi by to poprawny adres grupowy (multicast).
imr_address jest to adres lokalnego interfejsu, przez ktory
system powinien polczy grup; jeli jest rowny INADDR_ANY, to
odpowiedni interfejs jest wybierany przez system. imr_ifindex
jest indeksem interfejsu, ktory powinien by podlczony/odlczony
do obslugi grupy imr_multiaddr lub 0, by wskaza na dowolny
interfejs.
Dla kompatybilnoci, stara struktura ip_mreq wci jest
obslugiwana. Roni si wprawdzie od ip_mreqn, lecz tylko tym, e
nie zawiera pola imr_ifindex. Dziala tylko z setsockopt(2).
IP_DROP_MEMBERSHIP
Odlcza si od grupy adresow. Argumentem jest struktura ip_mreqn
lub ip_mreq podobna do IP_ADD_MEMBERSHIP.
IP_MULTICAST_IF
Ustawia lokalne urzdzenie dla gniazda grupowego. Argumentem jest
struktura ip_mreqn lub ip_mreq podobna do IP_ADD_MEMBERSHIP.
Gdy podana jest niepoprawna opcja gniazda, to zwracan wartoci
jest ENOPROTOOPT.
KONTROLKI SYSTEMOWE (SYSCTL)
Protokol IP obsluguje interfejs kontrolek systemowych (sysctl) i
korzysta z niego do ustawiania niektorych opcji globalnych. Kontrolki
mog by dostpne przez zapis lub odczyt wykonany na plikach
/proc/sys/net/ipv4/* lub poprzez uycie interfejsu w postaci funkcji
sysctl(2). Zmienne opisane jako logiczne pobieraj liczb calkowit,
ktorej warto niezerowa ("true") oznacza, e dana opcja jest wlczona, a
warto zerowa ("false") oznacza, e opcja jest wylczona.
ip_always_defrag (logiczna)
[Nowa w jdrze 2.2.13; we wczeniejszych wersjach jdra funkcj t
sterowalo si w czasie kompilacji za pomoc opcji
CONFIG_IP_ALWAYS_DEFRAG; ten plik nie jest obecny w 2.4.x i
kolejnych]
Gdy ten znacznik logiczny jest wlczony (rony od 0) przychodzce
fragmenty (czci pakietow IP, ktore si pojawiaj, gdy pewien host
pomidzy hostem rodlowym a docelowym zdecyduje, e pakiety byly za
due i podzieli je na kawalki) bd ponownie zloone
(zdefragmentowane) przed ich przetworzeniem, nawet jeli maj by
przekazane dalej (and. forwarded).
Naley wlcza jedynie przy dzialajcym firewallu, stanowicym glowne
wejcie, do danej sieci lub dzialajcym przezroczystym proxy;
nigdy nie naley tego wlcza na zwyklym routerze lub hocie. W
przeciwnym przypadku lczno moe zosta zaklocona, gdy fragmenty bd
podroowa innymi lczami. Defragmentacja powoduje rownie znaczne
wykorzystanie pamici i czasu procesora.
Jest to wlczane automagicznie, gdy skonfigurowane jest
maskowanie lub przezroczyste proxy.
ip_autoconfig
Nie udokumentowane.
ip_default_ttl (liczba, domylnie: 64)
Ustawia domyln warto "czasu ycia" (ang. time-to-live)
wychodzcych pakietow. Moe by ona zmieniona dla gniazda za pomoc
opcji IP_TTL.
ip_dynaddr (logiczna; domylnie: wylczona)
Wlcza dynamiczne adresowanie gniazda oraz przepisywanie adresu
dla maskowania przy zmianie adresu interfejsu. Jest to bardzo
przydatne w przypadku korzystania z interfejsu sprzgnitego z
lini telefoniczn, ktorego adres IP moe si zmienia. 0 oznacza
brak przepisywania, 1 wlcza przepisywanie, a 2 wlcza tryb
rozwlekly (ang. verbose).
ip_forward(logiczna; domylnie: wylczona)
Wlcza przekazywanie (ang. forwarding) pakietow przy uyciu
logicznego znacznika. Moe by ustawione take na podstawie
interfejsu.
ip_local_port_range
Zawiera dwie liczby calkowite, ktore definiuj lokalny zakres
portow przydzielanych gniazdom. Przydzielanie zaczyna si od
pierwszej podanej wartoci i koczy na drugiej. Naley zauway, e
zakres ten nie powinien pokrywa si z zakresem portow
wykorzystywanym do maskowania (chocia taka sytuacja jest
obslugiwana). Dowolny wybor moe rownie powodowa problemy z
niektorymi firewallami, ktore robi pewne zaloenia odnonie do
portow uywanych lokalnie. Pierwsza liczba powinna by rowna co
najmniej >1024, a lepiej >4096, aby unikn konfliktow z dobrze
znanymi portami i zminimalizowa problemy z firewallami.
ip_no_pmtu_disc (logiczna; domylnie: wylczona)
Jeli jest to wlczone, to domylnie nie bdzie wykonywane badanie
MTU cieki dla gniazd TCP. Badanie MTU moe si nie sprawdza w
przypadku le skonfigurowanych firewalli (odrzucajcych wszelkie
pakiety ICMP) lub le skonfigurowanych interfejsow (np. polczenie
typu point-to-point, gdzie oba koce nie zgadzaj si na MTU).
Lepiej poprawi wszelkie wadliwie skonfigurowane rutery po drodze
ni calkowicie wylczy badanie MTU cieki, poniewa niewykonywanie
tej operacji pociga za sob due straty w obrbie sieci.
ip_nonlocal_bind (logiczna; domylnie: wylczona)
Jeeli ustawione, pozwala procesowi na wywolanie funkcji bind() z
nielokalnym adresem IP, co moe by calkiem przydatne, ale moe
popsu niektore aplikacje.
ip6frag_time (liczba, domylnie: 30)
Czas w sekundach przetrzymywania w pamici fragmentu IPv6.
ip6frag_secret_interval (liczba, domylnie: 600)
Interwal (w sekundach) odwieania sekretnego klucza funkcji
mieszkajcej (lub czasu ycia tego klucza) dla fragmentow IPv6.
ipfrag_high_thresh (liczba), ipfrag_low_thresh (liczba)
Jeli liczba zebranych w kolejce fragmentow IP osignie warto
okrelon przez ipfrag_high_thresh, wtedy kolejka jest oproniana
do iloci okrelonej w ipfrag_low_thresh. Zawiera ona liczb
calkowit z podan liczb bajtow.
neigh/*
Patrz arp(7).
KONTROLKI WEJCIA/WYJCIA (IOCTL)
Do IP maj zastosowanie wszystkie kontrolki wejcia/wyjcia opisane w
socket(7).
Kontrolki konfigurowania ogolnych parametrow urzdzenia s opisane w
netdevice(7).
UWAGI
Naley by bardzo ostronym przy stosowaniu opcji SO_BROADCAST - nie jest
ona w systemie Linux uprzywilejowana, jest wic latwo przeciy sie za
pomoc niedbale uytych rozglosze. W przypadku protokolow nowych
aplikacji lepiej uywa grupy adresowej zamiast rozglosze. Stosowanie
adresow rozgloszeniowych jest nieostronoci.
Niektore inne implementacje gniazd BSD dopuszczaj dla gniazd opcje
IP_RCVDSTADDR i IP_RECVIF uywane do pobierania adresu przeznaczenia i
interfejsu odbieranych datagramow. Linux udostpnia bardziej ogoln opcj
IP_PKTINFO, robic to samo.
Niektore implementacja gniazd BSD take udostpniaj opcj IP_RECVTTL, ale
lcznie z przychodzcym pakietem jest przekazywanypomocniczy komunikat o
typie IP_RECVTTL. W tym wlanie roni si to od opcji IP_TTL, uywanej w
Linuksie.
Uywanie poziomu opcji gniazd SOL_IP jest nieprzenone, gniazda oparte na
BSD uywaj poziomu IPPROTO_IP.
B/LDY
ENOTCONN
Operacja moe by wykonana tylko na polczonym gniedzie, a gniazdo
nie zostalo polczone.
EINVAL Przypisano niewlaciwy argument. W przypadku operacji wysylania
moe to by spowodowane przez wysylanie drog przypisan do czarnej
dziury.
EMSGSIZE
Datagram jest wikszy ni warto MTU po drodze do celu i nie moe by
podzielony.
EACCES Uytkownik probowal wykona operacj nie majc potrzebnych praw.
Obejmuje to: wysylanie pakietu na adres rozgloszeniowy bez
ustawionego znacznika SO_BROADCAST., wysylanie pakietu zakazan
drog, prob modyfikacji ustawie firewalla nie majc uprawnie
administratora (ustawionego znacznika CAP_NET_ADMIN), prob
przypisania zarezerwowanego portu nie majc uprawnie
administratora (ustawionego znacznika CAP_NET_BIND_SERVICE).
EADDRINUSE
Probowano przypisa port do adresu bdcego ju w uyciu.
ENOPROTOOPT i EOPNOTSUPP
Przypisano niewlaciw opcj gniazda.
EPERM Uytkownik nie ma praw do ustawiania wysokiego priorytetu, zmiany
konfiguracji lub wysylania sygnalow do danych procesow lub grup
procesow.
EADDRNOTAVAIL
Zadano nieistniejcego interfejsu lub dany adres rodlowy nie jest
adresem lokalnym.
EAGAIN Operacja na gniedzie z wylczonym blokowaniem spowodowalaby
zablokowanie.
ESOCKTNOSUPPORT
Gniazdo nie jest skonfigurowane lub zadano nieznanego typu
gniazda.
EISCONN
connect(2) byla wywolana na ju polczonym gniedzie.
EALREADY
Operacja lczenia na gniedzie nieblokujcym ju trwa.
ECONNABORTED
Polczenie zostalo zamknite podczas accept(2).
EPIPE Polczenie zostalo nieoczekiwanie zamknite lub wylczyl si drugi
koniec.
ENOENT SIOCGSTAMP bylo wywolane na gniedzie, do ktorego nie dotarl aden
pakiet.
EHOSTUNREACH
Brak wpisu okrelajcego adres docelowy w tabeli routingu. Bld ten
moe by wywolany przez komunikat ICMP od zdalnego routera lub dla
lokalnej tabeli routingu.
ENODEV Urzdzenie sieciowe niedostpne lub niezdolne do wysylania
pakietow IP.
ENOPKG Podsystem jdra nie byl konfigurowany.
ENOBUFS, ENOMEM
Niewystarczajca ilo dostpnej pamici. Czsto oznacza to, e
przydzielanie pamici jest ograniczone przez ograniczenia bufora
gniazda, a nie przez ograniczenia pamici systemowej. Jednak nie
jest to pewne na 100%.
Inne bldy mog by generowane przez protokoly niszych warstw; obejrzyj
tcp(7), raw(7), udp(7) i socket(7).
WERSJE
IP_MTU, IP_MTU_DISCOVER, IP_PKTINFO, IP_RECVERR i IP_ROUTER_ALERT s
nowymi opcjami w Linuksie 2.2. S one jednoczenie specyficzne dla
Linuksa i nie powinny by uywane w przenonych programach.
struct ip_mreqn jest nowa w Linuksie 2.2. Linux 2.0 wspieral jedynie
ip_mreq.
Kontrolki systemowe pojawily si z Linuksem 2.2.
ZGODNO
Dla zgodnoci z Linuksem 2.0, wci jest dopuszczalna przestarzala
skladnia socket(PF_INET, SOCK_PACKET, protok'o/l), by stworzy gniazdo
typu packet(7). Nie jest to zbyt poprawne i powinno by zastpowane przez
socket(PF_PACKET, SOCK_RAW, protok'o/l). Glownym powodem jest ronica w
strukturze adresowej sockaddr_ll przechowujcej informacje dla warstwy
lcza (dokladniej: warstwy kanalowej), ktore kiedy przechowywane byly w
sockaddr_pkt.
B/LDY
Jest zbyt wiele nieokrelonych wartoci bldow.
Nie s opisane kontrolki wejcia/wyjcia do konfigurowania specyficznych
dla IP opcji interfejsu i tabele ARP.
Niektore wersje glibc zapominaj zadeklarowa in_pktinfo. Mona to
aktualnie obej, kopiujc j do programu z niniejszej strony podrcznika.
Pobieranie pierwotnego adresu docelowego za pomoc wywolania recvmsg(2)
z MSG_ERRQUEUE w msg_name nie dziala w niektorych jdrach 2.2.
ZOBACZ TAKE
recvmsg(2), sendmsg(2), ipfw(4), capabilities(7), netlink(7), raw(7),
socket(7), tcp(7), udp(7)
RFC 791 zawiera pierwotn specyfikacj protokolu IP.
RFC 1122 zawiera wymagania dla hostow IPv4.
RFC 1812 zawiera wymagania dla routerow IPv4.
INFORMACJE O T/LUMACZENIU
Powysze tlumaczenie pochodzi z nieistniejcego ju Projektu Tlumaczenia
Manuali i moe nie by aktualne. W razie zauwaenia ronic midzy powyszym
opisem a rzeczywistym zachowaniem opisywanego programu lub funkcji,
prosimy o zapoznanie si z oryginaln (angielsk) wersj strony podrcznika.