【探索Linux】P.43(网络层 —— IP协议)

news2024/12/24 2:56:22

在这里插入图片描述

阅读导航

  • 引言
  • 一、IP协议基本概念
  • 二、IP协议头格式
  • 三、网段划分
    • 1. 网络号和主机号
    • 2. 引入子网掩码
      • (1)基本概念
      • (2)默认子网掩码
      • (3)子网掩码的作用
      • (4)子网掩码与IP地址的结合
      • (5)网络地址和广播地址
        • ⭕网络地址
        • ⭕广播地址
  • 四、私有IP地址和公网IP地址
    • 1. 私有IP地址
    • 2. 公网IP地址
    • 3. 私有IP地址与公网IP地址的区别
  • 五、路由
    • 1. 引出路由
    • 2. 路由的基本概念
    • 3. 路由表
    • 4. 路由循环
  • 温馨提示

引言

在上一篇文章中,我们深入探讨了传输层的两种主要协议——UDP(用户数据报协议)和TCP(传输控制协议),它们在网络通信中扮演着至关重要的角色。UDP以其低延迟和简单性而著称,适用于需要快速传输但可能容忍一定数据丢失的应用。而TCP则以其可靠性和有序性著称,适用于需要确保数据完整性和顺序的应用。

现在,让我们将视角转向网络层,进一步探索IP协议——互联网协议。IP协议是网络通信的基石,负责在复杂的网络环境中实现主机之间的数据传输。在本文中,我们将详细讨论IP协议的工作原理、它在现代网络中的重要性以及它与其他网络层协议的相互作用。通过深入了解IP协议,我们将能够更好地理解整个网络通信的架构和运作方式。让我们开始这段探索之旅吧。

一、IP协议基本概念

互联网协议(IP)是网络层的核心协议,负责在全球范围内的计算机网络设备间传输数据。它使用IP地址来唯一标识网络中的每个设备,并通过数据包的形式进行数据传输。IP是一个无状态和不保证可靠性的协议,它允许数据包独立地在网络中传输,不维护传输状态,也不保证数据包的顺序、完整性或到达。IP协议支持路由,通过路由器根据目的IP地址和路由表来转发数据包。此外,IP协议还支持广播、多播和分段重组功能,以适应不同网络环境和传输需求。当前广泛使用的是IPv4版本,而IPv6版本由于其更大的地址空间和增强的安全性正在逐步被采用。IP数据包的头部包含了控制信息,如版本、头部长度、服务类型、总长度等,这些信息对于数据包的正确传输至关重要。
在这里插入图片描述

名词解释

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

二、IP协议头格式

在这里插入图片描述

  1. 版本(4位):标识IP数据包使用的IP协议版本。对于IPv4,这个字段的值为4。

  2. 首部长度(4位):表示IP报头的长度(单位为32位字,即4字节)。由于报头长度可以是32位的倍数,这个值乘以4给出了报头的字节长度。

  3. 服务类型(8位):用于指定数据包的优先级和服务质量要求,如最小延迟、最大吞吐量等。

  4. 总长度(16位):表示整个IP数据包的长度,包括IP报头和数据负载,单位为字节。

  5. 标识(16位):用于唯一标识一个IP数据包,以便在数据包被分割后能够重新组装。

  6. 标志(3位):控制数据包的分割行为。包括:

    • 0位:保留,未使用。
    • 1位:DF(Don’t Fragment),指示数据包不允许被进一步分割。
    • 2位:MF(More Fragments),如果为1,表示还有更多的片段。
  7. 分片偏移(13位):表示当前片段在原始数据包中的位置,单位为8字节。

  8. 生存时间(8位):每经过一个路由器,TTL减1,当TTL为0时,数据包被丢弃,以防止无限循环。

  9. 协议(8位):指定了IP数据包中封装的上层协议类型,如TCP、UDP、ICMP等。

  10. 头部校验和(16位):用于检测IP报头在传输过程中是否出现错误。

  11. 源IP地址(32位):发送数据包的设备的IP地址。

  12. 目的IP地址(32位):接收数据包的设备的IP地址。

  13. 选项(可变长度):可选字段,用于包含额外的指令或信息,如安全参数索引(SPI)、松散源路由等。选项字段的存在会影响IHL字段的值。

  14. IP数据(可变长度):如果选项字段存在,填充字段确保整个IP报头的长度是32位字的整数倍。

三、网段划分

1. 网络号和主机号

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

  1. 网络号(Network Part)

    • 网络号是IP地址中用于标识特定网络的部分。它确保了在相互连接的网络中,每个网络都有一个唯一的标识。网络号的位数取决于子网掩码中网络部分的位数。网络号是IP地址中固定的部分,它决定了数据包应该被发送到哪个网络。
  2. 主机号(Host Part)

    • 主机号是IP地址中用于标识特定网络内设备的那部分。在同一网络段内,所有主机的网络号是相同的,但是每个主机必须有一个唯一的主机号。这样,数据包在到达正确的网络之后,可以根据主机号被正确地交付给目标设备。

过去曾经提出一种划分网络号和主机号的方案, 把所有IP 地址分为五类, 最初在1981年的RFC 791中定义,其设计初衷基于几个关键原因:首先,它为早期规模较小的互联网提供了一个简单的框架来分配和管理IP地址;其次,考虑到不同网络规模对地址数量的不同需求,分别用A、B、C类地址来满足大型、中型和小型网络的需求;第三,这种分类方法增加了地址分配的可预测性,简化了网络管理员的工作;此外,它还考虑了早期路由器和网络设备在处理IP地址时存在的技术限制;最后,通过为不同规模的网络分配不同长度的网络号,它优化了路由表的大小和网络的路由效率

在这里插入图片描述

🚨🚨然而,这种分配方式存在一些问题

  • 地址浪费:每个网络类别都有一个固定的网络号长度,导致很多地址空间未被使用,尤其是在C类地址中。
  • 灵活性不足:随着互联网的快速发展,固定长度的网络号无法满足多样化的网络规模需求。
  • 地址耗尽随着互联网的迅速扩张,有限的IPv4地址空间开始不足以满足需求

因此,CIDR(无类别域间路由)被引入以解决这些问题。CIDR通过使用可变长度的子网掩码,允许更精确地分配IP地址空间,减少地址浪费,并提供更大的灵活性来适应不同规模的网络需求。CIDR的引入也促进了更有效的路由聚合,减少了全球路由表的大小。

2. 引入子网掩码

(1)基本概念

子网掩码是一个32位的二进制数字,用来将IP地址分为网络地址和主机地址两个部分。网络地址用于标识特定的网络,而主机地址用于标识网络中的特定设备。

子网掩码通常以二进制形式表示,其中网络部分由连续的1组成,主机部分由连续的0组成。例如,子网掩码255.255.255.0在二进制中表示为11111111.11111111.11111111.00000000。

子网掩码也常以点分十进制形式表示,即将每个8位二进制转换为对应的十进制数。例如,11111111(网络部分)转换为255,00000000(主机部分)转换为0。

(2)默认子网掩码

  • A类网络的默认子网掩码是255.0.0.0,意味着前8位是网络部分,其余24位是主机部分。
  • B类网络的默认子网掩码是255.255.0.0,意味着前16位是网络部分,其余16位是主机部分。
  • C类网络的默认子网掩码是255.255.255.0,意味着前24位是网络部分,其余8位是主机部分。

(3)子网掩码的作用

  • 路由决策:子网掩码用于确定数据包是否在同一网络内,以便路由器可以做出正确的路由决策。
  • 广播控制:子网掩码帮助确定广播域的范围,确保广播消息只在同一网络内传播。

(4)子网掩码与IP地址的结合

使用子网掩码和IP地址进行逻辑AND运算&运算),可以确定数据包的目的地是否在同一网络内。如果结果与子网的网络地址匹配,则数据包在局域网内转发;如果不匹配,则发送到路由器。

下表是划分子网的例子

属性子网1子网2子网3
IP地址192.168.1.0192.168.1.64192.168.1.128
子网掩码255.255.255.192255.255.255.192255.255.255.192
网络号192.168.1.0/26192.168.1.64/26192.168.1.128/26
子网地址范围192.168.1.1 - 192.168.1.62192.168.1.65 - 192.168.1.126192.168.1.129 - 192.168.1.190
广播地址192.168.1.63192.168.1.127192.168.1.191

🚨说明:

  • 网络号:网络号是子网掩码中所有位都设置为1的部分对应的IP地址范围。在这个例子中,由于子网掩码是255.255.255.192,网络号就是从192.168.1.0开始的一系列地址,后面跟一个斜杠和网络前缀长度(/26),表示网络部分是前26位

  • 子网地址范围:每个子网的可用IP地址范围,不包括网络地址(每个子网的第一个地址)和广播地址(每个子网的最后一个地址)

  • 广播地址:每个子网的广播地址,用于发送到该子网内所有主机的广播消息。

(5)网络地址和广播地址

⭕网络地址

网络地址每个子网的第一个IP地址,用于标识特定的网络或子网。它确保了不同子网之间的区分,是数据包在网络中路由的基础。网络地址通常不分配给任何具体的网络设备,而是作为一个标识存在。例如,在一个子网掩码为255.255.255.0的C类网络中,如果网络地址是192.168.1.0,那么这个地址就标识了192.168.1.0/24这个网络。

⭕广播地址

广播地址每个子网的最后一个IP地址,用于发送数据包到该子网内的所有主机。当数据包发送到广播地址时,子网内的所有主机都会接收到这个数据包,无论它们的具体IP地址是什么。广播地址用于实现子网内的广播通信,如发送ARP请求、网络配置或特定服务的发现。继续上述C类网络的例子,如果子网掩码是255.255.255.0,网络地址是192.168.1.0,那么这个子网的广播地址将是192.168.1.255。

四、私有IP地址和公网IP地址

1. 私有IP地址

私有IP地址是在局域网(LAN)内部使用的IP地址,它们不会在互联网上路由。这些地址由IANA(互联网号码分配机构)保留,专门用于内部网络使用。

  • 地址范围
类别私有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地址在不同网络中可能会重复,因此它们不能直接在互联网上通信
    • 通常用于局域网内的设备,如计算机、打印机、路由器等。
  • 转换为了访问互联网,私有IP地址需要通过NAT(网络地址转换)技术转换为公网IP地址

2. 公网IP地址

公网IP地址是在整个互联网上唯一的地址,它们可以用于互联网上的任何设备,使得设备能够直接与其他设备进行通信。

  • 分配:公网IP地址由ICANN(互联网公司注册机构)授权的地区性互联网注册机构(RIRs)进行分配和管理。

  • 用途:公网IP地址用于互联网上的服务器、网站、移动设备等,它们需要与外界进行通信的设备。

  • 特点

    • 每个公网IP地址都是唯一的,可以在全球范围内进行路由和通信。
    • 由于IPv4地址的有限性,公网IP地址可能需要通过ISP(互联网服务提供商)租赁或购买。
  • 服务:公网IP地址使得设备能够提供网络服务,如Web服务器、邮件服务器等。

在这里插入图片描述

3. 私有IP地址与公网IP地址的区别

特点/类型公网IP地址私有IP地址
唯一性全球范围内唯一只在局域网内部唯一
路由可以在互联网上直接路由不能在互联网上路由
用途用于全球通信用于局域网内部通信
管理由全球机构管理由网络管理员自行分配

五、路由

1. 引出路由

当主机A需要向主机B发送数据时,它将依赖路由机制来确保数据能够顺利地一步步到达目的地。这个过程可以类比于问路,其中IP数据包的传输遵循以下步骤:

在这里插入图片描述

  1. 起点:主机A生成一个IP数据包,准备发送给主机B。

  2. 目的IP检查:当IP数据包到达一个路由器时,路由器首先会检查数据包的目的IP地址。

  3. 路由决策:路由器根据目的IP地址和自己的路由表来决定如何处理这个数据包。它会判断数据包是否应该:

    • 直接发送到目标主机,如果路由器和目标主机位于同一网络段
    • 或者转发到下一个路由器,如果目标网络不在本地
  4. 转发过程:如果数据包需要转发,路由器会将其发送到路由表指定的下一跳地址

  5. 重复路由:这个过程在每个经过的路由器上重复进行,每个路由器都使用自己的路由表来决定数据包的下一跳。

  6. 最终到达:数据包经过一系列路由器的转发,最终到达目标网络,并由目标网络的路由器或主机B接收。

  7. 路由成功:一旦数据包到达主机B,路由过程完成,主机B可以开始处理接收到的数据。

这个过程确保了即使在复杂的网络结构中,数据也能够找到正确的路径,从源头主机A传输到目的地主机B。路由器在这个过程中起着至关重要的作用,它们是数据传输路径上的导航者

2. 路由的基本概念

路由是决定数据包在网络中传输路径的过程。在计算机网络中,路由发生在网络层,确保数据包能够从发送者到达接收者。

路由器是网络中的一种设备,它连接不同的网络段,并根据数据包的目的IP地址来转发数据包。路由器使用路由表来决定每个数据包的下一跳地址。

3. 路由表

路由表是路由器中存储的一组规则,用于指导数据包的转发。路由表包含目的网络、网关或下一跳地址、子网掩码、接口等信息。

4. 路由循环

路由循环发生在路由表配置错误时,导致数据包在路由器之间无限循环。现代路由协议通常有机制来防止路由循环。

温馨提示

感谢您对博主文章的关注与支持!如果您喜欢这篇文章,可以点赞、评论和分享给您的同学,这将对我提供巨大的鼓励和支持。另外,我计划在未来的更新中持续探讨与本文相关的内容。我会为您带来更多关于Linux以及C++编程技术问题的深入解析、应用案例和趣味玩法等。如果感兴趣的话可以关注博主的更新,不要错过任何精彩内容!

再次感谢您的支持和关注。我们期待与您建立更紧密的互动,共同探索Linux、C++、算法和编程的奥秘。祝您生活愉快,排便顺畅!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1963167.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

探索Python代码质量的守护神:Flake8

文章目录 探索Python代码质量的守护神:Flake8背景:为何选择Flake8?简介:Flake8是什么?安装:如何获取Flake8?使用方法:Flake8的基本命令场景应用:Flake8在实际开发中的作用…

SOMEIPSRV_RPC_13: 不同服务可以共享相同的端口

测试目的: 验证不同的服务是否能够共享同一个传输层协议的端口号。 描述 本测试用例旨在验证在同一个电子控制单元(ECU)上,不同服务的多个服务实例是否能够监听不同的端口,同时确保不同的服务能够共享同一个端口号。 测试拓扑&#xff1a…

接口测试:使用 curl 发送请求

简介 cURL 是一个通过 URL 传输数据的,功能强大的命令行工具。cURL 可以与 Chrome Devtool 工具配合使用,把浏览器发送的真实请求还原出来,附带认证信息,脱离浏览器执行,方便开发者重放请求、修改参数调试,…

SAP HCM 薪酬过账-忽略成本分配的含义

导读 INTRODUCTION 忽略成本分配:昨天分析C0表与C1表的作用,是为今天说的忽略成本分配按钮的铺垫,忽略成本分配这个翻译有点难让人理解,从字母意思感觉就是所有成本类的不拆分处相关的行项目,但是实际不是这样&#xf…

大数据-56 Kafka SpringBoot与Kafka 基础简单配置和使用

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

ALB快速实现IPv4服务的负载均衡

阿里云应用型负载均衡ALB支持HTTP、HTTPS和QUIC协议,专门面向网络应用层,提供强大的业务处理能力。 为了实现IPv4服务的负载均衡,需要快速创建一个ALB实例,并将来自客户端的访问请求转发至后端服务器。 操作流程 第一步&#x…

多语言 AI 翻译 API 数据接口

AI / 翻译 基于 AI 多语言模型 支持多语言 / 基于模型。 1. 产品功能 基于自有专业模型进行 AI 多语言翻译高效的文本翻译性能全接口支持 HTTPS(TLS v1.0 / v1.1 / v1.2 / v1.3);全面兼容 Apple ATS;全国多节点 CDN 部署&#xf…

ITSS服务经理/ITSS服务工程师,招投标需要准备吗?

信息技术服务标准(ITSS)是中国首套完整的信息技术服务标准体系,全面规定了IT服务产品及其组成要素的标准化实施,旨在提供可信赖的IT服务。 在国际竞争日益激烈的背景下,推动国内标准的国际化已成为广泛共识&#xff0…

excel如何绘制多列数据的折线图

1.注意表中的数据必须是数据类型的,不能是字符串格式的。如果是用python生成的,需要填充int或者float型的数据。 2.选择数据(多列数据的选择,可以按住ctrl键后选中多列) 2. 选择插入 3.选择 推荐的图表->所有图表…

JumpingKnowledge

文章目录 JumpingKnowledge思想: 举例 贯彻费曼学习法,用最简单的语句阐述复杂的理论 PYG JumpingKnowledge JumpingKnowledge GNN里也有JK了吗 思想: 非常简单。 假设有3层GNN,将经过GNN的每一层都保存下来,即中间…

Mybatis批量更新数据库错误

问题:记录一次使用Mybatis批量更新数据库的错误,错误信息,Error updating database. Cause: org.postgresql.util.PSQLException: 错误: 字段 "update_time" 的类型为 timestamp without time zone, 但表达式的类型为 text 建议&am…

你了解渗透测试吗?渗透测试在网络安全行业属于食物链什么层级?

可能大家对于行业存在食物链这一说法,印象最深的往往是编制行业,所谓的等级主义在那里确实更为明显。但实际上,各行各业都或多或少存在这种层级结构,网络安全领域也不例外,毕竟都是一些所谓的“人情世故”。那么就网络…

使用Qt3D绘制机械手场景

文章目录 1.前言2.效果3.实现过程3.1.场景代码3.2.自定义模型的渲染3.3.绘制直线或者网格 4.有待解决的一些问题4.1.线宽的设置、背面消隐(culling)的设置4.2.法线的问题 1.前言 之前是使用Coin3D来绘制机械手场景的【Qt利用Coin3D(OpenInve…

15.1 Zookeeper简介安装及基础使用

1. Zookeeper介绍 1.1 介绍 1.2 应用场景简介 1.3 zookeeper工作原理 1.4 zookeeper特点

低代码平台下的用户中心开发:构建高效系统的新趋势

前言 随着数字化转型的深入,低代码开发平台因其快速、灵活的特性越来越受到企业的青睐。用户中心作为用户管理和服务的核心模块,对提升用户体验和增强用户粘性具有重要作用。本文将探讨如何利用低代码平台高效地构建用户中心,满足快速变化的…

英伟达开始引领下一波浪潮:物理AI

这可能会是AI技术形态的一个转折点,大模型的下一个形态,不再是人和模型一轮一轮的即时问答了。 当地时间 7 月 29 日,在美国丹佛举行的第 51 届 SIGGRAPH 计算机图形学会议上,英伟达创始人、CEO 黄仁勋与 Meta 创始人、CEO 马克・扎克伯格进…

编程技巧:如何优雅地合并两个有序数组?

目录 题目引用描述1.直接合并 排序2.指针3.后逆向双指针进阶:你可以设计实现一个时间复杂度为 O(m n) 的算法解决此问题吗?总结 题目 来自力扣 引用 合并两个有序数组 给你两个按 **非递减顺序 **排列的整数数组 nums1 和 nums2,另有两个整…

用友时空KSOA 多处 SQL注入漏洞复现

0x01 产品简介 用友时空 KSOA 是建立在 SOA 理念指导下研发的新一代产品,是根据流通企业前沿的 IT 需求推出的统一的IT基础架构,它可以让流通企业各个时期建立的 IT 系统之间彼此轻松对话。 0x02 漏洞概述 用友时空KSOA系统 PrintZP.jsp、PrintZPFB.jsp、PrintZPYG.jsp、P…

单细胞|MEBOCOST·基于代谢物的细胞通讯预测(一)

import os,sys import scanpy as sc import pandas as pd import numpy as np from matplotlib import pyplot as plt import seaborn as sns from mebocost import mebocost 1. 创建 mebocost 对象 adata sc.read_h5ad(data/demo/raw_scRNA/demo_HNSC_200cell.h5ad) ## che…

鸿蒙应用框架开发【首选项】 本地数据与文件

首选项 简介 本示例使用ohos.data.preferences接口,展示了使用首选项持久化存储数据的功能。 效果预览 使用说明 1.点击顶部titleBar的右侧切换按钮,弹出主题菜单,选择任意主题则切换相应的主题界面; 2.退出应用再重新进入&a…