- 3.5 ICMPv6 报文和报文类型
- 1. ICMPv6 报头
- 2. ICMPv6 报文类型
3.5 ICMPv6 报文和报文类型
1. ICMPv6 报头
ICMPv6
的报头由 type(8bit)
\ code(8bit)
\ checksum(16bit)
和 可变数据
组成,由于可变数据太多,这里暂不罗列,由具体协议展开。
struct icmp6hdr {
__u8 icmp6_type;
__u8 icmp6_code;
__sum16 icmp6_cksum;
...
}
在 ICMPv6 的消息分类中,Type
字段的最高位为0时(0-127)
,表示错误消息
,为1时(128-255)
,表示信息消息
。ICMPv4 中则使用error
字段来表示。
2. ICMPv6 报文类型
下面是ICMPv6 报文的类型。(部分)
在 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()
文章来源:https://www.toymoban.com/news/detail-844415.html
邻居发现函数处理:ndisc_rcv()
后文展开。文章来源地址https://www.toymoban.com/news/detail-844415.html
-
icmpv6_echo_reply()
负责处理echo请求。 -
ping_rcv()
负责处理echo应答。这个方法同ICMPv4 共用,是个双栈函数。 -
igmp6_event_query()
负责处理组播侦听者查询,后文展开。 -
igmp6_event_report()
负责处理组播侦听者报告, 后文展开。 -
icmpv6_notify()
负责处理接收到的错误消息,并且统计。 -
ndisc_rcv()
所有邻居发现类函数都有这个函数处理。后文展开。
到了这里,关于3.5 ICMPv6 报文和报文类型的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!