当前位置: 首页 > news >正文

IP 协议

1.IP协议报头

如下图:

版本号 代表的是当前的IP协议的版本,此处的版本一共有两个取值:v4和v6.本文着重针对v4版本进行解析.

首部长度 代表的是整个IP报头的长度,这个报头长度是可变长的,可变长的原因在于报头中的选项,这个属性是一个可有可无的属性,会改变报头长度,它的单位是32bit,比如里面存放的是1,那么整个IP报头的长度就是4个字节(32bit).

服务类型 共占8位,但是实际上只有4位是有效的,其中这4位表示当前IP协议的4种工作模式:最小延时、最大吞吐量、最高可靠性、最小成本.实际开发中可能会根据需要来选择当前的IP工作模式.

总长度 代表的是整个IP数据报的总长度(报头+载荷)

同时也说明IP数据报最多只能携载64KB的数据.但是IP协议是支持对包的拆分和组装的.

比如我要传一个100KB的数据,当传输到网络层时,网络层就会将这100KB的数据进行拆分(假设拆分成64KB和32KB),因为是拆分成了两个数据报,所以到了数据链路层就会打包成两个数据帧,以此类推......

等到接收方的数据链路层将这两个数据帧进行分用,得到两个IP数据报,再由网络层针对这两个IP数据报进行解析,将载荷合并成一个,再向后面传输.....

这一行属性都是针对数据 拆包/组包 而提供的.

标识:同一份数据的不同包里面的表示是相同的.

标志:结束标志.

片偏移:标识了拆分后每个包的顺序

生存时间 表示一个数据报在网络上传输的最大时间,这里的时间并不是以"秒"、"毫秒"这样的单位来计量的,而是以"次数"来计量.

比如有一个TTL初始值为32,此时这个数据报每经过一个路由器转发,TTL的值就会-1,当TTL的值减到0时,就会认为这份数据传输不到了,可以丢弃了.

协议 代表的是当前数据报中传输层的协议(UDP/TCP....)

首部检验和 和UDP、TCP的相同,但是此处只检验报头,因为载荷部分传输层会进行检验.

2.IP地址

这两个部分分别表示发送方的IP地址和接收方的IP地址.

在报文中是以32位的整数方式存在的,而我们日常见到的IP地址则是一串数字,比如:127.0.0.1

他们之间的转换是用点分十进制的方式转换的,也就是将32位分成4分,每一份为8位,转化为十进制0~255,中间用"."来分隔开,就得到了我们现在看到的IP地址.

这32位整数最多可以有42亿9千万中不同的变化,但是我们期望的是全世界里每台设备的IP地址都不相同,但是在生活中需要的IP地址量是非常多的,比如:智能手机、路由器、服务器、物联网等等.所以42亿9千万这个数字是远远不够的.

解决这个问题,有以下两种方法:

  1. 进行动态分配IP地址,此时虽然可以省下也配IP地址,但是总数没有增加.

  1. NAT网络地址转换.本质上是将一个地址同时给多台设备使用.可以大大提高了IP地址的利用率,在区分时也可以用端口号来区分.

在NAT背景下,IP地址可以分为两个大类:

内网IP(私有IP):以10.开头的、以172.16.~172.31.开头的、以192.168.开头的.

外网IP(共有IP):除了内网IP之外的IP地址.

内网IP是可以重复出现的,外网IP是不可以重复出现的.

如果某个私网里面的设备想访问公网里面的设备,就需要对应的NAT(路由器),将IP地址进行映射,从而完成网络访问.

公网的设备无法直接访问私网的设备,不同局域网的私网设备也无法直接互相访问.

主机与服务器之间要进行连接,则如下图:

因此,服务器能拿到的只是路由器的IP,不能拿到我电脑的内网IP,如果我的电脑不主动和服务器联系,服务器也就不知道我的端口,从而无法主动的找到我.

NAT机制虽然能够有效的解决IP不够用的问题,但是带来的副作用就是:网络环境变得更加复杂了.

而IPv6可以根本上的解决IP不够用的问题.

IPv6使用16个字节表示IP地址,也就是42亿*42亿*42亿*42亿,这个数字完全可以分配地球上的每一台设备.

但是当前实际上仍然是以 NAT+IPv4+动态分配 的方式来进行网络组建的,真正使用IPv6的地方非常少,所以不展开讨论了.

3.地址管理

一个IP地址,可以分成两个部分,一个是网络号,一个是主机号.

网络号:标识网段,保证连接的两个网段具有不同的标识.

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

假如一个IP地址是:192.168.0.10

此时网络号一般为192.168.0

主机号一般为:10

那么这个网络号和主机号的分界线是怎么定的呢?

是通过子网掩码来设定的,如下图:

子网掩码也可以以一个32位的整数来表示,上图中的子网掩码换成32位整数就为:

1111 1111 1111 1111 1111 1111 0000 0000

子网掩码中,左侧都是1,右侧都是0.

其中所有的"1"位都是网络号,所有的"0"位都是主机号.

对于家用设备来说,子网掩码最常见的就是255.255.255.0了

4.一些特殊的IP地址

  1. 将IP地址中的主机地址全部设为0,就成了网络号.

  1. 将IP地址中的主机地址全部设为1,就成了广播地址,比如:192.168.0.255,使用UDP往这个地址上发送数据报,整个局域网的所有设备都能收到.

  1. 127.*的IP地址用于本机环回测试,通常为127.0.0.1.

  1. 若主机号为1(比如:192.168.0.1),通常是"网关IP"(不绝对),也就是网络的出入口.

相关文章:

IP 协议

1.IP协议报头如下图:版本号 代表的是当前的IP协议的版本,此处的版本一共有两个取值:v4和v6.本文着重针对v4版本进行解析.首部长度 代表的是整个IP报头的长度,这个报头长度是可变长的,可变长的原因在于报头中的选项,这个属性是一个可有可无的属性,会改变报头长度,它的单位是32bi…...

好用的SQL工具盘点:从学习到工作总有一款适合你

标题一.入坑阶段(学习入门): 这个阶段一般就是小白,想学习SQL语言,然后到处找软件,找免费破解版找半天,找到了半天安装不下来,还可能把自己电脑搞中毒。 其实对于小白来说&#xf…...

Memcache介绍

Memcache介绍 Memcache是一个分布式内存对象缓存系统,其功能是为应用程序提供快速和可伸缩的数据存储。memcache使用简单,定义了相对少数几种操作(set,add,replace,get,flush_all等&#xff09…...

PTA:C课程设计(1)

山东大学(威海)2022级大一下C习题集(1)1-7-1 求幂级数展开的部分和1-7-2 查询水果价格1-7-3 猜数字游戏1-7-4 特殊a串数列求和1-7-5 成绩统计分析表1-7-6 换硬币1-7-7 验证“哥德巴赫猜想”1-7-1 求幂级数展开的部分和 #include&…...

第二十篇 ResNet——模型讲解

​ 摘要 ResNet(Residual Neural Network)由微软研究院的Kaiming He等四名华人提出,通过使用ResNet Unit成功训练出了152层的神经网络,并在ILSVRC2015比赛中取得冠军,在top5上的错误率为3.57%,同时参数量比VGGNet低,效果非常明显。 模型的创新点在于提出残差学习的思…...

LeetCode经典算法题:矩阵中省份数量经典题目+三角形最大周长java多种解法详解

LeetCode经典算法题:矩阵中省份数量经典题目三角形最大周长java多种解法 文章目录1 省份数量题目描述解题思路与代码解法一:深度优先解法二:广度优先解法三:并查集2 三角形的最大周长题目描述解题思路与代码贪心算法:1…...

Vue3通透教程【一】Vue3现状—必然趋势?

文章目录🌟 专栏介绍🌟 Vue默认版本🌟 拥抱Vue3的UI🌟 Vue3显著优势🌟 小彩蛋🌟 写在最后🌟 专栏介绍 凉哥作为 Vue 的忠诚粉丝输出过大量的 Vue 文章,应粉丝要求开始更新 Vue3 的相…...

打破数据孤岛,Apache Doris 助力纵腾集团快速构建流批一体数仓架构|最佳实践

福建纵腾网络有限公司(简称“纵腾集团”)成立于 2009 年, 以“全球跨境电商基础设施服务商”为企业定位,聚焦跨境仓储与物流, 为全球跨境电商商户、出口贸易企业、出海品牌商提供海外仓储、商业专线物流、定制化物流等…...

什么是真正的骨传导耳机,骨传导耳机原理

骨传导耳机大多采用后挂耳/夹耳佩戴方式,但现在很多人分不清哪些是骨传导耳机,哪些是气传导耳机。看完这篇教会你辨别哪些是真正的骨传导耳机。 骨传导耳机采用固体传声方式,整个耳机机身都没有传声音孔的设计,主要通过耳机振子发…...

[MySQL]基本数据类型及表的基本操作

哈喽,大家好!我是保护小周ღ,本期为大家带来的是 MySQL 数据库常用的数据类型,数据表的基本操作:创建、删除、修改表,针对修改表的结构进行了讲解,随后是如何向数据表中添加数据,浅浅…...

华为OD机试 - 好朋友(Python) | 机试题+算法思路+考点+代码解析 【2023】

好朋友 题目 在学校中 N个小朋友站成一队 第i个小朋友的身高为height[i] 第i个小朋友可以看到第一个比自己身高更高的小朋友j 那么j是i的好朋友 (要求:j > i) 请重新生成一个列表 对应位置的输出是每个小朋友的好朋友的位置 如果没有看到好朋友 请在该位置用0代替 小朋友…...

SAP ABAP用程序给用户增加SAP_ALL权限

给用户增加SAP_ALL的权限,报表可对basis与abap开发人员对用户权限管理的思路,谢绝用于其它用途,后果自负。 REPORT ZTESTCREATEUSER. data: l_USR04 LIKE USR04 , l_UST04 LIKE UST04 , l_PROFS LIKE USR04-PROFS , l_…...

stm32f407探索者开发板(二十)——独立看门狗实验

文章目录一、独立看门狗概述1.1 独立看门狗二、常用寄存器和库函数配置2.1 独立看门狗框图2.2 键值寄存器IWDG_KR2.3 预分频寄存器IWDG_PR2.4 重装载寄存器IWDG_RLR2.5 状态寄存器IWDG_SR2.6 IWDG独立看门狗操作库函数三、手写独立看门狗实验3.1 操作步骤3.2 iwdg.c3.3 iwdg.h3…...

C语言进阶(五)—— 多维数组

1. 一维数组 元素类型角度:数组是相同类型的变量的有序集合内存角度:连续的一大片内存空间在讨论多维数组之前,我们还需要学习很多关于一维数组的知识。首先让我们学习一个概念。1.1 数组名考虑下面这些声明:int a; int b[10];我们…...

06_MySQL多表查询

多表查询,也称为关联查询,指两个或更多个表一起完成查询操作。前提条件:这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也…...

程序员赚钱指南,兼职社区招募

👨‍💻作者简介:大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享。 🎉专栏推荐:目前在写一个CV方向专栏,后期会更新不限于目…...

Qt-FFmpeg开发-实现录屏功能(10)

#音视频/FFmpeg #Qt Qt-FFmpeg开发-实现录屏功能💬 文章目录Qt-FFmpeg开发-实现录屏功能💬1、概述💥2、实现效果💨3、FFmpeg录屏代码流程👁️‍🗨️4、主要代码🤙5、完整源代码🤏更…...

JavaEE简单示例——动态SQL元素<where>

简单介绍: 在我们之前使用where关键字进行查询的时候,总是会在后面添加一个11恒等式,并且在每一个可能拼接的SQL语句前面都加上一个and关键字,防止当后续的所有条件都不满足的时候,where关键字在最后直接跟and的时候也…...

本地事务详解

1、事务的基本性质 数据库事务的几个特性:原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation) 和持久性(Durabilily),简称就是 ACID;  原子性:一系列的操作整体不可拆分,要么同时成功&#x…...

e2e测试-Cypress 使用

● 官网 ● GitHub 一、安装 # npm npm install cypress --save-dev# yarn yarn add cypress --dev添加 npm 脚本: {"scripts": {"cypress:open": "cypress open"} }启动: npm run cypress:open二、编写测试 Cypress…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...