Linux——IP协议
1. 现实意义
• IP协议:提供一种能力,把数据报从主机A跨网络送到主机B
• TCP/IP协议:核心功能,把数据100%可靠的从主机A跨网络送到主机B
注:TCP协议负责百分百可靠,通过三次握手、滑动窗口、拥塞控制、延时应答等一系列机制。IP协议负责传输数据报
• 现实情况:网络中大存在大量的主机,因此必须标识主机的唯一性,所以每台主机都有自己的IP地址。
• 概念:IP地址 = 网络号 + 主机号
2. IP协议报头的组成
问:如何进行报文解包?
答:4位首部长度决定报头大小,16位总长度决定整个报文大小,有了总长度和报头长度就可以进行解包
问:IP协议如何确定将有效载荷传给上层的哪一个协议?(分用问题)
答:8位协议表明自己的有效载荷是什么数据,是TCP就交给TCP,是UDP就交给UDP,这是传输层向网络层交付有效载荷时确定的
2.1 IP协议报头中其他成员作用
• 4位版本:大多数情况是IPV4,IPV6和IPV4不兼容
• 8位服务类型:3 位优先权字段(已经弃用), 4 位 TOS 字段, 和1 位保留字段(必须置为 0). 4 位 TOS 分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于 ssh/telnet 这样的应用程序, 最小延时比较重要; 对于 ftp 这样的程序, 最大吞吐量比较重要.
• 8位生存时间(TTL):本质是一个计数器,目的是防止数据包在网络中无限循环,导致出现网络拥塞问题,当数据包每经过一个路由器时,个数就会减减,在个数减到0时,就会被丢弃。
• 16位首部校验和:用于检测数据在传输过程中是否出现错误的机制,确保 IP 数据包的头部信息在传输过程中没有被篡改或损坏,保证网络通信的可靠性。
3. 通过学院管理来认识网络中的一些概念
以大学管理为例:假设计算机学院(学院编号为06)的某位学生A(学号为06001),捡到了一个机械学院某位学生B(假设学号为01005)的钱包,作为计算机院的学生A,他知道01不是自己学院的编号,所以他会联系自己学院的学生会主席,作为学生会主席,他知道每个学院的编号,因此他就会通知机械院(编号01)的主席,机械院主席就会拿着对应学号去自己学院下找人。
• 01 称为源网络号,06 称为目标网络号
• 005 称为源主机号, 001 称为目标主机号
• 由IP地址的定义就可得知,01005为源IP地址,06001为目标IP地址
• 学生相当于主机,学院主席相当于路由器,整个学校相当于公网
• 学校为每个学院分配的编号是公网的一部分
• 为每个学生分配的学号叫做私网/内网
• 01005号学生将钱包交给学院主席的过程叫:内网转发
• 计算机院的主席将钱包交给机械院主席的过程叫:公网转发
子网划分:将一个大的网络划分为多个更小的网络(即子网)的过程。(将一个大的学校,划分为几个学院的过程)
问:为什么进行子网划分?(为什么学校要分学院管理?)
认识:路由报文本质是:查找主机,而查找的本质是:淘汰。以二分查找为例,当选了左半区域,右半区域就被淘汰了,只要淘汰效率高,那么查找的效率就高,当你把报文传给主席,说明自己院里的学生全淘汰了,当计算机院主席把报文给机械院主席,其他学院就淘汰了。
答:来查找目标主机,必须查找目标网络,本质就可以淘汰其他网络,可以在全网中提高查找目标主机的效率
认知:主机中的IP是通过路由器进行分配的,叫做DHCP协议,属于应用层协议
注:路由除了有路由功能以外,还有构建子网的功能
注:举这个例子的目的是为了有这样一个认识:网络本身是经历了十几年发展的产物,网络本身就是被设计好的,就如同学号,认识网络是如何被设计的,比理解其中的算法更重要。
4. 认识IP地址
IP地址一共被分为五类:
• A 类 0.0.0.0 到 127.255.255.255• B 类 128.0.0.0 到 191.255.255.255• C 类 192.0.0.0 到 223.255.255.255• D 类 224.0.0.0 到 239.255.255.255• E 类 240.0.0.0 到 247.255.255.255注:前三类分别对应于大型网络、中型网络、小型网络
问题:可以看到无论哪一类,主机号的数量都特别的庞大,在实际网络架构中,没有哪个子网会出现这么多的主机数量,因此大量的位都被浪费掉了解决措施:子网掩码
4.1 子网掩码
子网掩码的作用:1.将IP地址分为网络号和主机号 2.进行网络地址划分 3.将划分好的网络地址与自己的网络地址进行比较,来判断是否同属于一个子网
网络中的子网划分:本质是通过IP地址和子网掩码确定一个子网地址范围,除去网络地址和广播地址,其他地址均可以供任意主机使用。(公网和私网都适用)
子网划分的例子1:
将IP地址与子网掩码相与,得到网络号,后8个字节为0,代表主机号,那么该主机号一共有256个,但实际上,140.252.20.0代表代表这个局域网,而140.252.20.255代表广播地址,所以一共的主机数为256-2=254
子网划分的例子2:
将IP地址与子网掩码相与,得到网络号,后4个字节为0,代表主机号,那么该主机号一共有16个,减去局域网地址和广播地址一共就有14个。
注:240(十进制) = 11110000(二进制)
认知:即使有了子网掩码,优化了IP地址的利用率,32位能表示的主机数量大约为43亿,远不及当今网民总数,因此还需要另外的方法来解决:动态分配IP(只给接入网络的设备分配ip地址)、NAT技术、IPv6
4.2 私网IP地址
• 规定1:
A 类私网地址:
10.0.0.0
到10.255.255.255
(子网掩码:255.0.0.0
/8
)B 类私网地址:
172.16.0.0
到172.31.255.255
(子网掩码:255.240.0.0
/12
)C 类私网地址:
192.168.0.0
到192.168.255.255
(子网掩码:255.255.0.0
/16
)• 规定2:
私网IP地址不能出现在公网当中!
• 认识1:
除了上述IP地址以外,其他地址均为公网IP地址
• 认识2:
私网IP地址在不同子网内是可以重复的!
问:为什么要这样子划分?
答:为了解决全球IP地址不足的问题,假设原先一共有1W个IP地址,那么只能分配给1W台主机,但如果我拿其中3000作为私网IP地址,另外7000作为公网IP地址,并且规定,公网IP地址不能重复,私网IP地址可以重复,那么就能分配给7000*3000台主机,数量大大增加。
4.3 公网IP地址
除去私网地址IP以外,都是公网IP。
• 认识1:公网IP根据每个国家网民的数量来进行分配的
• 认识2:公网IP在公网内部不能重复!
• 认识3:从公网IP可以读取到一些信息,比如国家、省份/州、市区.....
4.4 简单认识路由器
路由器内部有WAN口IP地址,和LAN口IP地址,不同路由器的WAN口IP地址和LAN口IP地址代表不同类型的IP地址。
对于运营商路由器,他的WAN口IP地址是公网IP,LAN口IP地址为私网IP;
对于家庭路由器,他的WAN口IP地址和LAN口IP地址都为私网IP;
结论:运营商路由器是公网IP分配的最后一环,运营商路由器之后的所有IP都是私有IP,由运营商来构建子网
4.5 私有IP是如何通过公网传达自己的报文的?
问:私网IP是不能出现在公网中的,那么私网IP的报文该如何通过公网发送自己的报文呢?
答:NAT技术
图示:
因为私网ip不能出现在公网中,所以主机每次经过路由器时,会将路由器内的WAN口IP与报文中的源IP做交换处理,传达给上一层,当抵达运营商IP时,此时WAN口IP为共网IP,于是报文就获得了公网IP,可以进入到公网当中,实现报文的传递。
注:每次进行源IP和WAN口IP的交换时,路由器内部都会将两者的映射关系保存下来,以便接收后续回应。
4.6 其他路由器
前言:真正的网络拓补图是十分复杂的!这里的介绍是简单到不能在简单的,只是大致思路,并非真正的实现方式!!!
以国内为例,除了运营商路由器(ISP路由器),还有省间路由器(区域路由器),以及国际路由器(核心路由器)。所有的路由器都存储着两张路由表,
国际路由器:记录国外路由表、国内路由表,
省间路由器:记录了其他省的路由表、省内所有市区的路由表
注:一般而言,从市区开始就可以通过运营商构建子网了
路由表简单介绍:路由器和计算机用来确定 数据包发送路径 的表格,包含了 网络目标地址 和 到达该地址的路径
国际报文:
假设一个俄罗斯用户想要发送一个中国IP的报文,该IP为5.1.16.X,该IP会与俄罗斯某个州的16位子网掩码相与得到5.1.0.0,查表后发现对不上,说明不是俄罗斯境内的IP地址,会到下一跳,将IP与八位子网掩码相与得到5.0.0.0,查表后知晓是中国的IP地址,于是会到下一跳。再将IP地址与16位子网掩码相与得到5.1.0.0找到对应省份,转到下一跳,以此类推。
国内报文:
假设一个河北的报文要发到江苏苏州,假设该报文位5.1.16.X,河北区域的路由器将该IP通过24位子网掩码相与,发现不是河北省内的IP,于是转到下一跳,将IP地址与16为子网掩码相与得到5.1.0.0,查表后发现是江苏省的IP地址,转到下一跳,依次类推找到对应主机。
注:这种通过子网掩码获得网络号、查表、下一跳的过程可以具象为:“问路”的过程
认识:eth0物理以太网接口,用于物理以太网链接,通过 网线 将计算机连接到本地网络或路由器。(出接口涉及链路层,这里先做了解)
5. IP报头的另外三个成员——分片机制
数据链路层规定:从传输层接收下来的完整报文,大小不能超过MTU(最大传输单元,1500字节),如果超过了就要进行分片
注1:实际上考虑到IP报头以及TCP报头的大小,传输层单次传送的最大报文为1460(MSS)字节
注2:这也就是为什么滑动窗口需要分段的原因了
注3:
MTU决定了IP数据包的大小(含IP头和TCP头)
MSS决定了TCP有效载荷的大小,不含TCP头
MTU决定了MSS的大小 MSS = MTU - IP报头 - TCP报头 = 1460(通常情况下)
TCP在三次握手的握手的过程中,可以确定对方MSS的大小,以较小一端的来决定未来发送载荷的大小。
结论1:过大的IP需要在网络层进行分片,分完片后,需要在对端重新组装
注:分片的问题 → 缺了任何一片都会导致整体的丢失,对于TCP协议就会触发丢包重传
结论2:网络通信中,如果分片过多,会导致丢包概率增加!因此分片和组装不是主流,是被迫为之,因此需要减少分片,本质就是在传输层控制滑动窗口的大小
问:如何分片?
答:每一个分片后的报文都包含IP报头,其中
👉:16位标识:不同报文,标识不同,相同分片,标识相同;
👉:3位标志 第一位做保留,第二位置一标识禁止分片,第三位表示”更多分片”,最后一片 的第三位置零,其他置一,标识结束位。
👉:13位片偏移标识当前片在整个报文的偏移
问:如何甄别是否分片?怎么保证对端把分片全收齐了?怎么组装?
答1:如果3位标志位的第三位为1,表明分片了,如果第三位为0,但是片偏移非0,说明分片了;反之,如果3位标志位第三位为0,片偏移也为0,说明没有分片
答2:把16位标志位相同的片聚合在一起后,对片偏移做升序排序,片偏移+自身片的报文长度 = 下一个片的片偏移数字,如果对不上就说明缺失了,反之收齐
答3:对片偏移进行升序排序的过程就是组装的过程
相关文章:

Linux——IP协议
1. 现实意义 • IP协议:提供一种能力,把数据报从主机A跨网络送到主机B • TCP/IP协议:核心功能,把数据100%可靠的从主机A跨网络送到主机B 注:TCP协议负责百分百可靠,通过三次握手、滑动窗口、拥塞控制、延…...
Lua 脚本在 Redis 中的运用-24 (使用 Lua 脚本实现原子计数器)
实践练习:使用 Lua 脚本实现原子计数器 实现原子计数器是许多应用程序中的常见需求,例如跟踪网站访问量、限制 API 请求或管理库存。虽然 Redis 提供了 INCR 命令用于递增整数,但在复杂场景或与其他操作结合时直接使用它可能并不足够。本课程探讨了如何在 Redis 中利用 Lua…...

Linux信号量(32)
文章目录 前言一、POSIX 信号量信号量的基础知识信号量的基本操作 二、基于环形队列实现生产者消费者模型环形队列单生产单消费模型多生产多消费模型 总结 前言 加油,加油!!! 一、POSIX 信号量 信号量的基础知识 互斥、同步 不只…...

技术视界 | 打造“有脑有身”的机器人:ABC大脑架构深度解析(上)
ABC大脑架构:连接大模型与物理世界的具身智能新范式 在具身智能和类人机器人技术快速发展的背景下,如何高效整合“大模型的认知理解能力”与“对真实物理世界的精准控制”,成为当前智能体系统设计中最具挑战性也是最关键的问题之一。尽管大语…...

使用堡塔和XShell
使用堡塔和XShell 一、SSH协议介绍 SSH为SecureShell的缩写,由IETF的网络小组(NetworkWorkingGroup)所制定;SSH为建立在应用层基础上的安全协议。SSH是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中…...

软件项目交付阶段,验收报告记录了什么?有哪些标准要求?
软件项目交付阶段,验收报告扮演着至关重要的角色,它相当于一份详尽的“成绩单”,具体记录了项目完成的具体情况以及是否达到了既定的标准。 项目基本信息 该环节将展示软件项目的核心信息,包括项目名称、开发团队构成、项目实施…...

LightGBM的python实现及参数优化
文章目录 1. LightGBM模型参数介绍2. 核心优势3. python实现LightGBM3.1 基础实现3.1.1 Scikit-learn接口示例3.1.2 Python API示例 3.2 模型调优3.2.1 GridSearchCV简介3.2.2 LightGBM超参调优3.2.3 GridSearchCV寻优结果解读 在之前的文章 Boosting算法【AdaBoost、GBDT 、X…...

封装渐变堆叠柱状图组件附完整代码
组件功能 这是一个渐变堆叠柱状图组件,主要功能包括: 在一根柱子上同时显示高、中、低三种危险级别数据使用渐变色区分不同危险级别(高危红色、中危橙色、低危蓝色)悬停显示详细数据信息(包括总量和各级别数据&#…...
分布式项目保证消息幂等性的常见策略
Hello,大家好,我是灰小猿! 在分布式系统中,由于各个服务之间独立部署,各个服务之间依靠远程调用完成通信,再加上面对用户重复点击时的重复请求等情况,所以如何保证消息消费的幂等性是在分布式或…...

山东大学软件学院创新项目实训开发日志——第十三周
目录 1.开展prompt工程,创建个性化AI助理,能够基于身份实现不同角度和语言风格的回答。 2.对输出进行格式化,生成特定格式的会议计划文档。 3.学习到的新知识 本阶段我所做的工作 1.开展prompt工程,创建个性化AI助理ÿ…...
如何在sublime text中批量为每一行开头或者结尾添加删除指定内容
打开你的文件:首先,在 Sublime Text 中打开你想要编辑的文件,然后全选 行首插入: 选择所有行的开头: 使用快捷键 Ctrl Shift L(Windows/Linux)或 Cmd Shift L(Mac)&…...

Cesium 透明渐变墙 解决方案
闭合路径修复 通过增加额外点确保路径首尾相接 透明渐变效果 使用RGBA颜色模式实现从完全不透明到完全透明的平滑渐变 参数可调性 提供多个可调参数,轻松自定义颜色、高度和圆环尺寸 完整代码实现 <!DOCTYPE html> <html> <head><meta …...
网络原理与 TCP/IP 协议详解
一、网络通信的本质与基础概念 1.1 什么是网络通信? 网络通信的本质是跨设备的数据交换,其核心目标是让不同物理位置的设备能够共享信息。这种交换需要解决三个核心问题: 如何定位设备? → IP地址如何找到具体服务?…...

day022-定时任务-故障案例与发送邮件
文章目录 1. cron定时任务无法识别命令1.1 故障原因1.2 解决方法1.2.1 对命令使用绝对路径1.2.2 在脚本开头定义PATH 2. 发送邮件2.1 安装软件2.2 配置邮件信息2.3 巡检脚本与邮件发送2.3.1 巡检脚本内容2.3.2 制作时任务发送邮件 3. 调取API发送邮件3.1 编写文案脚本3.2 制作定…...

新增 git submodule 子模块
文章目录 1、基本语法2、添加子模块后的操作3、拉取带有submodule的仓库 git submodule add 是 Git 中用于将另一个 Git 仓库作为子模块添加到当前项目中的命令。 子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录,同时保持它们各自的提交历史独立。 1、基…...

List优雅分组
一、前言 最近小永哥发现,在开发过程中,经常会遇到需要对list进行分组,就是假如有一个RecordTest对象集合,RecordTest对象都有一个type的属性,需要将这个集合按type属性进行分组,转换为一个以type为key&…...

Linux 使用 Docker 安装 Milvus的两种方式
一、使用 Docker Compose 运行 Milvus (Linux) 安装并启动 Milvus Milvus 在 Milvus 资源库中提供了 Docker Compose 配置文件。要使用 Docker Compose 安装 Milvus,只需运行 wget https://github.com/milvus-io/milvus/releases/download/v2.5.10/milvus-standa…...

AR眼镜+AI视频盒子+视频监控联网平台:消防救援的智能革命
在火灾现场,每一秒都关乎生死。传统消防救援方式面临信息滞后、指挥盲区、环境复杂等挑战。今天,一套融合AR智能眼镜AI视频分析盒子智能监控管理平台的"三位一体"解决方案,正在彻底改变消防救援的作业模式,为消防员装上…...

编程技能:字符串函数10,strchr
专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 (一)WIn32 专栏导航 上一篇:编程技能:字符串函数09,strncmp 回到目录…...

使用tunasync部署企业内部开源软件镜像站-Centos Stream 9
使用tunasync部署企业内部开源软件镜像站 tunasync 是清华大学 TUNA 镜像源目前使用的镜像方案,本文将介绍如何使用 tunasync 部署企业内部开源软件镜像站。 基于tunasync mirror-web nginx进行镜像站点搭建。 1. tunasync设计 tunasync架构如下: …...
c/c++的opencv像素级操作二值化
图像级操作:使用 C/C 进行二值化 在数字图像处理中,图像级操作 (Image-Level Operations) 是指直接在图像的像素级别上进行处理,以改变图像的视觉特性或提取有用信息。这些操作通常不依赖于图像的全局结构,而是关注每个像素及其邻…...

C++----Vector的模拟实现
上一节讲了string的模拟实现,string的出现时间比vector靠前,所以一些函数给的也比较冗余,而后来的vector、list等在此基础上做了优化。这节讲一讲vector的模拟实现,vector与模板具有联系,而string的底层就是vector的一…...

Mac redis下载和安装
目录 1、官网:https://redis.io/ 2、滑到最底下 3、下载资源 4、安装: 5、输入 sudo make test 进行编译测试 会提示 编辑 6、sudo make install 继续 7、输入 src/redis-server 启动服务器 8、输入 src/redis-cli 启动测试端 1、官网ÿ…...

[25-cv-05718]BSF律所代理潮流品牌KAWS公仔(商标+版权)
潮流品牌KAWS公仔 案件号:25-cv-05718 立案时间:2025年5月21日 原告:KAWS, INC. 代理律所:Boies Schiller Flexner LLP 原告介绍 原告是一家由美国街头艺术家Brian Donnelly创立的公司,成立于2002年2月25日&…...
【PhysUnits】9 取负重载(negation.rs)
一、源码 这段代码是类型级二进制数(包括正数和负数)的取反和取负操作。它使用了类型系统来表示二进制数,并通过特质(trait)和泛型来实现递归操作。 use super::basic::{B0, B1, Z0, N1}; use core::ops::Neg;// 反…...

深度思考、弹性实施,业务流程自动化的实践指南
随着市场环境愈发复杂化,各类型企业的业务步伐为了跟得上市场节奏也逐步变得紧张,似乎只有保持极强的竞争力、削减成本、提升抗压能力才能在市场洪流中博得一席之位。此刻企业需要制定更明智的解决方案,以更快、更准确地优化决策流程。与简单…...

UWB:litepoint获取txquality里面的NRMSE
在使用litepoint测试UWB,获取txquality里面的NRMSE时,网页端可以正常获取NRMSE。但是通过SCPI 命令来获取NRMSE一直出错。 NRMSE数据类型和pyvisa问题: 参考了user guide,发现NRMSE的数值是ARBITRARY_BLOCK FLOAT,非string。 pyvisa无法解析会返回错误。 查询了各种办法…...

VUE npm ERR! code ERESOLVE, npm ERR! ERESOLVE could not resolve, 错误有效解决
VUE : npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve 错误有效解决 npm install 安装组件的时候出现以上问题,npm版本问题报错解决方法:用上述方法安装完成之后又出现其他的问题 npm install 安装组件的时候出现以上问题&…...

IoT/HCIP实验-1/物联网开发平台实验Part1(快速入门,MQTT.fx对接IoTDA)
文章目录 实验介绍设备接入IoTDA进入IoTDA平台什么是IoTDA 开通服务创建产品和设备定义产品模型(Profile)设备注册简思(实例-产品-设备) 模拟.与平台通信虚拟设备/MQTT.fx应用 Web 控制台QA用户或密码错误QA证书导致的连接失败设备与平台连接成功 上报数…...

DMA STM32H7 Domains and space distrubution
DMA这个数据搬运工,对谁都好,任劳任怨,接受雇主设备的数据搬运业务。每天都忙碌着!哈哈哈。 1. DMA 不可能单独工作,必须接收其他雇主的业务,所以数据搬运业务的参与者是DMA本身和业务需求发起者。 2. 一…...