时间:2014.04.02
地点:基地二楼
------------------------------------------------------------------------------------
一、简述
在网络层,因特网上的每一个设备都有一个唯一的标志,这样所以的设备之间才能实现全球通信。在TCP/IP协议簇中,用于IP层识别每一个连接到因特网设备的标识成为因特网地址,即人们常说的IP地址。其中IPv4地址是一个32位的地址,唯一地且全球地定义了一台主机或路由器与因特网之间的一个连接,即IP地址就是该接口的地址。IP地址具有唯一性和全球性。IPv4的唯一性表现在每个地址仅能定义一个到因特网上的链接。因特网上的两个设备不能同时具有相同的地址,它的全球性表现在希望任何连接到因特网的主机都必须采用这个地址系统。
------------------------------------------------------------------------------------
二、地址空间
协议的地址空间就是协议所使用的地址的总数,假如协议用b位二进制来定义地址,那么地址空间就是2的b次方。IPv4使用32位来表示,即空间大小为2的32次方约等于42.9亿。
即IPv4的地址空间是2的32次方= 42 9496 7296 (背电话号码一样记得这个数字)
------------------------------------------------------------------------------------
三 、记法
IPv4有三种常用记法:
1. 二进制记法(基2记法)用8个一组的二进制标记地址,各字节空格隔开
例: 01110101 10010101 0001110111101010
2. 点分十进制记法(基256记法):这种记法简洁,易于阅读,得到广泛应用,格式为用小数点隔开的十进制,每个十进制数字是8位二进制转换而来
例: 128.11.3.31
点分十进制中的数值在[0,255]之间
需要注意的是:在点分十进制记法中不应该有0开头的数字,比如045,各记法不能混用
3.十六进制记法(基16记法)
一个十六进制数字等效于4位二进制数组,因此IPv4地址要用到8个十六进制数字表示,这种记法在网络编程中很常用。
例: 0X810B0BEF
------------------------------------------------------------------------------------
四、地址段
很多情况我们常需要处理一个范围内的地址,而不是一个 地址,这样在给定条件下,我们常需计算地址数量或者地址范围。
例:假设给定地址段首地址为:146.102.29.0,未地址为146.102.32.255,求该地址段的地址数
解:可以使用基256计数法的减法运算,让末地址减首地址加1
即在基256计数下得差为:0.0.3.255
于是地址数目=(0x256(3)+0x256(2)+0x256(1)+0x256(0))+1=1024
例:某地址段首地址为:14.11.45.96。假设该地址段有32个,求末地址
解:可以将地址数减去1后然后转换为基256计数法表示,即31->0.0.0.31
然后用这个值加上首地址即得到末地址
末地址=(14.11.45.95+0.0.0.31)=14.11.45.127
------------------------------------------------------------------------------------
五、地址运算
IPv4的地址涉及几种常见的运算:非,与,或。
1.位非运算
即求反,对于二进制记法不多说1变0,0变1原则即可,对于用四字节表示的点分十进制记法而言,使用一种更快捷的算法:分别用255减去每一个字节即可。
例:原数 17.121.14.35
255.255.255.255
- 17. 121. 14. 35
-------------------------------
反码 238.134.241.220
2.位与运算
这里也只讨论点分十进制记法的快捷运算
a.如果参与运算的两个字节中至少一个为0或255,那么选择较小的那个字节,相等则任选一个。
b.若两个字节都不是0或者255,可把该两个字节写成8个多项式之和,每一项为2的乘方,然后选择各对应项中较小的,最后把选出来得项累加
例:地址1 17.121. 14.35
地址2 255.255.140.0
结果: 17.121. 12..0
先处理含255 和 0 的部分
对应第三个字节分别将14和140写成2的乘方形式
14 -> 0 0 0 0 8 4 2 0
140-> 128 0 0 0 8 4 0 0
结果-> 0 0 0 0 8 4 0 0=12
于是得两个地址相与结果为: 17.121.12.0
3.位或运算
和位与运算类似,但现在我们选较大的字节或者对应项中较大的累加
例: 17.121.14.35
255.255.140.0
位或结果:255.255.142.35