IPv6協議
整體來看,IPv6協議相比IPv4, 格式上簡潔很多:
一個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尋址模式IPv6沒有廣播地址,用組播地址實現廣播的功能。
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每日頭條,我们将持续为您更新最新资讯!