Provided by: manpages-zh_1.5-1_all bug

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(z)
       Linux  å¯¦ç¾æzæ–¼  RFC791  å’Œ  RFC1122  中的  Internet  å”è­°,版本4.   ip
       包括éµå¾ª                                                        RFC1112
       的第二層的多信é“廣播技術的實ç¾.它也包括å«åŒ…éŽæ¿¾å™¨çš„IP路由器.

       程å¼çš„æŽ¥å£èˆ‡ BSD 的套接字(socket)相容. nç²å¾—關於套接字的更多信æ¯,åƒè¦‹
       socket(7)

       創建一粄P套接字是通éŽä»¥ socket(PF_INET, socket_type, protocol) æ–¹å¼èª¿ç”¨
       socket(2)       函數來實ç¾çš„.      有效的套接字類型(socket_type)有:
       SOCK_STREAM 用來打開一 tcp(7) 套接字, SOCK_DGRAM  用來打開一  udp(7)
       套接字,或者是 SOCK_RAW 用來打開一 raw(7) å¥—æŽ¥å­—ç”¨ä¾†ç›´æŽ¥è¨ªå• IP å”議.
       protocol  指的是n接收或者發é€å‡ºåŽ»çš„åŒ…å«åœ¨  IP   頭標識(header)中的   IP
       å”議.  å°æ–¼TCP套接字而言,唯一的有效  protocol  O  0  å’Œ  IPPROTO_TCP
       å°æ–¼UDP套接字而言,唯一的有效 protocol O  0  å’Œ  IPPROTO_UDP.   è€Œå°æ–¼
       SOCK_RAW ä½ å¯ä»¥æŒ‡å®šä¸€èŒ¼b RFC1700 中定義的有效 IANA IP å”議代碼來賦.

       當一èˆiç¨‹å¸Œæœ›æŽ¥å—æ–°çš„來訪包或者連接時,它應該使用     bind(2)    ç¶å®šä¸€-
       è‡M接字到一茈誚a接å£åœ°å€ï¼Ž       ä»»æ„給定的本地(地å€,端å£)å°åªèƒ½ç¶å®šä¸€-
       粄P套接字.  當調用 bind æ™‚ä¸­è²æ˜Žäº† INADDR_ANY 時,套接字將會ç¶å®šåˆ° 奿µå›
       本地接å£ï¼Žç•¶åœ¨æœªç¶å®šçš„套接字上調用    listen(2)     或者     connect(2)
       時,套接字會自動ç¶å®šåˆ°ä¸€èŒˆèªša地å€è¨­ç½®ç‚º INADDR_ANY 的隨機的空閒端å£ä¸Šï¼Ž

       除éžä½ è¨­ç½®äº†        S0_REUSEADDR        標識,å¦å‰‡ä¸€èŒªwç¶å®šçš„       TCP
       本地套接字地å€åœ¨é—œé–‰å¾Œçš„一段時間內ä¸å¯ç”¨ï¼Ž             使用該標識的時-
       nå°å¿ƒï¼Œå› ç‚ºå®ƒæœƒä½¿ TCP 變得ä¸å¯é ï¼Ž

ADDRESS FORMAT()
       一  IP  套接字地å€å®šç¾©ç‚ºä¸€  IP  接å£åœ°å€å’Œä¸€èš¨æ•f號的組åˆï¼Ž  基本  IP
       å”è­°ä¸æœƒæä¾›ç«¯å£è™Ÿ,它抭qéŽæ›´é«˜å±¤æ¬¡çš„å”議如 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以下的稱為           å†Oçdæ¦å»äºf.
       åªæœ‰é‚£äº›æœ‰æ•ˆä½¿ç”¨è€…標識為 0 或者 CAP_NET_BIND_SERVICE 有功能的進程æ‰å¯ä»¥
       bind(2)    到這些套接字.注æ„é´l的(raw)IPv4å”è­°æ²’æœ‰é€™æ¨£çš„ç«¯å£æ¦‚念,它-
       怚ué€šéŽæ›´é«˜çš„å”議如 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
       地å€åˆ†æˆå–®é»žå»£æ’­ï¼Œå»£æ’­å‚³é€å’Œå¤šé»žå»£æ’­åœ°å€ï¼Ž
       å–®é»žå»£æ’­åœ°å€æŒ‡å®šäº†ä¸€å°ä¸»æ©Ÿçš„單一接å£ï¼Œå»£æ’­åœ°å€æŒ‡              定了在一-
       蚨繻q上的所有主機,      而多點廣播地å€å‰‡åœ¨ä¸€èŒ¼h點傳é€çµ„䏭尋倿‰€æœ‰ä¸»æ©Ÿ.
       åªæœ‰ç•¶è¨­ç½®äº†å¥—接字標識   SO_BROADCAST  時,  æ‰èƒ½æ”¶ç™¼æ•¸æ“šå ±åˆ°å»£æ’­åœ°å€ï¼Ž
       在當å‰çš„實ç¾ä¸­ï¼Œæƒ˜V連接的套接字åªå…許使用單點傳é€åœ°å€ï¼Ž

       注æ„地å€å’Œç«¯å£ç¸½æ˜¯æŒ‰ç…§ç¶²è·¯å­—節åºå­˜å„²çš„.                  這æ„味著你需-
       nå°åˆ†é…給端å£çš„號碼調用                                      htons(3ï¼D
       所有在標準庫中的地å€/端å£è™•ç†å‡½æ•¸éƒ½æ˜¯æŒ‰ç¶²è·¯å­—節åºé‹è¡Œçš„.

       有幾è…S殊的地å€ï¼š              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

       IP_OPTIONS
              設置或者ç²å–將由該套接字發é€çš„æ¯èŒˆ]çš„  IP   é¸é ….   è©²åƒæ•¸æ˜¯ä¸€-
              茷å‘包å«é¸é …å’Œé¸é …長度的存儲緩沖å€çš„æŒ‡é‡ï¼Ž        setsockopt(2)
              系統調用設置與一è‡M接字相關è¯çš„ IP é¸é ….  IPv4  的最大é¸é …長度為
              40  字節.  åƒé–±  RFC791  ç²å–å¯ç”¨çš„é¸é ….  如果一  SOCK_STREAM
              套接字收到的åˆå§‹é€£æŽ¥è«‹æ±‚åŒ…åŒ…å«       IP       é¸é …時,        IP
              é¸é …自動設置為來自åˆå§‹åŒ…çš„é¸é …ï¼ŒåŒæ™‚å轉路由頭.
              在連接建立以後將ä¸å…許來訪的包蚹嚙龠窗D
              é è¨­æƒ…æ³ä¸‹æ˜¯é—œé–‰å°æ‰€æœ‰ä¾†è¨ªåŒ…çš„æºè·¯ç”±é¸é …的,你å¯ä»¥ç”¨
              accept_source_route                                       sysctl
              來激活.ä»ç„¶è™•ç†å…¶å®ƒé¸é …如時間戳(timestamp).
              å°æ–¼æ•¸æ“šå ±å¥—接字而言,IP        é¸é …åªèƒ½ç”±æœ¬åœ°ä½¿ç”¨è€…設置.調用帶
              IP_OPTIONS     çš„     getsockopt(2)     會把當å‰ç”¨æ–¼ç™¼é€çš„    IP
              é¸é …放到你æä¾›çš„ç·©æ²–å€ä¸­ï¼Ž

       IP_PKTINFO
              傳éžä¸€æ¢åŒ…å«   pktinfo    çµæ§‹(è©²çµæ§‹æä¾›ä¸€äº›ä¾†è¨ªåŒ…的相關信æ¯)çš„
              IP_PKTINFO 輔助信æ¯.  這蚇龠等uå°æ•¸æ“šå ±é¡žçš„套接字有效.

              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ï¸A
              那麼外發的包會通éŽåœ¨ ipi_ifindex  ä¸­æŒ‡å®šçš„æŽ¥å£  發é€å‡ºåŽ»ï¼ŒåŒæ™‚把
              ipi_spec_dst 設置為目的地å€ï¼Ž

       IP_RECVTOS
              如果打開了這蚇龠窗A則   IP_TOS   ,  è¼”åŠ©ä¿¡æ¯æœƒèˆ‡ä¾†è¨ªåŒ…一起傳éžï¼Ž
              它包å«ä¸€èŒ¼r節用來指定包頭中的æœå‹™/優先級字段的類型. 該字節為一-
              èŒˆç‰¯èœ€èˆ•ç‹©é™æD

       IP_RECVTTL
              當設置了該標識時,                             傳é€ä¸€æ¢å¸¶æœ‰ç”¨ä¸€-
              茼r節表示的接收包生存時間(time   to   live)字段的   IP_RECVTTL
              控制信æ¯ï¼Ž æ­¤é¸é …還䏿”¯æŒ SOCK_STREAM 套接字.

       IP_RECVOPTS
              ç”¨ä¸€æ¢   IP_OPTIONS   控制信æ¯å‚³éžæ‰€æœ‰ä¾†è¨ªçš„  IP  é¸é …給使用者.
              路由頭標識和其它é¸é …已經為本地主機填好.          æ­¤é¸é …還䏿”¯æŒ
              SOCK_STREAM 套接字.

       IP_RETOPTS
              ç­‰åŒæ–¼       IP_RECVOPTS       但是返回的是帶有時間戳的未處ç†çš„-
              é´lé¸é …和在這段路由中未填入的路由記錄項目.

       IP_TOS è¨­ç½®æˆ–è€…æŽ¥æ”¶æºæ–¼è©²å¥—接字的æ¯ç²„P包的    Type-Of-Service     (TOS
              æœå‹™é¡žåž‹ï¼‰å­—段.它被用來在網路上å€åˆ†åŒ…的優先級.             TOS
              是單字節的字段.定義了一些的標準   TOS   標識:   IPTOS_LOWDELAY
              用來為交互å¼é€šä¿¡æœ€å°åŒ–延鲿™‚間,                IPTOS_THROUGHPUT
              用來優化åžåé‡ï¼Œ      IPTOS_RELIABILITY       用來作å¯é æ€§å„ªåŒ–,
              IPTOS_MINCOST
              應該被用作"填充數據"ï¼Œå°æ–¼é€™äº›æ•¸æ“šï¼Œä½Žé€Ÿå‚³è¼¸æ˜¯ç„¡é—œç·Šn的.
              至多åªèƒ½è²æ˜Žé€™äº›   TOS  云漱@è‚D其它的都是無效的,應當被清除.
              é è¨­æ™‚,Linuxæ¼¸ç™¼é€   IPTOS_LOWDELAY   數據報,   ä½†æ˜¯ç¢ºåˆ‡çš„åšæ³•-
              n看é…置的排隊è¦å‰‡è€Œå®š.            一些高優先級的層次å¯èƒ½æœƒn求一-
              茼陵蘆漕æ´å³ˆæŠ¯é™      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)     來接收.     æz錯誤的
              sock_extended_err  çµæ§‹å°‡é€šéŽä¸€æ¢é¡žåž‹ç‚º  IP_RECVERR   ,   級別為
              SOL_IP.                                    這-
              蚇龠給鵀b未連接的套接字上å¯é åœ°è™•ç†éŒ¯èª¤å¾ˆæœ‰ç”¨.
              錯誤隊列的已收到的數據部分包å«éŒ¯èª¤åŒ….

              IP  按照下悸漱隤k使用 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    連接時間很短的情æ³å¾ˆæœ‰ç”¨,因為它n求快速的錯誤處ç†.
              使用該é¸é …nå°å¿ƒ:因為ä¸å…許從路由轉移和其它正
              常æ¢ä»¶ä¸‹æ­£ç¢ºåœ°é€²è¡Œæ¢å¾©,它使得TCP變得ä¸å¯é ,並且破壞å”è­°çš„è¦ç¯„.
              注æ„TCP沒有錯誤隊列;     MSG_ERRQUEUE      å°æ–¼      SOCK_STREAM
              å¥—æŽ¥å­—æ˜¯éžæ³•çš„.      因此所有錯誤都會由套接字函數返回,或者åªè¿”回
              SO_ERROR .

              å°æ–¼é´l(raw)套接字而言,                               IP_RECVERR
              å…è¨±å‚³éžæ‰€æœ‰æŽ¥æ”¶åˆ°çš„ICMP錯誤給應用程å¼,å¦å‰‡éŒ¯èª¤åªåœ¨é€£æŽ¥çš„套接字上報告出來.

              它設置或者檢索一蚞舕洛牯蜈é™.  IP_RECVERR  é è¨­è¨­ç½®ç‚ºoff(關閉).

       IP_PMTU_DISCOVER
              為套接字設置或接收Path  MTU  Discovery setting(路徑MTU發ç¾è¨­ç½®).
              ç•¶å…許時,Linux會在該套接字上執行定    義於RFC1191中的Path    MTU
              Discovery(路徑MTU發ç¾).  don't 段標識會設置在所有外發的數據報上.
              系統級別的é è¨­ïŸ¶O這樣的: SOCK_STREAM  套接字由  ip_no_pmtu_disc
              sysctl          控制,而å°å…¶å®ƒæ‰€æœ‰çš„套接字都被都å±è”½æŽ‰äº†ï¼Œå°æ–¼éž
              SOCK_STREAM                                          套接字而言,
              使用者有責任按照MTU的大å°å°æ•¸æ“šåˆ†å¡Šä¸¦åœ¨å¿…n的情æ³ä¸‹é€²è¡Œä¸­ç¹¼-
              å¥o.如果設置了該標識                (用                 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)æœç´¢æ™‚, 核心會自動記錄æ¯èŒˆå ›æ¼¸D機的path
              MTU(路徑MTU).當它使用            connect(2)            連接到一-
              茷定的å°ç«¯æ©Ÿå™¨æ™‚,å¯ä»¥æ–¹ä¾¿åœ°ä½¿ç”¨ IP_MTU 套接字é¸é …檢索當å‰å·²çŸ¥çš„
              path           MTU(路徑MTU)(比如,在發生了一           EMSGSIZE
              錯誤後).它å¯èƒ½éš¨è‘—時間的推移而改變.
              å°æ–¼å¸¶æœ‰è¨±å¤šç›®çš„端的éžé€£æŽ¥çš„套接字,一è…S定目的端的新到來的   MTU
              也å¯ä»¥ä½¿ç”¨éŒ¯èª¤éšŠåˆ—(åƒçœ‹          IP_RECVERR)         來存å–訪å•.
              æ–°çš„éŒ¯èª¤æœƒç‚ºæ¯æ¬¡åˆ°ä¾†çš„ MTU 的更新排隊等待.

              當進行  MTU  æœç´¢æ™‚,來自數據報套接字的åˆå§‹åŒ…å¯èƒ½æœƒè¢«ä¸Ÿæ£„.   使用
              UDP çš„æ‡‰ç”¨ç¨‹å¼æ‡‰è©²çŸ¥é“這茖疇B考慮 其包的中繼傳é€ç­–ç•¥.

              為了在未連接的套接字上引導路徑    MTU   發ç¾é€²ç¨‹,   我怚i以用一-
              茪j的數據報(頭尺寸超éŽ64K字節)啟動,    ä¸¦ä»¤å…¶é€šéŽæ›´æ–°è·¯å¾‘    MTU
              逿­¥æ”¶ç¸®.

              為了ç²å¾—路徑MTU連接的åˆå§‹ä¼°p,å¯é€šéŽä½¿ç”¨     connect(2)     把一-
              èšï›Žç—ç¡M接字連接到目的地å€,並通éŽèª¿ç”¨å¸¶            IP_MTUgetsockopt(2) 檢索該MTU.

       IP_MTU 檢索當å‰å¥—接字的當å‰å·²çŸ¥è·¯å¾‘MTU.åªæœ‰åœ¨å¥—æŽ¥å­—è¢«é€£æŽ¥æ™‚æ‰æ˜¯æœ‰æ•ˆçš„.返回一-
              èšžè’±.åªæœ‰ä½œç‚ºä¸€ getsockopt(2) æ‰æœ‰æ•ˆ.

       IP_ROUTER_ALERT
              給該套接字所有將n轉發的包設置IP路由器警告(IP        RouterAlert
              option)é¸é ….   åªå°é´l套接字(raw socket)有效,這å°ä½¿ç”¨è€…空間的
              RSVP後                                     å°å®ˆè­·ç¨‹å¼ä¹‹é¡žå¾ˆæœ‰ç”¨.
              分解的包ä¸èƒ½è¢«æ ¸å¿ƒè½‰ç™¼,使用者有責任轉發它.套接字ç¶å®šè¢«å¿½ç•¥,
              é€™äº›åŒ…åªæŒ‰å”è­°éŽæ¿¾.  n求ç²å¾—一蚞舕狩é™.

       IP_MULTICAST_TTL
              設置或者讀å–該套接字的外發多點廣播包的生存時間.
              這尿–¼å¤šé»žå»£æ’­åŒ…設置å¯èƒ½çš„æœ€å°TTL很å—.                     é è¨­-
              1,這æ„å‘³è‘—å¤šé»žå»£æ’­åŒ…ä¸æœƒè¶…出本地網段,   除éžä½¿ç”¨è€…ç¨‹å¼æ˜Žç¢ºåœ°-
              n求這麼åš.åƒæ•¸æ˜¯ä¸€èšžè’±.

       IP_MULTICAST_LOOP
              設置或讀å–一-
              茈牯蜀舕為æŠïšµH決定發é€çš„å¤šé»žå»£æ’­åŒ…æ˜¯å¦æ‡‰è©²è¢«å›žé€åˆ°æœ¬åœ°å¥—接字.

       IP_ADD_MEMBERSHIP
              加入一茼h點廣播組.åƒæ•¸ç‚º struct ip_mreqn çµæ§‹.

              struct ip_mreqn
              {
              struct in_addr imr_multiaddr; /* IP多點傳é€çµ„åœ°å€ */
              struct in_addr imr_address; /* 本地接å£çš„IPåœ°å€ */
              int imr_ifindex; /* 接å£ç´¢å¼• */
              };

              imr_multiaddr    åŒ…å«æ‡‰ç”¨ç¨‹å¼å¸Œæœ›åŠ å…¥æˆ–è€…é€€å‡ºçš„å¤šé»žå»£æ’­çµ„çš„åœ°å€.
              它必須是一茼陵蘆漲h點廣播地å€.                       imr_address
              指的是系統用來加入多點廣播組的本地接å£åœ°å€;如果它與   INADDR_ANY
              一P,é‚£éº¼ç”±ç³»çµ±é¸æ“‡ä¸€èŒ¼Xé©çš„æŽ¥å£.   imr_ifindex  指的是n加入/脫離
              imr_multiaddr 組的接å£ç´¢å¼•,或者設為0表示任何接å£.

              由於相容性的緣故,è€çš„   ip_mreq   接å£ä»ç„¶è¢«æ”¯æŒ.它與   ip_mreqn
              åªæœ‰ä¸€èŒ¼aæ–¹ä¸åŒ,就是沒有包括    imr_ifindex   字段.這åªåœ¨ä½œç‚ºä¸€
              setsockopt(2) æ™‚æ‰æœ‰æ•ˆ.

       IP_DROP_MEMBERSHIP
              脫離一茼h點廣播組.åƒæ•¸ç‚º   ip_mreqn   或者   ip_mreq   çµæ§‹,這與
              IP_ADD_MEMBERSHIP 類似.

       IP_MULTICAST_IF
              為多點廣播套接字設置本地設備.åƒæ•¸ç‚º    ip_mreqn   或者   ip_mreq
              çµæ§‹,它與 IP_ADD_MEMBERSHIP 類似.

              當傳éžä¸€èŒ§L效的套接字é¸é …時,返回 ENOPROTOOPT .

SYSCTLS

       IPå”è­°æ”¯æŒ     sysctl     接å£é…置一些全局é¸é ….sysctlå¯é€šéŽè®€å–或者寫入
       /proc/sys/net/ipv4/* 檔案或使用 sysctl(2) 接å£ä¾†å­˜å–訪å•.

       ip_default_ttl
              設置外發包的é è¨­ç”Ÿå­˜æ™‚é–“.此i以尿¯è‡MæŽ¥å­—é€šéŽ  IP_TTL é¸é …來-
              èš¹.

       ip_forward
              ä»¥ä¸€èŒˆç‰¯èœˆé™æ‚ƒèš‡Eæ´»IP轉發功能.IP轉發也å¯ä»¥æŒ‰æŽ¥å£ä¾†è¨­ç½®

       ip_dynaddr
              打開接å£åœ°å€æ”¹è®Šæ™‚動態套接字地å€å’Œå½è£è¨˜éŒ„的姨g.
              這å°å…·æœ‰è®ŠåŒ–çš„IP地å€çš„æ’¥è™ŸæŽ¥å£å¾ˆæœ‰                   用.0表示ä¸-
              姨g,1打開其功能,而2則激活冗餘模å¼.

       ip_autoconfig
              無文件

       ip_local_port_range
              包å«å…©èšžè’±,定義了é è¨­åˆ†é…給套接字的本地端å£Såœ.
              分é…起始於第一èšïš¶èŒžèšºè¬•馦臚Gèš.
              注æ„這些端å£ä¸èƒ½èˆ‡å½è£æ‰€ä½¿ç”¨çš„端å£ç›¸æ²–çª(儘管這種情æ³ä¹Ÿå¯ä»¥è™•ç†).
              åŒæ™‚,隨æ„çš„é¸æ“‡å¯èƒ½æœƒå°ŽP一些防ç«ç‰†åŒ…éŽæ¿¾å™¨çš„å•題,它-
              抪|誤èªç‚ºæœ¬åœ°ç«¯å£åœ¨ä½¿ç”¨.                                   第一-
              èšïšµçœ¸æ¤°é›‚>1024,最好是>4096以é¿å…與眾所周知的端å£ç™¼ç”Ÿæ²–çªï¼Œ
              從而最大å¯èƒ½çš„æ¸›å°‘防ç«ç‰†å•題.

       ip_no_pmtu_disc
              如果打開了,é è¨­æƒ…æ³ä¸‹ä¸å°TCP套接字執行路徑MTU發ç¾.
              如果在路徑上誤é…置了防ç«ç‰†(用來丟棄所有  ICMP包)或者誤é…置了接å£
              (例如,設置了一茖熇嵱TUä¸åŒçš„端å°ç«¯é€£æŽ¥),路徑MTU發ç¾å¯èƒ½æœƒå¤±æ•—.
              寧願袨_路徑上的æå£žçš„路由器,ä¹Ÿå¥½éŽæ•´èŒ¼a關閉路徑MTU發ç¾,
              å› ç‚ºé€™æ¨£åšæœƒå°ŽP網路上的高開銷.

       ipfrag_high_thresh, ipfrag_low_thresh
              如果排隊等待的IP碎片的數目é”到 ipfrag_high_thresh , 隊列被排空為
              ipfrag_low_thresh .  這包å«ä¸€èŒ ç£³é›ƒr節數的整數.

       ip_always_defrag
              [kernel      2.2.13中的新功能;在朽螳ç—è¿å²©èª˜,該功能在編譯時通éŽ
              CONFIG_IP_ALWAYS_DEFRAG é¸é …來控制]

              當該布爾標識被激活(ä¸ç­‰æ–¼0)時,
              來訪的碎片(IP包的一部分,é€™ç”Ÿæˆæ–¼ç•¶ä¸€äº›åœ¨æºç«¯å’Œç›®çš„端之間的主機èª
              定包太大而分割æˆè¨±å¤šç¢Žç‰‡çš„æƒ…æ³ä¸‹)將在處ç†ä¹‹å‰å¥s組åˆ(碎片整ç†),
              å³ä½¿å®ƒæ€œè§’Wn被轉發也如此.

              åªåœ¨é‹è¡Œè‘—一å°èˆ‡ç¶²è·¯å–®ä¸€é€£æŽ¥çš„防ç«ç‰†æˆ–è€…é€æ˜Žä»£ç†ä¼ºæœå™¨æ™‚æ‰é€™éº¼å¹¹;
              å°æ–¼æ­£å¸¸çš„路由器或者主機,                         æ°¸é ä¸n打開它.
              å¦å‰‡ç•¶ç¢Žç‰‡åœ¨ä¸åŒé€£æŽ¥ä¸­é€šéŽæ™‚碎片的通信å¯èƒ½æœƒè¢«æ“¾äº‚.    而且碎片-
              垓掑]需n花費大é‡çš„記憶體和 CPU 時間.

              這在é…置了å½è£æˆ–è€…é€æ˜Žä»£ç†çš„æƒ…æ³ä¸‹è‡ªå‹•打開.

       neigh/*
              åƒçœ‹ arp(7)

IOCTLS

       所有在 socket(7) 中有æz çš„ ioctl éƒ½å¯æ‡‰ç”¨æ–¼ip.

       用於é…置防ç«ç‰†æ‡‰ç”¨çš„ioctl記載在 ipchains 包的 ipfw(7) 的文件中.

       用來é…ç½®æ™®é€šè¨­å‚™åƒæ•¸çš„ioctl在 netdevice(7) 中有æz.

NOTES()
       使用    SO_BROADCAST    é¸é …nå°å¿ƒ    -    它在    Linux    中沒有權n求.
       ä¸å°å¿ƒçš„廣播很容易導P網路éŽè¼‰.å°æ–¼æ–°çš„æ‡‰ç”¨å”議而言,最
       好是使用多點廣播組來替代廣播.我怳ㄨ社y使用廣播.

       有些其它的BSDå¥—æŽ¥å­—å¯¦ç¾æä¾›äº†      IP_RCVDSTADDR      å’Œ      IP_RECVIF
       套接字é¸é …來ç²å¾—目的地å€ä»¥åŠæŽ¥æ”¶æ•¸æ“šå ±çš„æŽ¥å£.Linux有更通用的 IP_PKTINFO
       來完æˆç›¸åŒä»»å‹™.

ERRORS()
       ENOBUFS,EPERMå°EACCESç­‰.)

       ENOTCONN
              æ“作åªå®šç¾©æ–¼é€£æŽ¥çš„套接字,è€Œè©²å¥—æŽ¥å­—å»æ²’有連接.

       EINVAL 傳éžç„¡æ•ˆçš„åƒæ•¸.  å°æ–¼ç™¼é€æ“作,這å¯ä»¥å› ç™¼é€åˆ°ä¸€  blackhole(è·æ–æŸ})
              路由而引發.

       EMSGSIZE
              數據報大於該路徑上的 MTU,並且它ä¸èƒ½è¢«åˆ†æˆç¢Žç‰‡.

       EACCES 沒有必n權的使用者試圖執行一項需næŸäº›æ¬Šçš„æ“ä½œ.    這包括:  在沒有
              SO_BROADCAST   標識設置的情æ³ä¸‹ç™¼é€ä¸€èŒˆ]到廣播地å€.     通éŽä¸€æ¢
              ç­Täºèžæ³         路由發é€åŒ….          在沒有         CAP_NET_ADMIN
              或者有效使用者標識ä¸ç‚º0的情æ³ä¸‹èš¹ç¿µé»Žå„ºè–±]ç½®.             在沒有
              CAP_NET_BIND_SERVICE
              能力或者有效使用者標識ä¸ç‚ºé›¶0的情æ³ä¸‹ç¶å®šä¸€èŒ·O留端å£.

       EADDRINUSE
              試圖ç¶å®šåˆ°ä¸€èŒªw在使用的地å€.

       ENOMEM 和 ENOBUFS
              沒有足夠的記憶體å¯ç”¨.

       ENOPROTOOPT 和 EOPNOTSUPP
              傳éžç„¡æ•ˆçš„套接字é¸é ….

       EPERM  使用者沒有權設置高優先級,蚹黻t置或者發é€ä¿¡è™Ÿåˆ°è«‹æ±‚的進程或組.

       EADDRNOTAVAIL
              請求一茪ㄕsåœ¨çš„æŽ¥å£æˆ–者請求的æºç«¯åœ°å€ä¸æ˜¯æœ¬åœ°çš„.

       EAGAIN 在一茷D阻塞的套接字上進行æ“作會阻塞.

       ESOCKTNOSUPPORT
              套接字未é…置或者請求了一茈憚壅型的套接字.

       EISCONN
              在一茪w經連接的套接字上調用 connect(2).

       EALREADY
              在一茷D阻塞的套接字上的連接æ“作已經在進行中.

       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)   套接字.我怳gæˆé€™éº¼ç”¨,而且應該被
       socket(PF_PACKET,      SOCK_RAW,     protocol)     所代替.主nçš„å€åˆ¥å°±æ˜¯
       æ–°çš„é‡å°ä¸€èˆ¬éˆæŽ¥å±¤ä¿¡æ¯çš„  sockaddr_ll  地å€çµæ§‹æ›¿æ›äº†èˆŠçš„  sockaddr_pkt
       地å€çµæ§‹.

BUGS

       有許多ä¸é€£è²«çš„錯誤碼.

       沒有æz用來é…置特定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:é´lIPè¦ç¯„.
       RFC1122:IPv4主機需求.
       RFC1812:IPv4路由器需求.

[]
       riser <boomer@ccidnet.com>

[]
       2001/07/19

ã€mä¸ä»åœç˜linuxan:
       http://cmpp.linuxforum.net