网络编程12

IPv4与IPv6,IP选项

  1. 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 时做类型转换

  2. 地址转换函数
    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

  3. 双栈服务器
    使用 getaddrinfo 获取 IPv4+IPv6 地址,创建多个 socket 或在同一 socket 上绑定 INADDR_ANY + in6addr_any
    常用:监听 IPv6 且设置 IPV6_V6ONLY=0,可同时接受 IPv4(映射地址 ::ffff:x.x.x.x)

  4. 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);

  5. IPv6 扩展头与选项
    IPV6_UNICAST_HOPS、IPV6_MULTICAST_* 等
    IPV6_V6ONLY:为 1 时只接受 IPv6,为 0 时可接受 IPv4 映射地址

  6. 常用 IPv6 地址
    in6addr_any: :: (全零)
    in6addr_loopback: ::1
    IPv4 映射:::ffff:192.168.1.1 表示 IPv4 的 192.168.1.1

posted on 2026-03-02 10:35  cyusouyiku  阅读(1)  评论(0)    收藏  举报