在网络层,我们需要对每一个设备进行唯一的标识,这样所有的设备之间才能实现全球范围内的通信。下来我们就要讨论ipv4的编制机制。
TCP/IP簇中用于ip层识别每一个连接到因特网上的设备的标识成为ip地址。IPV4是一个32位的地址,也就是说ip地址就是该接口与因特网连接的地址。ipv4的地址长度为32位。是全球统一,是唯一的。
1、地址空间:
像ipv4这种定义了地址的协议都有一个地址空间。地址空间就是协议所使用的地址的总数。如果一个协议用b位来定义地址,那么他的地址空间就是2^b.
2、记法:
2进制,点分10进制,16进制。
(1)2进制记法:ipv4有32位,分4组,每组8位。
(2)点分10进制:基于256
每个字节(8位组)只有8位,所以点分10进制的数值一定在0-255之间。
(3)16进制记法:一个32位的地址要用8个16进制数数字表示。一个16进制的数字等效于一个4位的二进制数字。(通常用于网络编程中)
3、地址段:我们经常需要处理的是一段范围内的地址,而不是一个地址。有时候,在给定了一段地址的首地址,和尾地址的条件之下,我们需要求出这个地址段共有多少个地址,灵活的进行计算。
算法:基于256计数法的减法运算,让末地址减去首地址。
如:末地址:146.102.29.0首地址:146.102.32.255
0.0.3.255=(0*256^3+0*256^2+3*256+255*256^0)+1=1024
4、运算:非not 与and 或or
(1)位非运算。位非运算就是一种单操作数运算,他的输入只有一个。当我么对这个数,做位非运算,通常是对这个数求反。对一个、32位的书进行非运算就是对他的每一位反转,0变成1,1变成0。
(2)位与运算。
是一种双操作数运算,他的输入有两个,与运算就是将输入的两个数每一个对应位进行比较,并选择出较小的(若是相等的,则任选一个)
对于两个2进制数表示的32位数我们可以直接进行运算,但是如果这两个数是点分10进制,我们需要使用以下两种快捷算法:
⑴如果两个字节中至少有一个是0或者255,那么就选择较小的那个字节(相等则任选一个)
⑵如果两个字节都不等于0/255,我们可以把这两个字节分别写成具有8个项的多项式之和,且每一项都是2的乘方,然后我们选择各对应的项中较小的(相等任选一个)最后再把这些项加起来就得到或运算的结果。
(3)位或运算。
也是一种双操作数运算,他的输入有两个。或运算就是分别比较两个数相对应的每一位,并选择较大的(相等任意选一)
⑴如果两个字节中至少有一个是0或者255,那么就选择较大的那个字节(相等则任选一个)
⑵如果两个字节都不等于0/255,我们可以把这两个字节分别写成具有8个项的多项式之和,且每一项都是2的乘方,然后我们选择各对应的项中较大的(相等任选一个)最后再把这些项加起来就得到或运算的结果。
5、快捷算法:
(1)位与运算:
17.121.14.35
255.255.140.0
⑴如果两个字节中至少有一个是0或者255,那么就选择较小的那个字节(相等则任选一个)是一种双操作数运算,他的输入有两个,与运算就是将输入的两个数每一个对应位进行比较,并选择出较小的(若是相等的,则任选一个)
17.121.%.0
2^7 | 2^6 | 2^5 | 2^4 | 2^3 | 2^2 | 2^1 |
2^0 |
14:
0 | 0 | 0 | 0 | 8 | 4 | 2 | 0 |
140:
128 | 0 | 0 | 0 | 8 | 4 | 0 | 0 |
并选择每一项中最小的项,最后相加得到结果如下:
8+4=12
结果以上两个数的位与运算结构就是17.121.12.0
(2)同理可得位或运算,不过变成选择较大的那个数。