网络层实现数据包的选路和转发。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的服务器上