ip

IP(7)                            Linux ç¨åºåæå                           IP(7)



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æ´å¤§çå.


              Path MTU discovery(è·¯å¾MTUåç°)æ è¯   å«ä¹
              IP_PMTUDISC_WANT                      对æ¯æ¡è·¯å¾è¿è¡è®¾ç½®.
              IP_PMTUDISC_DONT                      ä»ä¸ä½Path MTU Discovery(è·¯å¾MTUåç°).
              IP_PMTUDISC_DO                        æ»ä½Path MTU Discovery(è·¯å¾MTUåç°).


              å½å许 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



Linux æå页                      1999å¹´5æ11æ¥                           IP(7)