网络层实现数据包的选路和转发。WAN(广域网)通常使用众多分级的路由器来连接分散的主机或LAN(局域网),因此通信的两端通常不是直接相连的,而是通过多个中间节点(路由器)连接的。
网络层的任务就是选择这些中间节点,以确定两台主机之间的通信路径。同时,网络层对上层协议隐藏了网络连接的细节,使得在传输层和网络应用程序看来,通信的双方是直接相连的。
下面三个名词的概念需要区分一下:
-
主机:配有IP地址,但不进行路由控制的设备
-
路由器:既配有IP地址,又能进行路由控制的设备
-
节点:主机和路由器的统称
网络层最核心的协议就是IP协议(Internet Protocol,因特网协议)。IP协议根据数据包的目的IP地址来决定如何投递它。如果数据包不能直接发送给目标主机,那么IP协议就为它寻找一个合适的下一跳(next hop)路由器,并将数据包交付给路由器来转发。多次重复这个一跳一跳的过程,最终将数据包交送给目标主机,或者由于发送失败而被丢弃。
网络层另一个重要的协议是ICMP协议(Internet Control Message Protocol,因特网控制报文协议),它是IP协议的重要补充,主要用于检测网络连接。
本文先来了解一下网络层的IP地址是怎么来划分的。
IP地址分为网络号和主机号
-
网络号:保证相互连接的两个网段具有不同的标识
-
主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号
-
不同的子网其实就是把网络号相同的主机放到一起
-
如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中其他的主机重复
DHCP(自动分配IP):能够自动地给子网内新增主机节点分配IP地址的一门技术,一般的路由器都有DHCP功能,因此路由器也可以看做是一个DHCP服务器。
路由器的插口的名称
WAN口:插宽带的口
LAN口:插网线的口
下图是之前提出的一种划分网络号和主机号的方式,现在已经不用了,ABCDE类的前几位都是有规律的
为什么现在不用,是因为大多组织申请B类网络地址,导致B类很快就分配完,A类却浪费了大量地址
针对以前的这种分配地址的方式,现在用的是CIDR的划分方案
-
引入了一个额外的子网掩码(subnet mask)来区分网络号和主机号
-
子网掩码是一个32位的正整数,通常用一串“0”来结尾
-
将IP地址与子网掩码进行按位与操作,得到的结果就是网络号
-
网络号和主机号的划分与这个IP地址是A类、B类还是C类无关
划分子网的例子1
IP地址
|
140.252.20.68
|
8C FC 14 44
|
子网掩码
|
255.255.255.0
| FF FF FF 00 |
网络号
|
140.252.20.0
|
8C FC 14 00
|
子网地址范围
|
140.252.20.0-140.252.20.255
|
|
划分子网的例子2
IP地址
|
140.252.20.68
|
8C FC 14 44
|
子网掩码
|
255.255.255.240
|
FF FF FF F0
|
网络号
|
140.252.20.64
|
8C FC 14 40
|
子网地址范围
|
140.252.20.64-140.252.20.79
|
|
特殊的IP地址
-
将IP地址中的主机地址全部设为0,就是网络号,表示这个局域网
-
将IP地址中的主机地址全部设为1,就称为了广播地址,用于给同一链路中相互连接的所有主机发送数据包(ARP协议中就用到了)
-
127.*的IP地址通常用于本机环回(loop back)测试,通常是127.0.0.1
增加IP地址数量的方法
-
动态分配IP地址:只给接入网络的设备分配IP地址。因此同一个MAC地址的设备,每次接入互联网中,得到的IP地址不一定是相同的。
-
NAT技术(重要),这在之后的文章中会有讲到
-
IPv6:与IPv4是两个互不相干的协议,它用16字节的128位来表示一个地址
私有IP地址和公网IP地址
-
10.*:前8位是网络号,后24位用来表示主机号,一共是2^24=16777216个地址
-
172.16--172.31.:前12位是网络号,一共是2^20=1048579个地址
-
192.168.*:前16位是网络号,共65536个地址
-
包含在这个范围中的,都称为私有IP,其余的全是公网IP
-
一个路口器可以配置两个IP地址,一个是WAN口IP,一个是LAN口IP(子网IP)
-
路由器LAN口连接的主机,都从属于当前这个路由器子网中
-
不同的路由器,子网IP其实都是一样的(通常都是192.168.1.1),子网内的主机IP地址不能重复,但是不同子网之间的IP的地址就可以重复了(如上图)
-
最外层的运营商路由器,WAN口IP就是一个公网IP了
-
子网内的主机需要和外网进行通信时,路由器将IP首部中的IP地址进行转换(替换成WAN口IP),这样逐级替换,最终数据包中的IP地址称为一个公网IP。这种技术称为NAT(网络地址转换)
-
如果希望自己的服务器,能够在公网上被访问到,就需要把程序部署在一台具有外网IP的服务器上