查看: 420  |  回复: 0
  VB6 IPV4和IPV6地址长度是多少位
楼主
发表于 2024年3月2日 13:25

新建From1(窗体),新建Command1(按钮CommandButton),代码:

Private Sub Command1_Click()
    Dim arrA() As Byte
    Dim strIP As String
    
    ReDim arrA(3)

    arrA(0) = 127
    arrA(1) = 166
    arrA(2) = 255
    arrA(3) = 23
    
    For i = 0 To 3
        strIP = strIP & arrA(i) & "."
    Next
    strIP = Left$(strIP, Len(strIP) - 1)
    Debug.Print strIP
End Sub

运行结果:

127.166.255.23

结论:可以看到IPv4可以放在4个字节里面,可以节约空间。

1个字节占8位。

IPv4是4个字节,4*8=32位。

IPv6是16个字节,16*8=128位。


IPv6的地址长度为128位,是IPv4地址长度的4倍。于是IPv4点分十进制格式不再适用,采用十六进制表示。IPv6有3种表示方法。

一、冒分十六进制表示法

格式为X:X:X:X:X:X:X:X,其中每个X表示地址中的16b,以十六进制表示,例如:

ABCD:EF01:2345:6789:ABCD:EF01:2345:6789


这种表示法中,每个X的前导0是可以省略的,例如:

2001:0DB8:0000:0023:0008:0800:200C:417A→ 2001:DB8:0:23:8:800:200C:417A


二、0位压缩表示法

在某些情况下,一个IPv6地址中间可能包含很长的一段0,可以把连续的一段0压缩为“::”。但为保证地址解析的唯一性,地址中”::”只能出现一次,例如:

FF01:0:0:0:0:0:0:1101 → FF01::1101
0:0:0:0:0:0:0:1 → ::1
0:0:0:0:0:0:0:0 → ::
三、内嵌IPv4地址表示法

为了实现IPv4-IPv6互通,IPv4地址会嵌入IPv6地址中,此时地址常表示为:X:X:X:X:X:X:d.d.d.d,前96b采用冒分十六进制表示,而最后32b地址则使用IPv4的点分十进制表示,例如::192.168.0.1与::FFFF:192.168.0.1就是两个典型的例子,注意在前96b中,压缩0位的方法依旧适用。

IPv6 地址 ::FFFF:192.168.0.1 可以转换为完整的 IPv6 地址为:0000:0000:0000:0000:0000:FFFF:C0A8:0001。将每一部分转换成16进制后,即为 0000:0000:0000:0000:0000:FFFF:C0A8:0001。

通常在 IPv6 地址中,每个 16 位的块(即 4 个十六进制数字)会使用冒号(:)进行分隔。因此,IPv6 地址的格式通常是 xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx。

新建From1(窗体),新建Command1(按钮CommandButton),代码:

Private Sub Command1_Click()
    Dim IPv6Dot As String
    IPv6Dot = "::FFFF:192.168.0.1"
    
    Debug.Print ConvertIPv6DotToIPv6(IPv6Dot)
End Sub

Private Function ConvertIPv6DotToIPv6(IPv6Dot As String) As String
    Dim parts() As String
    Dim i As Integer
    Dim result As String

    ' 按冒号分割IPv6Dot地址
    parts = Split(IPv6Dot, ":")

    ' 拼接IPv6地址
    For i = 0 To UBound(parts)
        If Not InStr(parts(i), ".") = 0 Then
            Dim octets() As String
            octets = Split(parts(i), ".")
            parts(i) = Right("00" & Hex(Val(octets(0))), 2) & Right("00" & Hex(Val(octets(1))), 2) & ":" & Right("00" & Hex(Val(octets(2))), 2) & Right("00" & Hex(Val(octets(3))), 2)
        End If
    Next i

    ' 拼接IPv6地址
    result = Join(parts, ":")

    ' 显示转换后的IPv6地址
    ConvertIPv6DotToIPv6 = result
End Function

运行结果:

::FFFF:C0A8:0001


您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2024 MaNongKu.com