javaEE -9(7000字详解TCP/IP协议)
一: IP 地址
IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如:01100100.00000100.00000101.00000110,通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:100.4.5.6。
1.1 IPv4和IPv6
IP协议有两个版本,IPv4和IPv6。此后,凡是提到IP协议,没有特殊说明的,默认都是指IPv4。IPv4数量=2^32,大约43亿左右,而TCP/IP协议规定,每个主机都需要有一个IP地址。对于全世界计算机来说,这个数量是不够的,所以后来推出了IPv6(长度128位,是IPv4的4倍)。但因为目前IPv4还广泛的使用,且可以使用其他技术来解决IP地址不足的问题,所以IPv6也就没有普及。
1.2 IP地址的组成
IP地址分为两个部分,网络号和主机号
- 网络号:标识网段(标识一个局域网),保证相互连接的两个网段具有不同的标识;
- 主机号:标识主机(标识了一个局域网内的主机),同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号;
通过合理设置网络号和主机号,就可以保证在相互连接的网络中,每台主机的IP地址都是唯一的,那么,我们该如何划分网络号和主机号呢?
过去曾经提出一种划分网络号和主机号的方案,把所有IP 地址分为五类,如下图所示:
类别 | 范围 | 适用网络 | 网络数量 | 主机最大连接数 |
---|---|---|---|---|
A | 0.0.0.0 ~ 127.255.255.255 | 大型网络 | 126 | 16,777,214 (224-2) |
B | 128.0.0.0 ~ 191.255.255.255 | 中等规模网络 | 约16,000 | 65,534 (216-2) |
C | 192.0.0.0 ~ 223.255.255.255 | 小型网络 | - | 254 (28-2) |
D | 224.0.0.0 ~ 239.255.255.255 | - | - | - |
E | 240.0.0.0 ~ 247.255.255.255 | - | - | - |
请注意,类别 D 和 E 用于特殊用途,不分配给实际的网络和主机,主机最大连接数减去2,是扣除主机号为全0和全1的特殊IP地址。
特殊的IP地址:
- 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;
- 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;
- 127.*的IP地址用于本机环回(loop back)测试,通常127.0.0.1
- 本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。
在上述的分类中,存在IP地址浪费的问题:
- 单位一般会申请B类网络(C类连接主机数量有限),但实际网络架设时,连接的主机数量又常远小于65534(B类连接主机数),造成IP地址浪费;同理,A类网络的IP地址也会造成大量的浪费。
2.当一个单位申请了一个网络号,并且想将该网络中的IP地址再分给它下属的几个小单位时,那么这将导致IP地址资源的浪费,因为每个下属单位都需要一个独立的网络号,那么这将导致IP地址资源的浪费。
为了解决以上问题,引入子网掩码来进行子网划分。
1.3 子网掩码
子网掩码格式和IP地址一样,也是一个32位的二进制数。其中左边是网络位,用二进制数字“1”表示,1的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。
子网掩码的作用:
- 划分A,B,C三类 IP 地址子网,
如一个B类IP地址:191.100.0.0,按A ~ E类分类来说,网络号二进制数为16位网络号+16位主机号。
假设使用子网掩码 255.255.128.0(即17) 来划分子网,意味着划分子网后,高17位都是网络位/网络号,也就是将原来16位主机号,划分为1位子网号+15位主机号。
此时,IP地址组成为:网络号+子网号+主机号,网络号和子网号统一为网络标识(划分子网后的网络号/网段)
- 网络通信时,子网掩码结合IP地址,可以计算获得网络号(划分子网后的网络号)及主机号(划分子网后的主机号)。一般用于判断目的IP与本IP是否为同一个网段。
对于网络通信来说,发送数据报时,目的主机与发送端主机是否在同一个网段,流程是不一样的。
1.4通过IP地址和子网掩码计算主机号
将 IP 地址和子网掩码进行“按位与”操作(二进制相同位,与操作,两个都是1结果为1,否则为0),得到的结果就是网络号,IP地址减去网络号,剩下的就是主机号
让我们以一个例子来说明。假设有一个IP地址是192.168.0.100(以点分十进制表示),并且子网掩码是255.255.255.0。我们将它们转换为二进制形式:
通过使用子网掩码进行逻辑运算,我们可以将给定的IP地址分为网络部分和主机部分。以下是具体的步骤:
-
将IP地址和子网掩码都转换为二进制形式。
IP地址:192.168.0.100
子网掩码:255.255.255.0转换为二进制:
IP地址:11000000.10101000.00000000.01100100
子网掩码:11111111.11111111.11111111.00000000
子网掩码11111111.11111111.11111111.00000000 意味着划分子网后,高24位都是网络位/网络号,剩下的8为是主机号
-
进行逻辑运算(按位与)。
将IP地址的每一位与子网掩码的对应位进行逻辑与运算。
IP地址:11000000.10101000.00000000.01100100
子网掩码:11111111.11111111.11111111.00000000网络部分:11000000.10101000.00000000.00000000
-
得到网络部分和主机部分的二进制值后,可以将它们转换回十进制形式。
网络部分:11000000.10101000.00000000.00000000
主机部分:00000000.00000000.00000000.01100100转换为十进制形式:
网络部分:192.168.0.0
主机部分:0.0.0.100
通过子网掩码可以将一个IP地址空间划分成多个子网。子网掩码是一个32位的二进制数字,其作用是指示哪些位是网络部分,哪些位是主机部分。
通过使用子网掩码进行地址划分,可以将一个IP地址空间合理地分配给不同的网络和主机。这样就避免了IP地址的浪费,因为每个子网都可以被包含在一个更大的地址范围内,而不需要使用单独的IP地址。
例如,如果我们有一个IP地址段为10.0.0.0/24(子网掩码为255.255.255.0,/24代表子网掩码的长度),这意味着有256个可用的IP地址(从10.0.0.0到10.0.0.255)。如果我们将这个地址空间划分为4个子网,每个子网有64个可用IP地址,那么我们可以使用10.0.0.0/26、10.0.0.64/26、10.0.0.128/26和10.0.0.192/26。
这对于大规模的网络环境尤为重要,因为IP地址是有限的资源,通过子网划分,我们可以更有效地利用IP地址,避免浪费。
二: MAC地址
MAC地址,即 Media Access Control Address,用于标识网络设备的硬件物理地址。
- 主机具有一个或多个网卡,路由器具有两个或两个以上网卡;其中每个网卡都有唯一的一个MAC地址。
- 网络通信,即网络数据传输,本质上是网络硬件设备,将数据发送到网卡上,或从网卡接收数据。
- 硬件层面,只能基于MAC地址识别网络设备的网络物理地址。
MAC地址用来识别数据链路层中相连的节点,长度为48位,即6个字节。一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
MAC地址在网卡出厂时就确定了,不能修改。虚拟机中的MAC地址不是真实的MAC地址,可能会冲突;也有些网卡支持用户配置MAC地址。
广播数据报:发送一个广播数据报,表示对同网段所有主机发送数据报。广播数据报有一个特殊的MAC地址:FF:FF:FF:FF:FF:FF
2.1 网络数据传输
以下为主机B传输数据到主机C经过的网络设备:
对于以上经过的网络设备:
- 主机:配有IP地址,但是不进行路由控制的设备;
- 路由器:即配有IP地址,又能进行路由控制;
- 节点:主机和路由器的统称;
集线器和二层交换机不会对数据报封装和分用,不算在下一跳设备。
对于网络数据传输,不是想象中那样,数据直接从源主机到达目的主机,而是类似在地图中,从A到B的过程:
就好比唐僧去西天取经,行程为长安、五指山、黑风山、女儿国……大雷音寺。
IP地址描述的是路途总体的起点和终点:
- 源IP就是整个行程的起点:长安;
- 目的IP对应为整个行程的终点:大雷音寺
而行进也必须一个地点一个地点的前进,由MAC地址来描述路途上每一个区间的起点和终点:
- 从长安到五指山,为一跳的区间,源MAC为长安,目的MAC为五指山;
- 从五指山到黑风山,为下一跳的区间,源MAC为五指山,目的MAC为黑风山。
2.2 总结IP地址和MAC地址
- IP地址描述的是路途总体的起点和终点;是给人使用的网络逻辑地址。
- MAC地址描述的是路途上的每一个区间的起点和终点,即每一跳的起点和终点;是给网络硬件设备使用的网络物理地址。
三:网络设备及相关技术
3.1 集线器:转发所有端口
集线器是工作在物理层的网络设备,发送到集线器的任何数据,都只是简单的将数据复制并转发到其他所有端口。(端口指集线器后边的物理端口)
3.2 交换机:MAC地址转换表+转发对应端口
交换机工作在数据链路层,交换机内部会记录并维护一张MAC地址转换表:
- MAC地址转换表主要记录MAC地址与端口之间的映射。(端口指交换机后边的物理端口)
- 主机连接到交换机,及主机发送数据的时候,交换机可以学习并记录该主机MAC地址与端口信
息。 - 交换机接收到数据报以后,在MAC地址转换表中,通过目的MAC查找到对应的端口,则目的主机为该端口相连接的主机。只需要将数据报转发到对应端口上即可。
4. 以上是使用MAC地址转换表,通过目的MAC能找到对应端口的情况;如果找不到,交换机设置数据报目的MAC为广播地址FF:FF:FF:FF:FF:FF,发送到其他所有端口,目的主机返回响应后,交换机再记录该主机MAC与端口的映射信息。
3.3 主机:网络分层从上到下封装
发送数据报时,发送端主机都需要先根据网络分层从上到下封装:
- 源IP与目的IP标识整个路途的起点和终点;
- 源MAC与目的MAC标识了每一跳的起点和终点;
此时还需要根据发送端主机(源主机)与接收端主机(目的主机)是否在同一网段,来设置下一跳设备:
- 源主机和目的主机在同一个网段时,下一跳设备就是目的主机;
- 发送端主机和接收端主机在不同网段时,发送端主机是无法知道目的主机在哪,此时会设置下一跳设备为网关设备;
所谓网关,我们这里可以简单理解为,不同网段的网络互连时,需要使用网关设备。
通常的网关设备是路由器,可以划分公网和局域网(内网),同时还可以把局域网划分为多个子网(不同网段),Windows中可以在网络设置中,更改适配器设置查看网关IP:
以上两种情况,下一跳设备IP地址都可以获取到,但该设备的MAC地址(即目的MAC)可能不知道,就需要使用以下ARP寻址:
3.4 主机&路由器:ARP缓存表+ARP寻址
首先,ARP是一个介于数据链路层和网络层之间的协议;ARP协议建立了IP地址与MAC地址的映射关系,在数据链路层,寻找下一跳设备MAC地址的过程,称为ARP寻址:
- 主机和路由器中都保存了一张ARP缓存表:通过IP地址可以找到对应的MAC地址。
- 根据下一跳设备的IP地址,在ARP缓存表中能找到对应的MAC地址,则可以设置目的MAC并发送
数据报。 - 如果找不到,则发送ARP广播数据报:目的MAC为广播地址,询问下一跳设备的MAC地址。
这个过程类似于QQ群喊话:张三(下一跳设备IP地址),我要给你发快递(发送数据报),请告诉我你的收货地址(MAC地址)。参见以下流程:
3.5 路由器:路由+NAPT
路由器主要有两个作用:
- 网关
公网是指连接全球范围的互联网,它由各种网络设备和基础设施组成,用于在全球范围内实现信息传输和数据交换。公网可以被任何人访问和使用,例如访问网站、发送电子邮件、视频通话等。
子网是指在一个大的网络中划分出来的较小网络。一个IP地址由两部分组成:网络部分和主机部分。子网允许对大型网络进行细分管理,并提供更高效的数据传输和资源分配。通过在网络中定义子网掩码,可以确定IP地址的网络部分和主机部分。
路由器作为网关,可以划分公网和局域网,某些路由器还可以将局域网划分为多个子网(不同网段,家庭用的路由器不能划分局域网子网,企业级专业路由器才能划分。)
公网端口即WAN口,为单独的网卡,具有公网IP地址和公网MAC地址。划分的多个子网,是由局域网端口即LAN口划分,每个端口都有单独的网卡,具有该网段IP地址和MAC地址。
路由器作为网关:
- 划分局域网多个子网时,可以直接通过ARP寻址找到局域网任意主机。(这里的局域网就是路由器下的多个子网组成的局域网)。
- 划分公网和局域网时,局域网内主机发送数据报到公网主机时,需要基于NAPT协议,将局域网主机的IP地址和端口号,转换为路由器公网IP和端口号(指路由器中运行的程序的端口)。
局域网IP+端口需要转换为公网IP+端口,原因是接收端返回的响应数据报,目的IP和目的端口无法使用局域网IP和端口。
- 路由
所谓路由,即在复杂的网络结构中,找出一条通往终点的路线;网络通信(网络数据传输),路由器中的路由功能,就类似于规划路线,往哪个方向行进能更快到达目的地。
3.6 冲突域
主机之间通过网络设备(集线器、交换机)的物理端口、网线相连时,两个主机在同一时刻同时发送数据报,如果存在冲突,则该网络范围为一个冲突域(Collision Domain)。
冲突域是基于第一层物理层,又称为碰撞域。
-
所谓的冲突,类似两个人(主机)在一个房间(网络范围)同时说话,导致房间内其他人无法听清讲话的内容,即产生了冲突。
-
冲突域中的网络通信,要解决冲突,就得按时间顺序来发送多个数据报:同一时刻,网络设备只能接收并转发一个数据报,多余的会丢弃,让发送端主机重新发送。
集线器接收到数据报后,是将数据报简单的复制、转发到其他所有端口,如果有两个数据报要同时转发,就会出现冲突。整个集线器,即集线器的所有端口为一个冲突域。
交换机接收到数据报后,是将数据报转发到对应的一个端口:两个数据报同时转发到不同端口不存在冲突,但同时转发到一个端口就出现冲突。即交换机可以分割冲突域,分割后,一个端口为一个冲突域。
3.7 广播域
广播是指某个网络中的主机同时向网络中其它所有主机发送数据(IP、MAC地址设置为广播地址),这个数据所能传播到的范围即为广播域(Broadcast Domain)。
广播域基于第二层数据链路层。
- 集线器接收到广播数据报,仍是简单的复制、转发到其他所有端口,所以集线器的所有端口为一个广播域。
- 交换机接收到广播数据报,会转发到其他所有端口;而路由器可以隔离广播域
路由器某个LAN口网卡接收到广播数据报,如果发现是同网段,则丢弃,即广播数据不会扩散到路由器以外。
3.8 网络数据传输流程
3.8.1 局域网传输流程:集线器
使用集线器网络互联的情况下,发送端主机发送数据包时,需要先从上到下封装数据报。但封装时,目的MAC可能并不知道,需要先进行ARP寻址:
- 发送端在本机ARP缓存表中,根据目的IP查找对应的MAC地址
- 如果找到,则可以在数据链路层以太网帧头中,设置目的MAC并发送数据包
- 如果没有找到,需要先发送ARP广播请求,让接收端,即目的主机告诉自己,目的MAC是多少
- 发送端更新本机ARP缓存表:保存目的IP与目的MAC的映射
- 有了目的MAC,就可以按照第(2)个步骤发送数据了。
如果本机ARP缓存表中找不到目的MAC,则需要先发送广播请求:
3.8.2 局域网传输流程:交换机
3.8.3 局域网传输流程:交换机+路由器
3.8.4 广域网数据传输流程
相关文章:

javaEE -9(7000字详解TCP/IP协议)
一: IP 地址 IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。 IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物…...

在mybatis的xml中使用枚举来做判断条件
1.枚举类 import com.baomidou.mybatisplus.annotation.IEnum; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; import com.shinkeer.common.utils.StringUtils;import java.util.HashMap; import java.util.Map;…...
scala集合的partition方法使用
在Scala中,partition 方法用于将集合(例如 List、Array ,Set等)中的元素根据给定的条件分成两个部分,并返回一个元组,其中包含两个新的集合,第一个包含满足条件的元素,另一个包含不满…...

18 Transformer 的动态流程
博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from333.1007.0.0 b 站直接看 配套 github 链接:https://github.com/nickchen121/Pre-training-language-model 配套博客链接:https://www.cnblogs.com/nickchen121/p/15105048.html 机…...

Android Studio新功能-设备镜像Device mirroring-在电脑侧显示手机实时画面并可控制
下载最新的灰测版本-蜥蜴 成功运行到真机后,点击右侧Running Devices选项卡,再点击号 选中当前设备; 非常丝滑同步,在电脑侧也可以顺畅控制真机 该功能大大方便了我们视线保持在显示器上专注开发,并且便于与UI视觉进行…...

MySQL身份验证绕过漏洞
搭建 vmihub靶场:vulhub靶场搭建与使用_剁椒鱼头没剁椒的博客-CSDN博客 运行漏洞: # 这里要改成自己的 /vulhub-master 存放目录 cd /etc/docker/vulhub-master/mysql/CVE-2012-2122# 关闭防火墙,不然就要放行3306端口 systemctl stop firewalld# 重启 Docker 服务 servic…...
0基础学习PyFlink——不可以用UDTAF装饰器装饰function的原因分析
在研究Flink的“用户自定义方法”(UserDefinedFunction)时,我们看到存在如下几种类型的装饰器: UDF:User Defined Scalar FunctionUDTF:User Defined Table FunctionUDAF:User Defined Aggrega…...
Spring Boot Endpoints:端点
Spring Boot 内置端点以及暴露端点列表: 端点被启用后,并不一定能够被访问,还要看端点是否被暴露,并且暴露的方式是怎样的。因为端点可能会包含敏感信息,所以需要谨慎暴露相关端点。Spring Boot 3.0.0 更改了默认暴露…...

漏洞复现--用友 畅捷通T+ .net反序列化RCE
免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…...
PHP 共享茶室棋牌室无人软硬件结合开发小程序系统的开发优势
随着科技的发展和人们生活方式的改变,共享经济和智能化成为了越来越受欢迎的趋势。在这样一个背景下,PHP共享茶室棋牌室无人软硬件结合开发小程序系统的出现,为人们提供了一种全新的娱乐和生活方式。本文将详细介绍PHP共享茶室棋牌室无人软硬…...

kibana监控
采取方式 Elastic Agent :更完善的功能 Metricbeat:轻量级指标收集(采用) 传统收集方法:使用内部导出器收集指标,已不建议 安装 metricbeat Download Metricbeat • Ship Metrics to Elasticsearch | E…...

基于 ARM+FPGA+AD平台的多类型同步信号采集仪开发及试验验证(二)板卡总体设计
2.2 板卡总体设计 本章开发了一款基于 AD7193RJ45 的多类型传感信号同步调理板卡,如图 2.4 所 示,负责将传感器传来的模拟电信号转化为数字信号,以供数据采集系统采集,实现了 单通道自由切换传感信号类型与同步采集多类型传…...

uniapp: 本应用使用HBuilderX x.x.xx 或对应的cli版本编译,而手机端SDK版本是 x.x.xx。不匹配的版本可能造成应用异常。
文章目录 前言一、原因分析二、解决方案2.1、方案一:更新HbuilderX版本2.2、方案二:设置固定的版本2.3、方案三:忽略版本(不推荐) 三、总结四、感谢 前言 项目场景:示例:通过使用HbuilderX打包…...

sqoop和flume简单安装配置使用
1. Sqoop 1.1 Sqoop介绍 Sqoop 是一个在结构化数据和 Hadoop 之间进行批量数据迁移的工具 结构化数据可以是MySQL、Oracle等关系型数据库 把关系型数据库的数据导入到 Hadoop 与其相关的系统 把数据从 Hadoop 系统里抽取并导出到关系型数据库里 底层用 MapReduce 实现数据 …...

什么是React Router?它的作用是什么?
聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...

界面控件DevExtreme v23.1 - UI组件 UI模板库增强
DevExtreme拥有高性能的HTML5 / JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NET Core,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac,…...
Fedora Linux 38下Mariadb数据库设置utf8mb4字符编码
Fedora操作系统之下最好使用开源免费的MySQL替代品Mariadb来学习MySQL的知识,一点也不会耽搁。 连接上互联网后,打开shell命令行界面,Sudo dnf install mariadb-server mariadb -y就可以安装好 mariadb-server和 mariadb࿰…...

【单元测试】--高级主题
一、模拟与存根深入 在单元测试中,模拟(Mock)和存根(Stub)是两种常用的测试替代品,用于模拟外部依赖或模拟特定行为,以便测试能够独立运行。以下是深入了解模拟与存根的概念,以NUni…...
面向对象程序设计(2023年10月)
设计模式:参考下文 23 种设计模式详解(全23种)-CSDN博客...
常用正在表达式
function isIP(s) //by zergling { var patrn/^[0-9.]{1,20}$/; if (!patrn.exec(s)) return false return true } //校验密码:只能输入6-20个字母、数字、下划线 function isPasswd(s) { var patrn/^(\w){6,20}$/; if (!patrn.exec(s)) return false return true …...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...