卷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配置。实用函数支持地址查询和操作。