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)