tft每日頭條

 > 生活

 > ipv6相關培訓

ipv6相關培訓

生活 更新时间:2024-06-30 17:53:59

ipv6相關培訓(IPv6學習筆記)1

IPv6協議

ipv6相關培訓(IPv6學習筆記)2

整體來看,IPv6協議相比IPv4, 格式上簡潔很多:

  • IPv6報文頭部是定長(固定為40字節),IPv4報文頭部是變長的。這個意味着,寫代碼處理IPv6數據報文的效率會提高很多:);
  • IPv6中Hop Limit字段含義類似IPv4的TTL;
  • IPv6中的Traffic Class字段含義類似IPv4中的TOS(Type Of Service);
  • IPv6的報文頭部取消了校驗和字段:取消這個字段也是對IPv4協議的一個改進。當IPv4報文在網路間傳輸,每經過一個路由器轉發就是修改TTL字段,就需要重新計算校驗和,而由于數據鍊路層L2和傳輸層L4的校驗已經足夠強壯,因此IPv6取消這個字段會提高路由器的轉發效率。值得一提的是,在IPv6協議下,傳輸層L4協議UDP、TCP是強制需要進行校驗和的(IPv4是可選的);
  • IPv6報文頭部中的Next Header字段表示“承載上一層的協議類型”或者“擴展頭部類型”。
IPv6的地址語法

ipv6相關培訓(IPv6學習筆記)3

一個IPv6的地址使用冒号十六進制表示方法:128位的地址每16位分成一段,每個16位的段用十六進制表示并用冒号分隔開,例如一個普通公網IPv6地址:

2001:0D12:0000:0000:02AA:0987:FE29:9871

IPv6地址支持壓縮前導零的表示方法,例如上面的地址可以壓縮表示為:

2001:12:0:0:2AA:987:FE29:9871

為了進一步精簡IPv6地址,當冒号十六進制格式中出現連續幾段數值0的位段時,這些段可以壓縮為雙冒号的表示,例如上面的地址還可以進一步精簡表示為:

2001:12::2AA:987:FE29:9871

又例如IPv6的地址FF80:0:0:0:FF:3BA:891:67C2可以進一步精簡表示為:

FE80::FF:3BA:891:67C2

這裡值得注意的是:雙冒号隻能出現一次。

IPv6地址前綴表示法

IPv6支持子網前綴标識方法,類似于IPv4的無分類域間路由CIDR機制(注意:IPv6沒有子網掩碼mask的概念)。

使用IPv6地址/前綴長度表示方法,例如:

2001:C3:0:2C6A::/64表示一個子網;

而2001:C3:0:2C6A:C9B4:FF12:48BC:1A22/64表示該子網下的一個節點地址。

IPv6尋址模式
  • 單播 : 跟ipv4單播一緻,在單播尋址模式下,IPv6接口(host)在網段中唯一标識。 IPv6數據包包含源IP地址和目标IP地址。 主機接口配備有在該網絡段中唯一的IP地址。
  • 多播 : IPv6組播模式與IPv4相同。 目的地為多個主機的數據包在特殊的多播地址上發送。 所有對該組播信息感興趣的主機需要首先加入該組播組。 加入組的所有接口接收組播數據包并對其進行處理,而對組播數據不感興趣的其他主機則忽略組播信息。
  • 任播 : IPv6引入了一種新型的尋址,稱為Anycast尋址。 在此尋址模式下,多個接口(host)被分配相同的任播IP地址。 當主機希望與配備有任播IP地址的主機通信時,它發送單播消息。 在複雜的路由機制的幫助下,在路由成本方面,該單播消息被遞送到最接近發送方的主機。

IPv6沒有廣播地址,用組播地址實現廣播的功能。

IPv6單播地址
  • 全球單播地址:前綴2000::/3,相當于IPv4的公網地址。這種地址在全球的路由器間可以路由。
  • 鍊路本地地址:前綴FE80::/10Windows和Linux支持或開啟IPv6後,默認會給網卡接口自動配置一個鍊路本地地址。也就是說,一個接口一定有一個鍊路本地地址。
  • 唯一本地地址前綴:FC00::/7前綴FC00::和 FD00::的IPV6地址,相當于IPv4的私網地址10.0.0.0、172.16.0.0、192.168.0.0。
  • 回環地址:::1等同于IPv4的127.0.0.1。
面向IPv6的應用開發

Golang服務端

package main import ( "fmt" "net" "net/http" ) func main() { var err error http.Handle("/", &helloHandler{}) // 監聽本地IPv4地址的8083端口 // err = http.ListenAndServe(":8083", nil) // 監聽指定IPv6地址的8083端口 // err = http.ListenAndServe("[2604:180:3:dd3::276e]:8083", nil) // 同時監聽本地IPv4和IPv6地址的8083端口 err = ListenAndServe(":8083", nil) if err != nil { fmt.Println(err) } }

Curl客戶端

curl "http://[2604:180:3:dd3::276e]:8083" curl -g -6 'http://[2604:180:3:dd3::276e]:8083/'

Python UDP服務端:

import socket UDP_IP = "::" # = IPv4 0.0.0.0 UDP_PORT = 5005 sock = socket.socket(socket.AF_INET6, # Internet socket.SOCK_DGRAM) # UDP sock.bind((UDP_IP, UDP_PORT)) while True: data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes print "received message:", data

Python UDP客戶端:

import socket UDP_IP = "::1" # localhost UDP_PORT = 5005 MESSAGE = "Hello, World!" print "UDP target IP:", UDP_IP print "UDP target port:", UDP_PORT print "message:", MESSAGE sock = socket.socket(socket.AF_INET6, # Internet socket.SOCK_DGRAM) # UDP sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved