卷2 第6章 IP编址

6.1 引言

本章讨论IP地址管理。

IP地址要点

  • 地址分配给接口,而非系统
  • A/B/C类:单播
  • D类:多播
  • 环回网络:127.0.0.0

6.2 代码介绍

  • netinet/in.h:Internet地址定义
  • netinet/in_var.h:Internet接口定义
  • netinet/in.c:初始化
  • netinet/if.c:接口实用函数

6.3 接口和地址小结

每个接口维护链路层地址和IP地址列表。

6.4 sockaddr_in结构

struct sockaddr_in {
    u_char sin_len;
    u_char sin_family;
    u_short sin_port;      // 网络字节序
    struct in_addr sin_addr;
    char sin_zero[8];
};

6.5 in_ifaddr结构

成员 说明 ia_ifa 通用ifaddr ia_next 下一个IP地址 ia_net 网络号 ia_netmask 网络掩码 ia_subnet 子网号 ia_subnetmask 子网掩码 ia_addr IP地址(sockaddr_in)

6.6 地址指派

ioctl命令 命令 说明 SIOCSIFADDR 设置地址 SIOCSIFNETMASK 设置掩码 SIOCSIFDSTADDR 设置目标地址 SIOCSIFBRDADDR 设置广播地址 SIOCGIFADDR 获取地址 SIOCAIFADDR 添加地址 SIOCDIFADDR 删除地址 in_control函数 处理IP专用ioctl

检查超级用户权限

分配/初始化in_ifaddr

in_ifinit函数 设置地址

通知硬件

构造子网掩码

添加路由

加入所有主机组

6.7 接口ioctl命令(续)

leioctl SIOCSIFADDR:设置IFF_UP

发送免费ARP

slioctl 设置IFF_UP

loioctl 设置IFF_UP

6.8 Internet实用函数

函数 说明 in_netof 返回网络/子网部分 in_canforward 是否可转发 in_localaddr 是否本地地址 in_broadcast 是否广播地址

6.9 ifnet实用函数

函数 说明 ifunit 按名字查找接口 ifa_ifwithaddr 按地址查找 ifa_ifwithnet 按网络查找 ifa_ifwithdstaddr 按点对点目标查找

6.10 小结

IP地址通过in_ifaddr管理,由ifconfig配置。实用函数支持地址查询和操作。