《TCP/IP详解 卷2:实现》 —3.4 ifaddr结构

举报
华章计算机 发表于 2019/11/21 11:17:41 2019/11/21
【摘要】 本节书摘来自华章计算机《TCP/IP详解 卷2:实现》一书中第3章,第3.4节,作者是[美]加里R.赖特(Gary R.Wright),W. 理查德史蒂文斯(W.Richard Stevens),陆雪莹 蒋慧 等译 谢希仁 校。

3.4   ifaddr结构

我们要看的下一个结构是接口地址结构ifaddr,它显示在图3-15中。每个接口维护一个ifaddr结构的链表,因为一些数据链路(如以太网)支持多个协议。用一个独立的ifaddr结构描述每个分配给接口的地址,通常每个协议一个地址。支持多地址的另一个原因是很多协议(包括TCP/IP)支持为单个物理接口指派多个地址。虽然Net/3支持这个特性,但很多TCP/IP实现并不支持。

image.png

图3-15   结构ifaddr

217-219   结构ifaddr通过ifa_next把分配给一个接口的所有地址链接起来,它还包括一个指回接口的ifnet结构的指针ifa_ifp。图3-16显示了结构ifnet与ifaddr之间的关系。

220   ifa_addr指向接口的一个协议地址,而ifa_netmask指向一个位掩码,它用于选择ifa_addr中的网络部分。地址中表示网络部分的比特在掩码中被设置为1,地址中表示主机的部分被设置为0。两个地址都存放在sockaddr结构中(3.5节)。图3-38显示了一个地址及其掩码结构。对于IP地址,掩码选择IP地址中的网络和子网部分。

221-223   ifa_dstaddr(或它的别名ifa_broadaddr)指向一个点对点链路上的另一端的接口协议地址或指向一个广播网中分配给接口的广播地址(如以太网)。接口的ifnet结构中互斥的两个标志IFF_BROADCAST和IFF_POINTOPOINT (图3-7)指示接口的类型。

224-228    ifa_rtrequest、ifa_flags和ifa_metric支持接口的路由查找。

ifa_refcnt统计对结构ifaddr的引用。宏IFAFREE仅在引用计数降到0时才释放这个结构,例如,当地址被命令SIOCDIFADDR ioctl删除时。结构ifaddr使用引用计数是因为接口和路由数据结构共享这些结构。

image.png

如果有其他对ifaddr的引用,IFAFREE将计数器加1并返回。这是一个通用的方法,除了最后一个引用外,它避免了每次都调用一个函数的开销。如果是最后一个引用,IFAFREE调用函数ifafree来释放这个结构。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。