|
IPv6/IPv4協(xié)議棧對比IPv6的一些變化 1)數(shù)據(jù)鏈路層(L2)的type字段標(biāo)識為 0x86dd,表示承載的上層協(xié)議是IPv6(IPv4對比:type字段為0x0800); 2)IPv6的頭部字段(40bytes),和IPv4差別巨大。 - IPv6報文頭部是定長(固定為40字節(jié)),IPv4報文頭部是變長的。這個意味著,寫代碼處理IPv6數(shù)據(jù)報文的效率會提高很多:);
- IPv6中Hop Limit字段含義類似IPv4的TTL;
- IPv6中的Traffic Class字段含義類似IPv4中的TOS(Type Of Service);
- IPv6的報文頭部取消了校驗和字段:取消這個字段也是對IPv4協(xié)議的一個改進(jìn)。當(dāng)IPv4報文在網(wǎng)路間傳輸,每經(jīng)過一個路由器轉(zhuǎn)發(fā)就是修改TTL字段,就需要重新計算校驗和,而由于數(shù)據(jù)鏈路層L2和傳輸層L4的校驗已經(jīng)足夠強(qiáng)壯,因此IPv6取消這個字段會提高路由器的轉(zhuǎn)發(fā)效率。值得一提的是,在IPv6協(xié)議下,傳輸層L4協(xié)議UDP、TCP是強(qiáng)制需要進(jìn)行校驗和的(IPv4是可選的);
- IPv6報文頭部中的Next Header字段表示“承載上一層的協(xié)議類型”或者“擴(kuò)展頭部類型”。
- 當(dāng)IPv6數(shù)據(jù)報文承載的是上層協(xié)議ICMPv6、TCP、UDP的時候,Next Header的值分別為58、6、17,這個時候和IPv4報文頭部中的Protocol字段很類似;
- 當(dāng)不是以上3種協(xié)議類型的時候,IPv6報文頭部緊接的是擴(kuò)展頭部。擴(kuò)展頭部是IPv6引入的一個新的概念,每個IPv6的數(shù)據(jù)報文可以承載0個或多個擴(kuò)展頭部,擴(kuò)展頭部通過鏈表的形式組織起來。當(dāng)IPv6數(shù)據(jù)報文承載著擴(kuò)展頭部的時候,Next Header的數(shù)值為擴(kuò)展頭部的類型值。
- 當(dāng)發(fā)送一個分片IPv6數(shù)據(jù)報文的時候,IPv6使用的是擴(kuò)展頭部的形式組織各個分片的信息, Next Header字段值為44
- 對比IPv4,分片信息是記錄在IPv4報文頭部的分片字段中。
- IPv6的擴(kuò)展頭部類型有很多種,除了上述的分片頭部,還有路由頭部、逐跳可選頭部等,具體的可以參考RFC2460。
鄰居發(fā)現(xiàn)協(xié)議NDP鄰居發(fā)現(xiàn)協(xié)議NDP是通過 Internet 控制報文協(xié)議(ICMPv6)報文來承載的;在一個IPv6數(shù)據(jù)報中,如果該數(shù)據(jù)報的“下一個報頭”字段的值為 58,且 ICMPv6 報文中類型字段取值范圍為133-137,則此IPv6報文的數(shù)據(jù)部分含有鄰居發(fā)現(xiàn)協(xié)議報文。NDP使用ICMPv6報文實現(xiàn)地址解析,跟蹤?quán)従訝顟B(tài),重復(fù)地址檢測,路由器發(fā)現(xiàn)以及重定向等功能。 - 路由請求報文(Router Solicitation Message,RS)
ICMPv6 Type = 133 接口初始化或接口地址發(fā)生變化時,終端主動發(fā)起RS請求路由信息 - 路由通告報文(Router Advertisement Message,RA)
ICMPv6 Type = 134 路由器定期或收到用戶RS時發(fā)送RA報文(包含路由有效時間,終端獲取方式,前綴信息等),當(dāng)終端收到RA報文后會根據(jù)RA報文的指示構(gòu)造自己的地址,建立路由信息和缺省網(wǎng)關(guān)等 - 鄰居請求報文NS(Neighbor Solicitation Message,NS)
ICMPv6 Type 135 - 鄰居請求報文可以用來完成ARP的功能(地址解析),NS 報文包含發(fā)送方的源鏈路層mac地址,IPV6首部中:當(dāng)進(jìn)行地址解析時,目的IPV6地址是一個多播地址
2.可以用來探測目的主機(jī)的連通性(跟蹤?quán)従訝顟B(tài)) 3.可以用來驗證自己的地址在本地鏈路上是否唯一,IPV6首部中:目的地址是鄰居的多播地址。 - 鄰居通告報文NA(Neighbor Advertisement Message,NA)
ICMPv6 Type 135 通告鄰居自己的能力(如路由器,置位R標(biāo)記),是否收到請求發(fā)送,是否需要立刻覆蓋鄰居表 重復(fù)地址檢測DAD(Duplicate Address Detect)是在接口使用某個IPv6單播地址之前進(jìn)行的,主要是為了探測是否有其它的節(jié)點使用了該地址。尤其是在地址自動配置的時候,進(jìn)行DAD檢測是很必要的。一個IPv6單播地址在分配給一個接口之后且通過重復(fù)地址檢測之前稱為試驗地址(Tentative Address)。此時該接口不能使用這個試驗地址進(jìn)行單播通信,但是仍然會加入兩個組播組:ALL-NODES組播組和試驗地址所對應(yīng)的Solicited-Node組播組。 IPv6重復(fù)地址檢測技術(shù)和IPv4中的免費ARP類似:節(jié)點向試驗地址所對應(yīng)的Solicited-Node組播組發(fā)送NS報文。NS報文中目標(biāo)地址即為該試驗地址。如果收到某個其他站點回應(yīng)的NA報文,就證明該地址已被網(wǎng)絡(luò)上使用,節(jié)點將不能使用該試驗地址通訊。 跟蹤?quán)従訝顟B(tài)通過鄰居或到達(dá)鄰居的通信,會因各種原因而中斷,包括硬件故障、接口卡的熱插入等。如果目的地失效,則恢復(fù)是不可能的,通信失??;如果路徑失效,則恢復(fù)是可能的。因此節(jié)點需要維護(hù)一張鄰居表,每個鄰居都有相應(yīng)的狀態(tài),狀態(tài)之間可以遷移。 RFC2461中定義了5種鄰居狀態(tài),分別是: - 未完成(Incomplete)
- 可達(dá)(Reachable)
- 陳舊(Stale)
- 延遲(Delay)
- 探查(Probe)
A之間的鄰居狀態(tài)遷移的過程: - A先發(fā)送NS報文,并生成緩存條目,此時,鄰居狀態(tài)為Incomplete。
- 若B回復(fù)NA報文,則鄰居狀態(tài)由Incomplete變?yōu)镽eachable,否則固定時間后鄰居狀態(tài)由Incomplete變?yōu)镋mpty,即刪除表項。
- 經(jīng)過鄰居可達(dá)時間,鄰居狀態(tài)由Reachable(默認(rèn)30s)變?yōu)镾tale,即未知是否可達(dá)。
- 如果在Reachable狀態(tài),A收到B的非請求NA報文(MAC地址修改),且報文中攜帶的B的鏈路層地址和表項中不同,則鄰居狀態(tài)馬上變?yōu)镾tale。
- 在Stale狀態(tài)若A要向B發(fā)送數(shù)據(jù),則鄰居狀態(tài)由Stale變?yōu)镈elay,并發(fā)送NS請求。
- 在經(jīng)過一段固定時間后,鄰居狀態(tài)由Delay(默認(rèn)5s)變?yōu)镻robe(每隔1s發(fā)送一次NS報文,連續(xù)發(fā)送3次),其間若有NA應(yīng)答,則鄰居狀態(tài)由Delay變?yōu)镽eachable。
- 在Probe狀態(tài),A每隔一定時間間隔z(1s)發(fā)送單播NS,發(fā)送固定次數(shù)(3)后,有應(yīng)答則鄰居狀態(tài)變?yōu)镽eachable,否則鄰居狀態(tài)變?yōu)镋mpty,即刪除表項。
Linux常用IPv6命令查看接口地址ip -f inet6 addr show br1 查看路由ip -f inet6 route show
顯示路由選擇表中的ipv6路由 netstat -A inet6 –rn 查看鄰居緩存ip -f inet6 neighbor show 添加IPV6地址ip -6 addr add <ipv6address>/<prefixlength> dev <interface>ip -6 addr add 2001:0db8:0:f101::1/64 dev eth0
ifconfig <interface> inet6 add <ipv6address>/<prefixlength>ifconfig eth0 inet6 add 2001:0db8:0:f101::1/64 添加路由ip -6 route add <ipv6network>/<prefixlength> via <ipv6address>ip -6 route add default via 2001:0db8:0:f101::1
route -A inet6 add <ipv6network>/<prefixlength> gwroute -A inet6 add default gw 2001:0db8:0:f101::1ip -6 route add 2001:1:1:1fb::/64 dev br1 via fe80::68b:42ff:fe28:f02 刪除路由ip -6 route del 2001:1:1:200::/64ip -f inet6 route del ipv6-prefix/prefixlength via gateway[dev interface]route -A inet6 del ipv6-prefix/prefixlength via gateway[dev interface] Ping檢查連通性 traceroute6traceroute6使用ipv6跟蹤到目的網(wǎng)絡(luò)路由 5.tracepath6 ipv6網(wǎng)址 路徑跟蹤并發(fā)現(xiàn)到目的網(wǎng)絡(luò)的MTU值 Windows常用IPv6命令查看接口地址ip -f inet6 addr show br1 查看路由ip -f inet6 route show 查看鄰居netsh interface ipv6 show neighbors 其它netsh
|