IP地址::={<网络号>,<主机号>}
IP地址::={<网络前缀>,<主机号>}
与分类IP最大的区别就是网络前缀的位数n是不固定的,可以是0~32位。
采用斜线标记法,“/”后面的是网络前缀的位数。111.112.113.1/20,表示前20位为网络前缀,后12位为主机号。
CIDR把网络前缀都相同的所有连续IP地址组成一个CIDR地址块。
一个大的地址块往往包含很多小的地址块,所以在路由器的转发表中利用一个大的地址代替许多小的地址,这种方法称为路由聚合。这样就能大大压缩转发表的空间,减少了查找转发表的时间。
我们人类可以通过斜线标记法快速计算出网络前缀,这种斜线标记在计算机中是没有的,而是通过地址掩码来计算的。
子网掩码是一串连续的1和0组成,CIDR记法中斜线后面的数字即为1的个数。
111.112.113.1/20 AND 255.255.240.0 =>111.112.112.0/20
我们知道IP地址是网路层和上层使用的地址,是一种逻辑地址,而MAC地址是数据链路层使用的地址。IP地址放在IP数据报的首部,IP数据报在数据链路层被封装成帧,而MAC地址则放在MAC帧的首部,所以数据链路层是看不见数据报的IP地址的,是依靠MAC地址传送的。所以在数据链路层怎样知道目的地址的MAC地址呢?
ARP在主机的ARP高速缓存中存放一个本局域网上的各主机和路由器的IP地址到MAC地址的映射表,并且经常动态更新。
例如在某个局域网,A向B发送数据报,首先在ARP高速缓存中查找B的IP地址,如有则将其对应的MAC地址写入MAC帧然后发送到该MAC地址。
如果找不到呢?
(1)A的ARP进程在本局域网上广播一个ARP请求分组,其中包含A的IP地址和MAC地址。
(2)本局域网上的所有主机都能收到该分组。
(3)主机B的IP地址与ARP请求分组中要查询的IP地址一致,则收下该分组,其他主机都不会理睬这个分组。B向A单播ARP响应分组,其中包含B的MAC地址。(为了避免B向A发送ARP请求分组,减少网络通信量,B在收到A的请求分组后,也会将A的映射信息写入自己的高速缓存)。
(4)A收到响应分组后就在其ARP高速缓存中写入主机B的IP到MAC地址的映射。
ARP对保存在高速缓存中的映射项都设置生存时间,凡超过生存时间的项目就从告诉缓存中删掉。这样就能避免因某主机网络适配器损坏导致MAC地址失效,而无法被别的主机找到的问题。
(1)版本
4位。协议IP的版本。
(2)首部长度
4位。以4字节位为单位。因为首部固定长度为20字节,所以最小值为5。最大值为15,所以首部长度最大值为60字节。当首部长度不是4字节的倍数时,则需在填充字段加以填充。这样就能保证数据部分永远在4字节的整数倍开始,方便实现IP协议。
(3)区分服务
8位。用来获得更好的服务。
(4)总长度
16位。首部和数据部分长度之和。最大长度为216-1=65535字节,但是受链路层MTU限制,超过MTU则需分片处理,而且实际中也很少传送这么长的数据报。
尽可能长的IP数据报会提高传输效率,但IP数据报越短,路由器转发的速度就越快。因此规定主机和路由器必须能够接受长度不超过576字节的数据报。(512上层数据+60首部长度+4富余)。
(5)标识
16位。IP软件在存储器中维护一个计数器,每产生一个数据报,计数器就加1,但这并不是为了按序接收的问题,因为IP本身就是无连接的,而是为了在分片时,给每个分片的标识字段赋值,相同字段值的数据报片就能重装为原来的数据报。
(6)标志
3位,目前只有两位有效。
(7)片偏移
13位。分片后,某片在原分组中的相对位置。以8字节为偏移单位(也就是说除了最后一个数据报片外,其他分片都是8字节的整数倍)。
(8)生存时间
8位。TTL(time to live),表明数据报在网络中的寿命。由发出数据报的源点来设置,防止无法交付的数据报无限制的在互联网中兜圈子而耗费网络资源。
TTL起初以秒为单位,每经过一个路由器TTL就减去数据报在该路由器所消耗的时间。随着技术的进步,路由器处理数据报的时间一般都远远小于1秒,TTL功能则改为了“跳数限制”。表示该数据报在互联网至多可经过多少个路由器(最大值255)。当TTL减为0时,该数据报就会被丢弃。
(9)协议
8位。指出此数据报携带的数据适用何种协议,以便使目的主机IP层知道应将数据部分上交给哪个协议处理。
(10)首部检验和
16位。只检验数据报的首部,不检验数据部分。
在发送方将首部划分为16位的序列,并把检验和字段置0,以反码算数运算全部相加后再取反码得到检验和字段值。在接收方将所有16位序列以反码算数运算相加后取反码,如果不为0则表示首部发生变化,并将此数据报丢弃。
(11)源地址
32位。发送IP数据报的主机的IP地址。
(12)目的地址
32位。接收IP数据报的主机的IP地址。