IP协议主要干两件事:
1.地址管理。给每个设备分配一个IP。
2.路由选择。选择网络中数据传输的路线。
在IP协议报文格式中,可以看到IP地址是由32位二进制数构成的。
通常用点分十进制的形式表示,比如:192.168.0.1。
32位的IP地址被分成了四个部分,每个部分有8位,也就是一个字节。
每个字节表示成十进制数的范围就是0~255。
32位IP地址所带来的问题
这32位IP地址能表示的IP个数最多是232,大约是43亿个IP地址。
这放在以前应该够用了,但是放到现在远远不够用。因为世界上有那么多的主机,那么多的路由器,那么多的手机,那么多的路由器。网络中的设备已经远远超过了43亿亿,所以网络中的IP地址是不够用的。如何解决这个问题呢?
世界上那么多设备,并不是每一台设备都时时刻刻上网的。设备上网才分配IP,设备不上网就不分配IP,这样就可以省下一些IP。但是这样子做并没有增加IP地址的数量,并不能彻底解决问题。
NAT英文全称是“Network Address Translation”
,中文意思是“网络地址转换”。
NAT把IP地址分成了两类:1.内网IP 2.外网IP
内网IP包括:10.*
172.16.* - 172.31.*
192.168.*
外网IP包括除内网IP以外,剩下的IP
内网IP在不同的局域网中是可以重复的,外网IP则必须要求唯一。
但是这个外网IP并不是一个设备独占的,而是一个内网中的很多设备都共用一个外网设备。
比如:
一个网吧中的所有电脑都处在一个内网中,这些设备有不同的内网IP,但是共用一个外网IP。
下面是NAT的具体过程:
发送到服务器中。
服务器会响应A和B的请求,这些响应都是发到路由器上的,路由器再把响应中的IP转成内网中的IP,再发给A和B。
动态分配IP地址和NAT机制都不能从根本上解决问题,而IPV6协议真正从根本上解决了IP地址不够用的问题。
在IPV6协议中,使用16个字节,128位来表示IP地址,能表示2128个IP地址,这个数字大到能给地球的每一粒沙子分配一个IP地址。
IP地址分为两个部分:
1.网络号。标识网段,保证两个网段之间有不同的网络号。
2.主机号。标识主机,同一个网段中,主机之间的网络号是相同的,但是主机号是不同的。
简单来说,网络号标识了一个局域网,主机号标识了一个局域网中的主机。
一个路由器中有LAN口IP和WAN口IP,就是为了把两个局域网区分出来,路由器的一个作用就是把两个局域网连接起来。
在家庭中,网络结构可能如下图所示:
在电脑A和电脑B和路由器组成的局域网中,它们的网络号相同,主机号不相同。
网络号为192.168.0
,主机号分别为13
,14
, 1
。
在由路由器、电视和光猫组成的局域网中,它们的网络号也相同,主机号不相同。
网络号为192.168.1
,主机号分别为10
,11
,1
。
注意:
在上图中,前三个字节作为网络号,但在真正的网络中,不一定要以前三个字节为网络号。
网络号有两种分法:
可以在windows控制台输入ipconfig,查看自己的IP地址和子网掩码。
IPv4地址:172.20.10.3
子网掩码:255.255.255.240 二进制:11111111.11111111.11111111.11110000
这个子网掩码表示IP地址前28位表示网络号,后4位表示主机号。
将 IP 地址和子网掩码进行“按位与”
操作,得到的结果就是网络号。
将子网掩码二进制按位取反,再与 IP 地址位与计算,得到的就是主机号。
举个例子:
IP地址: 10101100.00010100.00001010.00000011
子网掩码:11111111.11111111.11111111.11110000
网络号:10101100.00010100.00001010.00000000
= 127.20.10.0
主机号:00000000.00000000.00000000.00000011
= 0.0.0.3
特殊的IP地址
假设有一个IP地址是:192.168.0.11 子网掩码:255.255.255.0
那么可以得到这个局域网的网络号:192.168.0.0
1.主机号部分全为0的IP地址
主机号为0的IP地址:192.168.0.0 。
同时也是网络号,这个主机IP在局域网中是不使用的。
2.主机号部分全为1的IP地址
主机号全为1的IP地址:192.168.0.255 这个IP地址会作为广播地址来使用
3.以127开头的IP地址
以127开头的IP,127.*,被用作环回IP。
4.主机号为1的IP
主机号为1的IP,在这个局域网中是:192.168.0.1一般用作网关IP,这里只是一般来说,并不是绝对的,也可以用主机号为其他数字的IP作为网关IP。
路由选择具体负责的就是数据传送的路径。就像现实世界中,从一个地方到另外一个地方可能有好几条路径,使用高德地图就可以知道哪条路径最短,最省时间。
但是网络环境比较复杂,一些路由器只知道与它相邻的路由器的情况,并不知道目标主机在哪,只能由把数据从一个路由器转给另一个路由器,逐渐逼近目标主机。
如下图:
A路由器知道B路由器的情况,但不知道C路由器的信息,所以就把数据传给路由B了。路由B把数据给路由C,重复上述过程,可以把数据送到终点。
路由器有一个路由表,路由器在路由表中寻找目的IP。