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

在这里插入图片描述

阅读导航

  • 引言
  • 一、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.rhkb.cn/news/387533.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

国内NAT服务器docker方式搭建rustdesk服务

前言 如果遇到10054,就不要设置id服务器!!! 由于遇到大带宽,但是又贵,所以就NAT的啦,但是只有ipv4共享和一个ipv6,带宽50MB(活动免费会升130MB~) https://bigchick.xyz/aff.php?aff322 月付-5 循环 :CM-CQ-Monthly-5 年付-60循环:CM-CQ-Annually-60官方…

Prometheus安装部署

文章目录 1.Prometheus(普罗米修斯)安装部署1.1部署环境准备1.2部署prometheus1.3主机数据展示 2.Grafana安装部署2.1部署Grafana2.2配置Grafana数据源2.2配置Grafana仪表板 3.AlertManager安装部署3.1部署alertmanager3.2告警邮件发送配置3.3测试邮件告警效果3.4自定义邮件告警…

昇思25天学习打卡营第9天|RNN实现情感分类

第十天的不小心把第九天的覆盖了。现在重新补上。 情感分类是自然语言处理中的经典任务,是典型的分类问题。输入一句话,然后去语义理解这句话是褒义贬义还是中性的。不同的情感语境下理解的大基调是不同的。 RRN情感分类也是一个分类模型,是…

多态、接口、类练习题

代码: public static void main(String[] args) {Person2 personnew Person2("唐僧",new Horse());person.passRiver();person.onRoad();} 接口: interface Vehicles{public void work(); } lass Horse implements Vehicles{Overridepubli…

外星人入侵_计分

外星人入侵_计分 1添加Play按钮1.1创建Button类1.2在屏幕上绘制按钮1.3开始游戏1.4 重置游戏1.5 将Play按钮切换到非活动状态1.6隐藏光标 2提高等级2.1修改速度设置2.2重置速度 3计分3.1显示得分3.2创建记分牌3.3在外星人被消灭时更新得分3.4将消灭的每个外星人的点数都计入得分…

TortoiseSVN迁移到本地git

TortoiseSVN迁移到本地git 文章目录 TortoiseSVN迁移到本地git0 背景1 环境准备2 SVN库迁移到VisualSVN2.1 导出dump2.2 将dump文件灌入VisualSVN2.3 获取SVN仓最新URL 3 迁移到Git库中4 迁移分支到Git库 0 背景 之前在前东家工作都是采用git进行项目管理,高效便捷…

Redis实战篇(黑马点评)笔记总结

一、配置前后端项目的初始环境 前端: 对前端项目在cmd中进行start nginx.exe,端口号为8080 后端: 配置mysql数据库的url 和 redis 的url 和 导入数据库数据 二、登录校验 基于Session的实现登录(不推荐) &#xf…

Ruby、Python、Java 开发者必备:Codigger之软件项目体检

在编程的广阔天地里,Ruby、Python 和 Java 开发者们各自凭借着独特的语言特性,构建着精彩纷呈的应用世界。然而,无论使用哪种语言,确保项目的高质量始终是至关重要的目标。而 Codigger 项目体检则成为了实现这一目标的得力助手&am…

React——配置环境、ES6语法补充、Components

文章目录 架构设计前置知识DOM树 配置环境安装 create-react-app安装两个插件创建安装 nodejs仍然无法创建 下次需要创建新项目就使用这三行命令安装 bootstrap使用 bootstrap 包画图追求写 jsx短路原则绑定函数快捷键修改变量名箭头函数简写删除无用的文件写组件调用组件使用 …

人工智能与机器学习原理精解【11】

文章目录 广义线性模型基础理论泊松分布的基本公式一、基本公式二、泊松分布的特点三、泊松分布的应用场景四、泊松分布与二项分布的关系五、总结 泊松回归例子1例子背景模型设定数据收集模型拟合结果解释预测应用场景 泊松回归例子2背景数据准备模型设定模型拟合结果解释预测 …

Prometheus-部署

Prometheus-部署 Server端安装配置部署Node Exporters监控系统指标监控MySQL数据库监控nginx安装grafana Server端安装配置 1、上传安装包,并解压 cd /opt/ tar xf prometheus-2.30.3.linux-amd64.tar.gz mv prometheus-2.30.3.linux-amd64 /usr/local/prometheus…

TypeScript 简介及安装

文档 typeScript官网中文文档:https://www.tslang.cn/index.html中文文档(简洁点):https://typescript.bootcss.comMDN 概述 TypeScript 是以JavaScript为基础构建的语言。 TypeScript 是一个为 JavaScript 添加静态类型检查的编程语言。 TypeScrip…

自动化测试与手动测试的区别!

自动化测试与手动测试之间存在显著的区别,这些区别主要体现在以下几个方面: 测试目的: 自动化测试的目的在于“验证”系统没有bug,特别是在系统处于稳定状态时,用于执行重复性的测试任务。 手工测试的目的则在于通过…

git配置环境变量

一.找到git安装目录 打开此git安装目录下的bin文件,复制此文件路径 二.配置环境变量 2.1 右键点击此电脑的属性栏 2.2 点击高级系统配置 2.3 点击环境变量 2.4 按图中步骤进行配置 三.配置完成 win r 输入cmd打开终端 终端页面中输入 git --version 如图所示…

如何将WordPress文章中的外链图片批量导入到本地

在使用采集软件进行内容创作时,很多文章中的图片都是远程链接,这不仅会导致前端加载速度慢,还会在微信小程序和抖音小程序中添加各种域名,造成管理上的麻烦。特别是遇到没有备案的外链,更是让人头疼。因此,…

kafka高性能的底层原理分析

目录 1.磁盘顺序写 2.零拷贝 3.数据压缩 4.消息批量处理 5.pageCache 6.稀疏索引 总结 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。那么他是如何做到高性能的呢,本篇文章从宏观上分析一下&#xff…

alibabacloud学习笔记12

Docker介绍和使用场景 讲解阿里云ECS服务安装Docker实战 遇到这个报错可以执行: 执行这个docker info出这个就证明docker关闭成功。 快速掌握Dokcer基础知识 掌握Docker容器常见命令 查看本地已有镜像: 拉取镜像: 可以查到刚才拉取的镜像。 …

028-GeoGebra中级篇-脚本的初步的探索

GeoGebra 的脚本功能允许用户通过不同的触发机制(如点击、更新、输入框变化、拖动结束)和全局 JavaScript 自定义图形和交互行为,实现动态数学模型和用户交互,同时 ggbOnInit() 函数可在应用初始化时设置默认状态,提供…

构建基于数据驱动的应用程序与Llamaindex——理解大型语言模型

如果你在阅读这本书,你可能已经探索过大型语言模型(LLMs)的领域,并且已经认识到它们的潜在应用以及它们的缺陷。本书旨在解决LLMs所面临的挑战,并提供一本实用指南,教你如何使用LlamaIndex构建数据驱动的LL…

【通俗理解】自由能与自由意志的桥梁——从物理到哲学的跨越

【通俗理解】自由能与自由意志的桥梁——从物理到哲学的跨越 自由能与自由意志的类比 你可以把自由能比作一个“能量货币”,它代表着系统能够用来做功的能量。而自由意志则是一个“选择的能力”,它代表着个体在做出决策时的自主性和可能性。 自由能与自由…