卷2 第7章 域和协议

7.1 引言

Net/3支持多种协议域,每种域使用相同编址方法。

协议域

协议族地址族说明
PF_INETAF_INETInternet
PF_OSIAF_OSIOSI
PF_LOCAL/PF_UNIXAF_LOCALUnix域
PF_ROUTEAF_ROUTE选路

7.2 代码介绍

  • netinet/domain.h:domain结构
  • netinet/protosw.h:protosw结构
  • netinet/in_proto.c:IP domain和protosw
  • kern/uipc_domain.c:初始化

7.3 domain结构

成员说明
dom_family地址族
dom_name名称
dom_init初始化函数
dom_protosw协议交换表
dom_rtattach选路初始化

7.4 protosw结构

成员说明
pr_type插口类型
pr_domain所属域
pr_protocol协议号
pr_flags标志
pr_input输入处理
pr_output输出处理
pr_usrreq用户请求
pr_init初始化
pr_fasttimo快速定时器
pr_slowtimo慢速定时器
pr_drain资源释放

pr_type

类型说明
SOCK_STREAMTCP
SOCK_DGRAMUDP
SOCK_RAW原始IP

7.5 IP的domain和protosw结构

inetsw数组

索引协议说明
0IP管理函数
1UDPSOCK_DGRAM
2TCPSOCK_STREAM
3ICMPSOCK_RAW
4IGMPSOCK_RAW
5原始IPSOCK_RAW

7.6 pffindproto和pffindtype函数

  • 按协议号或类型查找protosw结构

7.7 pfctlinput函数

  • 向所有协议发送控制请求

7.8 IP初始化

ip_protox数组

  • 协议号→inetsw索引映射
  • 用于分用输入数据报

ip_init函数

  1. 查找原始协议
  2. 初始化ip_protox
  3. 初始化重装队列
  4. 设置IP输入队列大小(50)

7.9 sysctl系统调用

  • 访问/修改系统参数
  • IP转发标志:CTL_NET.PF_INET.0.IPCTL_FORWARDING

7.10 小结

domain和protosw结构组织协议。pffind函数查找协议。IP初始化建立分用表。