目錄
- 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()
鄰居發現函式處理:ndisc_rcv()
後文展開。
icmpv6_echo_reply()
負責處理echo請求。ping_rcv()
負責處理echo應答。這個方法同ICMPv4 共用,是個雙棧函式。igmp6_event_query()
負責處理組播偵聽者查詢,後文展開。igmp6_event_report()
負責處理組播偵聽者報告, 後文展開。icmpv6_notify()
負責處理接收到的錯誤訊息,並且統計。ndisc_rcv()
所有鄰居發現類函式都有這個函式處理。後文展開。