引言
在前面几期文章中,无论是UDP还是TCP,其实我们都在介绍 TCP/IP 模型的“传输层”,我们知道,数据在传输层完成相应的封装后就会来到网络层进行下一步的数据转发,那么数据在网络层又接受了哪些神秘的力量?下面就让我们来揭开网络层的神秘面纱!
一、地址管理
1、IP地址
IP 地址
(Internet Protocol Address)是指互联网协议地址。IP地址是一个32位的二进制数,通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:192.168.1.36
2、MAC地址
MAC 地址
,即 Media Access Control Address,用于标识网络设备的硬件物理地址。主机具有一个或多个网卡,路由器具有两个或两个以上网卡;其中每个网卡都有唯一的一个MAC地址。长度为48位,及6个字节。一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
特殊的MAC地址:广播数据报的MAC地址为:FF:FF:FF:FF:FF:FF(注:广播数据报,发送一个广播数据报,表示对同网段所有主机发送数据报。)
二、子网划分
具体划分过程如下图(来源:涨芝士):
这里引入两个概念:
1、将 IP 地址和子网掩码进行“按位与”操作(二进制相同位,与操作,两个都是1结果为1,否则为0),得到的结果就是网络号。
2、将子网掩码二进制按位取反,再与 IP 地址位与计算,得到的就是主机号。
同时网络号
和主机号
也是IP地址的两个重要组成部分。其中网络号用来标识网段(局域网);主机号用来标识局域网中的主机。
这里除了使用子网掩码
的方式划分,还有一种古老的方式,将IP地址划分为以下5类:
注意:这种“粗糙”的划分方式,存在 IP 地址浪费的问题。例如在A、B类地址中,由于主机号长度过长,并且实际网络架设时,连接的主机数量又常远小于最大主机数,会造成大量 IP 地址浪费。
三、特殊IP地址
- 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;
- 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;此时想这个IP地址发送UDP数据包,这个数据包就会被转发给整个局域网中所有主机(TCP不支持广播);
- 127.*的IP地址用于本机环回(loop back)测试,通常是
127.0.0.1
;- 主机号为1。如
192.168.0.1
一般作为网关IP
注意:TCP/IP 协议规定,不同子网之间无法直接通信,如果想要通信需要“网关
”进行转发。通常路由器就担当“网关”这样一个角色。
四、解决 IP 地址不够用
由于IP地址是一个32位的二进制数,因此最大的IP地址数就为 2 32 2^{32} 232 次方,大约是 42亿9千万,而全球人口数量接近 80亿,IPV4 在2019年11月25日被正式分配完毕,为了解决IP地址不够用的问题当下主要有以下解决方案:
1、动态分配IP地址
设备上网才分配IP地址,不上网不分配。这种方案治标不治本,并没有增加 IP 数量,只能在一定程度上解决问题,不能彻底解决 IP 地址不够用的问题。
2、NAT机制
NAT技术当前解决IP地址不够用的主要手段,是路由器的一个重要功能。在探讨NAT技术之前,我们先了解以下3个概念:
- 内网(局域网)IP:
10.*
、172.16.*-172.31.*
、192.168.*
- 外网 IP:除去内网 IP 剩下的IP地址均为外网 IP
- 全局IP要求唯一,但是私有(内网)IP不需要;在不同的局域网中出现相同的私有IP是完全不影响的。
NAT能够将私有IP对外通信时转为全局IP。也就是就是一种将私有IP和全局IP相互转化的技术方法,并且同一局域网在转化时会分配同一个全局IP,也就是说此时一个全局IP就代表当前局域网内所有的网络设备。下图IP转换过程:
那么问题来了,如果局域网内,有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的IP都是相同的。那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?此时NAPT就可以解决这个问题,通过使用使用 IP+port 来建立这个关联关系:
3、使用IPV6
IPV4使用4个字节,32位来表示IP地址。IPV6使用16个字节,128位来表示IP地址,经过简单计算,大约是:2^32*2^32*2^32*2^32
这个数字无比巨大,甚至说给世界上每一粒沙子都分配一个IP地址都搓搓有余。
但是对当前来说,有余IPV6和IPV4协议并不兼容,使用IPV6需要升级硬件,成本较高,又由于NAT技术的使用目前极大缓解了IPV4的困境,所以IPV6目前还多处于预备阶段,尚未启用。
五、路由选择
对于网络数据传输,不是想象中那样,数据直接从源主机到达目的主机,而是类似在地图中,从A到B的过程:
IP地址描述的是路途总体的起点和终点。而行进也必须一个地点一个地点的前进,由MAC地址来描述路途上每一个区间的起点和终点。
IP数据报在进行网络转发过程中,和上述情况类似,就是一个逐渐问路的过程,每个路由器只认识周围的情况,很可能不清楚目的IP所在的位置,此时路由器就会指出一条路径(路由表中的“下一条”表项),将数据报引向更上一级的路由器中,重复上述过程,最终会逐渐逼近目标,最终实现数据报的转发。
其实在“下一跳”寻址的过程中,还会使用到一个关键的协议:ARP协议。
ARP是一个介于数据链路层和网络层之间的协议,ARP协议建立了IP地址与MAC地址的映射关系。
在数据链路层,寻找下一跳设备MAC地址的过程,称为ARP寻址。
下面是具体的寻址过程:
- 主机和路由器中都保存了一张ARP缓存表:通过IP地址可以找到对应的MAC地址。
- 根据下一跳设备的IP地址,在ARP缓存表中能找到对应的MAC地址,则可以设置目的MAC并发送数据报。
- 如果找不到,则发送ARP广播数据报:目的MAC为广播地址,询问下一跳设备的MAC地址。