在TCP/IP协议中,协议栈分为4层。从上到下依次是应用层、运输层、网络层、网络接口层。 IP协议就工作在网络层。IP协议将纷繁复杂的物理层协议屏蔽掉,对上层提供统一的描述和管理服务。
互联网上的每一台主机都有一个IP地址,IP地址由32比特的整数来表示,共分为5类。 分类方法是:根据网络号所占字节数来区分。
A类IP地址以0开始,网络号占用一个字节。
B类IP地址以10开始,网络号占用两个字节。
C类IP地址以110开始,网络号占用三个字节。
D类IP地址以1110开始,表示的是一个多播地址。
E类IP地址以1111开始,目前没有使用到。
其中比较常用的是前三类。
由于IP地址仅有32位,并且,受限于网络号+主机号的格式,实际可用的IP是非常有限的。而互联网上每一台主机都需要一个IP地址,必然会出现不够用的情况。于是有了私网IP地址,私网IP地址可以在一定程度上缓解IP地址不够用的问题。
所谓私网IP地址,可以看成是一个网络内部使用的IP地址,这些IP地址对外是不可见的。
以下IP段的地址都是内网IP地址。
(1)10.0.0.0 到 10.255.255.255
(2)172.16.0.0 到172.31.255.255
(3)192.168.0.0 到192.168.255.255
NAT(Network Address Translator)是网络地址转换,它实现内网的IP地址与公网的地址之间的相互转换,将大量的内网IP地址转换为一个或少量的公网IP地址,减少对公网IP地址的占用。
NAT的最典型应用是:在一个局域网内,只需要一台计算机连接上Internet,就可以利用NAT共享Internet连接,使局域网内其他计算机也可以上网。使用NAT协议,局域网内的计算机可以访问Internet上的计算机,但Internet上的计算机无法访问局域网内的计算机。
Windows操作系统的Internet连接共享、sygate、winroute、unix/linux的natd等软件,都是使用NAT协议来共享Internet连接。 所有ISP(Internet服务提供商)提供的内网Internet接入方式,几乎都是基于NAT协议的。
IP数据报,或称IP报文,分为首部和数据部分两部分。首部的前一部分是固定长度,共20个字节,是所有IP报文都必须携带的,用于描述报文本身的信息,诸如IP版本,IP报文长度,服务类型,分片信息等。其中最重要的发送方IP地址和接收方IP地址。
有了接收方IP地址,而IP地址又代表了一台主机,似乎寻路问题已经解决了。
但是IP地址仅仅是一个软件虚拟的地址,对于物理层来说,它并不了解什么是IP地址,以及如何定位到一个IP。
ARP协议称为地址解析协议,它可以为将IP地址解析为一个物理地址,以便在物理层进行转发。 ARP协议工作的过程类似于:我是路由器A,现在广播一条消息,我的IP地址是XXX,我的物理地址是XXX,请问谁知道IP地址XXX对应的物理地址是多少? 如果局域网内某个主机看到有其他路由器在寻找自己的物理地址,那么它就会做出回应。
有了IP地址和物理地址的对应关系之后,每次转发IP报文时,都会将接收方IP地址对应的物理地址填入下层报文中,这样物理层就知道怎么转发此报文了。 下一跳路由器收到此报文后,看到的依然是IP报文,但是已经完成了物理层的传输。
由于IP地址是两层结构:网络号+主机号,在某些方面欠缺灵活性和扩展性。
比如:一个A类IP地址,包含超过1000万个主机号,但是通常一个网络内是没有这么多主机的,这就造成了很多IP地址的浪费。
另外,给每一个物理网络分配一个网络号,会造成路由器的路由表条目增多,降低了转发效率。
为了解决这些问题,有了IP子网的概念。子网的概念将IP地址从二层结构变成了三层结构。
子网扩展了网络号的长度,减少了主机号的长度。这样,就能划分出更多的网络了。
但是子网划分只是一个网络内部的事情,对于外部网络来说,它并了解这一点。因此路由器转发时,依然是根据网络号来进行转发的,只是在子网的网关时,才会根据子网号来定位到一台主机。
那么这个路由器怎么知道,子网号到底是多少呢? 为了描述子网的划分情况,需要引入子网掩码。
子网掩码的格式同IP地址,只是子网掩码的前部分为全1,后部分为全0. 子网掩码可以描述出来,所划分的子网占用了多少位主机号来作为子网号。
例如:
145.13.3.10配合子网掩码255.255.255.0,145开头的IP地址是B类IP地址,也就是说,网络号占用了两个字节,即145.13。剩下的3.10是主机号。掩码的第三字节为255,表示网络号中的第三字节全部被用来表示子网,只有最后一个字节是主机号,于是,就可以得知,子网号为145.13.3 主机号为10.
从名字可以看出,cidr划分法不再区分IP地址是属于A类还是B类等了。 cidr直接将一个32位的IP地址划分为两部分,即网络号+主机号,但是借鉴了子网掩码的思想,它提供一个整数,表示此IP地址中,网络号占多少位(可以理解为子网掩码中1的个数)
比如:128.14.35.7/20 这种写法称为CIDR记法,或称斜线记法,表示一个地址块。它除了表示出了目的地址之外,还提供了一个信息,那就是,网络号占用了前20位,主机号占用剩下的12位。在这个信息的基础上,还能继续得出,处于同一地址块的最小IP地址为128.14.32.0,最大地址为128.14.47.255.
这种IP划分方法和之前的分类方法的区别在于,分类的IP地址,可以从一个IP地址直接看出是哪一类,也就知道了这类地址空间的范围。分类的IP地址,前缀都是不同的,也就是说,最多比较前面四个字节,即可知道此IP地址的分类。但是CIDR却要采用最长匹配方法。