IPV4地址

在网络层,我们需要对每一个设备进行唯一的标识,这样所有的设备之间才能实现全球范围内的通信。下来我们就要讨论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)同理可得位或运算,不过变成选择较大的那个数。

原文地址:https://www.cnblogs.com/yjds/p/8597101.html