网络层

#计算机网络
前面的数据链路层)中我们可以知道,数据链路层是“尽最大努力交付”的,那么我们应该如何实现可靠传输呢?这个时候就需要网络层发挥作用了

首先我们要知道,网络层有什么用?

网络层的作用

路由选择

网络层最重要的任务是确定数据包的最佳路径并进行转发。这也就是路由,路由的核心目标是确保数据包能够跨越多层网络,直到到达目标设备。

路由器是实现路由的关键设备,它根据数据包的目标地址以及网络的拓扑结构来决定数据包的转发路径。

每个路由器都维护一张路由表,表中包含了从当前路由器到目标网络的路径信息。比如:

1
2
3
4
5
6
└─$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.31.1 0.0.0.0 UG 30 0 0 eth5
192.168.31.0 0.0.0.0 255.255.255.0 U 286 0 0 eth5
192.168.31.1 0.0.0.0 255.255.255.255 UH 30 0 0 eth5

根据路由选择方法和网络拓扑的类型的不同,常常有以下路由的分类

路由种类

静态路由

字面意思,手动配置,不会变化。静态。

动态路由

动态路由使用路由协议自动调整路由路径,根据网络状态变化(如链路失败、网络拓扑变化等)自动更新路由表。

默认路由

默认路由是一种特殊类型的路由,用于当目标地址不在当前路由表中时,将数据包发送到一个预定的“默认”路由器。

直连路由

直连路由是指那些直接连接到路由器的网络。直连路由的目标地址为路由器接口所属网络的地址和子网掩码,下一跳是路由器接口的本地地址。直连路由通常不需要经过其他路由设备进行转发,因为它们是直接可达的。

每个路由器接口上的网络通常都有一条直连路由。

那问题来了,路由表是根据什么什么规则更新的呢?

路由协议

路由的实现依赖于路由协议。

RIP 距离向量协议

RIP基于跳数来选择路径,最多支持15跳,超过15跳的网络被认为是不可达的。

OSPF 链路状态协议

通过交换链路状态信息,构建一个完整的网络拓扑图,然后使用Dijkstra算法计算最短路径。

BGP 路径向量协议

主要用于自治系统之间的路由选择。

BGP通过交换路径信息来选择最优路由,支持复杂的路由策略(如AS路径、策略路由等)。支持跨自治系统(AS)进行路由

EIGRP 混合型协议

结合了距离向量和链路状态的特性,使用DUAL算法来选择最佳路径

网关

网关的作用是连接两个或多个不同协议或不同网络架构的网络,使得它们能够进行互联,并可以进行协议转换。

逻辑地址

这就不得不提著名的互联网协议——IP

IP是网络层协议,它定义了数据包的格式、如何进行寻址、路由和传输。通过IP协议,数据可以从一个设备传输到另一个设备,即使它们位于不同的物理网络中。IP协议不关心数据内容的具体传输,只关心如何把数据从源地址送到目标地址。

主要有两个版本:IPv4、IPv6

IP地址的组成

IPv4

由4个字节(32位)组成,通常用十进制表示,并以点分十进制格式(A.B.C.D)展示。每个字节(8位)表示一个0到255之间的数值。

IPv4地址通常分为网络部分主机部分

  • 网络部分:标识一个特定的网络,所有处于同一网络的设备具有相同的网络部分。
  • 主机部分:标识网络中具体的设备(主机)。

如何区分网络部分和主机部分由子网掩码(Subnet Mask)决定。子网掩码是一个32位的二进制数,用来标识IP地址中哪些位是网络部分,哪些是主机部分。
例如:

  • IP地址192.168.1.10
  • 子网掩码255.255.255.0
    • 网络地址192.168.1.0,表示整个192.168.1.x网段。
    • 主机地址10,表示该网段中具体的设备。

IPv6

由8组16位的十六进制数字组成,每组用冒号(:)分隔。IPv6地址比IPv4地址长得多,使用128位地址空间

简化表示法:IPv6地址中如果存在连续的零,可以使用::来表示一次。例如:2001:0db8::1

  1. 前缀(Prefix):标识网络部分,通常是一个全球唯一的地址范围,如2001:0db8::/32
  2. 接口标识符(Interface Identifier):标识设备的部分,通常由设备的MAC地址派生,确保设备的唯一性。

例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334中,前64位是前缀,后64位是接口标识符。

IP地址的分类

IPv4

A类地址
  • 范围1.0.0.0 ~ 126.255.255.255
  • 特点
    • 网络部分占8位,主机部分占24位
    • 适用于大型网络,支持大量主机。
  • 默认子网掩码255.0.0.0(/8)
  • 第一个字节的范围:1 ~ 126
  • 特殊地址
    • 127.x.x.x:保留用于回环地址(如 127.0.0.1)。
B类地址
  • 范围128.0.0.0 ~ 191.255.255.255
  • 特点
    • 网络部分占16位,主机部分占16位
    • 适用于中型网络。
  • 默认子网掩码255.255.0.0(/16)
  • 第一个字节的范围:128 ~ 191
C类地址
  • 范围192.0.0.0 ~ 223.255.255.255
  • 特点
    • 网络部分占24位,主机部分占8位
    • 适用于小型网络。
  • 默认子网掩码255.255.255.0(/24)
  • 第一个字节的范围:192 ~ 223
D类地址
  • 范围224.0.0.0 ~ 239.255.255.255
  • 特点
    • 用于组播通信(Multicast)。
    • 没有网络和主机部分的划分。
  • 应用:多点传送(如视频会议、IPTV等)。
E类地址(保留地址)
  • 范围240.0.0.0 ~ 255.255.255.255
私有IP地址与公共IP地址
  • 私有IP地址:用于局域网(LAN)内部通信,不会在互联网中路由。
    • A类10.0.0.0 ~ 10.255.255.255
    • B类172.16.0.0 ~ 172.31.255.255
    • C类192.168.0.0 ~ 192.168.255.255
  • 公共IP地址:用于互联网通信,由全球IP地址管理组织分配,确保全球唯一性。

IPv6

单播地址(Unicast)
  • 用于一对一通信,分为以下几种:
    • 全球单播地址(Global Unicast Address)2000::/3,可在互联网中全球唯一标识。
    • 链路本地地址(Link-Local Address)fe80::/10,用于同一链路内的设备通信,不会被路由转发。
    • 站点本地地址(已弃用):局部网络内的通信。
    • 本地回环地址(Loopback Address)::1,相当于IPv4的127.0.0.1
组播地址(Multicast)
  • 地址范围:ff00::/8
  • 用于一对多通信,数据包发送到多个接收设备。

CIDR(无类域间路由)

在传统的IPv4地址分类中,IP地址被划分为A类、B类和C类,每类的网络部分和主机部分是固定的。但是这种固定划分方式导致了地址浪费网络扩展性差的问题

CIDR采用斜杠表示法,通过在IP地址后添加 ‘/数字’ 表示网络部分的长度。例如:

  • 192.168.1.0/24

其中,

  • 192.168.1.0 是网络地址。
  • /24 表示前 24位 是网络部分,剩余的 8位 是主机部分。

CIDR 允许更灵活地划分 IP 地址,网络前缀可以是任意长度(1 到 32 之间)。下面是几个例子:

CIDR 表示法 网络部分长度 主机部分长度 可用 IP 地址数量(主机数)
192.168.1.0/24 24 8 2⁸ - 2 = 254
192.168.1.0/25 25 7 2⁷ - 2 = 126
192.168.1.0/26 26 6 2⁶ - 2 = 62
192.168.1.0/30 30 2 2² - 2 = 2(用于点对点)
  • IP 地址总数 = $2^{主机部分长度}$
  • 减去 2:1 个地址用于网络地址,1 个地址用于广播地址。

作用

  1. 灵活的地址分配:CIDR 允许网络管理员根据实际需求分配 IP 地址,减少浪费。
  • 例如,可以分配 /25(128 个地址)给中型网络,分配 /30(2 个地址)给点对点链路。
  1. 减少路由表的大小:CIDR 通过路由聚合将多个连续的网络地址合并为一个条目,减少了路由器的路由表条目数量,提高了网络性能。

示例

  • 传统路由:192.168.0.0/24192.168.1.0/24192.168.2.0/24192.168.3.0/24
  • 使用 CIDR 聚合:192.168.0.0/22(合并了 4 个 C 类网络)。
  1. 支持更大规模的网络:通过 CIDR,可以根据不同规模的网络分配不同大小的 IP 地址。

  2. 无类路由:取消了 A、B、C 类地址的固定结构,使得 IP 地址更适合当今互联网的复杂需求。

子网划分

为什么要进行子网划分?

在网络中,直接使用完整的IP地址范围(如192.168.1.0/24)会导致一些问题,比如:

  1. IP地址浪费:在一个大网络中,如果设备数量较少,大量IP地址会被浪费。
  2. 广播风暴:网络中广播包过多,影响网络性能。

子网掩码

有两种表示法:点分十进制(如 255.255.255.0)和 CIDR表示法(如 /24,表示网络部分占24位)

如何划分子网?

子网划分的关键是借用主机位,从而增加网络部分的长度。

步骤

  1. 确定原始网络地址和子网掩码
  2. 确定要划分的子网数量
  3. 借用主机位来扩展网络位,以创建更多子网。
  4. 计算子网地址范围、可用主机数

示例 1:将 192.168.1.0/24 划分为 4 个子网

  1. 原始网络192.168.1.0/24
  • 原始子网掩码:255.255.255.0
  • 主机位:8 位(/24 的后 8 位)。
  1. 需要划分 4 个子网
  • 4 个子网 → ( 2^2 = 4 ),需要借用2 位主机位作为子网位。
  1. 新子网掩码
  • 原始网络部分:24 位
  • 借用 2 位 → 新的网络位长度 = 26 位
  • 新子网掩码:255.255.255.192/26
  1. 子网地址划分
子网编号 子网地址 可用 IP 地址范围 广播地址
1 192.168.1.0/26 192.168.1.1 - 192.168.1.62 192.168.1.63
2 192.168.1.64/26 192.168.1.65 - 192.168.1.126 192.168.1.127
3 192.168.1.128/26 192.168.1.129 - 192.168.1.190 192.168.1.191
4 192.168.1.192/26 192.168.1.193 - 192.168.1.254 192.168.1.255
  1. 总结
  • 每个子网有 64 个地址(2⁶ = 64)。

  • 可用 IP 地址 = 总地址 - 2(网络地址和广播地址)。

示例 2:计算子网的主机数量

若给定一个子网掩码 /27,计算子网中可用的主机数量。

解法

  1. 网络位:27 位
    主机位:32 - 27 = 5 位

  2. 主机数量 = ( 2^{主机位} - 2 )

  • ( 2^5 = 32 )
  • 减去网络地址和广播地址,可用主机数 = 30。

网络层的协议

ARP 地址解析协议

IP地址解析为MAC地址,从而使得数据包能够在局域网(LAN)中顺利传输。属于数据链路层网络层的交互过程

ARP的工作原理

步骤1:发送ARP请求

当设备A需要向设备B发送数据时:

  1. 设备A检查自己的ARP缓存表,看看目标IP地址是否已经有对应的MAC地址。
  2. 如果ARP缓存表中没有对应的MAC地址,设备A就会在局域网中广播一个ARP请求,内容是:

    “谁拥有IP地址 192.168.1.2?请告诉我你的MAC地址。”

ARP请求包的特点:

  • 源IP地址:设备A的IP地址
  • 源MAC地址:设备A的MAC地址
  • 目标IP地址:设备B的IP地址
  • 目标MAC地址:未知(全为0)

ARP请求通过广播(MAC地址 FF:FF:FF:FF:FF:FF)发送到局域网中的所有设备。


步骤2:接收ARP请求并回复ARP响应

  1. 所有在同一局域网内的设备都会接收到这个ARP请求。
  2. 设备B发现ARP请求中询问的是自己的IP地址(例如 192.168.1.2),于是会发送一个ARP响应
  3. ARP响应包的内容包括:
    • 源IP地址:设备B的IP地址
    • 源MAC地址:设备B的MAC地址
    • 目标IP地址:设备A的IP地址
    • 目标MAC地址:设备A的MAC地址

设备B将ARP响应单播给设备A。


步骤3:更新ARP缓存表

  1. 设备A接收到ARP响应后,将目标IP地址与MAC地址的对应关系存入自己的ARP缓存表中。
  2. 设备A随后就可以使用设备B的MAC地址在数据链路层构建数据帧,并将数据包发送给设备B。

ARP存在的问题

ARP缓存中毒(ARP Spoofing

ARP没有安全验证机制,攻击者可以伪造ARP响应,将自己的MAC地址伪装成某个IP地址的MAC地址。
这样,通信数据就会被错误地发送到攻击者的设备上,从而引发中间人攻击网络窃听

广播开销

ARP请求是通过广播发送的,在大型局域网中频繁发送ARP请求会产生较大的广播流量,影响网络性能。

RARP

反向ARP用于通过MAC地址查询IP地址,通常用于无盘工作站启动时获取IP地址。

ICMP

主要用于网络设备之间发送控制消息、错误报告和诊断信息,以便在IP网络中进行故障排查网络状态监控

pingtraceroute,使用ICMP协议,用于测试网络连通性和路径追踪。

ICMP消息分为两大类:错误消息查询消息

IGMP

主要用于管理主机与组播组之间的关系,让主机向组播路由器报告自己加入离开某个组播组,从而实现组播数据的高效传输,并帮助路由器了解当前网络中有哪些主机需要接收组播数据。

Addition 网络通信方式:单播、组播和广播

特性 单播(Unicast) 组播(Multicast) 广播(Broadcast)
通信范围 一对一 一对多 一对所有
效率 低(多次发送) 高效(只发送一次) 低(所有主机都接收)
地址范围 单播IP地址 组播IP地址(224.0.0.0 - 239.255.255.255) 特定的广播地址
接收者 单个目标 加入组播组的主机 所有主机
应用场景 点对点通信 视频会议、IPTV、直播等 局域网广播

网络层
http://zerohzzzz.github.io/2024/12/16/网络层/
Author
ZeroHzzzz
Posted on
December 16, 2024
Licensed under