IP 7

中文man手册

目录

IP

NAME (åç§°)
SYNOPSIS(æ»è§)
DESCRIPTION(æè¿°)
ADDRESS FORMAT(å°åæ ¼å¼)
SOCKET OPTIONS(奿¥åé项)
SYSCTLS
IOCTLS
NOTES(夿³¨)
ERRORS(é误)
VERSIONS(çæ¬)
COMPATIBILITY(å¼å®¹æ§)
BUGS
AUTHORS(ä½è)
SEE ALSO(å¦è§)
[䏿çç»´æ¤äºº]
[ä¸æçææ°æ´æ°]
ãä¸å½linux论åmanæå页翻è¯è®¡åã:
è·

NAME (åç§°)

ip - Linux IPv4 åè®®å®ç°

SYNOPSIS(æ»è§)

#include <sys/socket.h>
#include <net/netinet.h>

tcp_socket = socket(PF_INET, SOCK_STREAM, 0);
raw_socket
= socket(PF_INET, SOCK_RAW, protocol);
udp_socket
= socket(PF_INET, SOCK_DGRAM, protocol);

DESCRIPTION(æè¿°)

Linux å®ç°æè¿°äº RFC791 å RFC1122 ä¸ç Internet åè®®,çæ¬4. ip 忬éµå¾ª RFC1112 ç第äºå±çå¤ä¿¡éå¹¿æææ¯çå®ç°.å®ä¹åæ¬å«åè¿æ»¤å¨çIPè·¯ç±å¨.

ç¨åºåçæ¥å£ä¸ BSD ç奿¥å(socket)å¼å®¹ï¼ è¦è·å¾å³äºå¥æ¥åçæ´å¤ä¿¡æ¯,åè§ socket(7)

å建ä¸ä¸ªIP奿¥åæ¯éè¿ä»¥ socket(PF_INET, socket_type, protocol) æ¹å¼è°ç¨ socket(2) 彿°æ¥å®ç°çï¼ ææç奿¥åç±»åï¼socket_typeï¼æï¼ SOCK_STREAM ç¨æ¥æå¼ä¸ä¸ª tcp(7) 奿¥åï¼ SOCK_DGRAM ç¨æ¥æå¼ä¸ä¸ª udp(7) 奿¥åï¼æèæ¯ SOCK_RAW ç¨æ¥æå¼ä¸ä¸ª raw(7) 奿¥åç¨æ¥ç´æ¥è®¿é® IP åè®®ï¼ protocol æçæ¯è¦æ¥æ¶æèåéåºå»çåå«å¨ IP 头æ è¯(header)ä¸ç IP åè®®ï¼ å¯¹äºTCP奿¥åèè¨,å¯ä¸çææ protocol 弿¯ 0 å IPPROTO_TCP 对äºUDP奿¥å- èè¨,å¯ä¸çææ protocol 弿¯ 0 å IPPROTO_UDP. èå¯¹äº SOCK_RAW ä½ å¯ä»¥æå®ä¸ä¸ªå¨ RFC1700 ä¸å®ä¹çææ IANA IP åè®®ä»£ç æ¥èµå¼.

å½ä¸ä¸ªè¿ç¨å¸ææ¥åæ°çæ¥è®¿åæèè¿æ¥æ¶,å®åºè¯¥ä½¿ç¨ bind(2) ç»å®ä¸ä¸ªå¥æ¥å- å°ä¸ä¸ªæ¬å°æ¥å£å°åï¼ ä»»æç»å®çæ¬å°(å°å,端å£)对åªè½ç»å®ä¸ä¸ªIP奿¥åï¼ å½è°ç¨ bind æ¶ä¸å£°æäº INADDR_ANY æ¶,奿¥åå°ä¼ç»å®å° ææ æ¬å°æ¥å£ï¼å½å¨æªç»å®ç奿¥åä¸è°ç¨ listen(2) æè connect(2) æ¶,奿¥å- ä¼èªå¨ç»å®å°ä¸ä¸ªæ¬å°å°å设置为 INADDR_ANY çéæºç空é²ç«¯å£ä¸ï¼

é¤éä½ è®¾ç½®äº S0_REUSEADDR æ è¯ï¼å¦åä¸ä¸ªå·²ç»å®ç TCP æ¬å°å¥æ¥å- å°åå¨å³éåç䏿®µæ¶é´åä¸å¯ç¨ï¼ 使ç¨è¯¥æ è¯çæ¶åè¦å°å¿ï¼å ä¸ºå®ä¼ä½¿ TCP åå¾ä¸å¯é ï¼

ADDRESS FORMAT(å°åæ ¼å¼)

ä¸ä¸ª IP 奿¥åå°åå®ä¹ä¸ºä¸ä¸ª IP æ¥å£å°ååä¸ä¸ªç«¯å£å·çç»åï¼ åºæ¬ IP åè®®ä¸ä¼æä¾ç«¯å£å·,å®ä»¬éè¿æ´é«å±æ¬¡çåè®®å¦ udp(7) å tcp(7) æ¥å®ç°ï¼ 对äºraw奿¥åï¼ sin_port 设置为IPåè®®ï¼

struct sockaddr_in {
sa_family_t sin_family; /* å°åæ: AF_INET */
u_int16_t sin_port; /* æç½ç»åèæ¬¡åºçç«¯å£ */
struct in_addr sin_addr; /* internetå°å */
};

/* Internetå°å. */
struct in_addr {
u_int32_t s_addr; /* æç½ç»åèæ¬¡åºçå°å */
};

sin_family æ»æ¯è®¾ç½®ä¸º AF_INET. è¿æ¯å¿éçï¼å¨ Linux 2.2 ä¸- ï¼å¦æè¯¥è®¾ç½®ç¼ºå¤±ï¼å¤§å¤æ°èç½å½æ°ä¼è¿å EINVAL sin_port å嫿ç½ç»å- èæåºç端å£å·ï¼ç«¯å£å·å¨1024以ä¸ç称为 ä¿ç端å£ï¼ åªæé£äºææç¨æ·æ è¯ä¸º 0 æè CAP_NET_BIND_SERVICE æåè½çè¿ç¨æå¯ä»¥ bind(2) å°è¿äºå¥æ¥å- ï¼æ³¨æåå§çï¼rawï¼IPv4å议没æè¿æ ·çç«¯å£æ¦å¿µ,å®ä»¬åªéè¿æ´é«çåè®®å¦ tcp(7) å udp(7) æ¥å®ç°ï¼

sin_addr æçæ¯ IP 主æºå°å. å¨ struct in_addr ä¸ç addr é¨åå嫿ç½ç»å- èåºçä¸»æºæ¥å£å°åï¼ in_addr åºè¯¥åªè½éè¿ä½¿ç¨ inet_aton(3), inet_addr(3), inet_makeaddr(3) åºå½æ°æèç´æ¥éè¿ååè§£æå¨ï¼åè§ gethostbyname(3)ï¼ æ¥è®¿é®ï¼ IPv4 å°ååæåç¹å¹¿æï¼å¹¿æä¼ éåå¤ç¹å¹¿æå°åï¼ åç¹å¹¿æå°åæå®äºä¸å°ä¸»æºçå䏿¥å£ï¼å¹¿æå°åæ å®äºå¨ä¸ä¸ªç½æ®µä¸çææä¸»æºï¼ èå¤ç¹å¹¿æå°ååå¨ä¸ä¸ªå¤ç¹ä¼ éç»ä¸å¯»åææä¸»æº. åªæå½è®¾ç½®äºå¥æ¥åæ è¯ SO_BROADCAST æ¶ï¼ æè½æ¶åæ°æ®æ¥å°å¹¿æå°åï¼ å¨å½åçå®ç°ä¸ï¼é¢åè¿æ¥ç奿¥å- åªå许使ç¨åç¹ä¼ éå°åï¼

注æå°ååç«¯å£æ»æ¯æç§ç½ç»åèåºåå¨çï¼ è¿æå³çä½ éè¦å¯¹åéç»ç«¯å£çå·ç è°ç¨ htons(3)ï¼ ææå¨æ ååºä¸çå°å/端å£å¤ç彿°é½æ¯æç½ç»åèåºè¿è¡çï¼

æå ä¸ªç¹æ®çå°åï¼ INADDR_LOOPBACK (127.0.0.1) æ»æ¯ä»£è¡¨ç»ç±åç¯è®¾å¤çæ¬å°ä¸»æºï¼ INADDR_ANY (0.0.0.0) 表示任ä½å¯ç»å®çå°åï¼ INADDR_BROADCAST (255.255.255.255) 表示任ä½ä¸»æºï¼ç±äºåå²çåå ï¼è¿ä¸ç»å®ä¸º INADDR_ANY æåæ ·çææ.

SOCKET OPTIONS(奿¥åé项)

IP æ¯æä¸äºä¸åè®®ç¸å³ç奿¥åé项ï¼è¿äºé项å¯ä»¥éè¿ setsockopt(2) 设置ï¼å¹¶å¯ä»¥éè¿ getsockopt(2) 读åï¼ IP ç奿¥åé项级å«ä¸º SOL_IP è¿æ¯ä¸ä¸ªå¸å°æ´åæ è¯,å½å¼ä¸º0æ¶ä¸ºå,å¦åå为ç.
IP_OPTIONS

设置æèè·åå°ç±è¯¥å¥æ¥ååéçæ¯ä¸ªåç IP éé¡¹ï¼ è¯¥åæ°æ¯ä¸ä¸ªæååå«é项åé项é¿åº¦çåå¨ç¼å²åºçæéï¼ setsockopt(2) ç³»ç»è°ç¨è®¾ç½®ä¸ä¸ä¸ªå¥æ¥åç¸å³èç IP é项. IPv4 çæå¤§é项é¿åº¦ä¸º 40 åèï¼ åé RFC791 è·åå¯ç¨çéé¡¹ï¼ å¦æä¸ä¸ª SOCK_STREAM 奿¥åæ¶å°çåå§è¿æ¥è¯·æ±ååå« IP é项æ¶ï¼ IP é项èªå¨è®¾ç½®ä¸ºæ¥èªåå§åçé项ï¼åæ¶å转路ç±å¤´ï¼ å¨è¿æ¥å»ºç«ä»¥åå°ä¸å许æ¥è®¿çåä¿®æ¹éé¡¹ï¼ ç¼ºçæåµä¸æ¯å³é- å¯¹æææ¥è®¿åçæºè·¯ç±é项çï¼ä½ å¯ä»¥ç¨ accept_source_route sysctl æ¥æ¿æ´»ï¼ä»ç¶å¤çå¶å®é项妿¶é´æ³ï¼timestampï¼ï¼ å¯¹äºæ°æ®æ¥å¥æ¥åèè¨ï¼IP é项åªè½ç±æ¬å°ç¨æ·è®¾ç½®ï¼è°ç¨å¸¦ IP_OPTIONS ç getsockopt(2) 伿å½åç¨äºåéç IP é项æ¾å°ä½ æä¾çç¼å²åºä¸ï¼

IP_PKTINFO

ä¼ é䏿¡åå« pktinfo ç»æ(è¯¥ç»ææä¾ä¸äºæ¥è®¿åçç¸å³ä¿¡æ¯)ç IP_PKTINFO è¾å©ä¿¡æ¯. è¿ä¸ªé项åªå¯¹æ°æ®æ¥ç±»ç奿¥åææï¼

struct in_pktinfo
{
unsigned int ipi_ifindex; /* æ¥å£ç´¢å¼ */
struct in_addr ipi_spec_dst; /* è·¯ç±ç®çå°å */
struct in_addr ipi_addr; /* 头æ è¯ç®çå°å */
};

ipi_ifindex æçæ¯æ¥æ¶åçæ¥å£çå¯ä¸ç´¢å¼ï¼ ipi_spec_dst æçæ¯è·¯ç±è¡¨è®°å½ä¸çç®çå°åï¼è ipi_addr æçæ¯å头ä¸çç®çå°åï¼ å¦æç» sendmsg (2)ä¼ éäº IP_PKTINFOï¼ é£ä¹å¤åçåä¼éè¿å¨ ipi_ifindex ä¸- æå®çæ¥å£ åéåºå»ï¼åæ¶æ ipi_spec_dst 设置为ç®çå°åï¼

IP_RECVTOS

妿æå¼äºè¿ä¸ªé项ï¼å IP_TOS , è¾å©ä¿¡æ¯ä¼ä¸æ¥è®¿åä¸èµ·ä¼ éï¼ å®åå«ä¸ä¸ªåèç¨æ¥æå®å头ä¸çæå¡/ä¼åçº§åæ®µçç±»åï¼ è¯¥å- è为ä¸ä¸ªå¸å°æ´åæ è¯ï¼

IP_RECVTTL

å½è®¾ç½®äºè¯¥æ è¯æ¶ï¼ ä¼ é䏿¡å¸¦æç¨ä¸ä¸ªåèè¡¨ç¤ºçæ¥æ¶åçå- æ¶é´ï¼time to liveï¼å段ç IP_RECVTTL æ§å¶ä¿¡æ¯ï¼ æ¤é项è¿ä¸æ¯æ SOCK_STREAM 奿¥åï¼

IP_RECVOPTS

ç¨ä¸æ¡ IP_OPTIONS æ§å¶ä¿¡æ¯ä¼ éæææ¥è®¿ç IP é项ç»ç¨æ·ï¼ è·¯ç±å¤´æ è¯åå¶å®é项已ç»ä¸ºæ¬å°ä¸»æºå¡«å¥½ï¼ æ¤é项è¿ä¸æ¯æ SOCK_STREAM 奿¥åï¼

IP_RETOPTS

çåäº IP_RECVOPTS 使¯è¿åçæ¯å¸¦ææ¶é´æ³çæªå¤ççåå§é项åå¨è¿æ®µè·¯ç±ä¸- æªå¡«å¥çè·¯ç±è®°å½é¡¹ç®ï¼

IP_TOS

设置æèæ¥æ¶æºäºè¯¥å¥æ¥åçæ¯ä¸ªIPåç Type-Of-Service ï¼TOS æå¡ç±»åï¼å段ï¼å®è¢«ç¨æ¥å¨ç½ç»ä¸åºååçä¼åçº§ï¼ TOS æ¯ååèçå- 段ï¼å®ä¹äºä¸äºçæ å TOS æ è¯ï¼ IPTOS_LOWDELAY ç¨æ¥ä¸ºäº¤äºå¼éä¿¡æå°åå»¶è¿æ¶é´ï¼ IPTOS_THROUGHPUT ç¨æ¥ä¼åååéï¼ IPTOS_RELIABILITY ç¨æ¥ä½å¯é æ§ä¼åï¼ IPTOS_MINCOST åºè¯¥è¢«ç¨ä½"å¡«åæ°æ®"ï¼å¯¹äºè¿äºæ°æ®ï¼ä½éä¼ è¾æ¯æ å³ç´§è¦çï¼ è³å¤åªè½å£°æè¿äº TOS å¼ä¸çä¸ä¸ªï¼å¶å®ç齿¯æ æçï¼åºå½è¢«æ¸é¤ï¼ ç¼ºçæ¶,Linuxé¦ååé IPTOS_LOWDELAY æ°æ®æ¥, 使¯ç¡®åçåæ³è¦çéç½®çæéè§åèå®. ä¸äºé«ä¼å级ç屿¬¡å¯è½ä¼è¦æ±ä¸ä¸ªææçç¨æ·æ è¯ 0 æè CAP_NET_ADMIN è½å. ä¼å级ä¹å¯ä»¥ä»¥äºåè®®æ å³çæ¹å¼éè¿( SOL_SOCKET, SO_PRIORITY )奿¥åé项(åç socket(7) )æ¥è®¾ç½®.

IP_TTL

设置æèæ£ç´¢ä»æ¤å¥æ¥åååºçåçå½åçåæ¶é´å段.

IP_HDRINCL

妿æå¼çè¯, é£ä¹ç¨æ·å¯å¨ç¨æ·æ°æ®å颿ä¾ä¸ä¸ª ip 头. è¿åªå¯¹ SOCK_RAW ææ.åç raw(7) 以è·å¾æ´å¤ä¿¡æ¯.彿¿æ´»äºè¯¥æ è¯ä¹å,å¶å¼ç± IP_OPTIONS 设å®,å¹¶ä¸ IP_TOS 被忽ç¥.

IP_RECVERR

åè®¸ä¼ éæ©å±çå¯é çé误信æ¯. 妿卿°æ®æ¥ä¸æ¿æ´»äºè¯¥æ è¯, é£ä¹ææäº§ççé误ä¼å¨æ¯å¥æ¥åä¸ä¸ªçé误éå䏿éçå¾. å½ç¨æ·ä»å¥æ¥å- æä½ä¸æ¶å°é误æ¶,å°±å¯ä»¥éè¿è°ç¨è®¾ç½®äº MSG_ERRQUEUE æ è¯ç recvmsg(2) æ¥æ¥æ¶. æè¿°é误ç sock_extended_err ç»æå°éè¿ä¸æ¡ç±»å为 IP_RECVERR , 级å«ä¸º SOL_IPçè¾å©ä¿¡æ¯è¿è¡ä¼ é. è¿ä¸ªé项坹卿ªè¿æ¥ç奿¥å- ä¸å¯é å°å¤çéè¯¯å¾æç¨. é误éåçå·²æ¶å°çæ°æ®é¨ååå«é误å.

IP æç§ä¸é¢çæ¹æ³ä½¿ç¨ sock_extended_err ç»æï¼ ICMP 忥æ¶çé误 ee_origin 设为 SO_EE_ORIGIN_ICMP , å¯¹äºæ¬å°äº§ççé误å设为 SO_EE_ORIGIN_LOCAL . ee_type å ee_code 设置为 ICMP 头æ è¯çç±»åå代ç å段. ee_info åå«ç¨äº EMSGSIZE æ¶æ¾å°ç MTU. ee_data ç®å没æä½¿ç¨. å½é误æ¥èªäºç½ç»æ¶,è¯¥å¥æ¥å- 䏿æIPé项é½è¢«æ¿æ´» (IP_OPTIONS, IP_TTL, ç- ï¼)å¹¶ä¸å½åæ§å¶ä¿¡æ¯åå«é误åä¸ä¼ é.å¼åé误çåçææè½½è·ä¼ä»¥æ- £å¸¸æ°æ®è¿å.

å¨ SOCK_STREAM 奿¥åä¸ï¼ IP_RECVERR 伿ç»å¾®çè¯ä¹ä¸å.å®å¹¶ä¸ä¿å- 䏿¬¡è¶æ¶çé误,èæ¯ç«å³ä¼ éææè¿æ¥çé误ç»ç¨æ·. è¿å¯¹ TCP è¿æ¥æ¶é´å¾ççæåµå¾æç¨,å ä¸ºå®è¦æ±å¿«éçé误å¤ç. 使ç¨è¯¥é项è¦å°å¿:å ä¸ºä¸å许ä»è·¯ç±è½¬ç§»åå¶å®æ£ 常æ¡ä»¶ä¸æ- £ç¡®å°è¿è¡æ¢å¤,å®ä½¿å¾TCPåå¾ä¸å¯é ,å¹¶ä¸ç ´ååè®®çè§è. 注æTCP没æé误éå; MSG_ERRQUEUE å¯¹äº SOCK_STREAM 奿¥åæ¯éæ³ç. å æ¤ææé误é½ä¼ç±å¥æ¥å彿°è¿å,æèåªè¿å SO_ERROR .

对äºåå§(raw)奿¥åèè¨, IP_RECVERR åè®¸ä¼ éæææ¥æ¶å°çICMPé误ç»åºç¨ç¨åº,å¦åé误åªå¨è¿æ¥ç奿¥å- 䏿¥ååºæ¥.

å®è®¾ç½®æèæ£ç´¢ä¸ä¸ªæ´åå¸å°æ è¯. IP_RECVERR 缺ç设置为off(å³é).

IP_PMTU_DISCOVER

ä¸ºå¥æ¥åè®¾ç½®ææ¥æ¶Path MTU Discovery setting(è·¯å¾MTUåç°è®¾ç½®). å½å许æ¶,Linuxä¼å¨è¯¥å¥æ¥å䏿§è¡å® ä¹äºRFC1191ä¸çPath MTU Discovery(è·¯å¾MTUåç°). don’t 段æ è¯ä¼è®¾ç½®å¨ææå¤åçæ°æ®æ¥ä¸. ç³»ç»çº§å«ç缺ç弿¯è¿æ ·çï¼ SOCK_STREAM 奿¥åç± ip_no_pmtu_disc sysctl æ§å¶ï¼è对å¶å®ææç奿¥åé½è¢«é½å±è½æäºï¼å¯¹äºé SOCK_STREAM 奿¥å- èè¨, ç¨æ·æè´£ä»»æç§MTUç大å°å¯¹æ°æ®ååå¹¶å¨å¿è¦çæåµä¸è¿è¡ä¸- ç»§éå.å¦æè®¾ç½®äºè¯¥æ è¯ (ç¨ EMSGSIZE ),åæ ¸ä¼æç»æ¯å·²ç¥è·¯å¾MTUæ´å¤§çå.

 

Image grohtml-3015595-1.png

å½å许 PMTU ï¼è·¯å¾MTUï¼æç´¢æ¶, åæ ¸ä¼èªå¨è®°å½æ¯ä¸ªç®ç主æºçpath MTU(è·¯å¾MTU).å½å®ä½¿ç¨ connect(2) è¿æ¥å°ä¸ä¸ªæå®ç对端æºå¨æ¶,å¯ä»¥æ¹ä¾¿å°ä½¿ç¨ IP_MTU 奿¥åé项æ£ç´¢å½åå·²ç¥ç path MTU(è·¯å¾MTU)(æ¯å¦ï¼å¨åçäºä¸ä¸ª EMSGSIZE é误å).å®å¯è½éçæ¶é´çæ¨ç§»èæ¹å. 对äºå¸¦æè®¸å¤ç®ç端çéè¿æ¥ç奿¥å,ä¸ä¸ªç¹å®ç®çç«¯çæ°å°æ¥ç MTU ä¹å¯ä»¥ä½¿ç¨é误éå(åç IP_RECVERR) æ¥åå访é®. æ°çé误ä¼ä¸ºæ¯æ¬¡å°æ¥ç MTU çæ´æ°æéçå¾.

å½è¿è¡ MTU æç´¢æ¶,æ¥èªæ°æ®æ¥å¥æ¥åçåå§åå¯è½ä¼è¢«ä¸¢å¼. ä½¿ç¨ UDP çåºç¨ç¨åºåºè¯¥ç¥éè¿ä¸ªå¹¶ä¸èè å¶åçä¸ç»§ä¼ éçç¥.

为äºå¨æªè¿æ¥ç奿¥åä¸å¼å¯¼è·¯å¾ MTU åç°è¿ç¨, æä»¬å¯ä»¥ç¨ä¸ä¸ªå¤§çæ°æ®æ¥(头尺寸è¶è¿64Kåè)å¯å¨, 并令å¶éè¿æ´æ°è·¯å¾ MTU 鿥æ¶ç¼©.

为äºè·å¾è·¯å¾MTUè¿æ¥çåå§ä¼°è®¡,å¯éè¿ä½¿ç¨ connect(2) æä¸ä¸ªæ°æ®æ¥å¥æ¥åè¿æ¥å°ç®çå°å,å¹¶éè¿è°ç¨å¸¦ IP_MTUé项ç getsockopt(2) æ£ç´¢è¯¥MTU.

IP_MTU

æ£ç´¢å½å奿¥åçå½åå·²ç¥è·¯å¾MTU.åªæå¨å¥æ¥å- è¢«è¿æ¥æ¶ææ¯ææç.è¿åä¸ä¸ªæ´æ°.åªæä½ä¸ºä¸ä¸ª getsockopt(2) æææ.

IP_ROUTER_ALERT

ç»è¯¥å¥æ¥åææå°è¦è½¬åçå设置IPè·¯ç±å¨è¦åï¼IP RouterAlert optionï¼é项. åªå¯¹åå§å¥æ¥åï¼raw socketï¼ææ,è¿å¯¹ç¨æ·ç©ºé´ç RSVPå å°å®æ¤ç¨åºä¹ç±»å¾æç¨. åè§£çåä¸è½è¢«å核转å,ç¨æ·æè´£ä»»è½¬åå®ä»¬.奿¥åç»å®è¢«å¿½ç¥, è¿äºååªæåè®®è¿æ»¤. è¦æ±è·å¾ä¸ä¸ªæ´åæ è¯.

IP_MULTICAST_TTL

设置æè读åè¯¥å¥æ¥åçå¤åå¤ç¹å¹¿æåççåæ¶é´å¼. è¿å¯¹äºå¤ç¹å¹¿æ- å设置å¯è½çæå°TTLå¾éè¦. 缺çå¼ä¸º1,è¿æå³çå¤ç¹å¹¿æ- åä¸ä¼è¶åºæ¬å°ç½æ®µ, é¤éç¨æ·ç¨åºæç¡®å°è¦æ±è¿ä¹å.åæ°æ¯ä¸ä¸ªæ´æ°.

IP_MULTICAST_LOOP

设置æè¯»åä¸ä¸ªå¸å°æ´å忰以å³å®åéçå¤ç¹å¹¿æ- 忝å¦åºè¯¥è¢«åéå°æ¬å°å¥æ¥å.

IP_ADD_MEMBERSHIP

å å¥ä¸ä¸ªå¤ç¹å¹¿æç».åæ°ä¸º struct ip_mreqn ç»æ.

struct ip_mreqn
{
struct in_addr imr_multiaddr; /* IPå¤ç¹ä¼ éç»å°å */
struct in_addr imr_address; /* æ¬å°æ¥å£çIPå°å */
int imr_ifindex; /* æ¥å£ç´¢å¼ */
};

imr_multiaddr åå«åºç¨ç¨åºå¸æå å¥æèéåºçå¤ç¹å¹¿æç»çå°å. å®å¿é¡»æ¯ä¸ä¸ªææçå¤ç¹å¹¿æå°å. imr_address æçæ¯ç³»ç»ç¨æ¥å å¥å¤ç¹å¹¿æç»çæ¬å°æ¥å£å°å;妿å®ä¸ INADDR_ANY ä¸è´,é£ä¹ç±ç³»ç»éæ©ä¸ä¸ªåéçæ¥å£. imr_ifindex æçæ¯è¦å å¥/è±ç¦» imr_multiaddr ç»çæ¥å£ç´¢å¼,æè设为0è¡¨ç¤ºä»»ä½æ¥å£.

ç±äºå¼å®¹æ§çç¼æ,èç ip_mreq æ¥å£ä»ç¶è¢«æ¯æ.å®ä¸ ip_mreqn åªæä¸ä¸ªå°æ¹ä¸å,å°±æ¯æ²¡æåæ¬ imr_ifindex åæ®µ.è¿åªå¨ä½ä¸ºä¸ä¸ª setsockopt(2) æ¶æææ.

IP_DROP_MEMBERSHIP

è±ç¦»ä¸ä¸ªå¤ç¹å¹¿æç».åæ°ä¸º ip_mreqn æè ip_mreq ç»æ,è¿ä¸ IP_ADD_MEMBERSHIP 类似.

IP_MULTICAST_IF

为å¤ç¹å¹¿æå¥æ¥å设置æ¬å°è®¾å¤.åæ°ä¸º ip_mreqn æè ip_mreq ç»æ,å®ä¸ IP_ADD_MEMBERSHIP 类似.

å½ä¼ éä¸ä¸ªæ æç奿¥åé项æ¶,è¿å ENOPROTOOPT .

SYSCTLS

IPåè®®æ¯æ sysctl æ¥å£éç½®ä¸äºå¨å±é项.sysctlå¯éè¿è¯»åæèåå¥ /proc/sys/net/ipv4/* æä»¶æä½¿ç¨ sysctl(2) æ¥å£æ¥åå访é®.
ip_default_ttl

设置å¤ååç缺ççåæ¶é´å¼.æ¤å¼å¯ä»¥å¯¹æ¯ä¸ªå¥æ¥åéè¿ IP_TTL é项æ¥ä¿®æ¹.

ip_forward

以ä¸ä¸ªå¸å°æ è¯æ¥æ¿æ´»IP转ååè½.IP转åä¹å¯ä»¥ææ¥å£æ¥è®¾ç½®

ip_dynaddr

æå¼æ¥å£å°åæ¹åæ¶å¨æå¥æ¥åå°åå伪è£è®°å½çéå. è¿å¯¹å·æååçIPå°åçæ¨å·æ¥å£å¾æ ç¨.0表示ä¸éå,1æå¼å¶åè½,è2åæ¿æ´»å使¨¡å¼.

ip_autoconfig

æ ææ¡£

ip_local_port_range

åå«ä¸¤ä¸ªæ´æ°,å®ä¹äºç¼ºçåéç»å¥æ¥åçæ¬å°ç«¯å£èå´. åéèµ·å§äºç¬¬ä¸ä¸ªæ°èç»æ¢äºç¬¬äºä¸ªæ°. 注æè¿äºç«¯å£ä¸è½ä¸ä¼ªè£æä½¿ç¨ç端å£ç¸å²çª(尽管è¿ç§æåµä¹å¯ä»¥å¤ç). åæ¶,éæçéæ©å¯è½ä¼å¯¼è´ä¸äºé²ç«å¢åè¿æ»¤å¨çé®é¢,å®ä»¬ä¼è¯¯è®¤ä¸ºæ¬å°ç«¯å£å¨ä½¿ç¨. 第ä¸ä¸ªæ°å¿é¡»è³å°>1024,æå¥½æ¯>4096以é¿åä¸ä¼æå¨ç¥ç端å£åçå²çªï¼ ä»èæå¤§å¯è½çåå°é²ç«å¢é®é¢.

ip_no_pmtu_disc

妿æå¼äº,缺çæåµä¸ä¸å¯¹TCP奿¥åæ§è¡è·¯å¾MTUåç°. 妿å¨è·¯å¾ä¸è¯¯éç½®äºé²ç«å¢(ç¨æ¥ä¸¢å¼ææ ICMPå)æè误éç½®äºæ¥å£ (ä¾å¦,设置äºä¸ä¸ªä¸¤ç«¯MTUä¸åçç«¯å¯¹ç«¯è¿æ¥),è·¯å¾MTUåç°å¯è½ä¼å¤±è´¥. 宿¿ä¿®å¤è·¯å¾ä¸çæåçè·¯ç±å¨,ä¹å¥½è¿æ´ä¸ªå°å³éè·¯å¾MTUåç°, å ä¸ºè¿æ ·åä¼å¯¼è´ç½ç»ä¸çé«å¼é.

ipfrag_high_thresh, ipfrag_low_thresh

妿æéçå¾çIPç¢ççæ°ç®è¾¾å° ipfrag_high_thresh , éå被æç©ºä¸º ipfrag_low_thresh . è¿åå«ä¸ä¸ªè¡¨ç¤ºåèæ°çæ´æ°.

ip_always_defrag

[kernel 2.2.13ä¸çæ°åè½;卿©æåæ ¸çæ¬ä¸,该åè½å¨ç¼è¯æ¶éè¿ CONFIG_IP_ALWAYS_DEFRAG éé¡¹æ¥æ§å¶]

å½è¯¥å¸å°æ è¯è¢«æ¿æ´»(ä¸çäº0)æ¶, æ¥è®¿çç¢ç(IPåçä¸é¨å,è¿çæäºå½ä¸äºå¨æºç«¯åç®ç端ä¹é´ç主æºè®¤ å®å太大èåå²æè®¸å¤ç¢ççæåµä¸)å°å¨å¤çä¹åéæ°ç»å(ç¢çæ´ç), å³ä½¿å®ä»¬é©¬ä¸è¦è¢«è½¬åä¹å¦æ¤ï¼

åªå¨è¿è¡çä¸å°ä¸ç½ç»åä¸è¿æ¥çé²ç«å¢æèéæä»£çæå¡å¨æ¶æè¿ä¹å¹²; å¯¹äºæ£å¸¸çè·¯ç±å¨æè主æº, æ°¸è¿ä¸è¦æå¼å®. å¦åå½ç¢çå¨ä¸åè¿æ¥ä¸- éè¿æ¶ç¢ççéä¿¡å¯è½ä¼è¢«æ°ä¹±. èä¸ç¢çéç»ä¹éè¦è±è´¹å¤§éçååå CPU æ¶é´ï¼

è¿å¨éç½®äºä¼ªè£æèéæä»£ççæåµä¸èªå¨æå¼.

neigh/*

åç arp(7)

IOCTLS

ææå¨ socket(7) 䏿æè¿° ç ioctl é½å¯åºç¨äºip.

ç¨äºéç½®é²ç«å¢åºç¨çioctlè®°è½½å¨ ipchains åç ipfw(7) çææ¡£ä¸.

ç¨æ¥éç½®æ®é设å¤åæ°çioctlå¨ netdevice(7) 䏿æè¿°.

NOTES(夿³¨)

ä½¿ç¨ SO_BROADCAST é项è¦å°å¿ - å®å¨ Linux 䏿²¡ææéè¦æ±. ä¸å°å¿ç广æ- å¾å®¹æå¯¼è´ç½ç»è¿è½½.å¯¹äºæ°çåºç¨åè®®èè¨,æ 好æ¯ä½¿ç¨å¤ç¹å¹¿æ- ç»æ¥æ¿ä»£å¹¿æ.æä»¬ä¸é¼å±ä½¿ç¨å¹¿æ.

æäºå¶å®çBSD奿¥åå®ç°æä¾äº IP_RCVDSTADDR å IP_RECVIF 奿¥å- é项æ¥è·å¾ç®çå°åä»¥åæ¥æ¶æ°æ®æ¥çæ¥å£.Linuxææ´éç¨ç IP_PKTINFO æ¥å®æç¸åä»»å¡.

ERRORS(é误)

ENOBUFS,EPERM对EACCESç.)
ENOTCONN

æä½åªå®ä¹äºè¿æ¥ç奿¥å,èè¯¥å¥æ¥åå´æ²¡æè¿æ¥.

EINVAL

ä¼ éæ æçåæ°. 对äºåéæä½,è¿å¯ä»¥å åéå°ä¸ä¸ª blackhole(黿´) è·¯ç±èå¼å.

EMSGSIZE

æ°æ®æ¥å¤§äºè¯¥è·¯å¾ä¸ç MTU,å¹¶ä¸å®ä¸è½è¢«åæç¢ç.

EACCES

没æå¿è¦æéçç¨æ·è¯å¾æ§è¡ä¸é¡¹éè¦æäºæéçæä½. è¿åæ¬: 卿²¡æ SO_BROADCAST æ è¯è®¾ç½®çæåµä¸åéä¸ä¸ªåå°å¹¿æå°å. éè¿ä¸æ¡ ç¦æ¢ç è·¯ç±åéå. 卿²¡æ CAP_NET_ADMIN æèææç¨æ·æ è¯ä¸ä¸º0çæåµä¸ä¿®æ¹é²ç«å¢è®¾ç½®. 卿²¡æ CAP_NET_BIND_SERVICE è½åæèææç¨æ·æ è¯ä¸ä¸ºé¶0çæåµä¸ç»å®ä¸ä¸ªä¿ç端å£.

EADDRINUSE

è¯å¾ç»å®å°ä¸ä¸ªå·²å¨ä½¿ç¨çå°å.

ENOMEM å ENOBUFS

没æè¶³å¤çååå¯ç¨.

ENOPROTOOPT å EOPNOTSUPP

ä¼ éæ æç奿¥åé项.

EPERM

ç¨æ·æ²¡ææé设置é«ä¼å级,ä¿®æ¹éç½®æèåéä¿¡å·å°è¯·æ±çè¿ç¨æç».

EADDRNOTAVAIL

请æ±ä¸ä¸ªä¸åå¨çæ¥å£æè请æ±çæºç«¯å°å䏿¯æ¬å°ç.

EAGAIN

å¨ä¸ä¸ªéé»å¡ç奿¥åä¸è¿è¡æä½ä¼é»å¡.

ESOCKTNOSUPPORT

奿¥åæªéç½®æè请æ±äºä¸ä¸ªæªç¥ç±»åç奿¥å.

EISCONN

å¨ä¸ä¸ªå·²ç»è¿æ¥ç奿¥åä¸è°ç¨ connect(2).

EALREADY

å¨ä¸ä¸ªéé»å¡ç奿¥åä¸çè¿æ¥æä½å·²ç»å¨è¿è¡ä¸.

ECONNABORTED

å¨ä¸æ¬¡ accept(2) æ§è¡ä¸è¿æ¥è¢«å³é.

EPIPE

è¿æ¥æå¤å³éæè被对端å³é.

ENOENT

卿²¡ææ¥å°è¾¾ç奿¥åä¸è°ç¨ SIOCGSTAMP .

EHOSTUNREACH

æ²¡æææè·¯ç±è¡¨è®°å½å¹éç®çå°å.该é误å¯ä»¥è¢«æ¥èªè¿ç¨è·¯ç±å¨ç ICMPæ¶æ¯æèå ä¸ºæ¬å°è·¯ç±è¡¨çç¼æèå¼å.

ENODEV

ç½ç»è®¾å¤ä¸å¯ç¨æèä¸éäºåéIP.

ENOPKG

åæ ¸åç³»ç»æ²¡æéç½®.

ENOBUFS, ENOMEM

没æè¶³å¤ç空é²åå. è¿å¸¸å¸¸æå³çåååéå å¥æ¥åç¼å²åºçéå¶èåé, è䏿¯å ä¸ºç³»ç»ååçç¼æ,使¯è¿ä¹ä¸æ¯100%æ£ç¡®ï¼

å¶å®é误å¯è½ç±éå åè®®æçæ;åç tcp(7), raw(7), udp(7) å socket(7).

VERSIONS(çæ¬)

IP_PKTINFO, IP_MTU, IP_PMTU_DISCOVER, IP_PKTINFO, IP_RECVERR å IP_ROUTER_ALERT æ¯Linux 2.2ä¸çæ°é项.

struct ip_mreqn 乿¯æ°åºç°å¨Linux 2.2ä¸ç.Linux 2.0åªæ¯æ ip_mreq.

sysctlæ¯å¨Linux 2.2ä¸å¼å¥ç.

COMPATIBILITY(å¼å®¹æ§)

为äºä¸Linux 2.0ç¸å®¹,ä»ç¶æ¯æç¨è¿æ¶ç socket(PF_INET, SOCK_RAW, protocol) è¯æ³æå¼ä¸ä¸ª packet(7) 奿¥å.æä»¬ä¸èµæè¿ä¹ç¨,èä¸åºè¯¥è¢« socket(PF_PACKET, SOCK_RAW, protocol) æä»£æ¿.主è¦çåºå«å°±æ¯ æ°çé对ä¸è¬é¾æ¥å±ä¿¡æ¯ç sockaddr_ll å°åç»ææ¿æ¢äºæ§ç sockaddr_pkt å°åç»æ.

BUGS

æè®¸å¤ä¸è¿è´¯çé误ç .

没ææè¿°ç¨æ¥éç½®ç¹å®IPæ¥å£é项åARP表çioctl.

AUTHORS(ä½è)

该man页ä½èæ¯Andi Kleen.

SEE ALSO(å¦è§)

sendmsg(2), recvmsg(2), socket(7), netlink(7), tcp(7), udp(7), raw(7), ipfw(7).

RFC791:åå§IPè§è.
RFC1122:IPv4主æºéæ±.
RFC1812:IPv4è·¯ç±å¨éæ±.

[䏿çç»´æ¤äºº]

riser <boomer@ccidnet.com>

[ä¸æçææ°æ´æ°]

2001/07/19

ãä¸å½linux论åmanæå页翻è¯è®¡åã:

http://cmpp.linuxforum.net

è·

æ¬é¡µé¢ä¸æçç±ä¸æ man æå页计åæä¾ã
䏿 man æå页计åï¼https://github.com/man-pages-zh/manpages-zh