20141210 - Client端IPv6自動取得的流程

這幾天因為要在開發的dll裡頭加上自動取得IP功能和WAN<->LAN互通功能,所以要瞭解DHCP,Ping等作用,最終要做出DHCP Client和Server,連同IPv6的部份也要一併瞭解。這邊單純講自動取得IP就好,因為WAN/LAN互打的封包較多一點,所以功能也就複雜一點。

在IPv4自動取得IP很簡單,只要透過DHCP的4個步驟就可以取得IP。

  1. Client發Broadcast的Discover包
  2. Router發Unicast的Offer包
  3. Client發Broadcast的Request包,Broadcast用意在於通知其他Router
  4. Router發Unicast的Ack包

但是IPv6就不是這麼回事了。因為我之前以為應該和IPv4類似,DHCPv6應該也是走這種模式,然後找了Asus的RT-AC68U Router來測試IPv6,但怎麼設定,都沒有收到來自Router的回應。原來在IPv6階段,開啟自動取得IP模式,除了DHCPv6封包之外,之前還必須有一些用來設定檢查的包。以下就是IPv6自動取得IP的流程:

  1. 首先Client會被設定要以哪種方式取得IPv6,StateLess還是Stateful。而StateLess還可分成要啟動DHCPv6的和不用的。所以總共有三種方式
  2. Client端發送ICMPv6 RS(Router Solicitation)封包給Router
  3. Router回覆ICMPv6 RA(Router Advertisement)封包給Client
  4. Client端檢查Router回覆的RA訊息(type code = 134),若有,分析其ICMP標頭裡頭的M/O Flag,對應表格及代表意義如下:
    M bit
    O bit
    代表意義
    說明
    0
    0
    SLAAC
    StateLess Address AutoConfiguration一般家用網路簡單的是走這種模式。

    0
    1
    StateLess DHCPv6
    啟動DHCPv6流程,作用是為了取得DNS(接續步驟4,之後作用同DHCP流程)

    1
    X
    Stateful DHCPv6
    啟動DHCPv6流程(接續步驟4

  5. Client發送Multicast的Solicit包,若是開啟Rapid Commit option,表示進行快速設定,直接跳至步驟8
  6. Router發送Unicast的Advertisement包
  7. Client發送Multicast的Request包
  8. Router發送Unicast的Reply包
    若是之前RA訊息中(M=0, O=1),那這邊可以獲得DNS。若之前RA訊息中(M=1),那這邊可以取得IPv6的DNS以及被分配的位址
到最後,我還是沒用那台RT-68U,在不接WAN的情況下取得Client端的IPv6位址,大概是我設定問題吧。原先認為是可能ISP不提供IPv6環境,所以Router沒辦法取得資訊給Client。後來我設定為IPv6 tunnel in IPv4的方式,好像也無法取得。Router不會發RA包,後來設定到Router可以回應DHCPv6 Advertisement包(設定成Native模式也不會發),但網卡就沒後續的Request,一直無法完成,還要再來學習了。


搜尋此網誌

總網頁瀏覽量

TK呱呱

Made with by TK