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

网络原理——网络层

网络层重要涉及到的协议是IP协议。

IP协议主要完成的工作是:

  • 地址管理
  • 路由选择

1. IP协议的组成

  1. 版本(Version):占4位,表示IP协议的版本号。目前广泛使用的版本是IPv4和IPv6。

  2. 头部长度(Header Length):占4位,表示IP报头的长度,以32位字(4字节)为单位。由于IP报头的长度是可变的,所以这个字段表示IP报头的字数。最小值为5(20字节),最大值为15(60字节)。

  3. 服务类型(Type of Service):占8位,用于指定IP数据包的服务质量要求,如优先级、延迟、可靠性等。

  4. 总长度(Total Length):占16位,表示整个IP数据包的总长度,包括IP报头和数据部分。最大值为65535字节。

  5. 标识(Identification):占16位,用于唯一标识一个IP数据包。在分片和重新组装过程中起到重要作用。

  6. 标志(Flags):占3位,用于标识IP数据包的特殊处理方式。其中,第1位保留,第2位表示是否允许分片,第3位表示是否为最后一个分片。

  7. 片偏移(Fragment Offset):占13位,用于指示当前分片在原始IP数据包中的位置。通过片偏移和标识字段,可以在目标主机上重新组装分片。

  8. 生存时间(Time to Live):占8位,表示IP数据包在网络中的最长存活时间,以防止报文在网络中永远循环。每经过一个路由器,生存时间减1,当生存时间为0时,数据包将被丢弃。

  9. 协议(Protocol):占8位,指定封装在IP数据包中的上层协议类型,如TCP、UDP、ICMP等。

  10. 校验和(Header Checksum):占16位,用于检测IP报头是否出现错误,以保证报头的完整性。

  11. 源IP地址(Source IP Address)和目标IP地址(Destination IP Address):分别占32位,表示发送方和接收方的IP地址。

  12. 选项(Options):可选字段,用于在IP报头中添加一些额外的选项信息,如记录路由、时间戳等。

解释:

  1. 服务类型:实际上只有4位有效,并且这4位只能有一位为1其余为0,用于表示当前IP协议的所处模式:最小延时(从发送到接收的时间最小), 最大吞吐量(单位时间内传输的 数据尽可能的多),最高可靠性(减少丢包概率),最小成本(降低硬件设备的开销 ),只能同时存在一种模式。
  2. 总长度:注意此处和UDP不同,不代表IP协议的载荷长度有限,因为,IP协议有 拆包/组包 的功能,如果载荷很大,IP协议就会自动拆成多个 IP 数据报,每个数据报携带载荷的一部分,等到达接收方的网络层再重新组装。
  3. 标识:用于组装数据时区分拆分后的数据中哪些IP数据报的载荷是一组,同一组的数据标识相同。
  4. 片偏移:用于组装数据时区分数据的先后,数字小的在前面,=。
  5. 标志:只有两位有效,其中一位表示,当前IP数据是否被拆包,即是否为一个完整的数据;还有一位表示结束标记,即表示当前的数据报是这个数据被拆分后的最后一个包,
  6. 生存时间: 单位为次数,一个IP数据报每经过一个路由器转发,TTL就会减1,如果这个 数值减少到0了,此时这个数据报就会被丢弃,为了防止数据在网络中找不到目的地而在网络中一直循环。一般初始值为32/64。
  7. 协议:表示传输层使用的是哪个协议。
  8. 校验和: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,通过下面这个方法,可以变为对应的随机模拟函数 就是说要实现蒙特卡洛模拟,是要先有一个概率表达式,然后基于这个概率表达式&#xff0…...

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.容器 容器用于容纳元素集合,并对元素集合进行管理和维护. 传统意义上的管理和维护就是:增,删,改,查. 我们分析每种类型容器时,主要分析其增,删,改&#xff…...

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…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Linux nano命令的基本使用

参考资料 GNU nanoを使いこなすnano基础 目录 一. 简介二. 文件打开2.1 普通方式打开文件2.2 只读方式打开文件 三. 文件查看3.1 打开文件时,显示行号3.2 翻页查看 四. 文件编辑4.1 Ctrl K 复制 和 Ctrl U 粘贴4.2 Alt/Esc U 撤回 五. 文件保存与退出5.1 Ctrl …...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...

SpringAI实战:ChatModel智能对话全解

一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM&#xff0…...

【51单片机】4. 模块化编程与LCD1602Debug

1. 什么是模块化编程 传统编程会将所有函数放在main.c中,如果使用的模块多,一个文件内会有很多代码,不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里,在.h文件里提供外部可调用函数声明,其他.c文…...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程

基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...