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

计算机网络 TCP/IP体系 网络层

一. 网络层的基本概念

网络层主要负责将数据从源端主机发送到目的端主机。在这一过程中,网络层要解决的关键问题是数据包的路由选择,即确定数据包通过互联网的最佳路径。

在这里插入图片描述

1.1 网络层的信息类型

  1. 数据包:这是网络层传输的主要形式,包含了从源端到目的端的实际用户数据。数据包通常包含头部和负载两部分。头部包含了源地址、目的地址、协议类型等关键信息,用于指导数据包在网络中的传输;而负载则是用户数据本身。
  2. 控制信息:这类信息主要用于动态路由协议,如RIP、OSPF等。这些协议通过交换路由表信息来帮助路由器发现并维护到达其他网络的最佳路径。

1.2 数据包服务

网络层向其上层只提供简单灵活的, 无连接的, 尽最大可能交付的数据报服务。网络层不提供服务质量的承诺。

在这里插入图片描述

二. IP协议

2.1 IP地址

  1. IPv4地址:32位,通常以点分十进制形式表示,分为网络部分和主机部分,使用子网掩码区分。例如:192.168.1.1。
  2. IPv6地址:128位,通常以冒号十六进制形式表示,分为前缀和接口标识符,支持零压缩和前导零省略。例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334。

2.2 网段划分

2.2.1 分配IP地址

这种分类方法是在IPv4地址的早期设计中引入的,目的是为了方便网络管理和地址分配。根据IP地址的第一个字节的值,IPv4地址被划分为五类:A类、B类、C类、D类和E类。

在这里插入图片描述

  1. A类地址
    范围:1.0.0.0 到 126.255.255.255
    网络部分:第一个字节(8位)
    主机部分:剩余三个字节(24位)
    默认子网掩码:255.0.0.0 或 /8
    用途:适用于大型网络
  2. B类地址
    范围:128.0.0.0 到 191.255.255.255
    网络部分:前两个字节(16位)
    主机部分:剩余两个字节(16位)
    默认子网掩码:255.255.0.0 或 /16
    用途:适用于中型网络
  3. C类地址
    范围:192.0.0.0 到 223.255.255.255
    网络部分:前三个字节(24位)
    主机部分:最后一个字节(8位)
    默认子网掩码:255.255.255.0 或 /24
    用途:适用于小型网络
  4. D类地址
    范围:224.0.0.0 到 239.255.255.255
    用途:用于多播(组播)通信
  5. E类地址
    范围:240.0.0.0 到 255.255.255.255
    用途:保留用于实验和研究

但这种分类方法存在一些明显的局限性:

  • 地址浪费:每个类别的地址空间分配固定,导致地址资源的浪费。
  • 灵活性差:不能很好地适应不同规模的网络需求。
2.2.2 无类域间路由(CIDR)

无类域间路由是一种IP地址分配和路由的方法,它消除了传统分类IP地址的固定界限,允许更灵活地分配和使用IP地址。CIDR的主要目标是提高IP地址的利用率,减少路由表的大小,并简化网络管理。
在这里插入图片描述

CIDR 的概念:

  1. 可变长度子网掩码:
    在CIDR中,子网掩码的长度可以变化,不再局限于传统的8位、16位和24位。这意味着网络部分和主机部分的长度可以灵活调整。例如,一个网络可以使用 /24 子网掩码(255.255.255.0),而另一个网络可以使用 /26 子网掩码(255.255.255.192)。
  2. 网络前缀:CIDR使用网络前缀来表示一个IP地址块。网络前缀是一个IP地址的前N位,后面跟一个斜杠和一个数字,表示前缀的长度。例如,192.168.1.0/24 表示前24位是网络前缀,剩下的8位是主机部分。

在这里插入图片描述
工作机制:

  1. 地址分配:

    • ISP分配:互联网服务提供商(ISP)可以分配一个CIDR地址块给客户。例如,ISP可以分配 192.168.1.0/24 给一个客户。
    • 子网划分:客户可以根据需要进一步划分子网。例如,192.168.1.0/24 可以划分为两个 /25 子网:192.168.1.0/25 和 192.168.1.128/25。
  2. 路由聚合:

    • 聚合多个网络:CIDR允许将多个连续的IP地址块汇总成一个更大的网络前缀。例如,如果有两个网络 192.168.1.0/24 和 192.168.2.0/24,可以将它们汇总为 192.168.0.0/23。
    • 减少路由表大小:通过路由聚合,路由器只需要维护一个汇总的路由条目,而不是多个具体的路由条目,从而减少路由表的大小,提高路由效率。

2.3 IP报文的格式

IPv4报文的报头长度为20到60字节,其中基本报头长度为20字节,可选字段会增加报头的长度。

在这里插入图片描述
首部字段:

  1. 版本:
    长度:4位
    功能:标识IP协议的版本,对于IPv4,这个字段的值为4。
  2. 首部长度:
    长度:4位
    功能:表示IP报头的长度,以32位(4字节)为单位。最小值为5(即20字节),最大值为15(即60字节)。
  3. 服务类型:
    长度:8位
    功能:用于指示数据包的优先级和服务类型。这个字段现在通常被称为DS字段。
  4. 总长度:
    长度:16位
    功能:表示整个IP数据包的长度,包括报头和数据部分,以字节为单位。最大值为65535字节。
  5. 标识:
    长度:16位
    功能:用于唯一标识发送主机发出的数据包。主要用于分片和重组。
  6. 标志:
    长度:3位
    功能:
    第一位保留,必须为0。
    第二位:如果设置为1,表示不允许分片。
    第三位:如果设置为1,表示还有后续的分片。
  7. 片偏移:
    长度:13位
    功能:表示该分片在原始数据包中的位置,以8字节为单位。
  8. 生存时间:
    长度:8位
    功能:表示数据包在网络中可以经过的最大跳数。每经过一个路由器,TTL值减1,当TTL值为0时,数据包会被丢弃。
  9. 协议:
    长度:8位
    功能:表示上层协议的类型,例如TCP(6)、UDP(17)、ICMP(1)等。
  10. 头部校验和:
    长度:16位
    功能:用于检测IP报头的完整性。注意,这个校验和不包括数据部分。
  11. 源地址:
    长度:32位
    功能:表示发送数据包的主机的IP地址。
  12. 目的地址:
    长度:32位
    功能:表示接收数据包的主机的IP地址。
  13. 选项:
    长度:可变
    功能:用于携带额外的控制信息,如路由记录、时间戳等。选项字段的存在使报头长度超过20字节。
  14. 填充:
    长度:可变
    功能:用于确保报头长度为32位的整数倍。

数据部分:
长度:可变
功能:包含上层协议的数据,如TCP或UDP数据。

2.4 IP层分片

IP层分组是指在网络层中,IP协议将上层传递下来的数据分割成适当大小的数据包,并通过网络进行传输的过程。其中MTU定义了数据链路层帧中数据部分的最大长度,IP层负责将数据包分割成适当大小的数据包
在这里插入图片描述

IP层分片步骤如下:

  1. 接收上层数据:
    IP层从传输层接收数据。这些数据通常是较大的数据块,需要被分割成适合在网络中传输的小数据包。
  2. 封装IP头部:
    IP层为接收到的数据添加一个IP头部,包含必要的控制信息,如源IP地址、目的IP地址、协议类型等。IP头部的格式因IPv4和IPv6而异。
  3. 检查MTU:
    IP层获取下一跳网络接口的MTU值。MTU定义了数据链路层帧中数据部分的最大长度,确保数据帧在物理网络中传输时不会过大,从而避免传输错误和提高传输效率。
  4. 分片:
    • 分片条件:如果数据包的大小超过了MTU,IP层会将数据包分片,以便能够在网络中传输。
    • 分片过程:
      1. 标识字段:为每个数据包分配一个唯一的标识字段,用于在接收端识别属于同一个原始数据包的分片。
      2. 标志字段:设置标志字段中的MF位,表示还有后续的分片。DF位用于禁止分片,如果设置为1,数据包不能被分片,否则会被丢弃。
      3. 片偏移字段:表示该分片在原始数据包中的位置,以8字节为单位。
  5. 传输分片:
    • 封装分片:每个分片都被封装成一个新的IP数据包,包含新的IP头部。
    • 发送分片:每个分片通过网络接口发送到下一跳路由器或最终目的地。
  6. 重组:
    • 接收分片:接收端的IP层接收到所有分片。
    • 重组过程:
      1. 缓冲区管理:接收端为每个数据包的标识字段创建一个缓冲区,用于存储接收到的分片。
      2. 分片排序:根据片偏移字段将分片按顺序排列。
      3. 完整性检查:确保所有分片都已到达,如果没有收到所有分片,可能会发送ICMP“超时”消息。
      4. 重组数据包:将所有分片合并成一个完整的数据包,并交给上层协议处理。

2.5 ARP协议

ARP是网络层的一个重要协议,用于将IP地址解析为物理地址(MAC地址)。

2.5.1 ARP数据报的格式

在这里插入图片描述

  1. 硬件类型:
    长度:2字节
    功能:表示使用的硬件类型。最常见的值是1,表示以太网。
  2. 协议类型:
    长度:2字节
    功能:表示使用的协议类型。最常见的值是0x0800,表示IPv4。
  3. 硬件地址长度:
    长度:1字节
    功能:表示硬件地址的长度。对于以太网MAC地址,长度为6字节。
  4. 协议地址长度:
    长度:1字节
    功能:表示协议地址的长度。对于IPv4地址,长度为4字节。
  5. 操作类型:
    长度:2字节
    功能:表示ARP操作的类型。常见的值包括:
    1. ARP请求(ARP Request)
    2. ARP响应(ARP Reply)
  6. 发送方硬件地址:
    长度:6字节
    功能:发送ARP请求或响应的主机的MAC地址。
  7. 发送方协议地址:
    长度:4字节(对于IPv4)
    功能:发送ARP请求或响应的主机的IP地址。
  8. 目标硬件地址:
    长度:6字节
    功能:目标主机的MAC地址。在ARP请求中,这个字段通常为0,因为发送方不知道目标主机的MAC地址。在ARP响应中,这个字段包含目标主机的MAC地址。
  9. 目标协议地址:
    长度:4字节(对于IPv4)
    功能:目标主机的IP地址。
2.5.2 ARP协议的工作原理

在这里插入图片描述

  1. 发送ARP请求:
    源主机A需要向目标主机B发送数据包,但不知道B的MAC地址。A构造一个ARP请求,包含自己的IP地址和MAC地址,以及B的IP地址。A将ARP请求以广播形式发送到局域网内的所有设备。
  2. 接收ARP请求:
    局域网内的所有设备都会收到ARP请求。每个设备检查请求中的目标IP地址是否与自己的IP地址匹配。
  3. 发送ARP响应:
    目标主机B发现请求中的目标IP地址与自己的IP地址匹配。B构造一个ARP响应,包含自己的IP地址和MAC地址。B将ARP响应以单播形式发送给源主机A。
  4. 接收ARP响应:
    源主机A收到B的ARP响应,从中提取出B的MAC地址。A将B的IP地址和MAC地址对添加到自己的ARP缓存表中。
  5. 发送数据包:
    A使用B的MAC地址将数据包封装在以太网帧中,并通过局域网发送给B。

2.6 ICMP协议

ICMP协议是一个网络层协议, 一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通; 但是IP协议并不提供可靠传输。因此, ICMP正是提供这种功能的协议
在这里插入图片描述

2.6.1 ping

Ping 主要用于测试主机之间的可达性和延迟。

ping -c n example.com

-c: n 表示向example.com发送n次ICMP请求。

在这里插入图片描述
在这里插入图片描述

2.6.2 traceroute

Traceroute 用于查看从源主机到目标主机的详细路径信息,帮助诊断网络路径上的问题。

traceroute example.com

在这里插入图片描述

三. NAT技术

NAT是一种网络技术,它允许多个设备共享一个公共IP地址访问互联网,同时隐藏这些设备的真实内部IP地址。NAT的主要目的是解决IPv4地址资源不足的问题,并增强网络的安全性。

3.1 NAT的工作原理

  1. 地址转换:
  • 当内部网络中的设备尝试通过路由器访问外部网络时,路由器会将内部设备的私有IP地址转换为公共IP地址。
  • 返程的数据包到达路由器后,路由器再将公共IP地址转换回原始的私有IP地址,并将数据包转发给正确的内部设备。
  1. 端口映射:
  • 为了区分来自同一内部IP地址的不同连接,NAT会在转换过程中使用不同的端口号。这样,即使多个内部设备使用相同的公共IP地址,路由器也能正确地将外部响应数据包发送给正确的内部设备。
  • 这种机制称为端口地址转换(PAT),它是NAT的一种扩展形式。

在这里插入图片描述

3.2 NAT技术的缺陷

由于NAT依赖这个转换表, 所以有诸多限制:

  1. 无法从NAT外部向内部服务器建立连接。
  2. 装换表的生成和销毁都需要额外开销。
  3. 通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开。

3.3 NAT和代理服务器

路由器往往都具备NAT设备的功能, 通过NAT设备进行中转, 完成子网设备和其他子网设备的通信过程。代理服务器看起来和NAT设备有一点像。客户端像代理服务器发送请求, 代理服务器将请求转发给真正要请求的服务器。服务器返回结果后, 代理服务器又把结果回传给客户端。

NAT和代理服务器的区别:

  1. 从应用上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题. 代理服务器则是更贴近具体应用, 比如通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器。
  2. 从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换. 代理服务器往往工作在应用层。
  3. 从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网。
  4. 从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上。

代理服务器一般分为两类: 正向代理, 反向代理。

3.3.1 正向代理
  1. 客户端配置代理服务器:
    客户端需要配置代理服务器的地址和端口号。这通常是在浏览器设置、操作系统网络设置或应用程序配置中完成的。
  2. 客户端发起请求:
    客户端向正向代理服务器发送请求。请求中包含目标服务器的地址和端口号。
  3. 正向代理服务器接收请求:
    正向代理服务器接收到客户端的请求后,解析请求中的目标服务器地址和端口号。
  4. 正向代理服务器转发请求:
    正向代理服务器根据解析到的目标服务器地址和端口号,向目标服务器发起新的请求。
  5. 目标服务器响应:
    目标服务器接收到请求后,处理请求并生成响应数据包,然后将响应数据包发送回正向代理服务器。
  6. 正向代理服务器转发响应:
    正向代理服务器接收到目标服务器的响应数据包后,将响应数据包转发给客户端。
  7. 客户端接收响应:
    客户端接收到正向代理服务器转发的响应数据包,完成整个请求和响应过程。
    在这里插入图片描述
3.3.2 反向代理
  1. 客户端发起请求:
    客户端直接向反向代理服务器发送请求。客户端并不知道后端服务器的存在,只知道自己在访问反向代理服务器的地址和端口号。
  2. 反向代理服务器接收请求:
    反向代理服务器接收到客户端的请求后,解析请求中的目标资源路径。
  3. 反向代理服务器选择后端服务器:
    反向代理服务器根据配置规则(如负载均衡算法、会话保持策略等)选择一个合适的后端服务器。
  4. 反向代理服务器转发请求:
    反向代理服务器将请求转发给选定的后端服务器。请求中可能包含一些额外的头信息,用于传递客户端的原始请求信息。
  5. 后端服务器响应:
    后端服务器接收到请求后,处理请求并生成响应数据包,然后将响应数据包发送回6反向代理服务器。
  6. 反向代理服务器转发响应:
    反向代理服务器接收到后端服务器的响应数据包后,将响应数据包转发给客户端。
  7. 客户端接收响应:
    客户端接收到反向代理服务器转发的响应数据包,完成整个请求和响应过程。
    在这里插入图片描述

————————————————————
感谢大家观看,不妨点赞支持一下吧喵~
如有错误,随时纠正喵~

相关文章:

计算机网络 TCP/IP体系 网络层

一. 网络层的基本概念 网络层主要负责将数据从源端主机发送到目的端主机。在这一过程中,网络层要解决的关键问题是数据包的路由选择,即确定数据包通过互联网的最佳路径。 1.1 网络层的信息类型 数据包:这是网络层传输的主要形式&#xff0c…...

迈入国际舞台,AORO M8防爆手机获国际IECEx、欧盟ATEX防爆认证

近日,深圳市遨游通讯设备有限公司(以下简称“遨游通讯”)旗下5G防爆手机——AORO M8,通过了CSA集团的严格测试和评估,荣获国际IECEx及欧盟ATEX防爆认证证书。2024年11月5日,CSA集团和遨游通讯双方领导在遨游…...

实习作假:阿里健康实习做了RABC中台,还优化了短信发送流程

最近有二本同学说:“大拿老师,能帮忙看下简历吗?” 如果是从面试官的角度来看,这个同学的实习简历是很虚假的。 但是我们一直强调的是:校招的实习简历是不能出现明显的虚假。 首先,你去公司做事情&#…...

Unity中IK动画与布偶死亡动画切换的实现

在Unity游戏开发中,Inverse Kinematics(IK)是创建逼真角色动画的强大工具。同时,能够在适当的时候切换到布偶物理状态来实现死亡动画等效果,可以极大地增强游戏的视觉体验。本文将详细介绍如何在Unity中利用IK实现常规…...

java导出word文件(手绘)

文章目录 代码细节效果图参考资料 代码细节 使用的hutool的WordUtil,WordUtil对poi进行封装,但是这一块的官方封装的很少,很多细节都没有。代码中是常见的绘制段落,标题、表格等常用api Word07Writer writer WordUtil.getWriter(…...

ssm070基于SSM框架的校园代购服务订单管理系统的设计与实现+vue(论文+源码)_kaic

毕业设计 题 目: 校园代购服务订单管理系统 作 者: 学 号: 所属学院: 专业年级: 学校导师: 职 称: 班级导师: 职 称: 完成时间…...

Java项目实战II基于Spring Boot的秒杀系统设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 在互联网电商蓬勃发展的今天&#xff0…...

FastAPI —— 请求参数验证

1.hello world 给后端船数据 hello world 接口给后端传 COVID-19 感染数据_高性能 FastAPI 框架入门精讲-慕课网 #!/usr/bin/python3 # -*- coding:utf-8 -*- # __author__ __Jack__from typing import Optionalfrom fastapi import FastAPI from pydantic import BaseModel…...

第七篇: BigQuery中的复杂SQL查询

BigQuery中的复杂SQL查询 背景与目标 在数据分析中,我们通常需要从多个数据源中获取信息,以便进行深入的分析。这时,BigQuery提供的JOIN、UNION和子查询等复杂SQL语句非常实用。本文将以Google BigQuery的公共数据集为例,介绍如何…...

【SQL实验】高级查询(难点.三)含附加数据库操作

完整代码在文章末尾【代码是自己的解答,并非标准答案,也有可能写错,文中可能会有不准确或待完善之处,恳请各位读者不吝批评指正,共同促进学习交流】 将素材中的“学生管理”数据库附加到SQL SERVER中,完成以…...

qt QFileSystemModel详解

1、概述 QFileSystemModel是Qt框架中的一个关键类,它继承自QAbstractItemModel,专门用于在Qt应用程序中展示文件系统的数据。这个模型提供了一个方便的接口,使得开发者可以轻松地在应用程序中集成文件和目录的树形结构,并通过视图…...

element plus中修改el-table的样式

文章目录 前情提要相关环境package.jsonvue代码结果 方式一直接看代码 方式二直接看代码 前情提要 因为项目中用到el-table的时候,需要将el-table表格的样式进行修改,将整个表格的背景颜色从白色变成透明,使得表格变得透明之后,展…...

深入理解封装与接口:Java程序设计的核心思想与最佳实践

目录 一、封装的优点 二、接口与默认方法 三、总结 在面向对象编程(OOP)中,封装(Encapsulation)是一个核心概念,Java对其进行了良好的支持。封装不仅有助于提高代码的安全性,还能够增强代码的…...

linux 下调试 mpu6050 三轴加速度

供自己备忘; 1. 参考资料: b 站视频 https://www.bilibili.com/video/BV1cL4y1x7FA/?spm_id_from333.337.search-card.all.click&vd_sourced7a07b8689c9e646f0214227c06f304c csdn 其它博客 https://blog.csdn.net/qq_65198598/article/detail…...

C语言心型代码解析

方法一 心型极坐标方程 爱心代码你真的理解吗 笛卡尔的心型公式&#xff1a; for (y 1.5; y > -1.5; y - 0.1) for (x -1.5; x < 1.5; x 0.05) 代码里面用了二个for循环&#xff0c;第一个代表y轴&#xff0c;第二个代表x轴 二个增加的单位不同&#xff0c;能使得…...

【LeetCode】【算法】647. 回文子串

LeetCode 647.回文子串 题目描述 给你一个字符串s&#xff0c;请你统计并返回这个字符串中回文子串的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串是字符串中的由连续字符组成的一个序列。 思路 思路&#xff1a;中心拓展法 中心拓展法的意思是说&#xf…...

介绍6种常见的基于知识图谱推荐算法的类型和各自的优缺点

基于知识图谱的推荐算法有多种&#xff0c;每种算法各有其优点和缺点。下面是一些常见的基于知识图谱的推荐算法及其分析&#xff1a; 基于邻域的协同过滤&#xff08;Collaborative Filtering&#xff09; 描述&#xff1a;通过分析用户之间的相似性或项目之间的相似性来进行…...

使用python拟合二元曲线系数

python import numpy as np import pandas as pd注&#xff1a; xlsx 表格中 有 压力P&#xff0c;流量值Q&#xff0c;温度值 K&#xff1b; df pd.read_excel("./i100-10000slm.xlsx",usecols[p1,molboxQm,Dek]) #print(df.head())#column_data df[p1] # 获取行数…...

go 集成viper 配置管理

安装viper go get github.com/spf13/viper 配置文件 读取配置文件 package confimport ("fmt""github.com/spf13/viper" )func Properties() {viper.SetConfigName("application")viper.SetConfigType("yml")viper.AddConfigPath(&q…...

Java:数据结构-再谈String类

字符串常量池 首先我们来思考这段代码&#xff0c;为什么运行结果一个是true&#xff0c;一个是false呢&#xff1f; public class Test {public static void main(String[] args) {String s1"123";String s2"123";String s3new String("555")…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

tomcat指定使用的jdk版本

说明 有时候需要对tomcat配置指定的jdk版本号&#xff0c;此时&#xff0c;我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...

【WebSocket】SpringBoot项目中使用WebSocket

1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖&#xff0c;添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能

指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...