IP 7
目录
- NAME (名称) ip
- SYNOPSIS(总览)
.B #include
.br .B #include .sp .IB tcp_socket - DESCRIPTION(描述) Linux 实现描述于 RFC791 和 RFC1122 中的 Internet 协议,版本4. .B ip 包括遵循 RFC1112 的第二层的多信道广播技术的实现.它也包括含包过滤器的IP路由器. .
- ADDRESS FORMAT(地址格式) 一个 IP 套接字地址定义为一个 IP 接口地址和一个端口号的组合. 基本 IP 协议不会提供端口号,它们通过更高层次的协议如 .BR udp (7) 和 .BR tcp (7) 来实现. 对于raw套接字, .B sin_port 设置为IP协议. .PP .RS .nf .ta 4n 19n 31n 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; /* 按网络字节次序的地址 */ }; .ta .fi .RE .PP .I sin_family 总是设置为 .BR AF_INET . 这是必需的;在 Linux 2.2 中,如果该设置缺失,大多数联网函数会返回 .B EINVAL .I sin_port 包含按网络字节排序的端口号.端口号在1024以下的称为 .IR
- SOCKET OPTIONS(套接字选项) IP 支持一些与协议相关的套接字选项,这些选项可以通过 .BR setsockopt (2) 设置,并可以通过 .BR getsockopt (2) 读取. IP 的套接字选项级别为 .B SOL_IP 这是一个布尔整型标识,当值为0时为假,否则则为真. .TP .B IP_OPTIONS 设置或者获取将由该套接字发送的每个包的 IP 选项. 该参数是一个指向包含选项和选项长度的存储缓冲区的指针. .BR setsockopt (2) 系统调用设置与一个套接字相关联的 IP 选项. IPv4 的最大选项长度为 40 字节. 参阅 RFC791 获取可用的选项. 如果一个 .B SOCK_STREAM 套接字收到的初始连接请求包包含 IP 选项时, IP 选项自动设置为来自初始包的选项,同时反转路由头. 在连接建立以后将不允许来访的包修改选项. 缺省情况下是关闭对所有来访包的源路由选项的,你可以用 .B accept_source_route sysctl 来激活.仍然处理其它选项如时间戳(timestamp). 对于数据报套接字而言,IP 选项只能由本地用户设置.调用带 .I IP_OPTIONS 的 .BR getsockopt (2) 会把当前用于发送的 IP 选项放到你提供的缓冲区中. .TP .B IP_PKTINFO 传递一条包含 .B pktinfo 结构(该结构提供一些来访包的相关信息)的 .I IP_PKTINFO 辅助信息. 这个选项只对数据报类的套接字有效. .IP .RS .ta 4n 19n 33n .nf struct in_pktinfo { unsigned int ipi_ifindex; /* 接口索引 */ struct in_addr ipi_spec_dst; /* 路由目的地址 */ struct in_addr ipi_addr; /* 头标识目的地址 */ }; .fi .RE .IP .
- SYSCTLS IP协议支持 sysctl 接口配置一些全局选项.sysctl可通过读取或者写入 .B /proc/sys/net/ipv4/* 文件或使用 .BR sysctl (2) 接口来存取访问. .
- IOCTLS 所有在 .BR socket (7) 中有描述 的 ioctl 都可应用于ip. .PP 用于配置防火墙应用的ioctl记载在 .B ipchains 包的 .BR ipfw (7) 的文档中. .PP 用来配置普通设备参数的ioctl在 .BR netdevice (7) 中有描述. .
- NOTES(备注) 使用 .B SO_BROADCAST 选项要小心
- ERRORS(错误) .
- VERSIONS(版本) .IR IP_PKTINFO , .IR IP_MTU , .IR IP_PMTU_DISCOVER , .IR IP_PKTINFO , .IR IP_RECVERR 和 .IR IP_ROUTER_ALERT 是Linux 2.2中的新选项. .PP .B struct ip_mreqn 也是新出现在Linux 2.2中的.Linux 2.0只支持 .BR ip_mreq . .PP sysctl是在Linux 2.2中引入的. .SH COMPATIBILITY(兼容性) 为了与Linux 2.0相容,仍然支持用过时的 .BI
- BUGS 有许多不连贯的错误码. .PP 没有描述用来配置特定IP接口选项和ARP表的ioctl. .SH AUTHORS(作者) 该man页作者是Andi Kleen. .SH SEE ALSO(另见) .BR sendmsg (2), .BR recvmsg (2), .BR socket (7), .BR netlink (7), .BR tcp (7), .BR udp (7), .BR raw (7), .BR ipfw (7). .PP RFC791:原始IP规范. .br RFC1122:IPv4主机需求. .br RFC1812:IPv4路由器需求.
- [中文版维护人]
- [中文版最新更新]
- 《中国linux论坛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æ´å¤§çå.

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