什方电气 发表于 2024-4-5 18:31:46

3.5 ICMPv6 报文和报文类型

目录

[*]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消息类型处理函数1ICMPV6_DEST_UNREACHicmpv6_notify2ICMPV6_PKT_TOOBIGicmpv6_notify3ICMPV6_TIME_EXCEEDicmpv6_notify4ICMPV6_PARAMPROBicmpv6_notify128ICMPV6_ECHO_REQUESTicmpv6_echo_reply129ICMPV6_ECHO_REPLYping_rcv130ICMPV6_MGM_QUERYigmp6_event_query131ICMPV6_MGM_REPORTigmp6_event_report132ICMPV6_MGM_REDUCTION--133NDISC_ROUTER_SOLICITATIONndisc_rcv134NDISC_ROUTER_ADVERTISEMENTndisc_rcv135NDISC_NEIGHBOUR_SOLICITATIONndisc_rcv136NDISC_NEIGHBOUR_ADVERTISEMENTndisc_rcv137NDISC_REDIRECTndisc_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() 所有邻居发现类函数都有这个函数处理。后文展开。

来源:https://www.cnblogs.com/kmist/p/18116019
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 3.5 ICMPv6 报文和报文类型