Provided by:
manpages-zh_1.5-1_all 
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