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

56 网络层

本节重点

理解网络层的作用,深入理解IP协议的基本原理
对整个TCP/IP协议有系统的理解
对TCP/IP协议体系下的其他重要协议和技术有一定的了解

目录

  1. 前置认识
  2. ip协议
  3. 基本概念
  4. 协议头格式
  5. 网段划分
  6. 特殊的ip地址
  7. ip地址的数量限制
  8. 私有ip和公有ip
  9. 路由
  10. 路由表生成算法

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

1. 前置认识

传输层提供了很多策略,保证数据传输的各种策略,数据丢包等如何处理,那么将数据传输的跑腿活,这个具体工作是由谁来做。这就是接下来要说的网络层,用户需要的是将数据可靠的从A主机到B主机,ip协议本质工作,提供将数据从A主机到B主机的能力

2. IP协议

在这里插入图片描述
网络要对所有的主机进行表示。源ip,目的ip来标识源主机和目的主机。每一个局部网络通过路由器和其他局部网络相连,想要到达目的主机,需要先到达目标网络,再找到目标主机,然后是目标进程

3. 基本概念

主机:配有IP地址,但是不进行路由控制的设备
路由器:即配有ip地址,又能进行路由控制
节点:主机和路由器的统称

ip地址就像身份证号一样,每一部分都是设计好,有代表的意义,身份证号由地区码+出生年月和签发机构等构成

4. 协议头格式

在这里插入图片描述

  • 4位版本号(version):指定IP协议的版本,对于ipv4来说,就是4
  • 4位头部长度(header length):IP头部的长度是多少个32bit,也就是length*4的字节数,4bit表示最大的数字是15,单位是4,因此ip头部最大长度是60字节
  • 8位服务类型(Type Of Service):3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0),4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本,这四者相互冲突,只能选择一个,对于ssh/telent这样的应用程序,最小延时比较重要,对于ftp这样的程序,最大吞吐量比较重要
  • 16位总长度(total length):IP数据报整体占多少个字节
  • 8位生存时间(Time To Live,TTL):是数据报到达目的地的最大报文跳数,一般是64,每次经过一个路由,TTL-1,一直减到0还没到达,那么就丢弃了,这个字段主要是用来防止游离报文出现路由循环
  • 8位协议:表示上层协议的类型
  • 16位头部校验和:使用CRC校验,鉴别头部是否损坏,坏了就丢弃
  • 32位源地址和32位目标地址:表示发送端和接收端
  • 选项字段(不定长,最多40字节):略

分片与组装
MTU对报文的大小做了限制,规定最大1500字节,如果发出的过大,网络层就需要分片交付,到达目标网络层完成拼接

  • 16位标识(id):唯一的标识主机发送的报文,如果ip报文在数据链路层被分片了,那么每一个片里的id是相同的
  • 3位标志字段:第一位保留(保留的意思是现在不用,没想好以后用不用),第二位置为1表示禁止分片,这时候如果报文长度超过MTU,ip模块会丢弃报文,第三位标识“更多分片”,如果分片了的话,最后一个分片位置为1,其他为0是一个结束标记
  • 13位分片偏移(framegament offset):是分片相对于原始ip报文开始处的偏移,其实就是在表示当前分片在报文中哪个位置,实际便宜的字节数是这个值*8得到的,因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)

如何知道分片了
如果分片了,那么片偏移不等于0,或者更多分片等于1

如何分片
比如一个3000字节的报文,超过了1500,需要分片,先将头部1500字节取出来,设置片偏移为1,然后第二个分片取1480字节,设置报头更多分片1,偏移1500,拼接上去,最后部分添加报头,设置偏移2980,更多分片为0表示结束。这三个标识id是统一的

如何组装
根据偏移排序,去掉除第一个报文的报头,拼接数据。丢弃哪一个都可以通过偏移和标志查出来。如果丢了一个就要全部重发。所以不建议分片,会增加丢包概率

5. 网段划分(重要)

网络号:保证相互连接的两个网段具有不同的标识
主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号

在这里插入图片描述
不同的子网其实就是把网络号相同的主机放在一起
如果在子网中新增一台主机,这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网的其他主机重复

路由器本质也是特定一个子网的主机,也要配置ip地址。一定要至少连接2个子网,也就相当于同时在两个子网,暂时认为路由器有多张网卡就行,路由器可以配置多个ip的。一般是一个子网中第一台设备,一般它的ip地址都是:网络号.1,路由器不仅可以进行ip报文的转发,还可以构建子网(局域网)

通过合理设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的ip地址都不相同
那么问题来了,手动管理子网内的ip,是一个相当麻烦的事情

  • 有一种技术叫DHCP,能够自动的给子网内新增主机节点分配ip地址,避免了手动管理ip的不便
  • 一般的路由器都带有DHCP功能,因此路由器也可以看做一个DHCP服务器

ipv4是4字节的,最多只有42亿个,属于有限的资源,所以需要对ip资源合理的分配

五类划分

过去曾经提出一种划分网络号和主机号的方案,把所有ip地址分为五类,如下图所示(该图出自[TCPIP])
在这里插入图片描述
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万五千多个主机,A类地址的子网内的主机数更多
  • 然而实际网络架设中,不会存在一个子网内有这么多的情况,因此大量的ip地址都被浪费掉了

CIDR

针对这种情况提出了新的划分方案,称为CIDR(classless interdomain routing)

  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号
  • 子网掩码也是一个32位的正整数,通常用一串“0”来结尾
  • 将ip地址和子网掩码进行“按位与”操作,得到的结果就是网络号
  • 子网掩码为1,表示对应网络位,0表示主机位
  • 网络号和主机号的划分与这个ip地址是A类、B类还是C类无关

下面举两个例子:
划分子网的例子1
在这里插入图片描述

划分子网的例子2
在这里插入图片描述

可见,子网掩码和ip运算可以得到网络号,主机号从全0到全1就是子网的地址范围
ip地址和子网掩码还有一种更简洁的方法,例如140.252.20.68/24,表示ip地址为140.252.20.68,子网掩码的高24位是1,也就是255.255.255.0

子网掩码可以对ip32位,进行任意划分,内网建设,比如B类主机号16位太多了,可以划出12位给网络,剩下4位作为主机号

6. 特殊的ip地址

将ip地址中的主机地址全部设为0,就成为了网络号,代表这个局域网
ip地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包
127.*的ip地址用于本机环回(loop back)测试,通常是127.0.0.1

在这里插入图片描述

7. 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还没有普及

8. 私有ip地址和公网ip地址

理解运营商和全球网络

我们是怎么上网,通过调试解调器将模拟光电信号转为数字信号,再交给路由器,路由器构建了局域网,网络在运营商上网需要账号密码,交钱。路由器的管理也有一个账号密码。每个国家的基站等网络都是由运营商和国家完成的

全球网络中,将ip按国家进行了划分。每个国家和地区都有自己的ip地址段。在国内,再次划分,每个ip地址还包含了省和市网段的匹配的信息,市的定位不一定准确。如果别国想访问国内的一台主机,先拿目标ip在全球范围的路由器对比,发现是中国的,然后再交由国内的路由器,判断子网掩码后的所属,到省,到市,一直往下
在这里插入图片描述

数据发送过程

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

  • 10.*,前8位是网络号,共16,777,216个地址
  • 172.16.到172.31,前12位是网络号,共1,048,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 Translation),网络地址转换
  • 如果希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网ip的服务器上,这样的服务器可以在阿里云/腾讯云上购买

比如上面192.168.1.201主机想访问一个ip是201,100,1,1的公网,它自己是私有ip,所以到达自己所在的路由器后要替换,将源ip替换为路由器的WANip,就是10.1.1.2,由家用路由器再发送给运营商路由器,源ip是它的子网,继续替换为122.77.241.4,这个过程可能会重复,直到有一个路由器发送到广域网中,以省为例,判断这个ip是不是国内的,是就转给这个省,不断向下,根据目的ip就可以确定发送的主机

nat路由器在这个替换过程中会保存映射关系,当数据要发送回来的时候,不断还原ip

大企业的网络也由内网构成,但会提供一个公网路由器

9. 路由

在复杂的网络结构中,找出一条通往终点的路线,路由的过程,就是这样一跳一跳(Hop by Hop)“问路”的过程
所谓“一跳”就是数据链路层中的一个区间,具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间
在这里插入图片描述

ip数据报的传输过程和纹路一样,当ip数据报,到达路由器时,会先查看目的ip。路由器决定这个数据报时能直接发送给目标主机,还是需要发送给下一个路由器,依次反复,一直到达目标ip地址
那么如何判定这个数据包该发送到哪里?每个节点内部维护一个路由表

当路由器找路时,不会出现不知道的情况,那样数据就无法发送了。会有下面的结果:
给你具体下一跳的路
路由器不清楚,但转入默认路由器
到达入口路由器

在这里插入图片描述

路由表

可以用route命令查看
在这里插入图片描述
如果目的ip命中了路由表,就直接转发即可。路由表中的最后一行们主要由下一跳地址和发送接口两部分组成,当目的地址与路由表其他行都不匹配时,就会按缺省路由条目规定的接口发送到下一跳地址

假如某主机网络接口配置和路由表如下:
在这里插入图片描述

这台主机由两个网络接口,一个网络接口连到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,与第一行目的网络不符
第二行同样计算,正式第二行的目的网络,经由eth1接口发送。是与eth1接口直连的网络,可以直接发到目的主机,不需要转发

转发过程例2,发送数据包目的202.10.1.2
和前几项对比都不是
按缺省条目,从eht0发乎,去往192.168.10.1路由器,由这个路由器根据它的路由表决定如何发

10. 路由表生成算法

路由表可以由网络管理员手动维护(静态路由),也可以通过一些算法自动生成(动态路由)。例如距离向量算法,LS算法啊,Dijkstra算法等

相关文章:

56 网络层

本节重点 理解网络层的作用,深入理解IP协议的基本原理 对整个TCP/IP协议有系统的理解 对TCP/IP协议体系下的其他重要协议和技术有一定的了解 目录 前置认识ip协议基本概念协议头格式网段划分特殊的ip地址ip地址的数量限制私有ip和公有ip路由路由表生成算法 在复杂…...

MAC地址泛洪——华为ensp

首先搭建好网络拓扑,包含客户端、服务端、一台交换机 以及 云。 客户端client1和服务端server1各自配置好IP地址,服务端充当FTP服务器,启动ftp服务 其中要先配置cloud1相关配置,然后才可以进行连线, 第一步进行端口…...

golang 字符编码 gbk/gb2312 utf8编码相互转换,判断字符是否gbk编码函数, 字符编码转换基础原理解析, golang默认编码utf8

虽然golang里面的默认编码都是统一的unicode utf8编码, 但是我们在调用外部系统提供的api时,就可能会遇到别人的接口提供的编码非 utf8编码,而是gbk/gb2312编码, 这时候我们就必须要将别人的gbk编码转换为go语言里面的默认编码ut…...

CentOS(7.x、8)上安装EMQX

EMQX 是一个高度可扩展的分布式 MQTT 消息服务器,适用于 IoT、M2M 和移动应用程序。以下是在 CentOS 系统上安装 EMQX 的基本步骤: 在 CentOS 上安装 EMQ X 步骤 1: 添加 EMQ X YUM 源 首先,你需要添加 EMQ X 的官方 YUM 源到你的 CentOS 系…...

Mojo模型魔法:动态定制特征转换的艺术

标题:Mojo模型魔法:动态定制特征转换的艺术 在机器学习领域,模型的灵活性和可扩展性是至关重要的。Mojo模型(Model-as-a-Service)提供了一种将机器学习模型部署为服务的方式,允许开发者和数据科学家轻松地…...

多任务高斯过程数学原理和Pytorch实现示例

高斯过程其在回归任务中的应用我们都很熟悉了,但是我们一般介绍的都是针对单个任务的,也就是单个输出。本文我们将讨论扩展到多任务gp,强调它们的好处和实际实现。 本文将介绍如何通过共区域化的内在模型(ICM)和共区域化的线性模型(LMC)&…...

【PPT把当前页输出为图片】及【PPT导出图片模糊】的解决方法(sci论文图片清晰度)

【PPT把当前页输出为图片】及【PPT导出图片模糊】的解决方法 内容一:ppt把当前页输出为图片:内容二:ppt导出图片模糊的解决方法:方法:步骤1:打开注册表编辑器步骤2:修改注册表: 该文…...

TeraTerm 使用技巧

参考资料 自分がよく使うTeratermマクロによる自動ログインのやり方をまとめてみたよTera Term マクロでログインを自動化してみたTera Term のススメ 目录 简介一. 常用基础设置1.1 语言变更1.2 log设置 二. 小技巧2.1 指定host别名2.2 新开窗口2.3 设置粘贴多行命令时的行间…...

意得润色打折啦

新注册使用可以减15%,ABSJU202,直接使用哦ㅤ 此外,如果老板经费充足,预算高,完全可以试试他家的投稿套餐,科学深度编辑,从期刊选择,到投稿协助,投稿信都帮你写好&#xf…...

微软研发致胜策略 06:学无止境

这是一本老书,作者 Steve Maguire 在微软工作期间写了这本书,英文版于 1994 年发布。我们看到的标题是中译版名字,英文版的名字是《Debugging the Development Process》,这本书详细阐述了软件开发过程中的常见问题及其解决方案&a…...

学习大数据DAY21 Linux基本指令2

目录 思维导图 搜索查看查找类 find 从指定目录查找文件 head 与 tail 查看行 cat 查看内容 more 查看大内容 grep 过滤查找 history 查看已经执行过的历史命令 wc 统计文件 du 查看空间 管道符号 | 配合命令使用 上机练习 4 解压安装类 zip unzip 压缩解压 tar …...

【18】Android 线程间通信(三) - Handler

概述 接下来我们会从native层来分析一下,Handler做了什么,以及之前提到过的应用层的两个native的调用链。 nativeWake 最早接触这个方法还记得是什么时候吗?MessageQueue#enqueueMessage中,在这个方法的末尾,我们看…...

静态路由技术

一、路由的概念 路由是指指导IP报文发送的路径信息。 二、路由表的结构 1、Destination/Mask:IP报文的接收方的IP地址及其子网掩码; 2、proto:协议(Static:静态路由协议,Direct:表示直连路由) 3、pref:优先级(数值和优先级成反比) 4、cost:路由开销(从源到目的…...

SpringBoot缓存注解使用

背景 除了 RedisTemplate 外, 自Spring3.1开始,Spring自带了对缓存的支持。我们可以直接使用Spring缓存技术将某些数据放入本机的缓存中;Spring缓存技术也可以搭配其他缓存中间件(如Redis等)进行使用,将某些数据写入到缓存中间件…...

@RequestBody接收到的参数中如何限制List的长度?

在Spring MVC中,你可以使用Valid注解和自定义的验证注解来限制List的长度,防止DOS攻击。具体步骤如下: 创建自定义注解:首先,创建一个自定义注解来验证List的长度。 import javax.validation.Constraint; import jav…...

Linux C语言 54-目录操作

Linux C语言 54-目录操作 本节关键字&#xff1a;Linux、C语言、目录操作、遍历目录 相关C库函数&#xff1a;opendir、readdir、closedir 遍历目录 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <dirent.h> #include <…...

Java实战中如何使用多线程(线程池)及其为什么使用?

这个话题在入行之前就想过很多次&#xff0c;很多8古文或者你搜索的结果都是告诉你什么提高高并发或者是一些很高大上的话&#xff0c;既没有案例也没有什么公式去证明&#xff0c;但是面试中总是被问到&#xff0c;也没有实战经历&#xff0c;所以面试时一问到多线程的东西就无…...

kafka集群搭建-使用zookeeper

1.环境准备&#xff1a; 使用如下3台主机搭建zookeeper集群&#xff0c;由于默认的9092客户端连接端口不在本次使用的云服务器开放端口范围内&#xff0c;故端口改为了8093。 172.2.1.69:8093 172.2.1.70:8093 172.2.1.71:8093 2.下载地址 去官网下载&#xff0c;或者使用如…...

【python】Numpy运行报错分析:IndexError与形状不匹配问题

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

你有多自律就有多自由

当你失去对时间的控制权&#xff0c;生活也就失去了平衡。 真正对自己有要求的人&#xff0c;都是高度自律的人。 追求自己想要的生活&#xff0c;任何时候开始都不会晚&#xff0c;关键在于你能够坚持下去&#xff0c;以高度自律的精神&#xff0c;日复一日、年复一年的坚持下…...

Codeforces Round 959 (Div. 1 + Div. 2 ABCDEFG 题) 文字讲解+视频讲解

Problem A. Diverse Game Statement 给定 n m n\times m nm 的矩形 a a a&#xff0c; a a a 中的每一个数均在 1 ∼ n m 1\sim nm 1∼nm 之间且互不相同。求出 n m n\times m nm 的矩形 b b b&#xff0c; b b b 中的每一个数均在 1 ∼ n m 1\sim nm 1∼nm 之间且互…...

WSL2 Centos7 Docker服务启动失败怎么办?

wsl 安装的CentOS7镜像,安装了Docker之后,发现用systemctl start docker 无法将docker启动起来。 解决办法 1、编辑文件 vim /usr/lib/systemd/system/docker.service将13行注释掉,然后在下面新增14行的内容。然后保存退出。 2、再次验证 可以发现,我们已经可以正常通过s…...

分布式锁-redisson锁重试和WatchDog机制

抢锁过程中&#xff0c;获得当前线程&#xff0c;通过tryAcquire进行抢锁&#xff0c;该抢锁逻辑和之前逻辑相同。 1、先判断当前这把锁是否存在&#xff0c;如果不存在&#xff0c;插入一把锁&#xff0c;返回null 2、判断当前这把锁是否是属于当前线程&#xff0c;如果是&a…...

ESP8266模块(2)

实例1 查看附近的WiFi 步骤1&#xff1a;进入AT指令模式 使用USB转串口适配器将ESP8266模块连接到电脑。打开串口终端软件&#xff0c;并设置正确的串口和波特率&#xff08;通常为115200&#xff09;。输入以下命令并按回车确认&#xff1a; AT如果模块响应OK&#xff0c;…...

Docker安装笔记

1. Mac安装Docker 1.1 Docker安装包下载 1.1.1 阿里云 对于10.10.3以下的用户 推荐使用 对于10.10.3以上的用户 推荐使用 1.1.2 官网下载 系统和芯片选择适合自己的安装包 1.2 镜像加速 【推荐】阿里镜像 登陆后&#xff0c;左侧菜单选中镜像加速器就可以看到你的专属地…...

《昇思25天学习打卡营第21天|Pix2Pix实现图像转换》

Pix2Pix 是一种图像转换模型&#xff0c;使用条件生成对抗网络&#xff08;Conditional Generative Adversarial Networks&#xff0c;cGANs&#xff09;实现图像到图像的转换。它主要由生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;…...

Python和MATLAB网络尺度结构和幂律度大型图生成式模型算法

&#x1f3af;要点 &#x1f3af;算法随机图模型数学概率 | &#x1f3af;图预期度序列数学定义 | &#x1f3af;生成具有任意指数的大型幂律网络&#xff0c;数学计算幂律指数和平均度 | &#x1f3af;随机图分析中巨型连接分量数学理论和推论 | &#x1f3af;生成式多层网络…...

在jsPsych中使用Vue

jspsych 介绍 jsPsych是一个非常好用的心理学实验插件&#xff0c;可以用来构建心理学实验。具体的就不多介绍了&#xff0c;大家可以去看官网&#xff1a;https://www.jspsych.org/latest/ 但是大家在使用时就会发现&#xff0c;这个插件只能使用js绘制界面&#xff0c;或者…...

机器学习·概率论基础

概率论 概率基础 这部分太简单&#xff0c;直接略过 条件概率 独立性 独立事件A和B的交集如下 非独立事件 非独立事件A和B的交集如下 贝叶斯定理 先验 事件 后验 在概率论和统计学中&#xff0c;先验概率和后验概率是贝叶斯统计的核心概念 简单来说后验概率就是结合了先验概…...

c生万物系列(面向对象:封装)

本系列博客主要介绍c语言的一些屠龙技&#xff0c;里面包含了笔者本人的一些奇思妙想。 该系列博客笔者只是用作记录。如果你偶然找到了这篇博客&#xff0c;但是发现不知所云&#xff0c;请不要过多投入时间&#xff0c;可能笔者本人那时候也看不懂了。 笔者决定用c语言模仿…...

当当网数据采集:Scrapy框架的异步处理能力

在互联网数据采集领域&#xff0c;Scrapy框架以其强大的异步处理能力而著称。Scrapy利用了Python的异步网络请求库&#xff0c;如twisted&#xff0c;来实现高效的并发数据采集。本文将深入探讨Scrapy框架的异步处理能力&#xff0c;并展示如何在当当网数据采集项目中应用这一能…...

React——useEffect和自定义useUpdateEffect

useEffect 是React的一个内置Hook&#xff0c;用于在组件渲染后执行副作用&#xff08;例如数据获取、订阅或手动更改DOM&#xff09;。它将在第一次渲染后和每次更新后都会执行。 useEffect(() > {// 这里的代码将在组件挂载和更新时执行。 }, [dependencies]); // depend…...

Hadoop大数据处理架构中ODB、DIM、DWD、DWS

在Hadoop的大数据处理架构中&#xff0c;ODS、DIM、DWD和DWS分别代表了数据仓库体系中不同的层次和功能。下面解释这几个概念&#xff1a; ODS (Operational Data Store) 想象你有一家超市&#xff0c;每天营业结束后&#xff0c;你会把当天所有的销售记录、顾客信息、商品库…...

【刷题汇总 -- 爱丽丝的人偶、集合、最长回文子序列】

C日常刷题积累 今日刷题汇总 - day0211、爱丽丝的人偶1.1、题目1.2、思路1.3、程序实现 2、集合2.1、题目2.2、思路2.3、程序实现 -- set 3、最长回文子序列3.1、题目3.2、思路3.3、程序实现 -- dp 4、题目链接 今日刷题汇总 - day021 1、爱丽丝的人偶 1.1、题目 1.2、思路 …...

基于vue3 + vite产生的 TypeError: Failed to fetch dynamically imported module

具体参考这篇衔接&#xff1a; Vue3报错&#xff1a;Failed to fetch dynamically imported module-CSDN博客 反正挺扯淡的&#xff0c;错误来源于基于ry-vue-plus来进行二次开发的时候遇到的问题。 错误起因 我创建了一个广告管理页面。然后发现访问一直在加载中。报的是这样…...

批量自动添加好友,高效拓展人脉圈.

随着微信使用数量的不断增加&#xff0c;手动添加好友成为了一项耗时且繁琐的任务。为了帮助大家解决这个问题&#xff0c;下面分享一款高效的微信管理系统&#xff0c;它能够帮助你实现批量自动添加好友&#xff0c;极大提升了人脉拓展的效率。 这款微信管理系统可以同时管理多…...

Web开发:一个可拖拽的模态框(HTML、CSS、JavaScript)

目录 一、需求描述 二、实现效果 三、完整代码 四、实现过程 1、HTML 页面结构 2、CSS 元素样式 3、JavaScript动态控制 &#xff08;1&#xff09;获取元素 &#xff08;2&#xff09;显示\隐藏遮罩层与模态框 &#xff08;3&#xff09;实现模态框拖动效果 一、需求…...

【深度学习】fooocusapi,docker,inpainting图像

基础镜像制作来源 fooocusapi接口官方写的&#xff1a; docker run -d --gpusall \-e NVIDIA_DRIVER_CAPABILITIEScompute,utility \-e NVIDIA_VISIBLE_DEVICESall \-p 8888:8888 konieshadow/fooocus-api会下载一些模型&#xff0c;下载完后推这个镜像 docker commit 4dfd1…...

算法017:二分查找

二分查找. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/binary-search/ 二分查找&#xff0c;其实是双指针的一种特殊情况&#xff0c;但是时间复杂度极低&#…...

谷粒商城实战笔记-37-前端基础-Vue-基本语法插件安装

文章目录 一&#xff0c;v-model1&#xff0c;双向绑定2&#xff0c;vue的双向绑定2.1 html元素上使用指令v-model2.2 model中声明对应属性2.3&#xff0c;验证view绑定modelmodel绑定view 完整代码 二&#xff0c;v-on1&#xff0c;指令简介2&#xff0c;在button按钮中添加v-…...

mybatis中的缓存(一级缓存、二级缓存)

文章目录 前言一、MyBatis 缓存概述二、一级缓存1_初识一级缓存2_一级缓存命中原则1_StatementId相同2_查询参数相同3_分页参数相同4_sql 语句5_环境 3_一级缓存的生命周期1_缓存的产生2_缓存的销毁3_网传的一些谣言 4_一级缓存核心源码5_总结 三、二级缓存1_开启二级缓存2_二级…...

实现自动化采购:食堂采购系统源码开发详解

本篇文章&#xff0c;笔者将详细介绍食堂采购系统的开发过程&#xff0c;从需求分析、系统设计到实现和测试&#xff0c;为您全面解析如何构建一个高效的自动化采购系统。 一、需求分析 1.采购计划管理 2.供应商管理 3.订单管理 4.库存管理 5.财务管理 6.数据分析与报告 …...

linux、windows、macos清空本地DNS缓存

文章目录 Linux&#xff1a;Windows&#xff1a;macOS&#xff1a; Linux&#xff1a; 对于使用systemd的操作系统&#xff08;如CentOS 7、Ubuntu 16.04&#xff09;&#xff0c;可以使用以下命令重启systemd-resolved服务来清除缓存&#xff1a; sudo systemctl restart sys…...

领夹麦克风哪个品牌好,电脑麦克风哪个品牌好,热门麦克风推荐

​在信息快速传播的时代&#xff0c;直播和视频创作成为了表达与交流的重要方式。对于追求卓越声音品质的创作者而言&#xff0c;一款性能卓越的无线麦克风宛如一把利剑。接下来&#xff0c;我要为大家介绍几款备受好评的无线麦克风&#xff0c;这些都是我在实际使用中体验良好…...

【第5章】Spring Cloud之Nacos服务注册和服务发现

文章目录 前言一、提供者1. 引入依赖2.配置 Nacos Server 地址3. 开启服务注册 二、消费者1. 引入依赖2.配置 Nacos Server 地址3. 开启服务注册 三、服务列表四、服务发现1. 获取服务列表2. 测试2.1 获取所有服务2.2 根据服务名获取服务信息 五、更多配置项总结 前言 本节通过…...

Springboot 启动时Bean的创建与注入(一)-面试热点-springboot源码解读-xunznux

Springboot 启动时Bean的创建与注入&#xff0c;以及对应的源码解读 文章目录 Springboot 启动时Bean的创建与注入&#xff0c;以及对应的源码解读构建Web项目流程图&#xff1a;堆栈信息&#xff1a;堆栈信息简介堆栈信息源码详解1、main:10, DemoApplication (com.xun.demo)2…...

单调栈(随缘复习到了,顺手刷了)

也是不知道为什么突然又复习到单调栈了&#xff0c;所以顺手刷了三道题&#xff0c;总结一下 P6503 [COCI2010-2011#3] DIFERENCIJA 思路&#xff1a;这题是要求每个子区间里面的最大值和最小值的差&#xff0c;我们一开始想的必然是纯暴力呀&#xff0c;但是一看这数据&#…...

学习测试10-3自动化 web自动化

web自动化 chrome驱动下载地址&#xff1a; https://registry.npmmirror.com/binary.html?pathchromedriver/ https://googlechromelabs.github.io/chrome-for-testing/#stable观察Google版本&#xff0c;下相应的驱动 运行代码试试&#xff0c;成功Google就会弹出 from se…...

安防视频监控EasyCVR视频汇聚平台修改配置后无法启动的原因排查与解决

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台基于云边端一体化架构&#xff0c;兼容性强、支持多协议接入&#xff0c;包括国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SD…...

爬虫学习2:爬虫爬取网页的信息与图片的方法

爬虫爬取网页的信息与图片的方法 爬取人物信息 import requestshead {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0" } # 这是get请求带参数的模式…...