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千万这个数字是远远不够的.
解决这个问题,有以下两种方法:
进行动态分配IP地址,此时虽然可以省下也配IP地址,但是总数没有增加.
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地址
将IP地址中的主机地址全部设为0,就成了网络号.
将IP地址中的主机地址全部设为1,就成了广播地址,比如:192.168.0.255,使用UDP往这个地址上发送数据报,整个局域网的所有设备都能收到.
127.*的IP地址用于本机环回测试,通常为127.0.0.1.
若主机号为1(比如:192.168.0.1),通常是"网关IP"(不绝对),也就是网络的出入口.
相关文章:
IP 协议
1.IP协议报头如下图:版本号 代表的是当前的IP协议的版本,此处的版本一共有两个取值:v4和v6.本文着重针对v4版本进行解析.首部长度 代表的是整个IP报头的长度,这个报头长度是可变长的,可变长的原因在于报头中的选项,这个属性是一个可有可无的属性,会改变报头长度,它的单位是32bi…...
好用的SQL工具盘点:从学习到工作总有一款适合你
标题一.入坑阶段(学习入门): 这个阶段一般就是小白,想学习SQL语言,然后到处找软件,找免费破解版找半天,找到了半天安装不下来,还可能把自己电脑搞中毒。 其实对于小白来说…...
Memcache介绍
Memcache介绍 Memcache是一个分布式内存对象缓存系统,其功能是为应用程序提供快速和可伸缩的数据存储。memcache使用简单,定义了相对少数几种操作(set,add,replace,get,flush_all等)…...
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…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
第三周 Day 3 🎯 今日目标 理解类(class)和对象(object)的关系学会定义类的属性、方法和构造函数(init)掌握对象的创建与使用初识封装、继承和多态的基本概念(预告) &a…...
React核心概念:State是什么?如何用useState管理组件自己的数据?
系列回顾: 在上一篇《React入门第一步》中,我们已经成功创建并运行了第一个React项目。我们学会了用Vite初始化项目,并修改了App.jsx组件,让页面显示出我们想要的文字。但是,那个页面是“死”的,它只是静态…...
echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...
Django RBAC项目后端实战 - 03 DRF权限控制实现
项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...
