我结束了我的帖子IPv6地址设计说我会向您展示与十六进制数的工作了几个简单的技巧跟进。然后,IPv4地址的IANA池的长期预测枯竭发生了,我被分心,并写了一对夫妇在该帖子。但现在是时候对我的承诺做好;迟到总比不到好。
点分十进制非常适合于表示IPv4地址;其32位被分成4个8位字节,然后将每个八位组的那些都在0和255之间写入其十进制等效-some十进制数 - 和由点分开。
一个128位的地址则是另一回事。点分十进制,IPv6地址可能看起来像:
32.1.13.184.35.24.105.196.131.84.126.3.218.92.171.205
它很长,更难以阅读,而虚线符号让你在阅读时很容易混淆数字。这对眼睛来说太难了。
而不是破128位的IPv6地址成16个八位位组和写入每个八位位组为十进制数分离由点,让我们打破相同的地址分成8个16位的段和写入每个段为十六进制数分离用冒号:
2001年:将0db8:2318:69c4:8354:7e03:da5c:ABCD
诚然,它仍然不如IPv4地址整洁,但它比虚线小数点形式更容易阅读。它更短,数字变化更大(16而不是10),更容易阅读,冒号的清晰分离减少了“混乱因素”。
只是为了好玩,用ipv6风格的十六进制表示法编写的IPv4地址192.168.213.84是c0a8:d554。如果你以前没有使用过十六进制,这个地址可能看起来很陌生,对你来说很吓人,但是一旦你习惯了,你会发现使用十六进制比使用点十进制要容易。特别是,十六进制和二进制之间的转换比十进制和二进制之间的转换更容易。
这样做的原因是每个十六进制数字有16个可能的值(0 - f),对应于4位二进制数的16个可能的值。记住16个数值或者在头脑中快速算出它们是很容易的:
十六进制数字 | 十进制等效 | 二进制数 |
---|---|---|
0 |
0 |
0000 |
1 |
1 |
0001 |
2 |
2 |
0010 |
3. |
3. |
0011 |
4 |
4 |
0100 |
5 |
5 |
0101 |
6 |
6 |
0110 |
7 |
7 |
0111 |
8 |
8 |
1000 |
9 |
9 |
1001 |
一个 |
10 |
1010 |
b |
11 |
1011 |
c |
12 |
1100 |
d |
13 |
1101 |
e |
14 |
1110 |
f |
15 |
1111 |
另一方面,十进制数字只有10个可能的值(0 - 9),因此十进制数字和任何一组二进制数字之间没有一对一的对应关系。因为计算机和路由器通常使用八进制(字节),所以我们选择用十进制来表示一个八进制字节中的256个可能值。要记住256个不同的值是很困难的,所以我们要在十进制和二进制之间进行一些算术转换。
例如,以十进制数213如果我们要找到它的二进制等效值,我们首先要知道一个二进制字节的,从左至右的位置值是:
1286432168421
我们从所有的8位值开始:
xxxxxxxx
213比128大,所以我们在“128”处写一个1:
1XXXXXXX
213-128 = 85,这是大于64,所以我们写在“64”代替1:
11xxxxxx
85-64 = 21,这比32小,所以我们写在那个地方一个0;它是大于16,所以我们在那个地方写1:
1101 xxxx
21-16 = 5。这比8小,所以我们写在“8”代替0;它比4大,所以我们写在“4”的地方1:
110101xx
5-4 = 1,所以在“2”位置0,并在“1”的地方1,我们就大功告成了:
213 = 11010101
从二进制到十进制的转换使用类似的简单算术步骤序列,只是我们用加法代替减法。以以下八重奏为例:
10011010
知道位值,我们可以看到128 16 8和2位都是1。128 + 16 + 8 + 2 = 154。所以:
10011010 = 154
这些转换很容易,可以在一张纸上快速完成。但是看看在十六进制和二进制之间转换是多么容易。以十六进制数字8c为例(二进制八进制的每一个可能的值都可以用两个十六进制数字表示):
如果没有纸的帮助,8的二进制等价物就是1000
你知道C的二进制数(十进制12)是1100。
所以,只要把那些值加在一起,你有你的转换:
8 c = 10001100
这是一样容易在另一个方向转化。以二进制八位01110101.就掰成两个4位数字,0111和0101:
0111 = 7
0101 = 5
所以:
01110101 = 75
你甚至不需要记住对应于16个十六进制数字的16个二进制数字;你只需要知道四位值是8 4 2和1。例如,0101 = 4+1=5。1110是8+4+2=e(小数14)
IPv6地址表示16位,或2个八位字节,各结肠之间。转换是很容易。就拿本文前面使用的示例地址:
2001年:将0db8:2318:69c4:8354:7e03:da5c:ABCD
假设你需要看到这个地址的第四段,69c4,在二进制:
6 = 0110
9 = 1001
c = 1100
4 = 0100
把它们粘在一起:
69 c4 = 0110100111000100
或者,也许你与一个地址的二进制部分可视化的地址设计,并且需要转换的结果返回给六角工作。让我们用下面的16位数字:
1111000011001100
再次,只是把它分解成4位部分,找到六角相当于每个部分,并把十六进制数字一起:
1111 = F(一个当然是容易)
0000 = 0(不开玩笑!)
1100 = C
1100 = C
所以:
1111000011001100 = f0cc。
有时,您需要在十进制和十六进制之间进行转换,比如在使用将IPv4地址嵌入到IPv6地址中的隧道协议时。如果你手边没有科学计算器,你仍然可以在一张草稿纸上进行快速转换,使用你已经知道的:将十进制转换为二进制,然后再转换为十六进制,或者将十六进制转换为二进制,然后再转换为十进制。十六进制和二进制之间的转换非常简单,没有必要在你的包里添加任何技巧。
当你在你的网络中启用IPv6时,你的工程师和网络操作员将需要能够进行转换。使用这些技巧,你可以在20分钟的白板会议上教会他们一些东西。