网络层协议之 IP 协议

IP 协议格式

        4 位版本:此处的取值只有两个,4(IPv4)和 6(IPv6),即指定 IP 协议的版本。

        4 位首部长度:描述了 IP 报头多长,IP 报头是变长的,因为报头中的选项部分是可有可无的,此处的单位也是 4 字节(IP头部的长度是多少个32bit,也就是 length * 4 的字节数。4bit表示最大的数字是15,因此IP头部最大长度是60字节)。

        8 位服务类型:实际上只有 4 位是有效的,这四位中只能出现 1 位是 1,其余的都是 0,因此就表示 IP 协议的四种形态 / 四种工作模式:最小延时、最大吞吐量、最高可靠性、最小成本。

        16 位总长度:描述了一个 IP 数据包的长度(头 + 载荷),16 位总长度意味着一个 IP 数据包最大只能支持 64KB,但是 IP 自身会支持对包的拆分和组装。虽然最大是 64KB,但实际情况进行拆分的单位往往比 64KB 小,这取决于数据链路层的情况。

        16 位标识:同一个数据拆成的多个包的标识都是一样的。3 位标志:就是一个代表结束的标志。13 位片偏移:标识了多个包的先后顺序。这几个字段都是辅助拆包 / 组包提供的。

        8 位生存时间:一个数据报在网络上能够传输的最大时间。这个时间的单位是 “次数”。一个数据报构造出来会有一个初始的 TTL 数值(比如 32、64),这个报每经过一个路由器转发,TTL-1,如果一直减到 0,还没有到达目标,那么就会认为这个报永远不会到达了,就会丢弃。

        32 位源 IP 地址、32 位 目的 IP 地址:表示发送端和接收端。虽然此处的 IP 地址是 32 位整数,但是我们平时看到的是形如 192.168.1.1 这样的一串数字,这是使用三个 . 来把 4 个字节 32 位数字给分成四个部分,每个部分分别使用 0-255 来表示,这称为:点分十进制

        但是 32 位数字,只能表示 42亿9千万个数字,而全世界能上网的设备那么多,为了解决 IP 地址不够用的问题想出了以下方法:

1. 动态分配 IP 地址。把不在联网设备的地址分配给需要上网的设备。

2. NAT 网络地址转换,本质是使用一个 IP 代表一批设备。因此在 NAT 背景下,就把 IP 地址分成两大类:

        a)内网 IP(私有 IP),形如:10.* 、172.16.* — 172.32.* 、192.168.*

        b)外网 IP(公网 IP),除了上面的类型,剩下的就是公网 IP。并且公网 IP 必须是唯一的,但是私网 IP 可以在不同的局域网中重复出现。如果某个私网里面的设备想要访问公网的设备,就需要对应的 NAT 设备(路由器)把 IP 地址进行映射,从而完成网络访问;如果公网的设备无法直接访问私网的设备

        此时,只要这个电脑是经过运营商路由器转发给服务器的,那么服务器看到的源 IP 都一样;如果此时是多个电脑同时访问同一个服务器, 服务器的响应就会发回给路由器,然后路由器再根据这些电脑不同的端口号来进行区别,决定发给哪个电脑。

3. IPv6,从根本上解决了 IP 不够用的问题(使用 16 个字节表示 IP 地址)。但是想支持 IPv6 就得更换路由器等设备,这就导致成本的上升,因此就没有广泛的到使用。所以主要还是采用上述两种办法结合。但是在我们国家,IPv6 在 2018 年的时候工信部已经大力推行,现在绝大多数设备都支持 IPv6,只是还没开启而已。

地址管理

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

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

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

一个 IP 地址,为了区分网络号和主机号的界限,引申出了子网掩码。

此处的 255.255.255.0 就是子网掩码,左侧的都是 1,右侧的都是 0,1 的部分就描述了 IP 有多少位是网络号。网络号不一定是前三个字节,而是可以调整变化的。

特殊的 IP 地址

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

        将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有 主机发送数据包(192.168.1.255,使用 UDP 往这个地址上发送数据,整个局域网所有设备都能收到)

        127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1(用于测试程序是否能正常工作)

        主机号为 1,比如 192.168.0.1,一般是 “网关 IP”。网关就是类似于入口。

        本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输), 对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。

路由选择

        路由选择就是规划路径,核心就是边走边问。因为每个路由表都会保存一些周围设备的信息(路由表),所以每次有一个 IP 数据包经过路由器就会匹配路由表,看看下一步往哪走。如果有匹配的项,直接按照要求走;如果没有匹配的项,就会提供一个默认路径,即大体方向。每经过一个路由器,TTL-1,减到 0 还没到那么就会丢弃这个包。

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

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

相关文章

“人工智能+”推进新质生产力发展论坛暨工作室实践实训基地授牌仪式圆满结束

4月27日,由江西财经大学现代经济管理学院主办的“人工智能”推进新质生产力发展论坛暨“江财现经管泰迪数智技术”校企工作室实践实训基地授牌仪式在江西财经大学现代经济管理学院共青城校区举行,学院院长王金海,副院长丁美东,副院…

Day2 | Java基础 | 2 数据类型

Day1 | Java基础 | 2 数据类型 基础版staticstatic的用法static修饰内部类static修饰方法static修饰变量static修饰代码块 深入分析static小结 问题回答版参数传递形参和实参的区别是什么?Java是值传递还是引用传递?值传递和引用传递的区别是什么&#x…

引用数据类型 栈内存 堆内存

let m { a: 10, b: 20 }; let n m; n.a 15; console.log(m.a) // 15 原因:基本数据类型存储在栈内存中,引用数据类型存储在堆内存中 ,引用数据类型存储在堆内存中会在栈内存中创建一个指针,栈内存中的这个指针指向堆内存中的地…

Blender材质,纹理,UV

1.材质Material,用于描述物体的表面性质,包含以下基本属性 -基础色 -金属/非金属 -粗糙度 -透光度 -凹凸细节 添加材质步骤: 1)切换到材质预览模式 2)打开材质面板 3)添加一个材质,包括材…

Windows 10 中使用 Montreal-Forced-Aligner (MFA) 实现音频和文本强制对齐

文章目录 一、实现目标二、安装 Montreal-Forced-Aligner1、使用 Anaconda 虚拟环境2、修改默认下载路径3、安装 montreal-forced-aligner 及相关第三方包4、验证是否安装成功 三、下载声学模型和发音词典1、命令行方式下载2、手动方式下载 四、强制对齐1、准备音频及对应文本2…

[嵌入式系统-72]:RT-Thread-组件:单元测试框架utest

目录 utest 测试框架 ​编辑 测试用例定义 测试单元定义 utest 应用框图 2. utest API assert 宏 测试单元函数运行宏 测试用例导出宏 测试用例 LOG 输出接口 3. 配置使能 4. 应用范式 5. 测试用例运行要求 6. 运行测试用例 测试结果分析 7. 测试用例运行流程 …

14.集合、常见的数据结构

集合 概念 Java中的集合就是一个容器,用来存放Java对象。 集合在存放对象的时候,不同的容器,存放的方法实现是不一样的, Java中将这些不同实现的容器,往上抽取就形成了Java的集合体系。 Java集合中的根接口&#x…

MySQL数据库---增删查改汇总

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文着重整理MySQL数据库增删查改功能 主要是整理语法 争取做到要用什么语法 可以快速找到复制粘贴 增添语法 INSERT into tab(列名,列名,列名) values(内容,内容,内容); 插入一行数据 INSERT into tab(列名,…

邦注科技 模具保护器 CCD电子眼 专业工业视觉检测设备

模具保护器是一种用于保护模具的设备,可以在塑料压铸和冲床等加工过程中起到保护模具的作用。以下是关于模具保护器在保护塑料压铸和冲床模具方面的应用: 塑料压铸模具保护器: 防止碰撞:在塑料压铸过程中,模具可能会…

Android Studio报错:Constant expression required

【出现的问题】: 使用JDK17以上版本,switch语句报错:Constant expression required 【解决方法】: 在gradle.properties配置文件下添加代码: android.nonFinalResIdsfalse 如图: 接着再点击右上角的Sync…

数仓开发:DIM层数据处理

一、了解DIM层 这个就是数仓开发的分层架构 我们现在是在DIM层,从ods表中数据进行加工处理,导入到dwd层,但是记住我们依然是在DIM层,而非是上面的ODS和DWD层。 二、处理维度表数据 ①先确认hive的配置 -- 开启动态分区方案 -- …

Python深度学习基于Tensorflow(6)神经网络基础

文章目录 使用Tensorflow解决XOR问题激活函数正向传播和反向传播解决过拟合权重正则化Dropout正则化批量正则化 BatchNormal权重初始化残差连接 选择优化算法传统梯度更新算法动量算法NAG算法AdaGrad算法RMSProp算法Adam算法如何选择优化算法 使用tf.keras构建神经网络使用Sequ…

活动图与状态图:UML中流程图的精细化表达——专业解析系统动态性与状态变迁

流程图是一种通用的图形表示法,用以展示步骤、决策和循环等流程控制结构。它通常用于描述算法、程序执行流程或业务过程,关注于任务的顺序执行。流程图强调顺序、分支和循环,适用于详细说明具体的处理步骤,图形符号相对基础和通用…

Logfire-Python可观测平台快速上手

我最近在优化之前的FastAPI接入可观测性平台,正好分享一下Pydantic团队推出的logfire,希望对大家的Python工程化有帮助。 Github: https://github.com/pydantic/logfire 官网链接: Pydantic Logfire Documentation Logfire是Pydantic团队推出的可观测…

数据结构复习指导之二叉树的遍历

文章目录 二叉树 考纲内容 复习提示 1.二叉树的遍历 1.1先序遍历(PreOrder) 1.2中序遍历(InOrder) 1.3后序遍历(PostOrder) 1.4递归算法和非递归算法的转换 1.5层次遍历 1.6由遍历序列构造二叉树…

3.yolov5训练前的图片处理详解(python)

其实,yolov5模型可以分为深度网络、数据处理(图片处理)、损失函数、优化器选择、训练和预测及部分构成,相信大家对训练和预测的代码比较熟悉。前面两章我们根据代码和结构图了解了yolov5的深度网络,接下来看数据处理的…

力扣刷题--数组--第三天

今天再做两道二分查找的题目,关于二分查找的知识可看我前两篇博客。话不多说,直接开干! 题目1:69.x 的平方根 题目详情:   给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数&#…

首席数据官CCRC-CDO如何构筑企业数据合规的坚固防线

在当今信息化快速发展的时代,数据已经成为企业最宝贵的资产之一。然而,随着数据规模的迅速增长,数据合规问题也日益凸显。首席数据官(CDO)作为企业中负责数据战略和管理的核心人物,构筑企业数据合规的坚固防…

吴恩达2022机器学习专项课程C2(高级学习算法)W1(神经网络):2.5 更复杂的神经网络

目录 示例填写第三层的层数1.问题2.答案 公式:计算任意层的激活值激活函数 示例 层数有4层,不包括输入层。 填写第三层的层数 1.问题 你能把第二个神经元的上标和下标填写出来吗? 2.答案 根据公式g(wxb),这里的x对应的是上…

Unity EventSystem入门

概述 相信在学习Unity中,一定有被UI事件困扰的时候把,当添加UICanvas的时候,Unity会为我们自动添加EventSystem,这个是为什么呢,Unity的UI事件是如何处理的呢,在使用各个UI组件的时候,一定有不…