目錄3.5 ICMPv6 報文和報文類型1. ICMPv6 報頭2. ICMPv6 報文類型 3.5 ICMPv6 報文和報文類型 1. ICMPv6 報頭 ICMPv6的報頭由 type(8bit)\ code(8bit)\ checksum(16bit) 和 可變數據組成,由於可變數據太多,這裡 ...
目錄
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()
鄰居發現函數處理:ndisc_rcv()
後文展開。
icmpv6_echo_reply()
負責處理echo請求。ping_rcv()
負責處理echo應答。這個方法同ICMPv4 共用,是個雙棧函數。igmp6_event_query()
負責處理組播偵聽者查詢,後文展開。igmp6_event_report()
負責處理組播偵聽者報告, 後文展開。icmpv6_notify()
負責處理接收到的錯誤消息,並且統計。ndisc_rcv()
所有鄰居發現類函數都有這個函數處理。後文展開。