[网络层]-IP协议相关特性

devtools/2024/11/13 15:38:51/

IP协议

基本概念

  • 主机 : 配有IP地址,但是不进行路由控制的设备
  • 路由器 : 既配有IP地址,又能进行路由控制
  • 节点: 主机和路由器的统称

协议头格式

  1. 4位版本(version):占四位,用于指定IP协议的版本,例如,使用IPv4,该字段就为4
  2. 4位首部长度: 表示IP协议首部的长度,以32位bit (4字节) 为单位,最大长度为 60 字节
  3. 8位服务类型: 用于指示对数据包的服务质量要求,包括优先级、延迟、吞吐量、可靠性等信息。前 3 位表示优先级(Precedence),用于指示数据包的重要性级别,取值范围从 0(普通优先级)到 7(网络控制优先级)。接下来的 4 位分别对应延迟(D)、吞吐量(T)、可靠性(R)和成本(C),四者互相冲突,只能选择一个。最后 1 位未使用。
  4. 16位总长度: IP数据报整体占多少字节
  5. 16位标识: 用于标识属于同一个数据报的各个分片,同一个数据报的所有分片具有相同的标识值。
  6. 3位标志: 第一位保留,DF(Don't Fragment)位表示是否允许分片,MF(More Fragments)位表示是否还有后续分片
  7. 13位片偏移: 指出该分片在原始数据报中的相对位置,单位为 8 字节
  8. 8位生存时间: 数据包在网络中可以经过的最大跳数,每经过一个路由器 TTL 值减 1,当 TTL 值为 0 时数据包被丢弃。
  9. 8位协议: 指出此数据包携带的数据使用的是哪种上层协议,如 TCP 对应的值为 6,UDP 对应的值为 17 等。
  10. 16位首部校验和: 用于校验 IP 首部的完整性,在每个路由器上都会重新计算
  11. 32位源 IP 地址: 表示发送方的 IP 地址
  12. 32位目的 IP 地址: 表示接收方的 IP 地址
  13. 选项: 长度可变。用于提供一些额外的功能,如源路由选择、时间戳等,但不是所有数据包都包含选项。

地址管理

网段划分

IP地址分为两个部分: 网络号和主机号

网络号: 网络号用于标识一个特定的网络。在网络通信中,当数据包在不同网络之间传输时,路由器根据 IP 地址中的网络号来决定数据包的转发路径。

主机号: 主机号用于标识网络中的特定主机。在同一个网络中,每台主机都有一个唯一的主机号

不同的子网就是把网络号相同的主机放在一起, 如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致,但是主机号不能和其他主机的主机号重复,通过合理的设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的IP地址都不相同

手动配置子网IP是非常复杂的一件事情.

DHCP:

DHCP 是一个应用层协议,用于在 IP 网络中自动为网络设备分配 IP 地址、子网掩码、默认网关、DNS 服务器等网络配置参数. 一般的路由器都带有DHCP功能, 因此路由器也可以看做一个DHCP服务器.

IPv4 地址主要分为以下几种类别:

A 类地址

  • 地址范围:0.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 类地址

  • 地址范围:224.0.0.0 - 239.255.255.255。

E 类地址

  • 地址范围:240.0.0.0 - 255.255.255.255。

这种按类别划分网络地址的方式具有局限性,导致许多IP地址被浪费掉

针对这种情况,提出了新的划分方案,称为CIDR(Classless Inter-Domain Routing)

  • CIDR 是一种用于给 IP 地址进行分类和分配的方法,它摒弃了传统的 A、B、C 类 IP 地址的分类方式,采用可变长子网掩码(VLSM)来灵活地划分网络,提高IP地址利用率。
  • 子网掩码是一个32位的正整数,使用 IP 地址和网络前缀长度来表示一个网络,格式为 “IP 地址 / 网络前缀长度”。例如,192.168.1.0/24,表示网络前缀长度为 24 位,即前 24 位是网络号,后 8 位是主机号。
  • 将IP地址与子网掩码进行 "按位与" 操作,得到的结果就是网络
  • CIDR 允许将多个连续的网络聚合为一个路由条目,大大简化了路由表,提高了路由器的处理效率。

特殊的IP地址

  • 网络地址: 在一个网段中,主机号全为 0 的 IP 地址表示网络本身,称为网络地址。
  • 广播地址: 主机号全为 1 的 IP 地址用于在特定网络中向所有主机发送广播消息,称为广播地址
  • 回环地址: IPv4 的回环地址是 127.0.0.1,它用于本地设备上的软件测试和进程间通信。当数据发送到回环地址时,不会离开设备,而是直接由网络协议>网络协议栈内部进行处理,返回给自己
  • 0.0.0.0 地址
    • 在不同的场景下有不同的含义。在服务器配置中,0.0.0.0 可以表示服务器监听所有的网络接口,即接受来自任何 IP 地址的连接请求。
    • 在路由表中,0.0.0.0/0 表示默认路由,当一个数据包的目的地址在路由表中没有找到匹配的具体路由条目时,就会按照默认路由进行转发。

IP地址数量限制

IPv4是一个四字节32位的正整数,一共只有2的三十二次方,大概四十三亿,由于互联网快速发展,并且TCP/IP协议规定,每个主机都有一个IP地址,四十三亿这个数字在当今来说已经是不够的了,那么如何解决这个问题呢?

1. 高效利用现有地址资源的技术

  • CIDR(无类域间路由)
    • 原理:打破传统 A、B、C 类 IP 地址的固定划分方式,采用可变长子网掩码(VLSM),根据实际需求灵活分配网络前缀长度,将多个连续的网络合并或划分子网,提高 IP 地址利用率,减少地址浪费。
    • 举例:原本多个 C 类网络地址范围较小,通过 CIDR 可以将它们聚合为一个较大的网络,使路由表中的条目减少,降低了路由器的处理负担,同时也更合理地利用了 IP 地址空间。
  • 动态分配 IP 地址(DHCP)
    • 原理:当设备接入网络时,从可用的 IP 地址池中动态分配一个 IP 地址给该设备,设备使用完毕下线后,该 IP 地址被释放回地址池,可供其他设备使用。这样可以避免为那些不常在线或暂时不需要 IP 地址的设备长期占用 IP 地址资源。
    • 举例:在企业网络中,员工的办公电脑在上班时间开机接入网络时,DHCP 服务器为其分配 IP 地址,下班后关机,IP 地址被回收,第二天上班重新分配,提高了 IP 地址的复用率。

2. 网络地址转换(NAT)

  • 原理:在局域网内部使用私有 IP 地址,当内部设备需要访问外部网络时,通过 NAT 设备将私有 IP 地址转换为公有 IP 地址,多个内部设备可以共用一个或少数几个公有 IP 地址与外部通信,从而减少对公网 IP 地址的需求。
  • 类型
    • 静态 NAT:将内部本地地址和外部全局地址进行一对一的固定映射,常用于需要对外提供固定服务的服务器。例如,企业内部的 Web 服务器,使用静态 NAT 将其私有 IP 地址转换为公有 IP 地址,供外部用户访问。
    • 动态 NAT:建立一个公有 IP 地址池,当内部设备需要访问外部网络时,从地址池中动态选择一个公有 IP 地址进行转换。当设备通信结束后,释放该公有 IP 地址,供其他设备使用。
    • 端口地址转换(PAT):是最常用的一种 NAT 方式,它不仅可以转换 IP 地址,还可以转换传输层的端口号。通过将多个内部设备的 IP 地址和端口号映射到一个公有 IP 地址的不同端口上,实现多个内部设备同时使用一个公有 IP 地址与外部通信。

3. 升级到 IPv6

  • 优势
    • 地址空间巨大:IPv6 采用 128 位地址,理论上可提供的地址数量为 2的128次方 个,能够满足未来很长一段时间内全球互联网设备连接的需求,彻底解决 IPv4 地址不足的问题。
    • 简化网络配置:IPv6 支持自动配置功能,设备可以自动获取 IP 地址和网络参数,减少了网络管理员的配置工作量,提高了网络部署的效率。
    • 增强的安全性和性能:IPv6 在协议设计上提供了更好的安全性,如内置的 IPsec 支持,为网络通信提供了加密和认证功能;同时,其包头结构更加优化,提高了网络传输效率。

私有IP地址和公网IP地址

私有IP地址:私有 IP 地址是在特定的私有网络内部使用的 IP 地址。这些地址不会在互联网上被直接路由,它们被保留用于在企业、家庭、学校等内部网络中分配给设备。

  • 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 地址是由互联网服务提供商(ISP)分配给用户或组织的全球唯一的 IP 地址,这些地址可以在互联网上被直接路由和访问。

路由选择

  1. 静态路由
    • 配置方式:由网络管理员手动配置路由表信息。例如,管理员在路由器上输入命令 “ip route 192.168.2.0 255.255.255.0 192.168.1.1”,表示到达 192.168.2.0/24 网络的数据包下一跳地址是 192.168.1.1。
    • 优缺点:静态路由配置简单、稳定,适用于小型网络网络拓扑结构相对固定的环境。但在大型网络中,手动配置工作量大,且缺乏灵活性,当网络拓扑发生变化时,需要管理员手动修改路由表。
  2. 动态路由
    • 工作原理:动态路由协议允许路由器之间相互交换路由信息,自动构建和更新路由表。常见的动态路由协议有 RIP(Routing Information Protocol)、OSPF(Open Shortest Path First)和 BGP(Border Gateway Protocol)等。
    • 举例:在一个使用 RIP 协议的网络中,路由器会定期向相邻路由器广播自己的路由表信息,相邻路由器收到信息后,根据一定的算法(如距离向量算法)更新自己的路由表。如果网络中的某条链路出现故障,相关路由器会自动调整路由表,将数据包重新路由到其他可用路径。

路由选择算法

  1. 距离向量算法
    • 工作机制:每个路由器维护一个到其他网络的距离向量表,表中记录了到达每个目的网络的距离(通常以跳数为度量)和下一跳路由器。路由器根据相邻路由器发送过来的距离向量信息来更新自己的距离向量表。
    • 示例:在一个简单的网络中,路由器 A 收到路由器 B 发送的信息,得知通过路由器 B 可以到达网络 X,距离为 3 跳。如果路由器 A 到路由器 B 的距离为 1 跳,那么路由器 A 就会更新自己的距离向量表,记录到达网络 X 的距离为 4 跳,下一跳为路由器 B。
  2. 链路状态算法
    • 工作机制:每个路由器通过与其他路由器交换链路状态信息,构建整个网络的拓扑图。然后,根据这个拓扑图使用最短路径算法(如 Dijkstra 算法)计算出到其他节点的最短路径,生成路由表。
    • 示例:在一个网络中,路由器通过发送链路状态通告(LSA)来告知其他路由器自己与相邻路由器之间的链路状态(如链路是否可用、链路的开销等)。每个路由器收集到所有的 LSA 后,构建出网络的拓扑结构,再计算出到各个目的节点的最短路径,从而确定路由表。

http://www.ppmy.cn/devtools/114962.html

相关文章

Mysql存储过程详细解读

目录 存储过程介绍 创建与调用 查看与删除 变量 系统变量 用户自定义变量 ​编辑局部变量 ​编辑​编辑IF判断 存储过程参数​编辑​编辑​编辑 CASE ​编辑 WHILE​编辑 ​编辑REPEAT​编辑​编辑 LOOP 游标 条件处理程序 存储函数 存储过程介绍 创建与调用 查…

Rust GUI框架 tauri V2 项目创建

文章目录 Tauri 2.0创建应用文档移动应用开发 Android 前置要求移动应用开发 iOS 前置要求参考资料 Tauri 2.0 Tauri 是一个构建适用于所有主流桌面和移动平台的轻快二进制文件的框架。开发者们可以集成任何用于创建用户界面的可以被编译成 HTML、JavaScript 和 CSS 的前端框架…

【C++掌中宝】深入解析C++命名空间:有效管理代码的利器

文章目录 前言1. namespace 的价值2. namespace 的定义3. 命名空间的本质4. 嵌套的命名空间5. 命名空间的使用6. using 指令7. 补充结语 前言 假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外&am…

linux 基础知识 什么是僵尸进程?有什么影响?如何解决?

linux 系统僵尸进程 在Linux系统中,僵尸进程(Zombie Process)是一种特殊的进程状态,它指的是一个已经完成执行的进程,其父进程尚未通过wait()或waitpid()系统调用来回收其资源和状态信息。 僵尸进程本身并不占用CPU和…

Java Spring Validation:自动与手动校验

在现代的Java应用开发中,数据验证是一个不可或缺的部分。它确保了数据的一致性和正确性,从而减少了程序运行时错误的可能性。Spring框架提供了一个强大的工具集来帮助开发者实现这一目标,其中Spring Validation是处理输入数据校验的一个重要组…

Unity教程(十六)敌人攻击状态的实现

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程(零)Unity和VS的使用相关内容 Unity教程(一)开始学习状态机 Unity教程(二)角色移动的实现 Unity教程(三)角色跳跃的实现 Unity教程&…

PyTorch使用------自动微分模块

目录 🍔 梯度基本计算 1.1 单标量梯度的计算 1.2 单向量梯度的计算 1.3 多标量梯度计算 1.4 多向量梯度计算 1.5 运行结果💯 🍔 控制梯度计算 2.1 控制不计算梯度 2.2 注意: 累计梯度 2.3 梯度下降优化最优解 2.4 运行结果&#x1…

Spring MVC 基础 : 文件、cookies的接收 ,REST响应

一、接受文件 在 Spring MVC 中,可以使用 RequestPart 注解来接收文件。这个注解常用于处理复杂的请求,如同时发送 JSON 数据和文件。RequestPart 非常适用于多部分请求(multipart requests),这在单个请求中同时发送文…