网络层
王道考研版
网络层的功能
网络层为传输层提供服务,将传输层的数据封装成“IP数据报”。网络中的路由器根据IP数据报首部中的源IP地址、目的IP地址进行“分组转发”。因为,网络层实现了“主机到主机”的传输
数据链路层为网络层提供服务,将网络层的IP数据报(分组)封装成帧,传输给下一个相邻节点
IP地址:32比特,以8bit为一组,记为十进制数,所以是四个数字
如何忽略这些不同,使得异构网络能够互联?
IPv4
v4指的是版本:0100
填充是因为首部长度(以*4为单位)带来的限制
一个链路层数据能承载的最大数据量称为最大传送单元(MTU),如以太网的MTU=1500B,如果一个IP数据报的总长度超出了下一段链路的MTU,就需要分片
- IP数据报的“分片”可能在源主机或任何一个路由器中发生
- 只有目的主机才会对分片进行重组
- 各分片有可能乱序到达目的主机
- 由于首部的“片偏移”字段是以*8B为单位,因此,除了最后一个分片外,其他每个分片的数据部分必须是8B的整数倍
那么,怎么实现分片的组装呢?—标识、标志、片偏移
如果DF=1,但是IP数据报长度又大于MTU,路由器会丢弃这个IP数据报,但是会向源主机发送ICMP报文(一种异常通知机制)
每经过一个路由器,TTL减1;如果TTL减到0,就会直接丢弃分组,并向源主机发送ICMP报文
IP地址(最初分类方案)
- 在那个年代,要求每台主机、每个路由器接口被分配的IP地址是唯一的
- 路由器·和路由器连接的接口可以不分配IP地址,但路由器和其他节点连接的接口必须分配IP地址
- 从属于同一个网络的所有主机、路由器接口的IP地址“网络号”都相同
当一台新主机接入网络时,需要给他分配一个IP地址,并配置“默认网关”

集线器会把收到的帧无脑转发给与之相连的所有主机
注意:
- IP地址是逻辑的、端到端的:从源主机到目标主机,IP数据包的头基本不变(虽然TTL会减1)。
- MAC地址是物理的、点到点的:它在每一段直接的物理链路上都会变化,总是标识着“这一跳”的发送者和接收者。
DHCP 协议的核心功能是自动分配 IP 地址。
整个过程分为四个步骤:
- 发现 - 新接入网络的设备向外广播一个消息:“我需要一个IP地址。”
- 提供 - 网络中的DHCP服务器收到请求后,从其地址池中选出一个可用IP,并向该设备发送一个“提供”消息。
- 请求 - 设备通常会选择第一个收到的“提供”,并再次广播,告知服务器“我准备使用你提供的这个地址”。
- 确认 - 服务器收到“请求”后,发送最终的“确认”消息,正式将该IP地址租给设备使用,并同时告知子网掩码、默认网关、DNS服务器等其他网络配置信息。
本质:通过客户端与服务器之间的四次交互,实现IP地址等网络参数的自动获取与集中管理,避免了繁琐且容易出错的手工配置。
127开头:从自己的网络层发出,但是不会发给任何一台主机
子网划分与子网掩码
intro:给定一个B类地址,我一共可以给他申请2^16^-2个IP地址,那么,怎么能够更有效地利用这些IP呢?—子网划分技术
引入了子网划分技术后,除了默认网关和IP地址后,还要给主机配置子网掩码,目的是得到IP地址的网络号和子网号
当一台主机想要把IP数据报发出的时候,如果数据报是发给本网络内的其他主机,是不需要通过默认网关,直接精准送达的,而这是需要判断的:两台主机是否从属同一个网络
子网掩码通过与运算得到网络号和子网号,子网掩码取决于网络前缀的长度
新技术要兼容老技术,比如:H1怎么到H7呢?—-默认子网掩码!反过来也类似,不过匹配的时候稍微复杂一点
无分类地址CIDR
intro:1993年推出了CIDR,当时互联网在民用领域大放异彩,但是由于每台主机都至少要消耗一个全球唯一的IP地址,IP地址资源告急
Overview:为什么要提出CIDR,定长子网划分和变长子网划分
32bit IP地址:可变长网络前缀+主机号
记法:128.14.32.0/21
定长子网划分:在一个CIDR地址块中,把主机号前K bit抠出来作为定长子网号,这样就能划分出2^k^个子网(每个子网包含的IP地址块大小相等)【与传统的子网划分技术同理】
但是每个子网都一样大,不够灵活,IP地址利用率低,浪费有限的IP资源
变长子网划分:在一个CIDR地址块中,划分子网时,子网号长度不固定!
例1:无分类编制CIDR、变长子网划分的应用
我们看这个图,狗剩只有一台主机,想要点对点连接到路由器,但是因为路由器的接口需要一个IP地址,我们不得不给它分配四个IP地址,原因如图
路由聚合
//TODO:实例分析
网络地址转换NAT
我们的问题:如果每台主机都要消耗一个全球唯一的IP,这显然是不够用的
传输层“端口号”的概念:软件上的概念,每台主机都可以定义2^16^个软件端口,一台主机会把端口分配给自己的进程,进程与进程之间的通信就可以用端口号+IP地址实现
也就是说,IP地址+端口号➡️一个特定的进程
现在,我们打开百度查询我们的IP地址!
这就是外网IP
然后,我们打开网络设置
这里显示的则是内网IP和默认网关
一个内网的IP地址和端口号可以映射到外网的IP地址和端口号
地址解析协议ARP:广播找人,单播回复
以太网MAC帧:662N4,收发协数验
如果类型:0x0800,表示MAC帧数据部分是IPv4的PDU
而如果类型:0x0806,表示MAC帧数据部分是ARP的PDU
所以IP数据报和ARP分组是两种不同的数据结构,分别在IP协议和ARP协议中被定义
补充:ARP分组的格式
动态主机配置协议DHCP
动态主机配置协议DHCP(Dynamic Host Configuration Protocol)常用于给主机动态分配IP地址、配置子网掩码、默认网关等网络相关的参数
DHCP是应用层协议,使用UDP提供的服务
ICMP网际控制报文协议
ICMP协议属于网络层
IP协议为ICMP协议提供服务
ICMP协议用于主机、路由器之间相互通知网络中发生的“异常事件”
询问报文:回送请求和回送回答
IPv6
//TODO
路由算法
根据能否随网络的通信量或拓扑自适应地进行调整变化来划分,路由算法可以分为两大类:
静态路由算法:网络管理员手工配置每一条路由
实现简单、开销小、不具备自适应能力,适用于小型网络
动态路由算法:路由器根据网络流量负载和拓扑结构的变化来动态调整自身的路由表—距离-向量路由算法(RIP协议实现的基础)、链路状态路由算法(OSPF协议实现的基础)、路径-向量路由算法(BGP协议实现的基础)
实现复杂、开销大、具备自适应能力、适用于大型网络
距离-向量路由算法:不必关心完整的网络拓扑结构,只需要关心你和熟人之间的距离、各个熟人和目的节点之间的最短距离
怎么得到“最短距离”?—详见RIP协议!
链路状态路由算法:必须知道完整的网络拓扑结构,再使用迪杰斯特拉算法,找到最短路径
分层次的路由协议
将全世界网络划分成多个相互独立的自治系统—申请成为自治系统AS(Autonomous System),每个AS都有全球唯一的AS编号ASN(需向互联网管理机构申请);自治系统之间是平级关系,不存在包含关系;一个自治系统通常包含一个或多个CIDR地址块以便于路由聚合
AS的管理单位有权决定在本自治系统内,使用何种内部路由协议
每个AS至少要有一台自治系统边界路由器(要求性能强悍,所以价格高昂)和其他自治系统相连
各个边界路由器之间,使用统一的外部路由协议如BGP-4
自治系统之间的路由选择也称域间路由选择,自治系统内部的路由选择也称域内路由选择
RIP
RIP协议是应用层协议,使用UDP传送数据(端口=520)
OSPF(开放最短路径优先协议 Open Shortest Path First)
为什么必须引入网络层
1. 起点:MAC 地址与数据链路层
首先,我们明确 MAC 地址是什么。
- MAC 地址:也叫物理地址、硬件地址。它是一个被“烧录”在网卡(NIC)上的全球唯一的 48 位标识符(如
00-1A-2B-3C-4D-5E)。 - 所属层级:MAC 地址工作在 OSI 模型的第二层 - 数据链路层(对应 TCP/IP 模型的网络接口层)。
- 核心作用:在同一个局域网(LAN) 内,进行直接通信时的地址标识。可以把它想象成房子的“门牌号”,在一条街上(一个局域网里),邮差(交换机)根据门牌号就能把信送到。
数据链路层的通信方式: 在一个典型的以太网中,设备通过交换机连接。当设备 A 想给同一个局域网内的设备 B 发送数据时:
- A 会构造一个“数据帧”。
- 帧的头部包含目标 MAC 地址(B 的 MAC 地址)和源 MAC 地址(A 的 MAC 地址)。
- 交换机收到帧后,查看目标 MAC 地址,查询自己的 MAC 地址表,然后将帧只转发给连接着 B 的那个端口。
这种方式在单个局域网内非常高效。但它有巨大的局限性。
2. 问题:当世界不止一个局域网
现实世界的网络是由无数个局域网互联而成的(你的家、公司、学校、数据中心……)。如果我们只用 MAC 地址,会遇到几个无法逾越的障碍:
障碍一:如何“寻路”到遥远的网络?
想象一下,你家的电脑(网络 A)想访问谷歌的服务器(网络 Z)。谷歌的服务器也有一个 MAC 地址。
- 问题:你的电脑根本无法直接知道谷歌服务器的 MAC 地址。因为 MAC 地址只在本地局域网内有效,它没有“层次结构”,无法告诉我们谷歌服务器在世界的哪个角落。
- 类比:MAC 地址就像门牌号“幸福路 123 号”。光有这个信息,如果你身在另一个城市,你根本不知道“幸福路”在哪里,更别提怎么过去了。你需要一个更高级的地址,比如“北京市海淀区幸福路 123 号”,这个地址是有层次结构的(国家->城市->街道->门牌)。
障碍二:MAC 地址表会爆炸
交换机通过维护一张 MAC 地址和端口的对应关系表来工作。如果全世界的设备都处在同一个“逻辑”网络中,那么地球上的每一台交换机都需要记录地球上每一台设备的 MAC 地址和路径。这在技术上和性能上都是完全不可能的。
障碍三:缺乏隔离和结构
所有设备都在一个大的二层网络里,会带来广播风暴、安全问题、管理混乱等诸多问题。我们需要一种方式将网络划分成更小的、可管理的部分。
3. 解决方案:引入网络层
为了解决上述问题,我们需要一个更“智能”的层,它能够:
- 提供一种逻辑寻址方案,这种地址是分层次的,可以标识设备所在的网络。
- 在不同的网络之间路由数据包。
- 管理网络之间的互通。
于是,网络层(OSI 第三层,TCP/IP 模型的网际层)被引入了。它的核心代表就是 IP 协议 和 IP 地址。
IP 地址:逻辑的、分层的地址
- IP 地址(如
192.168.1.10)是一个逻辑地址,由软件分配,可以变化。 - 它的关键特性是分层结构。
192.168.1.10可以被理解为“192.168.1.0这个网络下的第 10 号设备”。这就像“北京市海淀区”一样,有了区域概念。
路由器:网络层的核心设备
- 路由器是工作在网络层的设备。它连接不同的网络。
- 路由器内部维护着一张路由表,这张表记录的是“要到达某个网络号(比如
203.0.113.0/24),应该从哪个端口转发出去”,而不是像交换机那样记录单个设备的 MAC 地址。这大大减少了需要维护的信息量。
4. 一个完整的通信例子(结合 MAC 和 IP)
现在我们来看你家电脑访问谷歌服务器的过程,它完美展示了两层地址如何协作:
应用层目标:你的电脑(IP:
192.168.1.100)想访问www.google.com(IP:172.217.24.206)。你的电脑判断出谷歌 IP 不在你家局域网(192.168.1.0/24)内。- 网络层决策:根据网络设置,你的电脑知道,所有发往非本地网络的数据包,都应该先发给默认网关——也就是你家的路由器(IP:
192.168.1.1)。- 数据包(Packet):在网络层,数据被封装成 IP 数据包。包头的源 IP 是
192.168.1.100,目标 IP 是172.217.24.206。
- 数据包(Packet):在网络层,数据被封装成 IP 数据包。包头的源 IP 是
- 数据链路层封装(关键步骤!):
- 现在,这个 IP 数据包需要从你的电脑发送到路由器。这是在同一个局域网内完成的。
- 你的电脑需要知道路由器接口的 MAC 地址(通过 ARP 协议查询)。
- 于是,电脑构造一个数据帧(Frame):
- 帧头目标 MAC:你家路由器的 MAC 地址。
- 帧头源 MAC:你家电脑的 MAC 地址。
- 帧的数据部分:装着那个目标 IP 是谷歌的 IP 数据包。
- 这个帧被发送到局域网中,只有路由器会接收它,因为目标 MAC 地址是它的。
- 路由器的工作:
- 路由器收到帧后,剥离掉 MAC 帧头尾,看到里面的 IP 数据包。
- 检查目标 IP 地址
172.217.24.206,查询自己的路由表,决定下一个应该发给哪个路由器(比如你的 ISP 的路由器)。 - 路由器将这个 IP 数据包重新封装成一个新的数据帧,这个新帧的:
- 源 MAC 地址变成路由器出口的 MAC 地址。
- 目标 MAC 地址变成下一个路由器的 MAC 地址。
- 内部的 IP 数据包原封不动(源 IP 和 目标 IP 始终不变)。
全程接力:这个过程在沿途的每一个路由器上重复,就像一场接力赛。IP 数据包(网络层)是“接力棒”,它始终不变,上面写着最终的目的地。而 MAC 地址帧(数据链路层)是“运动员的手”,每经过一个网络区间(一跳),手就换一次,但接力棒不变。
- 到达目的地:最终,数据包到达谷歌服务器所在的网络,最后一个路由器会将帧的目标 MAC 地址改为谷歌服务器的 MAC 地址,服务器才能最终收到。
总结:为什么需要网络层?
| 特性 | 数据链路层 (MAC 地址) | 网络层 (IP 地址) | 结论 |
|---|---|---|---|
| 寻址范围 | 本地局域网 | 全球互联网 | 网络层突破了地理和规模的限制。 |
| 地址结构 | 扁平,无逻辑结构 | 分层,包含网络号和主机号 | 分层地址使得路由和聚合成为可能,让互联网可扩展。 |
| 核心设备 | 交换机,基于 MAC 地址转发 | 路由器,基于 IP 地址路由 | 路由器实现了不同网络之间的互联互通。 |
| 通信视角 | 点到点(下一跳怎么走) | 端到端(整个路径的起点到终点) | 网络层关心的是全局的、逻辑的通信路径。 |
一句话概括:MAC 地址解决了“在同一条街上,如何找到具体门牌”的问题;而 IP 地址解决了“如何去往另一个城市甚至另一个国家”的问题。 正是因为我们需要连接全球无数个独立的“街道”(局域网),所以必须在本地通信机制(数据链路层)之上,引入一个负责广域互联的网络层。
网络层介绍
一、网络层的核心使命与要解决的关键问题
网络层的根本目标是:在由无数异构网络互联而成的复杂环境中(如互联网),为数据包从源主机到目标主机选择一条最佳的路径,并进行转发。
为了实现这个目标,它必须解决以下几个关键问题:
- 寻址:如何为全球数十亿设备设计一套唯一的、有层次的地址方案?(IP地址)
- 路由:数据包在复杂的网络拓扑中,如何选择前进的路径?(路由协议)
- 转发:当路由器收到一个数据包时,如何根据选择好的路径将其送到正确的出口?(转发机制)
- 异构网络互联:如何让不同的底层网络技术(如以太网、Wi-Fi、3G/4G/5G)能够相互通信?(IP协议的统一作用)
- 拥塞控制:当网络流量过大时,如何避免路由器“堵车”?
二、网络层的核心组件
1. IP协议 - 网络层的基石
IP协议是网络层最核心的协议,它是一个“尽力而为”的无连接协议。
- 无连接:通信双方在传输数据之前不需要先建立连接。每个数据包(IP数据报)都是独立发送的。
- 尽力而为:IP协议不保证数据包一定能送达、不保证按顺序送达、也不保证不重复。这些可靠性问题交由上层(传输层,如TCP)来解决。这种设计使得IP协议非常简单高效,是互联网得以爆炸性增长的基础。
2. IP地址 - 网络的“邮政编码”
IP地址是网络层的逻辑地址,用于标识网络中的设备。
- 层次化结构:如
192.168.1.100,分为网络号(标识所属网络,如192.168.1)和主机号(标识网络内的具体设备,如.100)。这使得路由变得可行:路由器只需关心如何到达某个网络,而无需关心网络内有多少台主机。 - 版本:目前主要使用 IPv4(32位,地址耗尽)和 IPv6(128位,地址空间巨大)。
- 公有IP与私有IP:为了解决IPv4地址不足,引入了私有IP地址(如
10.x.x.x,192.168.x.x),这些地址可以在不同局域网内重复使用,通过NAT技术访问公网。
3. 路由器 - 网络层的“交通枢纽”
路由器是专门设计用于连接不同网络并在它们之间转发数据包的设备。
- 核心功能:路由 和 转发。
- 路由:通过运行路由协议(如OSPF, BGP),与其它路由器交换信息,共同“绘制”出整个网络的“地图”(路由表)。这是一个控制层面的过程。
- 转发:当一个数据包到达路由器时,路由器查看其目标IP地址,查询自己的路由表,决定从哪个端口发送出去。这是一个数据层面的过程。
4. 数据包 - 网络层的“数据单元”
在网络层,数据被封装成数据包(也称为IP数据报)。一个典型的IP数据包包含:
- 头部:包含关键控制信息,如:
- 版本:IPv4还是IPv6。
- 源IP地址和目标IP地址:这是数据包旅行的起点和终点,全程不变。
- 生存时间:防止数据包在网络中无限循环。每经过一个路由器,该值减1,减到0时数据包被丢弃。
- 协议:指示数据部分应该交给上层的哪个协议(如TCP-6, UDP-17)。
- 数据部分:来自传输层的报文(如TCP段或UDP数据报)。
三、网络层的关键技术
1. 路由协议 - 互联网的“导航系统”
路由协议是路由器之间交换网络信息的语言,目的是让每个路由器都能生成一张完整的路由表。
- 内部网关协议:在一个自治系统内部使用,如:
- RIP:基于跳数,简单但效率低,用于小型网络。
- OSPF:基于链路状态,复杂但高效、收敛快,用于大型企业网络。
- 外部网关协议:用于在不同自治系统之间交换路由信息。
- BGP:互联网的“脊柱”,负责将全球成千上万个自治系统连接在一起。它更像一种策略工具,而不仅仅是技术工具。
2. 地址解析协议 - 连接二层与三层的“桥梁”
虽然ARP属于网络接口层,但它对网络层至关重要。它解决了如何通过IP地址找到对应的MAC地址的问题。
- 工作过程:主机A想和同一局域网内的主机B(IP已知)通信,A会在局域网内广播一个ARP请求:“谁的IP地址是B的IP?” 主机B会回应一个ARP应答,包含自己的MAC地址。A将这对IP-MAC映射缓存起来,以备后续使用。
3. 网络地址转换 - 解决IPv4地址短缺的“救星”
NAT允许一个局域网内的多台设备共享一个公有IP地址访问互联网。
- 工作原理:局域网内的设备使用私有IP地址。当它们要访问外网时,NAT路由器(通常是家庭网关)会将数据包的源私有IP地址和端口号替换成路由器的公有IP地址和一个新端口号,并记录这个映射关系。当外部服务器返回数据时,路由器再根据端口号映射关系,将数据转发给正确的内网设备。
4. ICMP协议 - 网络的“诊断工具”
ICMP用于在网络设备之间传递控制信息和错误报告。
- 常见应用:
- Ping:使用ICMP回送请求和应答报文,来测试网络连通性。
- Traceroute:利用ICMP的超时消息,来追踪数据包经过的路径。
四、总结:网络层的核心价值
| 特性 | 描述 | 类比 |
|---|---|---|
| 逻辑寻址 | 提供独立于硬件的、分层的IP地址系统。 | 邮政编码:不关心街道细节,只标识大的区域。 |
| 路径选择 | 通过路由协议为数据包选择最佳路径。 | GPS导航:根据实时路况,为你规划从A城市到B城市的最佳行车路线。 |
| 异构互联 | 作为“通用语言”,使不同的底层网络能够互通。 | 世界语:让说不同语言(以太网、Wi-Fi)的人可以交流。 |
| 无连接服务 | 简单、高效,适合构建大规模网络。 | 寄明信片:每张明信片独立投递,不保证必达,但成本低。 |
总而言之,网络层是互联网的架构师和交通总指挥。它通过IP协议和路由器,将全球无数个分散的、技术各异的局域网编织成一个统一的、逻辑上的巨大网络——互联网。没有网络层,我们拥有的将只是一座座互不联通的“信息孤岛”。








































