3.5 ICMPv6 报文和报文类型
  zKsVw41a7O7T 25天前 27 0

3.5 ICMPv6 报文和报文类型

1. ICMPv6 报头

ICMPv6的报头由 type(8bit)\ code(8bit)\ checksum(16bit)可变数据组成,由于可变数据太多,这里暂不罗列,由具体协议展开。

image-20240331123223221

struct icmp6hdr {

	__u8		icmp6_type;
	__u8		icmp6_code;
	__sum16		icmp6_cksum;
	...
}

在 ICMPv6 的消息分类中,Type字段的最高位为0时(0-127),表示错误消息,为1时(128-255),表示信息消息。ICMPv4 中则使用error字段来表示。

2. ICMPv6 报文类型

下面是ICMPv6 报文的类型。(部分)

image-20240331140444535

在 ICMPv6 中,没有像 ICMPv4 一样的数组icmp_pointers[]来注册各种消息的处理函数,而是使用一个大的 switch 来选择不同消息类型的处理函数。

TYPEID 消息类型 处理函数
1 ICMPV6_DEST_UNREACH icmpv6_notify
2 ICMPV6_PKT_TOOBIG icmpv6_notify
3 ICMPV6_TIME_EXCEED icmpv6_notify
4 ICMPV6_PARAMPROB icmpv6_notify
128 ICMPV6_ECHO_REQUEST icmpv6_echo_reply
129 ICMPV6_ECHO_REPLY ping_rcv
130 ICMPV6_MGM_QUERY igmp6_event_query
131 ICMPV6_MGM_REPORT igmp6_event_report
132 ICMPV6_MGM_REDUCTION --
133 NDISC_ROUTER_SOLICITATION ndisc_rcv
134 NDISC_ROUTER_ADVERTISEMENT ndisc_rcv
135 NDISC_NEIGHBOUR_SOLICITATION ndisc_rcv
136 NDISC_NEIGHBOUR_ADVERTISEMENT ndisc_rcv
137 NDISC_REDIRECT ndisc_rcv

处理函数进行归纳有:

查询处理: icmpv6_echo_reply() \ ping_rcv() \ igmp6_event_query() \ igmp6_event_report()

差错处理: icmpv6_notify()

邻居发现函数处理:ndisc_rcv() 后文展开。

  • icmpv6_echo_reply() 负责处理echo请求。
  • ping_rcv() 负责处理echo应答。这个方法同ICMPv4 共用,是个双栈函数。
  • igmp6_event_query() 负责处理组播侦听者查询,后文展开。
  • igmp6_event_report() 负责处理组播侦听者报告, 后文展开。
  • icmpv6_notify() 负责处理接收到的错误消息,并且统计。
  • ndisc_rcv() 所有邻居发现类函数都有这个函数处理。后文展开。
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 25天前 0

暂无评论

推荐阅读
  YAWVsSrNsMIu   7天前   16   0   0 Linux
  77SYdlle61Gg   7天前   18   0   0 Linux
  Q68mX1P3tSGz   2天前   9   0   0 Linux