IPv4与IPv6,IP选项
-
IPv4 与 IPv6 地址结构
IPv4: struct sockaddr_in (sin_addr: struct in_addr, 32 位)
IPv6: struct sockaddr_in6 (sin6_addr: struct in6_addr, 128 位)
通用: struct sockaddr_storage 可存任意协议地址,bind/connect 时做类型转换 -
地址转换函数
int inet_pton(int af, const char *src, void *dst); // 已保留核心函数定义,仅移除注释符
const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);
af: AF_INET 或 AF_INET6 -
双栈服务器
使用 getaddrinfo 获取 IPv4+IPv6 地址,创建多个 socket 或在同一 socket 上绑定 INADDR_ANY + in6addr_any
常用:监听 IPv6 且设置 IPV6_V6ONLY=0,可同时接受 IPv4(映射地址 ::ffff:x.x.x.x) -
IP 选项
IP_OPTIONS: 指定 IP 首部选项,如源路由
松散源路由(loose source route):-g host1 host2 ... destination
严格源路由(strict source route):-G host1 host2 ... destination
设置:Setsockopt(sockfd, IPPROTO_IP, IP_OPTIONS, ptr, len); -
IPv6 扩展头与选项
IPV6_UNICAST_HOPS、IPV6_MULTICAST_* 等
IPV6_V6ONLY:为 1 时只接受 IPv6,为 0 时可接受 IPv4 映射地址 -
常用 IPv6 地址
in6addr_any: :: (全零)
in6addr_loopback: ::1
IPv4 映射:::ffff:192.168.1.1 表示 IPv4 的 192.168.1.1
浙公网安备 33010602011771号