【计算机网络】深入理解网络层:IP地址划分、CIDR与路由机制详解

文章目录

  • 前言
  • [1. 网段划分](#1. 网段划分)
    • [1.1 CIDR](#1.1 CIDR)
    • [1.2 公网 IP 和内网 IP](#1.2 公网 IP 和内网 IP)
  • [2. 路由器](#2. 路由器)
    • [2.1 简单认识路由器](#2.1 简单认识路由器)
    • [2.2 路由器的路由过程](#2.2 路由器的路由过程)
      • [2.2.1 路由表](#2.2.1 路由表)
      • [2.2.2 路由功能](#2.2.2 路由功能)
  • 总结

前言

本文主要介绍 TCP/IP 协议栈中的网络层相关的一些知识。

1. 网段划分

  • IP地址的本质

    一个32位(IPv4)或128位(IPv6)的二进制数,用于唯一标识网络中的一个接口 。就像"城市+街道+门牌号",IP地址包含了网络号 (哪个小区)和主机号(哪一栋楼)两部分信息,这样路由器才能高效地进行路由选择。

    IP 地址就是两部分:

    • 网络号:保证互相连接的两个网段具有不同的标识。
    • 主机号:同一网段内,主机之间具有相同的网络号,但是具有不同的主机号。
  • 网段划分

    将一个大的 IP 网络分成一个有一个子网。

  • 历史上的 IPv4 的分类划分:

    在之前的 IPv4 进行网段划分的时候,就采用的是分类划分的方法

    • A类:第一个字节为网络号,后三个为主机号。地址范围:1.0.0.0 - 127.255.255.255。用于超大型网络。

    • B类:前两个字节为网络号,后两个为主机号。地址范围:128.0.0.0 - 191.255.255.255。用于大型网络,如大学、大公司。

    • C类:前三个字节为网络号,最后一个为主机号。地址范围:192.0.0.0 - 223.255.255.255。用于小型网络,如家庭、小公司。

    • D类:组播地址。

    • E类:保留地址。

    其中A类支持主机1600w台,B类支持主机6.5w台,C类支持主机254台(路由器也会占用一个局域网的 IP)。

上面的这样的划分方法就诞生了很严重的问题:

  1. 地址浪费严重:

    例如:一个小型公司只需要50台主机,若分配C类地址,就会浪费200个地址。

  2. 路由条目过多:

    每一个网络需要在路由表中单独记录,大量小网络会导致路由表急剧膨胀,降低路由效率。

1.1 CIDR

  • CIDR

    CIDR(无类别域间路由)使用可变长子网掩码来更灵活地划分网络。

CIDR 通过子网掩码的方式来区别网络号和主机号。

  • 子网掩码:是一个32位的整型,通常是用 0 结尾。将子网掩码和 IP 地址进行按位与操作得到的结果就是网络号。

    例如:

    这两个例子很好地说明了子网掩码的用法。

    通常一个 IP 的表示方法:IP/N。其中 N 代表32位中前 N 位代表网络号。

注意:CIDR 技术还可以在原始的基础上再进行子网划分

例如:

让我们以 192.168.1.0/24 为例,看看它如何被划分:

父网络: 192.168.1.0/24。其IP范围: 192.168.1.0 - 192.168.1.255

网络地址(起始): 192.168.1.0

广播地址(结束): 192.168.1.255

子网划分:

1、划分为两个 /25 子网:

子网 A: 192.168.1.0/25 (范围:192.168.1.0 - 192.168.1.127)

子网 B: 192.168.1.128/25 (范围:192.168.1.128 - 192.168.1.255)

2、划分为四个 /26 子网:

子网 1: 192.168.1.0/26 (范围:0 - 63)

子网 2: 192.168.1.64/26 (范围:64 - 127)

子网 3: 192.168.1.128/26 (范围:128 - 191)

子网 4: 192.168.1.192/26 (范围:192 - 255)

3、划分为八个 /27 子网:

它们将是:192.168.1.0/27, .32/27, .64/27, .96/27, .128/27, .160/27, .192/27, .224/27

1.2 公网 IP 和内网 IP

在全世界中使用的 IPv4 中的 IP 只有 2 32 2^{32} 232,大约就是42亿。所以从总体(全球)来看每一个国家分配的 IP 也是有限的。我们从上向下进行分配:

  1. 在国家上分配: 1.0.0.0/8 是中国能使用的范围,2.0.0.0/8 是某国能使用的范围。前8位代表网络号,剩下的就能代表一共 127 个国家。
  2. 在省份上分配:1.4.0.0/14 是陕西省的,1.5.0.0/14 是云南省。前14位能代表网络号,除开原来8位上层网络号,剩下的6位就能代表 63 个省份的IP地址。
  3. ......

我们逐级往下分配,会发生一个明显的问题:IP地址还是完全不够用的

于是在这样的场景下,我们又将IP地址划分称为两部分:

  1. 公网 IP。公网 IP 地址是在互联网上全球唯一、可路由的地址。它就像是你在整个互联网世界中的"身份证"。

  2. 内网 IP 。内网IP地址是为了在私有网络(如家庭、公司、学校内部网络)内部使用 而保留的地址,不能在互联网上被路由

    地址范围固定,IPv4协议中专门为内网保留了三段地址:

    A类:10.0.0.0 --- 10.255.255.255。即:10.0.0.0/8

    B类:172.16.0.0 --- 172.31.255.255。即:172.16.0.0/12

    C类:192.168.0.0 --- 192.168.255.255 。即:192.168.0.0/16

    这些 IP 地址仅允许在局域网中使用,想要上网必须通过 NAT 技术进行网络地址转换。

2. 路由器

我们来简单认识一下路由器

2.1 简单认识路由器

一般路由器可以配置多个IP,一般配置两个IP:

  1. WAN 口 IP:这是一个广域网 IP,是路由器的对外 IP。
  2. LAN 口 IP:这是一个局域网 IP,是路由器对内管理的 IP。

注意:广域网和局域网是一个相对的概念,不同于公网和内网那样强烈的区分。

  • 如下图:

LAN 口对内的管理:

  1. 路由器的路由管理

    每个路由器在它的局域网内部 ,都有一个"领导 "身份,这个身份就是它的 LAN 口 IP 地址。这个地址通常是预设好的,最常见的是:192.168.1.1/24、192.168.0.1/24、192.168.50.1/24......

    这个地址就是我们进入路由器管理后台的"门牌号"。所有连接到这个路由器的设备(手机、电脑、智能电视等)都知道,要找"领导"。

    所以:要访问外部网络,就把数据包发给这个地址

  2. 路由器的 IP 分配管理

    子网设备分配内网IP(DHCP服务)

    路由器内置了一个叫 DHCP(动态主机配置协议) 的服务。

    我们可以把它理解为公司的"行政前台",负责给新来的员工分配工位和内部联系方式。

    当一个新的设备进入该路由器管理的局域网的时候,路由器会 DHCP 服务检测到有新的设备进入局域网之后,就会从预设的 IP 地址池就选取一个空闲的地址。然后将这个地址交付给该设备,同时告诉该设备子网掩码路由器的LAN口地址......信息。

WAN 口对外联络:

路由器的 WAN 口 IP 可以是一个内网 IP 也可以是一个 公网IP 。在上面的图片中我们可以给出了详细的案例了,我们自己设备连接的路由器也可能是更大的局域网中的一个普通的设备。这样多级子网的最外层的 WAN 口 IP 一定就是一个公网 IP。

  • 所以,每一个子网需要通过路由器的 WAN 口向外访问的时候都会一种技术:NAT。

    关于 NAT 的介绍小编已经整理的一文了:NAT

2.2 路由器的路由过程

2.2.1 路由表

路由器能够支持路由功能,那么就说明路由器是识别路径的

  • 路由去识别路径基于路由器内置的路由表

    路由表相当于路由器中的一个"地图"。这张表记录对应的 IP 地址的网络号和下一次转发的准确 IP 地址(可能是另一个路由器)。

2.2.2 路由功能

路由过程如下:

  1. 接收与校验:从接口(网卡)接收数据包,检查 IP 头部校验和,无误后递减 TTL 值(生存时间)。如果TTL减为0,则丢弃该包并发送给发送方 ICMP 超时消息。

  2. 目的IP查询:提取数据包的 IP 报头的目的IP地址。

  3. 路由表查找 :拿着这个目的 IP 地址,在路由表中寻找最长前缀匹配的路径

    为什么是最长匹配? 因为最具体的路线最准确。

    例子:假设数据包的目的IP是192.168.1.55。路由表中有两条记录:

    192.168.1.0/24 (掩码 255.255.255.0) -> 出口 Gig0/0

    0.0.0.0/0 (掩码 0.0.0.0) -> 出口 Gig0/1 (默认路由)

    路由器会选择第一条,因为192.168.1.55与192.168.1.0/24匹配了前24位,比匹配0位的默认路由更"长"、更精确。

  4. 决定下一跳和出口:根据匹配的路由表条目,确定数据包应该从哪个出口接口发送出去,以及下一跳路由器的 IP 地址是多少(如果有的话)。

    什么时候才会到达目标主机?当目的 IP 地址的网络号和当前网络号相同的时候,说明目的 IP 地址就在当前局域网中,那么最后在当前局域网内进行数据传输就能到达目标主机了!

  5. 数据包转发:将数据包封装成适合出口接口所在网络的数据链路层帧(例如以太网帧),并从该接口发送出去。

否 是 否 是 接收数据包 校验IP头部校验和 TTL值减1 TTL > 0? 丢弃数据包
发送ICMP超时消息 提取目的IP地址 路由表查找
最长前缀匹配 找到匹配路由? 丢弃数据包
发送ICMP目的不可达 确定下一跳IP与出口接口 数据链路层
我们这里只谈网络层

总结

  • 网段划分:CIDR。解决了什么问题?原始的分类划分存在什么问题?

  • IP 分类:公有IP 和 内网 IP。这解决了什么问题?如果内网 IP 想要访问网络资源会发生什么?

  • 认识路由器:路由表、路由表实现路由的流程。

相关推荐
快乐的钢镚子6 小时前
思腾合力云服务器远程连接
运维·服务器·python
王道长服务器 | 亚马逊云6 小时前
AWS + SEO:让网站从服务器层面赢在搜索引擎起跑线
服务器·搜索引擎·aws
敲上瘾6 小时前
Linux系统C++开发工具(四)—— jsoncpp 使用指南
linux·服务器·网络·c++·json
小虚竹6 小时前
使用仓颉语言实现 nanoid:一个安全的唯一 ID 生成器
运维·服务器·安全·鸿蒙
chalmers_158 小时前
服务器启动的时候就一个对外的端口,如何同时连接多个客户端?
运维·服务器·网络
@木辛梓8 小时前
linux 信号
linux·运维·服务器
初学者52138 小时前
服务器映射外网端口22连接不上,局域网能通
运维·服务器·ubuntu
一周困⁸天.9 小时前
Keepalived双机热备
linux·运维·keepalived
漏刻有时9 小时前
宝塔面板:基于 top 命令的服务器运行状态深度分析
运维·服务器