网络层详解

news2025/1/12 23:17:25

目录

前言

一、IP协议

1、IP协议报头

2、协议字段理解

(1)4位版本

(2)4位首部长度

(3)8位服务类型

(4)16位总长度

(5)标识、标志与片偏移

(6)8位生存时间

(7)8位协议

(8)16位首部校验和

(9)源IP地址与目的IP地址

(10)选项

3、如何封装与解包

4、如何向上交付

5、IP分片

(1)16位标识

(2)3位标志

(3)13位片偏移

(4)疑惑解答

二、网段划分

1、网络号与主机号

2、IP地址分类

3、CIDR技术

4、特殊的IP地址

5、子网划分

6、私有IP地址与公网IP地址


前言

        前面我们介绍了应用层与传输层相关协议,本文主要讲解网络层相关概念与网络层相关协议;

一、IP协议

        网络层主要的协议就是IP协议,我们经常听说的TCP/IP协议簇中便包含该协议;IP协议也是网络层中最主要的协议;

1、IP协议报头

        IP协议报头如下图所示;

2、协议字段理解

(1)4位版本

        该字段主要标识IP协议版本,一般为IPV4,因为IPV6与IPV4并不兼容,该字段可不深究,理解即可;

(2)4位首部长度

        该字段来标识IP报文首部的长度,与TCP协议中的首部长度一样,该字段的单位为4字节,由于IP报文的大小最小为20字节,因此该字段最小值应该为20 / 4 = 5,用二进制来表示就是0101;最大值应该就是60字节了;

(3)8位服务类型

        该字段也只需了解即可,该字段最高3位已经弃用,而接下来4位TOS字段,分别用来标识最小延迟,最大吞吐量,最高可靠性,最小成本;这四者互相冲突,只能选择一个;最后一位为保留位,设置为0即可;

(4)16位总长度

        该字段来表示整个IP报文的长度(包括数据部分),单位是字节,注意,这里与首部长度的不同,首部长度的单位为4字节,这里的单位为字节;

(5)标识、标志与片偏移

        这三个字段为设置IP分片所需字段,具体文章后面会专门讲解;

(6)8位生存时间

        该字段用来表示我们发送的报文在网络上最长的生存时间;该字段最开始的单位为秒,后来被改为了跳数;那么我们会有如下问题;

为什么会有生存时间呢?没有不可以吗?

        当然不可以,实际上,我们的网络上的情况非常复杂,有可能会出现路由环绕等问题,就是在转发IP报文过程中出现路由回路,若没有没有生存时间将会不断的重复转发,这种转发当然会消耗网络资源的,为了避免这种情况IP报文设置了生存时间;

        刚开始时,生存时间的单位为秒,后来随着互联网硬件的发展,路由转发的速度也越来越快,我们发现设置成秒并不合适,因此我们转发一个路由可能仅仅只需要us甚至ns级别,这时我们设置成秒明显就不合适了,因此这个参数也就被改为了跳数,所谓跳数就是经过中间路由次数,没经过一个路由,跳数加一;

(7)8位协议

        这里的8位协议也就是网络层应该向上层中的哪一个协议交付,可能上层位TCP协议,也可能位UDP协议等等,我们要讲IP报文解用后的数据交给上层的指定层;

(8)16位首部校验和

        该字段用于检测我们在进行数据传输中IP首部中的某个数据是否发生错误,用于检测IP首部的正确性;这里可能有小伙伴会有疑惑了,那数据部分不需要进行检测吗?这其实在传输层中,我们讲TCP、UDP协议中就介绍了,这里我们要清楚的是在IP协议中,IP报文中的数据部分就是一个完整的TCP报文或UDP报文等,而在传输层中的这些协议都有差错校验,这个差错校验会讲数据部分进行差错校验,因此在IP报文中的差错校验只需检验首部是否正确即可;

(9)源IP地址与目的IP地址

        源IP地址用于告诉接收端发送端的IP地址是什么?因为在网络通信过程中,往往是双向的,我们要给对端发送数据,对端也要跟我们发送数据,而目的IP是在路由转发过程中告诉中间路由我们要去的IP地址是哪个,用于定位对端主机;

(10)选项

        这个选项是附加字段,我们可加一些特殊功能,对IP协议进行拓展,这里我们仅需了解即可;

3、如何封装与解包

        学习了上面字段,这个问题对我们来说并没有多大难度,我们可以通过字段中的16位总长度 - 4 * 4位首部长度,这样就可以得到我们的有效载荷,封装就是给报文添加报头即可;

4、如何向上交付

        通过8位协议字段我们得到应该交付给上层哪个协议,我们解包后就可以直接交付了;

5、IP分片

        首先我们在了解IP分片之间我们得直到什么是IP分片,所谓IP分片就是将我们的IP报文通过分片技术将IP报文分成一片一片后再发送;

        为什么要进行IP分片呢?一整个IP报文一起发送出去不可以吗?

这里我们需要直到我们IP层的下层,也就是数据链路层,有一个规定,上层交付给我的数据不可以超过MTU,这里MTU也就是 Maximum Transmission Unit,一般为1500字节;因此若传输层给我们网络层交付的数据过大,我们需要进行分片操作;

(1)16位标识

        在分片技术中,该字段用于标识IP报文的序号,若为同一个分片,16位标识相同;

(2)3位标志

        该字段最低为记为 MF(More Fragment),若为0,要么表示该IP报文没有分片,要么表示该IP报文是IP分片后的最后一个IP分片报文;若为1,表示后面还有分片,这时该分片即可能为第一个分片,也可能为最后一个分片;

        次高位记为 DF(Don't Fragment),表示不能分片,若为1表示该IP报文不允许进行分片,若为0时则表示可以分片;

那么要是上层传输层给我们交付的数据大于MTU,而IP报文中的标识被置为1时,那该怎么办呢?

        此时,我们不用考虑别的,直接丢弃该报文即可!

(3)13位片偏移

        该字段为分片后,该分片的起始地址在原分片中的位置;注意,片偏移是以8字节为单位的!

(4)疑惑解答

如何区分是否分片,或是该分片是分片中的哪一块?

没有分片:MF=0,片偏移=0;

分片第一块:MF=1,片偏移=0;

中间分片:MF=1,片偏移>0;

最后一块分片:MF=0,片偏移>0;

中间分片有这么多块,我们怎么知道它们是否收齐?如何组装?

        我们通过16位标识找到所有属于一个IP数据报的分片,我们可以通过上述规则找到第一片与最后一片,我们接着我们可以通过第一片的总长度找到第二片片偏移的字段应该是多少,从而找到第二片,同时也可以用这个方法找到第三片,第四片等等;最终找齐所有分片,找到所有分片不就可以将其组装起来,然后向上交付吗?

我们是否推荐分片?为什么?

        实际上,我们并不推荐分片这种做法,因为我们思考一下,我们将一个IP报文分成多个IP报文然后发送出去,那么若我们丢掉其中一个IP报文,此时完整的IP报文都不可能被我们完整组装起来,此时我们就要将该IP报文丢弃,视作丢包,等待对端重传,这时效率就低很多了,因此一个报文丢失概率与若干个报文其中一个报文丢失的概率想比,低了很多,因此我们不建议进行分片;

二、网段划分

1、网络号与主机号

网络号:保证相互连接的两个网段具有不同的标识;

主机号:同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;

注意:通常在同一个网段内的主机可以直接通信,具体原理为局域网通信原理;这里记住即可;

        上述中 /24表示该IP地址中,前24个比特位表示网络号,后面8个比特位表示主机号,也就是192.168.128表示网络号,10表示主机号;

2、IP地址分类

        早期是IP地址被划分位如下几类;

        可是如此划分,很快问题就暴露出来了,我们不难看出,A类地址的可分配的主机数地址为2^24,可一般来说很少有子网可以有这么多主机,B类地址有2^16台主机地址,C类有2^8台主机地址,很多公司都申请B类地址,很快B类地址就被用完了,而申请A类的地址,实际上用不上这么多主机,都浪费了,随着互联网发展,这种情况是IP地址越来越不够用了;因此我们后面便未使用这种方法对IP进行分类,而是采用下面的方法;

3、CIDR技术

        所谓CIDR即是 Classless Interdomain Routing,就是通过引入一个网络掩码来区分网络号与主机号;子网掩码也是一个32位的正整数. 通常用一串 "0" 来结尾;将IP地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号;

例如,一个网路的IP地址为192.168.128.10,子网掩码为255.255.255.0;

        此时我们的网络号就是这两个IP地址按位与的结果,也就是192.168.128.0/24;

4、特殊的IP地址

  • 将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;

  • 将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;
  • 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

5、子网划分

        我们的网络是如何进行划分的呢?接下来我将带着大家一起进行一次网络划分,下面所有的划分为小编自己划分,并不为真实划分,小编只是模拟划分来带着大家一起理解子网划分的概念;

        我们假如用IP地址最高八位,来对国家进行划分,如下所示;

        上述图中,我们只划分了5个国家的IP地址,其中每个国家都有一个国家路由器,也就是该路由器能识别别的国家路由IP地址,也就是如下图所示;

        每个国家可能有多个不同地区划分,我们以中国为例,中国有34个省,我们可以用6个比特位表示这些省份,如下图所示;

        我们还可以将上述网络继续划分到每个市,甚至每个县,很显然,我们会发现这样我们的IP地址是非常不够用的,因此有了后面的NAT技术

6、私有IP地址与公网IP地址

        由于IP地址数量的不够,因此诞生了公网IP与私网IP的概念;我们规定以下地址为私网IP地址;

  • 10.*,前8位是网络号,共16,777,216个地址
  • 172.16.到172.31.,前12位是网络号,共1,048,576个地址
  • 192.168.*,前16位是网络号,共65,536个地址

其余均为公网IP地址;私网IP地址就是为了解决公网IP数量严重不足的问题,具体就是使用NAT技术,暂不介绍;

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

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

相关文章

【自控实验】2. 采样控制系统特性

本科课程实验报告,有太多公式和图片了,干脆直接转成图片了 仅分享和记录,不保证全对 通过对二阶连续系统、二阶采样系统和具有保持器的二阶采样系统仿真实验,比较三种系统的特性,加深对采样控制系统的了解 使用matl…

阿里云OSS上传视频,可分片上传

uniappH5实现 阿里云OSS上传视频 示例图: 上传视频完整示例代码: 使用npm安装SDK开发包,安装命令为 npm install ali-oss --save accessKeyId 和 accessKeySecret 还有 bucket 替换成你的就行。 multipartUpload 的第一个入参是&#x…

leetcode 动态规划(最后一块石头的重量II、目标和、一和零)

1049.最后一块石头的重量II 力扣题目链接(opens new window) 题目难度&#xff1a;中等 有一堆石头&#xff0c;每块石头的重量都是正整数。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < …

Redis的设计、实现

数据结构和内部编码 type命令实际返回的就是当前键的数据结构类型,它们分别是:string(字符串)hash(哈希)、list(列表)、set(集合)、zset (有序集合),但这些只是Redis对外的数据结构。 实际上每种数据结构都有自己底层的内部编码实现,而且是多种实现,这样Redis会在合适的…

动手学深度学习-卷积神经网络

卷积神经网络 在前面的章节中&#xff0c;我们遇到过图像数据。这种数据的每个样本都由一个二维像素网格组成&#xff0c;每个像素可能是一个或者多个数值&#xff0c;取决于是黑白还是彩色图像。到目前为止&#xff0c;我们处理这类结构丰富的数据方式还不够有效。我们仅仅通…

[Kubernetes]7. K8s包管理工具Helm、使用Helm部署mongodb集群(主从数据库集群)

上一节讲解了[Kubernetes]6. k8s Pod配置管理ConfigMap & Secret以及传递环境变量的使用,k8s的命名空间以及使用kubens管理命名空间的使用,这里来介绍一下Helm的使用 一.Helm相关介绍 1.介绍 在 kubernetes 系统上部署容器化应用时需要事 先手动编写资源配置清单文件 以…

页面跳转后,默认选中tree节点并高亮显示

1.场景 操作步骤&#xff1a; 1.点击数据连接数&#xff0c;打开弹窗 2.点击连接状态跳转到数据连接模块 3.默认选中tree的数据源id节点 2.代码 参数解释&#xff1a; 3.实现逻辑 首先将id通过组件传参的方式传过去&#xff0c;数据连接接收后&#xff0c;在tree里设置…

Vue+element-china-area-data实现省市区三级联动

安装依赖 npm install element-china-area-data -S cnpm install element-china-area-data -S 引用 import { provinceAndCityData, regionData, provinceAndCityDataPlus, regionDataPlus, CodeToText, TextToCode } from element-china-area-data&#xff1b; provinceAnd…

【UE Niagara学习笔记】06 - 制作火焰喷射过程中飞舞的火星

在上一篇博客&#xff08;【UE Niagara学习笔记】05 - 喷射火焰顶部的蓝色火焰&#xff09;的基础上继续实现喷射火焰的火星的效果。 目录 效果 步骤 一、创建材质实例 二、添加新的发射器 2.1 设置粒子材质 2.2 设置发射器持续生成粒子 2.3 设置粒子生成数量 2.4 设…

Windows7共享文档—开启方法及用户权限设置

使用计算机的朋友&#xff0c;在工作中经常需要在局域网中将文件共享给其他用户&#xff0c;这样其他人可以方便的通过局域网查看&#xff0c;甚至修改这些共享文件。当然&#xff0c;根据文件的重要程度&#xff0c;使用等级不同&#xff0c;不同的用户会赋予不同的权限&#…

使用 schema 库,自定义较复杂的校验方法

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、依赖包安装及说明3、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、相…

记录浏览器莫名其妙部分网页无法访问的一个解决办法

问题描述&#xff1a; 不知道什么原因&#xff0c;浏览器无法访问CSDN了&#xff0c;访问其他网站都可以正常加载。 经电脑网络诊断检测&#xff0c;反馈内容大致为&#xff1a; 资源处于联机状态但未对连接尝试做出响应&#xff0c;远程计算机不接受端口443上的连接。 测试…

如何搭建开源知识库软件AFFiNE并实现公网环境远程协作【内网穿透】

目录 前言 1. 使用Docker安装AFFINE 2. 安装cpolar内网穿透工具 3. 配置AFFINE公网访问地址 4. 实现公网远程访问AFFINE 结语 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊如何搭建开源知识库软件AFFiNE并实现公网环境远程协作【内网穿…

用java实现Client和Server之间的互相通信

概要&#xff1a;看过我之前文章的人都知道&#xff0c;client和server之间的通信必不可少的就是socket。而java已经帮我们做了很多事情。 创建Server端 第一步&#xff0c;创建ServerSocket 这个从名字上就可以看出来&#xff0c;服务器上的socket 0.0 ServerSocket ser…

ROS2学习笔记三:话题Topic

目录 前言 1 话题简介 2 常用指令 3 RCLCPP实现实现话题 3.1 创建工作空间 3.2 代码编写 3.2.1 发布端编写 3.2.2 发布端编写 前言 ROS2中的一个重要概念是话题&#xff08;Topic&#xff09;。话题是一种通过发布者和订阅者之间进行异步通信的机制。发布者&#xff0…

Java常用类---Math类和Random类

Math类 简介 Java中&#xff0c;Math类包含了用于执行基本数学运算的属性和方法。Math类的方法都被定义为static形式(静态方法)&#xff0c;通过Math类可以直接在主函数中直接调用。 如下图所示&#xff0c;Math.PI等于圆周率π、Math.E等于常量e……等属性和方法。 部分Mat…

主动学习基础-贝叶斯神经网络

引言 传统的深度神经网络一般都有过度自信的问题。 即使我给神经网络提供一个从来没有训练过的类别图像&#xff0c;神经网络也会输出一个类别。比如训练猫狗的分类器&#xff0c;如果你抛出一个人的图像&#xff0c;网络也会将其分类为猫或者狗。 在几乎所有现实世界的问题中…

详解java中ArrayList

目录 前言 一、ArrayList是什么 二、ArrayList使用 1、ArrayList的构造 2 、ArrayList常见操作 3、 ArrayList的遍历 4、 ArrayList的扩容机制 三、来个练习 前言 当你看到这篇文章我觉得很好笑&#xff0c;因为我开始也不懂ArrayList现在轮到你了&#xff0c;嘻嘻嘻&am…

深入解析HubSpot在线客户互动工具:提升客户体验的利器

在数字化时代&#xff0c;客户体验成为企业成功的关键因素之一。HubSpot作为一体化的市场营销、销售和服务平台&#xff0c;其在线客户互动工具扮演着提升客户体验的重要角色。本文将深入探讨HubSpot的在线客户互动工具&#xff0c;包括实时聊天、机器人和社交媒体监控&#xf…

视频号的视频怎么提取?推荐2种方法让广告人下载高清原视频变得更轻松

​在当今这个视觉主导的时代&#xff0c;身为一名广告人&#xff0c;您是否经常还在烦恼视频号的视频怎么提取&#xff1f;并能快速、高效地下载到高质量的原视频素材而头疼呢&#xff1f; 视频号提取助手 现在&#xff0c;问题有了答案——"视频号提取助手"这款神…