【Linux】网络--网络层--IP协议

article/2025/7/13 19:05:07

在这里插入图片描述

个人主页~


网络--网络层--IP协议

  • 一、基本概念
  • 二、IP报头格式
  • 三、网络划分
  • 四、私有IP和公网IP
  • 五、路由
    • 路由表
  • 六、与数据链路层之间的协议

一、基本概念

IP 协议是用于在互联网上进行数据传输的一种网络层协议,它为不同网络中的设备提供了一种统一的方式来交换数据,IP 协议定义了数据包的格式以及数据包在网络中的传输规则,使得各种不同类型的网络能够相互连接并进行通信,是TCP/UDP传输的基础

二、IP报头格式

在这里插入图片描述

  • 版本:指定IP协议的版本,对于IPv4来说就是4
  • 首部长度:这里长度的单位是4字节,也就是最大支持60个字节的头部长度
  • 服务类型:共八位,其中三位已弃用,一位保留字段,其必须置为0,所以可供修改的只有四位TOS字段,分别表示最小延时、最大吞吐量、最高可靠性、最小成本,这四个相互冲突,只能开启一个
  • 总长度:IP数据报整体占多少个字节
  • 标识:主机发送报文的唯一标识,如果IP报文在数据链路层被分片了(有关分片的概念,在后面详述),那么每个片里面的标识id都是相同的
  • 标志:第一位保留,第二位为1表示禁止分片,此时如果超过了数据链路层能传输的最大传输单元,超过的数据将会被扔掉,第三位表示分片后的身子或者尾巴,为0则表示是身子,后面还有数据,为1则说明该片时最后一片,后面没有数据了
  • 片偏移:是分片相对于原始IP报文开始处的偏移,其实就是在表示当前分片在原报文中处在哪个位置,实际偏移字节数是这个值*8得到的,因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍,否则报文就不连续了
  • 生存时间:数据报到达目的地的最大报文跳数,一般为64,这里的报文跳数指的是报文到的路由器次数,如果超过这个数字报文就自动丢弃了
  • 协议:表示上层协议的类型
  • 头部校验和:鉴别头部是否损坏
  • 源地址和目标地址:发送端和接收端
  • 选项:不定长,最多40字节

三、网络划分

  • IP地址分为两个部分:网络号主机号,网络号可以保证互相连接的两个网段具有不同的标识,主机号可以保证同一网段内的主机可以有不同的标志

  • 子网的划分就是根据网络号相同的原理,网络号相同的主机放到一起就组成了子网,也就是局域网,但子网中主机通过主机号区分彼此

  • 过去曾经提过一种划分网络号和主机号的方案,将所有的IP地址分为五类:
    在这里插入图片描述

    • 随着互联网的发展,这种划分方案的局限性就显现出来了,由于B类网络地址对于网络号和主机号的分配机制比较优秀,所以大多数的组织都申请B类网络地址,导致B类地址快要消耗殆尽,而A类型的地址又被大量浪费(一个实际的网络架构中,一个子网下的主机数是没有2^24那么多的,并且它的子网只能有2^7个,所以A类地址的分配机制比较差劲,相比之下,B类地址更加符合实际)
  • 当前我们使用的是CIDR方案,它引入了一个额外的子网掩码来区分网络号和主机号,子网掩码也是一个32位的无符号整数,通常用一串0来结尾,网络号 = IP地址 & 子网掩码,网络号和主机号的划分与这个IP地址是A类、B类还是C类无关

    • 下面是转换例子,自己转换成二进制来检验

      IP地址子网掩码网络号子网地址范围
      140.252.20.68255.255.255.0140.252.20.0140.252.20.0~140.252.20.255
      140.252.20.68255.255.255.240140.252.20.64140.252.20.64~140.252.20.79
    • IP地址与子网掩码做与运算可以得到网络号,主机号从全0到全1就是子网的地址范围,其中确定某个主机有个简便方法,比如说第一个例子,就可以写成140.252.20.68/24,其中/前面表示IP地址,/后面表示子网掩码的高24位为1,也就是255.255.255.0

  • 子网掩码的不同,本质上反映了IP地址的网络边界划分逻辑不同,对于村里来说,我们的子网掩码就可以把后面这一串0的数量变少一些,让主机号数量维持在一个较低的位置,对于镇上来说,我们的子网掩码就可以把后面这一串0的数量变多一些,因为镇上的人口明显要比村里的人口要多,让主机号数量维持在一个较高的位置

  • IP地址还有几种特殊情况:

    • IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网
    • IP地址中的主机地址全部设为1,就成了广播地址,用于给同一个链路中相互连接的所有主机发送数据包
    • 127.0.0.1,用于本地环回测试,这个本地环回的作用就是原本应该通过数据链路层发送出去的数据再通过数据链路层流回来,用于测试本端是否协议是否正常工作
  • 需要值得注意的是,CIDR虽然在一定程度上缓解了IP地址浪费的问题,但在根本上,IPv4最多只能入网2^32台设备,这个数字可能听起来很大,但是在今天,我们入网的设备量已经快要接近这个数字了,我们有三种解决方式

    • 动态分配IP地址:只给接入网络的设备分配IP地址,所以同一个MAC地址的设备,每次接入互联网中,得到的IP地址一般不相同
    • NAT技术:下面详解
    • IPv6:与IPv4是两种截然不同的IP协议,最多可以入网2^128台设备,我国是世界上IPv6技术最好的国家,这是一种战略部署

四、私有IP和公网IP

  • 互联网标准文档RFC1918中,规定了用于组建局域网的IP地址
    • 10.*:前8位是网络号,共2^24个地址
    • 172.16.*~172.31.*:前12位是网络号,共2^20个地址
    • 192.168.*:前16位是网络号,共2^16个地址
    • 在以上范围内的都是私有IP,其他所有的都是公网IP
  • 一个路由器可以配置两个IP地址,一个是WAN口IP,一个是LAN口IP(子网IP)
  • 路由器LAN口连接的主机,都从属于当前这个路由器的子网中
  • 不同的路由器,子网IP其实都是一样的,同一子网内的主机IP地址不能重复,但是子网间的IP地址可以重复
  • 子网内的主机需要和外网进行通信时,路由器将IP首部中的IP地址进行替换(从子网IP替换成WAN口IP),这样逐级替换,最终将数据包中的IP地址成为一个公网IP,这种技术就是NAT

下图是一个详细解析图,这里我们可以把路由器看做对内对外有两个身份的人,对外就是WAN口IP,对内就是子网IP,我们一点一点的来解析,简单了解一下

  • 对广域网来说:运营商路由器就是私有节点,它的IP地址就是WAN口IP
  • 对运营商路由器来说:它是广域网的私有节点,同时也与家庭路由器的组成一个新的网络:子网,对外(广域网),它的IP是WAN口IP,对内(家庭路由器),它的IP是子网IP
  • 对于家庭路由器来说:它是子网的私有节点,对于子网而言,它的IP地址是WAN口IP,对于连接到它的主机而言,它的IP地址是子网IP
  • 对于主机来说:确定的私有IP
    在这里插入图片描述
  • 整个是一个家庭私网(成员为主机)→运营商私网(成员为家庭)→公网(成员为运营商)的层级结构

五、路由

请添加图片描述

还是这张图为例子,我们在进行主机访问服务器时,主机发送数据,将报文推送到家庭路由器中,此时家庭路由器会先查看目的IP,由路由器决定这个数据包是可以直接发送到目标主机(局域网内主机间通信)还是要发送给下一个路由器(跨局域网通信),家庭路由器将报文报头中的源IP地址换成自己的WAN口IP然后继续向运营商路由器推送,运行商路由器也会将报文报头中的源IP地址莞城自己的WAN口IP,此时运行商路由器将信息推送到广域网上,然后在广域网上找到目标IP地址,也就是服务器,将信息推送到服务器中

路由表

在前面所说的过程中,在路由器中所做的行为包括查看目的IP,修改报头,然后推送至下一级,其中查看目的IP和推送至下一级的行为依赖路由器中的一种数据结构:路由表,如下图所示就是一个路由表,其中从左到右依次是

  • Destination:目标网络或主机的 IP 地址,标识数据包的目标地址范围
  • Gateway:下一跳网关的 IP 地址,即数据包转发的下一个设备地址,若显示 *,表示目标网络直连,无需经过额外网关
  • Genmask:子网掩码
  • Flags:路由标志位
    • U:路由器可用
    • G:使用网关
    • H:目标是主机
  • Metric:路由度量值,代表路径开销(如跳数、带宽损耗),用于路由协议计算最优路径,值越小优先级越高
  • Ref:路由引用计数,记录当前路由被其他功能引用的次数
  • Use:路由条目被使用的统计次数,反映该路由处理的数据包流量情况
  • Iface:数据包发送的物理或逻辑接口(如 eth0 网卡、lo 回环接口),指明从设备的哪个接口转发数据包
    在这里插入图片描述
  • 查看目的IP需要做的就是判断一下这个等式成不成立:目的IP & Genmask == Destination
    • 若成立,且该条目包含下一跳路由器的 IP 地址或者本地路由器的出站接口等转发信息(Iface),路由器就依据该条目将数据包从指定的出接口转发到下一跳设备
    • 若不成立,继续向下查表,然后同样进行上述判断
    • 最终如果都不成立,那么就会到default默认路由,从这里出去

六、与数据链路层之间的协议

我们在上面提到过IP报文中,有一部分是关于分片的,这个分片的由来就是数据链路层的限制,数据链路层一次发送的报文长度是有限度的,所以只能拆解开来,这个拆解开来的过程就叫做分片

  • 假设我们要发送一个长度为3000的报文,分片最大长度为1500,则先取前1500,然后复制前1500的报头,修改后放到后1500的前面,假设这个报头的长度是20,则加上这个报头我们再取1500,也就是剩下1500里取1480,之后再复制报头,修改后放到最后20的前面,剩下最后一片的长度为40
    • 这里的修改指的是有关分片内容的修改,也就是标识、标志和片偏移,其他内容都不变
    • 通过标识、标志和片偏移,我们可以清楚得知某个报文是否是分片后的内容,并且知道某一片是这个报文的第几片,这样我们在对方主机接收到报文后,按照顺序将报头拆解然后再将数据组装起来
  • IP中任何一个分片丢失,都要重新发送,所以我们不建议分片

今日分享就到这里了~

在这里插入图片描述


http://www.hkcw.cn/article/YyPLWcAhys.shtml

相关文章

MCP (模型上下文协议):AI界的“USB-C”标准,开启大模型应用新纪元

今天我们来聊聊一个可能深刻改变 AI 应用开发模式的新技术——MCP (Model Context Protocol,模型上下文协议)。这是由 Anthropic 公司(旗下拥有知名大模型 Claude)提出的一项旨在统一大模型与外部世界交互方式的“万能接口”。不妨把它想象成…

Python数学可视化——显函数、隐函数及复杂曲线的交互式绘图技术

Python数学可视化——显函数、隐函数及复杂曲线的交互式绘图技术 一、引言 在科学计算和数据分析中,函数与方程的可视化是理解数学关系和物理现象的重要工具。本文基于Python的Tkinter和Matplotlib库,实现一个功能完善的函数与方程可视化工具&#xff…

SpringBoot(六)--- AOP、ThreadLocal

目录 前言 一、AOP基础 1.入门程序 2. AOP核心概念 3. 底层原理 二、AOP进阶 1.通知类型 抽取切入点 2. 切入点表达式 2.1 execution 2.2 annoation 2.3 连接点详解 三、ThreadLocal 前言 AOP(面向切面编程),面向切面编程实际就…

贪心算法应用:在线租赁问题详解

贪心算法应用:在线租赁问题详解 贪心算法是一种在每一步选择中都采取当前状态下最优的选择,从而希望导致结果是全局最优的算法策略。在线租赁问题(Greedy Algorithm for Online Rentals)是一个经典的贪心算法应用场景,下面我将从多个维度全面…

BA-SAM: 用于 Segment Anything 模型的可扩展偏置模式注意力掩码

概要 在本文中,我们解决了 Segment Anything Model (SAM) 的图像分辨率变化挑战。SAM 以其零样本泛化性而闻名,当面对具有不同图像大小的数据集时,性能会下降。以前的方法倾向于将图像大小调整为固定大小或采用结构修改…

centos8修改IP地址和Hostname

修改ip地址 vim /etc/sysconfig/network-scripts/ifcfg-ens33 BOOTPROTO:设置为 static 表示使用静态 IP 地址。 IPADDR:设置新的 IP 地址。 NETMASK:设置子网掩码。 GATEWAY:设置默认网关(可选,但通常需要…

Python Day40 学习(复习学习日志Day5-7)

重新对信贷数据集进行了填补空缺值的操作 自己写的时候,还是出现了问题: 首先是忘记了要定义一下data, 通过data pd.read_csv(data.csv)可以将读取到的数据保存到变量data中,方便后续进行数据分析。 其次,是漏掉了 c data.col…

QML 粒子系统之Affector

目录 基本示例AffectorAge - 改变特定年龄粒子的属性Attractor - 吸引粒子到指定点Friction - 施加摩擦力Gravity - 模拟重力Wander - 随机游走效果Turbulence - 添加湍流效果 下载链接 接上篇QML 粒子系统 (雪花飘落、爆炸粒子效果),本文继续研究粒子系统中的附属效…

Mac 同时录制系统声音和麦克风声音(OBS + BlackHole 免费版)

🎬 一、你将实现的目标 ✅ 用 OBS 免费录制屏幕时,能同时录到: 🖥 系统播放的声音(比如视频、PPT音效、背景音乐) 🎙 你的麦克风说话声音(讲解或旁白) 🧰…

Pytorch知识点2

Pytorch知识点 1、官方教程2、张量🧱 0、数组概念🧱 1. 创建张量📐 2. 张量形状与维度🔢 3. 张量数据类型➗ 4. 张量的数学与逻辑操作🔄 5. 张量的就地操作📦 6. 复制张量🚀 7. 将张量移动到加速…

使用pandas实现合并具有共同列的两个EXCEL表

表1&#xff1a; 表2&#xff1a; 表1和表2&#xff0c;有共同的列“名称”&#xff0c;而且&#xff0c;表1的内容&#xff08;行数&#xff09;<表2的行数。 目的&#xff0c;根据“名称”列的对应内容&#xff0c;将表2列中的“所处行业”填写到表1相应的位置。 实现代…

【农资进销存专用软件】佳易王农资进出库管理系统:赋能农业企业高效数字化管理

一、软件概述与核心优势 &#xff08;一&#xff09;试用版获取方式 资源下载路径&#xff1a;进入博主头像主页第一篇文章末尾&#xff0c;点击卡片按钮&#xff1b;或访问左上角博客主页&#xff0c;通过右侧按钮获取详细资料。 说明&#xff1a;下载文件为压缩包&#xff…

深入理解AMBA总线(七)AHB设计要点和AHB2APB同步桥设计前言

** 深入理解AMBA总线&#xff08;七&#xff09;AHB设计要点和AHB2APB同步桥设计前言 ** 前面的几篇文章介绍了AHB-lite协议。主要内容其实就是文档的介绍加上我自己的一些理解&#xff0c;希望对大家有帮助。今天这篇文章将带来AHB设计需要注意的一些事项&#xff0c;然后带…

消除F/1噪声

目录 简介 如何测量及规定1/f噪声&#xff1f; 1/f噪声对电路有何影响&#xff1f; 如何消除或降低1/f噪声&#xff1f; 简介 本文阐释1/f噪声是什么&#xff0c;以及在精密测量应用中如何降低或消除该噪声。1/f噪声无法被滤除&#xff0c;在精密测量应用中它可能是妨碍实…

洛谷-P3912素数个数题解

P3912 素数个数 题目描述 求 1 , 2 , ⋯ , N 1,2,\cdots,N 1,2,⋯,N 中素数的个数。 输入格式 一行一个整数 N N N。 输出格式 一行一个整数&#xff0c;表示素数的个数。 输入输出样例 #1 输入 #1 10输出 #1 4说明/提示 对于 40 % 40\% 40% 的数据&#xff0c; …

【环境搭建】Java、Python、Nodejs等开发环境搭建

1. 前言 趁着 618 活动&#xff0c;我新换了一台电脑。开发的同学都知道&#xff0c;重新在新电脑搭建开发环境是一件相对繁琐的事&#xff0c;这篇文章我将介绍如何搭建Java&#xff08;jdk、maven等&#xff09;、Python&#xff08;uv、conda等&#xff09;、Nodejs、Docke…

【机器学习基础】机器学习入门核心算法:层次聚类算法(AGNES算法和 DIANA算法)

机器学习入门核心算法&#xff1a;层次聚类算法&#xff08;AGNES算法和 DIANA算法&#xff09; 一、算法逻辑二、算法原理与数学推导1. 距离度量2. 簇间距离计算&#xff08;连接标准&#xff09;3. 算法伪代码&#xff08;凝聚式&#xff09; 三、模型评估1. 内部评估指标2. …

设计模式——迭代器设计模式(行为型)

摘要 本文详细介绍了迭代器设计模式&#xff0c;这是一种行为型设计模式&#xff0c;用于顺序访问集合对象中的元素&#xff0c;同时隐藏集合的内部结构。文章首先定义了迭代器设计模式并阐述了其核心角色&#xff0c;包括迭代器接口、具体迭代器、容器接口和具体容器。接着&a…

【文献阅读】Learning Transferable Visual Models From Natural Language Supervision

摘要 最先进的计算机视觉系统经过训练&#xff0c;可预测一组固定的预先确定的对象类别。这种受限的监督形式限制了它们的通用性和可用性&#xff0c;因为指定任何其他视觉概念都需要额外的标记数据。 直接从关于图像的原始文本中学习是一种很有前途的替代方法&#xff0c;它…

字符函数和字符串函数

目录 1.字符分类函数 2.字符转换函数 3.strlen函数的使用和模拟实现 4.strcpy函数的使用和模拟实现 5.strcat函数的使用和模拟实现 6.strcmp函数的使用和模拟实现 7.strcnpy函数的使用和模拟实现 8.strcnat函数的使用和模拟实现 9.strncmp函数的使用 10.strstr的函数使…