网络原理——网络层
网络层重要涉及到的协议是IP协议。
IP协议主要完成的工作是:
- 地址管理
- 路由选择
1. IP协议的组成
-
版本(Version):占4位,表示IP协议的版本号。目前广泛使用的版本是IPv4和IPv6。
-
头部长度(Header Length):占4位,表示IP报头的长度,以32位字(4字节)为单位。由于IP报头的长度是可变的,所以这个字段表示IP报头的字数。最小值为5(20字节),最大值为15(60字节)。
-
服务类型(Type of Service):占8位,用于指定IP数据包的服务质量要求,如优先级、延迟、可靠性等。
-
总长度(Total Length):占16位,表示整个IP数据包的总长度,包括IP报头和数据部分。最大值为65535字节。
-
标识(Identification):占16位,用于唯一标识一个IP数据包。在分片和重新组装过程中起到重要作用。
-
标志(Flags):占3位,用于标识IP数据包的特殊处理方式。其中,第1位保留,第2位表示是否允许分片,第3位表示是否为最后一个分片。
-
片偏移(Fragment Offset):占13位,用于指示当前分片在原始IP数据包中的位置。通过片偏移和标识字段,可以在目标主机上重新组装分片。
-
生存时间(Time to Live):占8位,表示IP数据包在网络中的最长存活时间,以防止报文在网络中永远循环。每经过一个路由器,生存时间减1,当生存时间为0时,数据包将被丢弃。
-
协议(Protocol):占8位,指定封装在IP数据包中的上层协议类型,如TCP、UDP、ICMP等。
-
校验和(Header Checksum):占16位,用于检测IP报头是否出现错误,以保证报头的完整性。
-
源IP地址(Source IP Address)和目标IP地址(Destination IP Address):分别占32位,表示发送方和接收方的IP地址。
-
选项(Options):可选字段,用于在IP报头中添加一些额外的选项信息,如记录路由、时间戳等。
解释:
- 服务类型:实际上只有4位有效,并且这4位只能有一位为1其余为0,用于表示当前IP协议的所处模式:最小延时(从发送到接收的时间最小), 最大吞吐量(单位时间内传输的 数据尽可能的多),最高可靠性(减少丢包概率),最小成本(降低硬件设备的开销 ),只能同时存在一种模式。
- 总长度:注意此处和UDP不同,不代表IP协议的载荷长度有限,因为,IP协议有 拆包/组包 的功能,如果载荷很大,IP协议就会自动拆成多个 IP 数据报,每个数据报携带载荷的一部分,等到达接收方的网络层再重新组装。
- 标识:用于组装数据时区分拆分后的数据中哪些IP数据报的载荷是一组,同一组的数据标识相同。
- 片偏移:用于组装数据时区分数据的先后,数字小的在前面,=。
- 标志:只有两位有效,其中一位表示,当前IP数据是否被拆包,即是否为一个完整的数据;还有一位表示结束标记,即表示当前的数据报是这个数据被拆分后的最后一个包,
- 生存时间: 单位为次数,一个IP数据报每经过一个路由器转发,TTL就会减1,如果这个 数值减少到0了,此时这个数据报就会被丢弃,为了防止数据在网络中找不到目的地而在网络中一直循环。一般初始值为32/64。
- 协议:表示传输层使用的是哪个协议。
- 校验和:IP协议中的校验和只针对IP报头,应为载荷中的 TCP/UDP协议自带校验和。
2. 地址管理
IP地址本质上是一个32位整数,为了方便通常把IP地址表示为点分十进制,通过三个点分成四个部分,每个部分一个字节,每个部分的取值都是0-255.
IP地址的存在是为了能够区分网路上的不同的设备,但是32位整数最多只能表示42亿多个数,而世界上约有70亿人,所以实际的电子设备数量是超过了4个字节能表示的范围,显然做不到每个网络设备都有一个唯一的IP地址。
上个世纪90年代就面临了这样的问题,于是提出了两个解决方案:
1. 动态分配IP地址
全世界的设备也不是同一时刻都在上网,就把IP地址设为动态分配的模式,当你用到再给你分配IP地址。
2. NAT机制(网络地址映射)
把IP地址分为两个大类:
1. 私网IP / 局域网IP
IP以 10.* , 172.16.* - 172.31.* , 192.168.* 这三类都是私网IP
2. 公网IP / 广域网IP
要求公网上的设备IP不能重复,私网上的设备,只需保证局域网内的IP不重复即可,不同局域网中的IP可以重复。
由于这个机制就有了一些限制:
1.公网设备访问公网设备,没有限制
2.相同局域网内设备互相访问也没有限制
3.不同局域网间设备不能访问,因为有可能遇到两个局域网中存在相同的IP地址。
4. 局域网设备访问公网设备需要对局域网设备的IP转换为公网IP
5. 公网设备不允许主动访问局域网设备。
路由器集成了NAT,一般路由器都会有两个IP地址,一个是LAN口IP(一般是一个局域网IOP),一个是WAN口IP( 可能是局域网IP,也可能是公网IP),路由器的核心功能就是把这两个网络连接起来。当数经过这个路由器,想进一步转发,就会把IP报头中的源IP进行替换,替换为该路由器的WAN口IP(只有源IP是私网IP时才会替换),这个数据包到达服务器之后,服务器看到的IP就是路由器的WAN口IP。这样的机制就能让多个设备共用一个公网IP发送数据。
服务器返回数据时如何找到原来的设备?
路由器进行替换IP时,会把这次通信的相关信息记录下来,如:源IP,替换后的IP,目的IP,源端口号,目的端口号,替换后的端口号,等信息,路由器接收到返回的数据时,就会对照储存的信息把IP还原。
替换后的端口号:为了防止无法区分不同主机的同一个端口访问同一个服务器的情况,路由器发送数据时还会对源端口号进行一个替换。
当前互联网 是 NAT + 动态分配结合的模式。
3. IPV6
IPV6使用 16个字节表示IP地址,从根本上解决了问题。
但是IPV6的报头结构和IPV4不兼容,要使用IPV6就需要更新硬件设备,所以当前仍然是IPV4使用的更多。
3. 网段划分
网段划分是指将一个大的网络划分成若干个子网络的过程。在计算机网络中,通常使用IP地址和子网掩码来进行网段划分。IP地址用于唯一标识网络中的每个设备,而子网掩码用于指定哪些部分是网络号,哪些部分是主机号。
在IP地址中,网络号和主机号是用来划分一个网络中不同设备的标识部分。
网络号(Network ID)是指用于标识一个网络的一部分位。它表示的是一个IP地址所属的网络。通过网络号,可以确定一个IP地址属于哪个网络,从而实现在不同网络之间的通信。
主机号(Host ID)是指用于标识一个网络中具体设备的一部分位。它表示的是网络中的一个具体主机或设备的地址。通过主机号,可以唯一标识一个设备,并在网络中进行通信。
在IPv4地址中,网络号和主机号的划分是基于子网掩码(Subnet Mask)的。子网掩码中的1位表示网络号,0位表示主机号。子网掩码与IP地址逐位进行逻辑与运算,得到的结果就是网络号和主机号的划分。
例如,假设有一个IP地址为192.168.0.1,子网掩码为255.255.255.0,那么它的网络号就是192.168.0,主机号就是1。这样划分后,192.168.0.x范围内的IP地址都属于同一个网络,可以直接进行通信。
通过网络号和主机号的划分,可以实现有效的网络管理和通信。不同网络号的设备需要通过路由器进行通信,而同一网络号的设备可以直接通信。
注意:两个相邻的局域网的网络号必须不同
特殊的IP地址:
- 环回IP:127.0.0.1,表示本机(127.*都是环回IP)
- 广播地址:如果某个IP的主机号二进制为全1,表示广播地址,如 192.168.255,即把数据发给局域网中的所有设备(只能发送UDP消息)
4. 路由选择
在IP协议中,每个路由器都维护了一个路由表,其中包含了路由器所知道的网络和与之相关联的下一个网络或设备信息。当一个路由器接收到一个数据包时,它会根据数据包的目标IP地址查找路由表,以确定应该将数据包发送到哪个接口和下一个网络或设备。 由于网络结构太复杂了,每个路由器都无法掌握全局的信息,所以路由器规划出来的路线只能是一个局部最优解,无法在最开始的时候就把路线确定好。
相关文章:
网络原理——网络层
网络层重要涉及到的协议是IP协议。 IP协议主要完成的工作是: 地址管理路由选择 1. IP协议的组成 版本(Version):占4位,表示IP协议的版本号。目前广泛使用的版本是IPv4和IPv6。 头部长度(Header Length&…...

ideaIU-2023.2.1安装教程
ideaIU-2023.2.1安装教程 一、ideaIU-2023.2.1安装1.1 下载IdeaIU-2023.2.1安装包1.2 安装ideaIU-2023.2.1 二、ideaIU-2023.2.1激活 💖The Begin💖点点关注,收藏不迷路💖 一、ideaIU-2023.2.1安装 1.1 下载IdeaIU-2023.2.1安装包…...
JAVA面试题之三分布式和微服务的区别是什么?
面试题之三 分布式和微服务的区别是什么? 难度指数:3星 考察频率:50% 开发年限:3年左右 二者是隶属于不同的概念。 一.概念 微服务是系统架构的设计方式,是将复杂的业务拆分成多个微型的服务,让这些…...
electron实现软件(热)更新(附带示例源码)
热更新指的是:electron 程序已经开启,在不关闭的情况下执行更新,需要我们把远程的app.asar文件下载到本地执行替换,然而 在electron应用程序开启状态是无法直接下载app.asar文件的,下载会检查出app.asar文件被占用&…...

飞天使-k8s知识点12-kubernetes散装知识点1-架构有状态资源对象分类
文章目录 k8s架构图有状态和无状态服务 资源和对象对象规约和状态 资源的对象-资源的分类元数据型与集群型资源命名空间 k8s架构图 有状态和无状态服务 区分有状态和无状态服务有利于维护yaml文件 因为配置不同资源和对象 命令行yaml来定义对象对象规约和状态 规约 spec 描述…...

mhz_c1f
信息收集 探测到存活主机的IP地址为 192.168.101.32 # nmap -sT --min-rate 10000 -p- 192.168.101.32 -oN port.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-03 13:41 CST Nmap scan report for 192.168.101.32 Host is up (0.0020s latency). Not shown: 6553…...

Excel——高级筛选匹配条件提取数据
一、筛选多条件 Q:筛选多个条件,并将筛选出的内容复制到其他区域 点击任意一个单元格 点击【数据】——【筛选】——【高级筛选】 选择【将筛选结果复制到其他位置】——在【列表区域】 鼠标选择对应的区域位置,条件区域一定要单独写出来&a…...

Python初学者学习记录——python基础综合案例:数据可视化——动态柱状图
一、案例效果 通过pyecharts可以实现数据的动态显示,直观的感受1960~2019年世界各国GDP的变化趋势 二、通过Bar构建基础柱状图 反转x轴和y轴 标签数值在右侧 from pyecharts.charts import Bar from pyecharts.options import LabelOpts# 构建柱状图对象 bar Bar()…...

1.27马尔科夫链,抽样蒙特卡洛模拟(逆转化方法,接受拒绝矩阵),马尔科夫链蒙特卡洛MCMC,隐马尔科夫(HMM(V算法剪枝优化),NLP)
马尔科夫链 蒙特卡洛法模拟 抽样,逆转换方法 就是说由系统自带的随机函数RANDOM,通过下面这个方法,可以变为对应的随机模拟函数 就是说要实现蒙特卡洛模拟,是要先有一个概率表达式,然后基于这个概率表达式࿰…...

MC34063异常发热分析
问题描述: 工程现场反馈若干电源转换模块损坏,没有输出。拿到问题模块后,查看有一个MC34063周围的PCB有比较明显的高温痕迹,配套的电感也有明显的高温过热痕迹。 问题调查: MC34063的电路非常经典(虽然自…...

获取真实 IP 地址(一):判断是否使用 CDN(附链接)
一、介绍 CDN,全称为内容分发网络(Content Delivery Network),是一种网络架构,旨在提高用户对于网络上内容的访问速度和性能。CDN通过在全球各地部署分布式服务器节点来存储和分发静态和动态内容,从而减少…...

跨越财务困境,聚道云软件连接器如何助力企业轻松实现数字化转型?
客户介绍 某家庭服务科技有限公司是一家专注于提供高品质家庭服务的综合性企业。公司以“让家庭生活更美好”为使命,致力于为每一位客户提供专业、细致、周到的家庭服务。作为一家具有社会责任感的企业,该公司积极履行企业公民义务,关注家庭…...

Python接口自动化测试框架运行原理及流程
这篇文章主要介绍了Python接口自动化测试框架运行原理及流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 本文总结分享介绍接口测试框架开发,环境使用python3selenium3unittestddtrequests测试框…...
strtok的使用
Strtok:原型char *strtok(char s[], const char *delim); s为要分解的字符,delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符)。首次调用时,s指向要分解的字符串,之后再次…...

0206作业
TCP(传输控制协议)和 UDP(用户数据报协议)是两种常用的网络传输协议。它们之间的主要区别在于: 可靠性:TCP 是一种可靠的传输协议,它提供了数据传输的确认、重传和排序功能。如果数据在传输过程…...
数据结构-栈
1.容器 容器用于容纳元素集合,并对元素集合进行管理和维护. 传统意义上的管理和维护就是:增,删,改,查. 我们分析每种类型容器时,主要分析其增,删,改ÿ…...

CentOS7搭建k8s-v1.28.6集群详情
文章目录 1.灌装集群节点操作系统1.1 设置hosts1.2 设置nameserver1.3 关闭防火墙1.4 关闭Selinux1.5 关闭Swap分区1.6 时间同步1.7 调整内核参数1.8 系统内核升级 2.安装Docker2.1 卸载旧Docker2.2 配置Docker软件源2.3 安装Docker 3.部署Kubernets集群3.1 设置 K8s 软件源3.2…...

Android实现底部导航栏方法(Navigation篇)
Navigation实现底部导航栏 前言导入和基本使用导入基础使用创建nav文件编辑Nav文件添加页面(代码版)添加页面(图解版) 创建导航动作 action创建action(代码版)创建action(图解版) 编…...
python 爬虫篇(1)---->re正则的详细讲解(附带演示代码)
re正则的详细讲解 文章目录 re正则的详细讲解前言4.re正则表达式(1)e正则的匹配模式(2) re.search 的使用(3)re.findall()的使用(4)re.sub()的使用结语前言 大家好,今天我将开始更新python爬虫篇,陆续更新几种解析数据的方法,例如 re正则表达式beautifulsoup xpath lxml 等等,…...

(超详细)10-YOLOV5改进-替换CIou为Wise-IoU
yolov5中box_iou其默认用的是CIoU,其中代码还带有GIoU,DIoU,文件路径:utils/metrics.py,函数名为:bbox_iou 将下面代码放到metrics.py文件里面,原来的bbox_iou函数删掉 class WIoU_Scale: mon…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...

376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...