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

计算机网络之网络层超详细讲解

个人主页:C++忠实粉丝
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C++忠实粉丝 原创

计算机网络之网络层超详细讲解

收录于专栏【计算机网络】
本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论💌 
  

目录

网络层

IP 协议 

基本概念 

协议头格式 

网段划分 

特殊的 IP 地址 

IP 地址的数量限制

私有 IP 地址和公网 IP 地址 

路由 


网络层

在复杂的网络环境中确定一个合适的路径.

IP 协议 

基本概念 

主机 : 配有 IP 地址, 但是不进行路由控制的设备.

路由器 : 即配有 IP 地址, 又能进行路由控制;

节点 : 主机和路由器的统称. 

协议头格式 

4位版本号 (version) : 指定 IP 协议的版本, 对于 IPv4 来说, 就是4

4位头部长度 (header length) : IP 头部的长度是多少个 32 bit, 也就是 length 4 的字节数, 4bit 标识最大的数字是 15, 因此 IP 头部最大长度是 60 字节 

8位服务类型 (Type Of Service) : 3位优先权字段 (已经弃用), 4位 TOS 字段, 和1位保留字段 (必须置为0), 4位 TOS 分别表示 : 最小延时, 最大吞吐量, 最高可靠性, 最小成本, 这四者相互冲突, 只能选择一个, 对于 ssh/telnet 这样的应用程序, 最小延时比较重要, 对于 ftp 这样的程序, 最大吞吐量比较重要

16位总长度 (total length) : IP 数据报整体占多少个字节.

16位标识 (id) : 唯一的标识主机发送的报文, 如果 IP 报文在数据链路层被分片了, 那么每一个片里面的这个 id 都是相同的.

3位标志字段 : 第一位保留 (保留的意思是现在不用, 但是还没想好说不定以后要用到), 第二位置为1表示禁止分片, 这时候如果报文长度超过 MTU, IP 模块就会丢弃报文, 第三位表示 "更多分片", 如果分片了的话,  最后一个分片位置为0, 其他是1, 类似于一个结束标志

13位分片偏移 (framegament offset)  : 是分片相对于原始 IP 报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置, 实际偏移的字节数是这个值 /8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是 8 的整数倍 (否则报文就不连续了)

8位生存时间(Time To Live TTL) : 数据报到达目的地的最大报文跳数, 一般是64, 每次经过一个路由, TTL -= 1, 一直减到0还没到达, 那么就丢弃了, 这个字段主要是用来防止出现路由循环

8位协议 : 表示上层协议的类型

16位头部校验和 : 使用 CRC 进行校验, 来鉴别头部时候损坏.

32位源地址和32位目标地址 : 表示发送端和接收端

选项字段 (不定长, 最多40字节)

网段划分 

IP 地址分为两个部分, 网络号和主机号

网络号 : 保证相互连接的两个网段具有不同的标识

主机号 : 同一网段, 主机之间具有相同的网络号, 但是必须有不同的主机号. 

不同的子网其实就是把网络号相同的主机放到一起.

如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复

通过合理设置主机号和网络号, 就可以保证相互连接的网络中, 每台主机的 IP 地址都不相同. 

那么问题来了, 手动管理子网内的 IP, 是一个相当麻烦的事情.

有一种技术叫做 DHCP, 能够自动的给子网内新增主机节点分配 IP 地址, 避免了手动管理 IP 的不便.

一般的路由器都带有 DHCP 功能, 因此路由器也可以看做一个 DHCP 服务器.

过去曾经提出一种划分网络号和主机号的方案, 把所有 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

随着Internet 的飞速发展, 这种划分方案的局限性很快显现出来了, 大多数组织都申请 B类网络地址, 导致 B 类地址很快就分配完了, 而 A 类却浪费了大量地址

例如, 申请一个B类地址, 理论上一个子网内能允许6万5千多个主机, A类地址的子网内的主机数更多.

然而实际网络架设中, 不会存在一个子网内有这么多的情况, 因此大量的 IP 地址都被浪费掉了

针对这种情况提出了新的划分方案, 称为 CIDR (Classless Interdomain Routing):

引入一个额外的子网掩码 (subnet mask) 来区分网络号和主机号

子网掩码也是一个32位正整数, 通常用一串 "0" 结尾

将 IP 地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号.

网络号和主机号的划分这个 IP 地址是 A 类, B类还是 C类无关. 

下面举两个例子

IP地址140.252.20.688C FC 14 44
子网掩码255.255.255.0FF FF FF 00
网络号140.252.20.08C FC 14 00
子网地址范围140.252.2.0 ~ 140.252.20.255
IP 地址140.252.20.68

8C FC 14 44

子网掩码255.255.255.240FF FF FF F0
网络号140.252.20.648C FC 14 40
子网地址范围140.252.20.64 ~ 140.252.20.79

子网掩码与网络号的关系

子网掩码用于确定网络号的主机号的划分. 子网掩码中连续的 1 表示网络号部分, 连续的 0 表示主机号部分.

在第一个例子中, 子网掩码是 255.255.255.0, 对应的二进制是 : 
11111111, 11111111, 11111111, 00000000. 这意味着前 24 位是网络号, 后 8 位是主机号.

在第二个例子中, 子网掩码是 255.255.255.240, 对应的二进制是 : 

11111111.11111111.11111111.11110000. 这意味着前 28 位是网络号, 后 4 位是主机号

那么第一个例子 : 

网络号是 140.252.20.0, 主机号部分有 8 位

主机号全 0 时是网络地址 : 140.252.20.0

主机号全为 1 时是广播地址 : 140.252.20.255

子网地址范围是 140.252.20.0 ~ 140.252.20.255 (除去网络地址和广播地址, 实际可用的主机地址范围是 140.252.30.1 ~ 140.252.20.254)

第二个例子 : 

网络号是 140.252.20.64, 主机号部分有 4 位

主机号全 0 时是网络地址 : 140.252.20.64

主机号全为 1 时是广播地址 : 140.252.20.79

子网地址范围是 140.252.20.64 ~ 140.252.20.79 (除去网络地址和广播地址, 实际可用的主机地址范围是 140.252.30.65 ~ 140.252.20.78)

可见, IP 地址与子网掩码做与运算可以得到网络号, 主机号从全0到全1就是子网的地址范围 : 

IP 地址和子网掩码还有一种简洁的表示方法, 例如 140.252.20.68/24, 表示 IP 地址为 140.252.20.68, 子网掩码的高24位是1, 也就是 255,255,255.0 

特殊的 IP 地址 

将 IP 地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网

将 IP 地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包

127.* 的 IP 地址用于本机环回 (loop back) 测试, 通常是 127.0.0.1 

IP 地址的数量限制

我们知道, IP 地址 (IPv4) 是一个 4字节32位的正整数, 那么移动只有2的32次方个 IP 地址, 大概是 43 亿左右, 而 TCP/IP 协议规定, 每个主机都需要有一个 IP 地址

这意味着, 一共只有 43 亿台主机能接入网络吗?

实际上, 由于一些特殊的 IP 地址的存在, 数量远不足 43 亿, 另外 IP 地址并非是按照主机台数来配置的, 而是每一个网卡都需要配置一个或多个 IP 地址

CIDR 在一定程度上缓解了 IP 地址不够用的问题 (提高了利用率, 减少了浪费, 但是 IP 地址的绝对上限并没有增加), 仍然不是很够用, 这时候有三种方式来解决 : 

动态分配 IP 地址 : 只给接入网络的设备分配 IP 地址, 因此同一个 MAC 地址的设备, 每次接入互联网中, 得到的 IP 地址不一定是相同的.

NAT 技术 : (后面详细讲解~)

IPv6 : IPv6 并不是 IPv4 的简单升级版, 这是互不相干的两个协议, 彼此并不兼容, IPv6 用16字节128位来表示一个 IP 地址, 但是目前 IPv6 还没有普及.

私有 IP 地址和公网 IP 地址 

如果一个组织内部组建局域网, IP 地址只用于局域网内的通信, 而不直接连到 Iternet 上, 理论上使用任意的 IP 地址都可以, 但是 RFC 1918 规定了用于组建局域网的私有 IP 地址

10.* 前8位是网络号, 共 16,777,216 个地址

172.16* 到 172.31.*, 前 12 位是网络号, 共 1,028,576 个地址

192.168.*, 前 16 位是网络号, 共 65536 个地址

包含在这个范围中的, 都成为私有 IP, 其余的则称为全局 IP (或公网 IP)

一个路由器可以配置两个 IP 地址, 一个是 WAN 口 IP , 一个是 LAN 口 IP (子网 IP)

路由器 LAN 口连接的主机, 都从属于当前这个路由器的子网中

不同的路由器, 子网 IP 其实都是一样的 (通常是 192.168.1.1) 子网内的主机 IP 地址不能重复, 但是子网之间的 IP 地址就可以重复了.

每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点, 这样的运营商路由器可能会有很多级, 最外层的运营商路由器, WAN 口 IP 就是一个公网 IP 了.

子网内的主机需要和外网进行通信时, 路由器将 IP 首部中的 IP 地址进行替换 (替换成 WAN 口 IP), 这样逐级替换, 最终数据包中的 IP 地址成为一个公网 IP, 这种技术称为 NAT (NetWork Address Transiation, 网络地址转换)

如果希望我们自己实现的服务器程序, 能够在公网上被访问到, 就需要把程序部署在一台具有外网 IP 的服务器上, 这样的而服务器可以在阿里云/腾讯云上进行购买.

路由 

在复杂的网络结构中, 找出一条通往重点的路线;

路由的过程, 就是这样一跳一跳 (Hop by Hop) "问路" 的过程.

所谓 "一跳" 就是数据链路层中的一个区间, 具体在以太网中指从源 MAC 地址到目的 MAC 地址之间的帧传输区间. 

IP 数据包的传输过程也和问路一样.

当 IP 数据包, 到达路由器时, 路由器会先查看目的 IP

路由器决定这个数据包是直接发送给目标主机, 还是需要发送给下一个路由器

依次反复, 一直到达目标 IP 地址了. 

那么如何判定当前这个数据包发送到哪里呢? 这个就依靠每个节点内部维护一个路由表; 

路由表可以使用 route 命令查看

如果目的 IP 命中了路由表, 及直接转发即可

路由表中的最后一行, 主要由下一跳地址和发送接口两部分组成, 当目的地址与路由表中其它都不匹配时, 就按缺省路由条目规定的接口发送到下一跳地址.

假设某主机上的网络接口配置和路由表如下: 
 

DestinationGetwayGenmaskFlagsMetricRefUse Iface
192.168.10.0*255,255,255.0U000 eth0
192.168.56.0*255.255.255.0U000 eth1
127.0.0.0*255.0.0.0000 lo
default192.168.10.10.0.0.0UG000 eth0

这台主机由两个网络接口, 一个网络接口连到 192.168.10.0/24网络, 另一个网络接口连到 192.168.56.0/24 网络

路由表 Destination 是目的网络地址, Genmask 是子网掩码, Gateway 是下一跳地址, Iface 是发送接口, Flags 中的 U 标志标识此条目有效 (可以禁用某些条目), G 标志表示此条目的下一跳地址是某个路由器的地址, 没有 G 标志的条目表示目的网络地址是与本机接口直接相连的网络, 不必经路由器转发

转发过程例1 : 如果要发送的数据包的目的地址是 192.168.56.3

跟第一行的子网掩码做与运算得到 192.168.56.0, 与第一行的目的网络地址不符

再跟第二行的子网掩码做与运算得到 192.168.56.0, 正是第二行的目的网络地址, 因此从 eth1 接口发送出去

由于 192.168.56.0/24 正是与 eth1 接口直接相连的网络, 因此可以直接发到目的的主机, 不需要经路由器转发 

转发过程例2 : 如果要发送的数据包的目的地址是 202.10.1.2 

依次和路由表前几项进行对比, 发现都不匹配

按缺省路由条目, 从 eth0 接口发出去, 发往 192.168.10.1 路由器

由 192.168.10.1 路由器根据它的路由表决定下一跳

相关文章:

计算机网络之网络层超详细讲解

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络之网络层超详细讲解 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论💌 …...

Windows桌面系统管理2:VMware Workstation使用和管理

Windows桌面系统管理0:总目录-CSDN博客 Windows桌面系统管理1:计算机硬件组成及组装-CSDN博客 Windows桌面系统管理2:VMware Workstation使用和管理 Windows桌面系统管理3:Windows 10操作系统部署与使用-CSDN博客 Windows桌面系统管理4:Windows 10操作系统运维管理-…...

深入理解 CSS 文本换行: overflow-wrap 和 word-break

前言 正常情况下,在固定宽度的盒子中的中文会自动换行。但是,当遇到非常长的英文单词或者很长的 URL 时,文本可能就不会自动换行,而会溢出所在容器。幸运的是,CSS 为我们提供了一些和文本换行相关的属性;今…...

【Linux】Ubuntu:安装系统后配置

hostname:更改主机名 打开终端。 使用hostnamectl命令更改主机名。 sudo hostnamectl set-hostname 新的主机名你可以使用hostnamectl 命令来验证更改是否成功: hostnamectlChrome:更换默认浏览器 以下是从 Ubuntu 中移除预装的 Snap 版 Fi…...

我们来学mysql -- MSI安装(安装篇)

主题 书接上文,在《探讨win安装方式》中官方推荐MSI要是把大厂的标准奉为圭臬,说啥认啥,他一翻脸,小丑不就是咱了再说了,都干到家门口了8.4版本官方文档,还不给他梭罗下 MSI 点击**.msi弹出MySQL Install…...

MySQL其一,概念学习,可视化软件安装以及增删改查语句

目录 MySQL 1、数据库的概念 2、数据库分类 3、MySQL的安装 4、安装过程中的问题 DataGrip的使用: SQLynx的使用: 5、编写SQL语句 6、DDL语句 7、DML 新增数据: 删除数据: 修改数据: MySQL SQL其实是一门…...

SpringCloud 题库

这篇文章是关于 SpringCloud 面试题的汇总,包括微服务的概念、SpringCloud 的组成及相关技术,如服务注册与发现、负载均衡、容错等,还涉及 Nacos 配置中心、服务注册表结构等原理,以及微服务架构中的日志采集、服务网关、相关概念…...

【ETCD】[源码阅读]深度解析 EtcdServer 的 processInternalRaftRequestOnce 方法

在分布式系统中,etcd 的一致性与高效性得益于其强大的 Raft 协议模块。而 processInternalRaftRequestOnce 是 etcd 服务器处理内部 Raft 请求的核心方法之一。本文将从源码角度解析这个方法的逻辑流程,帮助读者更好地理解 etcd 的内部实现。 方法源码 …...

数据分析与机器学习全解析

一、数据分析基础要点 (一)数据收集 确定数据源:明确是内部数据库、外部公开数据、传感器采集还是用户调研等来源,不同来源数据质量与获取难度各异。例如内部销售数据可直接获取,而市场调研数据需设计问卷并投入人力收…...

Qt 一个简单的QChart 绘图

Qt 一个简单的QChart 绘图 先上程序运行结果图&#xff1a; “sample9_1QChart.h” 文件代码如下&#xff1a; #pragma once#include <QtWidgets/QMainWindow> #include "ui_sample9_1QChart.h"#include <QtCharts> //必须这么设置 QT_CHARTS_USE_NAME…...

力扣——322. 零钱兑换

给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数量是无限的。 示…...

Qt之网络监测

在Qt中&#xff0c;网络监测通常涉及到检测网络连接状态、网络延迟、带宽使用情况等。Qt提供了一些类和模块来帮助开发者实现这些功能。以下是一些常用的方法和类&#xff1a; 1. 检测网络连接状态 QtNetwork模块中的QNetworkConfigurationManager类可以用来检测设备的网络连…...

抓包软件fiddler和wireshark使用手册

fiddler官方文档 Fiddler 抓包教程1 Fiddler 抓包教程2 wireshark抓包学习 2添加链接描述 ip 过滤 ip.src_host ip.dst_host ip.addr mac 过滤 eth.src eth.dst eth.addr 端口过滤 tcp.port tcp.srcport tcp.dstport 协议类型过滤 arp dhcp 规则组合 and or...

【从零开始入门unity游戏开发之——C#篇03】变量和常量

文章目录 一、变量1、什么是变量&#xff1f;2、申明变量的固定写法3、变量的类型值和引用类型的区别无符号和有符号位——表示变量所占用的内存空间的大小范围——表示变量的取值范围取值范围和存储单位的关系为什么byte的范围是 0 到 255&#xff1f;为什么 sbyte 的范围是 -…...

SpringBoot 手动实现动态切换数据源 DynamicSource (上)

大家好&#xff0c;我是此林。 在实际开发中&#xff0c;经常可能遇到在一个SpringBoot Web应用中需要访问多个数据源的情况。 下面来介绍一下多数据源的使用场景、底层原理和手动实现。 一、 多数据源经典使用场景 场景一&#xff1a;业务复杂&#xff0c;数据量过大 1. 业务…...

ERROR Error: command failed: yarnError: command failed: yarn

1、异常信息 2、解决 解决方法一&#xff1a; WinR进入命令行&#xff0c;重新安装npm(如果报镜像源问题建议镜像源也重新配置) 输入命令&#xff0c;重新安装npm/yarn #npm npm install#npm 配置镜像源 npm config set registry https://registry.npmmirror.com#npm 查看镜…...

【java】finalize方法

目录 1. 说明2. 调用过程3. 注意事项 1. 说明 1.finalize方法是Java中Object类的一个方法。2.finalize方法用于在对象被垃圾回收之前执行一些清理工作。3.当JVM&#xff08;Java虚拟机&#xff09;确定一个对象不再被引用、即将被回收时&#xff0c;会调用该对象的finalize方法…...

C++ 内存管理和模板与STL

此篇目是之后各种C库的基础 目录 内存管理 内存分布 内存管理方式 new和delete operator new 与 operator delete函数 实现原理 定位new表达式(placement-new) 模板基础 泛型编程 模板 函数模板 类模板 STL 组成部分 内存管理 内存分布 int globalVar 1; //全局变量 静…...

同一个局域网下的两台电脑实现定时或者实时拷贝数据

【亲测能用】 需求&#xff1a;从数据库服务器上将数据库备份文件*.bak&#xff0c;每天定时拷贝到局域网下另一台电脑上&#xff0c;实现异机备份。 本文中192.168.1.110是本机&#xff0c;192.168.1.130是异机&#xff08;备份机&#xff09;。需求是每天定时从192.168.1.1…...

Python毕业设计选题:基于django+vue的汽车租赁管理网站

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 用户管理 汽车品牌管理 汽车信息管理 汽车租赁管理 汽车商品信息管理 汽车租赁 购物…...

scrapy对接rabbitmq的时候使用post请求

之前做分布式爬虫的时候,都是从push url来拿到爬虫消费的链接,这里提出一个问题,假如这个请求是post请求的呢,我观察了scrapy-redis的源码,其中spider.py的代码是这样写的 1.scrapy-redis源码分析 def make_request_from_data(self, data):"""Returns a Reques…...

Netty 性能优化与调试指南

Netty 是一款高性能的网络通信框架&#xff0c;其高性能得益于良好的设计和优化。但是在实际使用中&#xff0c;如果配置或实现不当&#xff0c;可能会导致性能下降或调试困难。本文将从性能优化和调试两方面入手&#xff0c;详细讲解如何在使用 Netty 时提高应用性能和诊断问题…...

网络安全产品之认识WEB应用防火墙

随着B/S架构的广泛应用&#xff0c;Web应用的功能越来越丰富&#xff0c;蕴含着越来越有价值的信息&#xff0c;应用程序漏洞被恶意利用的可能性越来越大&#xff0c;因此成为了黑客主要的攻击目标。传统防火墙无法解析HTTP应用层的细节&#xff0c;对规则的过滤过于死板&#…...

R学习——因子

目录 1 定义因子&#xff08;factor函数&#xff09; 2因子的作用 一个数据集中的 只需要考虑可以用哪个数据来进行分类就可以了&#xff0c;可以用来分类就可以作为因子。 Cy1这个因子对应的水平level是4 6 8&#xff1a; 1 定义因子&#xff08;factor函数&#xff09; 要…...

2024 亚马逊云科技re:Invent:Werner Vogels架构哲学,大道至简 六大经验助力架构优化

在2024亚马逊云科技re:Invent全球大会第四天的主题演讲中&#xff0c;亚马逊副总裁兼CTO Dr.Werner Vogels分享了 The Way of Simplexity&#xff0c;繁简之道&#xff0c;浓缩了Werner在亚马逊20年构建架构的经验。 Werner表示&#xff0c;复杂性总是会“悄无声息”地渗透进来…...

【代码随想录day58】【C++复健】 117. 软件构建(拓扑排序);47. 参加科学大会(dijkstra(朴素版)精讲)

117. 软件构建&#xff08;拓扑排序&#xff09; 继续边看解析边做题&#xff0c;思考时的问题做个如下的总结&#xff1a; 1. 存边用什么数据结构&#xff1f; 在题目中&#xff0c;我们需要存储节点之间的依赖关系&#xff08;边信息&#xff09;。选择适合的数据结构非常重…...

单目深度估计模型 lite-mono 测试

lite-mono 使用工业数据集kitti 进行训练&#xff0c;目的使用单目摄像头实现物体深度预测&#xff0c;关于kitti数据集的介绍和下载参考 &#xff08;二&#xff09;一文带你了解KITTI数据集-CSDN博客文章浏览阅读2.7w次&#xff0c;点赞64次&#xff0c;收藏294次。文章介绍…...

JAVA基础学习笔记_网络编程

文章目录 网络编程网络编程三要素IPIPv4细节InetAddress 端口号协议 UDPUDP协议(发数据)UDP协议(接受数据)UDP聊天室单播,组播,广播 TCP中文乱码问题代码细节,三次握手和四次挥手 网络编程 计算机之间通过网络进行数据传输 软件结构 C/S,Client/Server,客户端服务器,精美但麻…...

说下JVM中一次完整的GC流程?

大家好&#xff0c;我是锋哥。今天分享关于【说下JVM中一次完整的GC流程&#xff1f;】面试题。希望对大家有帮助&#xff1b; 说下JVM中一次完整的GC流程&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在JVM中&#xff0c;垃圾回收&#xff08;GC&am…...

鸿蒙NEXT开发案例:保质期计算

【引言】 保质期计算应用是一个基于鸿蒙NEXT框架开发的数字和文本统计组件。用户可以输入商品的生产日期和保质期天数&#xff0c;应用会自动计算并展示相关信息&#xff0c;包括保质状态、剩余天数、生产日期和到期日期。 【环境准备】 • 操作系统&#xff1a;Windows 10 …...

LLM并发加速部署方案(llama.cpp、vllm、lightLLM、fastLLM)

大模型并发加速部署 解析当前应用较广的几种并发加速部署方案&#xff01; llama.cpp、vllm、lightllm、fastllm四种框架的对比&#xff1a; llama.cpp&#xff1a;基于C&#xff0c;①请求槽&#xff0c;②动态批处理&#xff0c;③CPU/GPU混合推理vllm&#xff1a;基于Pyth…...

用最小的代价解决mybatis-plus关于批量保存的性能问题

1.问题说明 问题背景说明&#xff0c;在使用达梦数据库时&#xff0c;mybatis-plus的serviceImpl.saveBatch()方法或者updateBatchById()方法的时候&#xff0c;随着数据量、属性字段的增加&#xff0c;效率越发明显的慢。 serviceImpl.saveBatch(); serviceImpl.updateBatch…...

蓝桥杯历届真题 --#递推 翻硬币(C++)

文章目录 思路完整代码结语 原题链接 思路 通过观察测试用例&#xff0c;我们猜测&#xff0c;从左到右依次对比每一个位置上的状态&#xff0c;如果不一样我们就翻一次&#xff0c;最终得到的答案即为正解。 完整代码 //这里是引入了一些常用的头文件,和一些常规操作 //第一…...

BurpSuite-8(FakeIP与爬虫审计)

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址&#xff1a;IP伪造和爬虫审计_哔哩哔哩_bilibili 一、FakeIP 1.配置环境 BurpSuite是java环境下编写的&#xff0c;而今天的插件是python编写的&#xff0c…...

JAVA8、Steam、list运用合集

Steam运用 Java Stream API为开发人员提供了一种函数式和声明式的方式来表达复杂的数据转换和操作,使代码更加简洁和富有表现力。 1、使用原始流以获得更好的性能【示例:求和】 使用 int、long 和 double 等基本类型时,请使用IntStream、LongStream 和 DoubleStream 等基本流…...

深入详解人工智能机器学习:强化学习

目录 强化学习概述 强化学习的基本概念 定义 关键组件 强化学习过程 常用算法 应用示例 示例代码 代码解释 应用场景 强化学习核心概念和底层原理 核心概念 底层原理 总结 强化学习概述 强化学习&#xff08;Reinforcement Learning, RL&#xff09;是机器学习中的…...

docker的简单使用

文章目录 docker简介docker架构镜像和容器镜像有关的常用命令容器相关常用命令 docker简介 Docker是一个开源的应用容器引擎&#xff0c;基于Go语言并遵从Apache2.0协议开源。 Docker可以让开方子打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到…...

启动的docker容器里默认运行dockerd

问题 已在Dockerfile里yum install docker 但docker run 启动容器后, docker ps等命令无法执行 ps -aux 没有dockerd 进程 临时解决 另开一个终端 docker exec -it 容器名 bash 手动启 dockerd 默认启动 分析 现在启动容器的默认命令是 /sbin/init sbin/init 是根文件系统…...

Python爬虫技术的最新发展

在互联网的海洋中&#xff0c;数据就像是一颗颗珍珠&#xff0c;而爬虫技术就是我们手中的潜水艇。2024年&#xff0c;爬虫技术有了哪些新花样&#xff1f;让我们一起潜入这个话题&#xff0c;看看最新的发展和趋势。 1. 异步爬虫&#xff1a;速度与激情 随着现代Web应用的复…...

什么是厄尔米特(Hermitian)矩阵?

厄米矩阵&#xff08;Hermitian Matrix&#xff09;定义 在数学和物理中&#xff0c;厄米矩阵是满足以下条件的复方阵&#xff1a; A A † \mathbf{A}\mathbf{A}^\dagger AA† 其中&#xff0c; A † \mathbf{A}^\dagger A†表示矩阵 A \mathbf{A} A的共轭转置&#xff0c;即…...

从零开始:Linux 环境下的 C/C++ 编译教程

个人主页&#xff1a;chian-ocean 文章专栏 前言&#xff1a; GCC&#xff08;GNU Compiler Collection&#xff09;是一个功能强大的编译器集合&#xff0c;支持多种语言&#xff0c;包括 C 和 C。其中 gcc 用于 C 语言编译&#xff0c;g 专用于 C 编译。 Linux GCC or G的安…...

Excel + Notepad + CMD 命令行批量修改文件名

注意&#xff1a;该方式为直接修改原文件的文件名&#xff0c;不会生成新文件 新建Excel文件 A列&#xff1a;固定为 renB列&#xff1a;原文件名称C列&#xff1a;修改后保存的名称B列、C列&#xff0c;需要带文件后缀&#xff0c;为txt文件就是.txt结尾&#xff0c;为png图片…...

1.1 android:监听并处理返回事件

在Android开发过程中&#xff0c;默认执行返回事件是结束当前界面&#xff0c;返回上一个界面&#xff0c;没有任何提示&#xff0c;但用户可能会误操作&#xff0c;这时出现一个提示界面对用户较为友好&#xff0c;接下来&#xff0c;让我们探究返回事件的处理。 一、onBackP…...

解决Ubuntu关机主板不断电的问题(其它使用GRUB的Linux发行版大概率也可用)

前言&#xff1a; 在某些主板上&#xff0c;Ubuntu20.04系统关机并不会连带主板一起断电。 猜测可能是主板太老了。无法识别较新的系统的关机信号&#xff0c;导致无法断电。连带着一些电脑周边设备也不会断电导致状态无法重置&#xff0c;后续会出现一些问题。 目标&#xf…...

【CTF-Web】文件上传漏洞学习笔记(ctfshow题目)

文件上传 文章目录 文件上传 What is Upload-File&#xff1f;Upload-File In CTF Web151 考点&#xff1a;前端校验解题&#xff1a; Web152 考点&#xff1a;后端校验要严密解题&#xff1a; Web153 考点&#xff1a;后端校验 配置文件介绍解题&#xff1a; Web154 考点&am…...

无法正常启动此程序,因为计算机丢失wlanapi.dll

wlanapi.dll丢失怎么办&#xff1f;有没有什么靠谱的修复wlanapi.dll方法_无法启动此程序,因为计算机中丢失wlanapi.dll-CSDN博客 wlanapi.dll是 Windows 操作系统中的一个动态链接库文件&#xff0c;主要与 Windows 无线 LAN (WLAN) API 相关。该DLL提供了许多必要的函数&…...

C++ webrtc开发(非原生开发,linux上使用libdatachannel库)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、libdatachannel库的下载和build二、开始使用 1.2.引入库3.开始使用 总结 前言 使用c开发webrtc在互联网上留下的资料甚少&#xff0c;经过我一段时间的探…...

vue-router路由传参的两种方式(params 和 query )

一、vue-router路由传参问题 1、概念&#xff1a; A、vue 路由传参的使用场景一般应用在父路由跳转到子路由时&#xff0c;携带参数跳转。 B、传参方式可划分为 params 传参和 query 传参&#xff1b; C、而 params 传参又可分为在 url 中显示参数和不显示参数两种方式&#x…...

VBA高级应用30例应用在Excel中的ListObject对象:向表中添加注释

《VBA高级应用30例》&#xff08;版权10178985&#xff09;&#xff0c;是我推出的第十套教程&#xff0c;教程是专门针对高级学员在学习VBA过程中提高路途上的案例展开&#xff0c;这套教程案例与理论结合&#xff0c;紧贴“实战”&#xff0c;并做“战术总结”&#xff0c;以…...

github操作学习笔记(杂乱版)

git开源的分布式版本控制系统&#xff1a; 每次修改文件提交后&#xff0c;都会自动创建一个项目版本 查看git版本看有没有安装成功&#xff1a;git --version 把默认编辑器设置成vim&#xff1a;git config --global core.editor "vim" 1、设置昵称和邮箱&#xff…...