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

网络体系结构 和网络原理之UDP和TCP

目录

网络分层 

一. 应用层 

http协议

二. 传输层

1. 介绍 

2.UDP协议

 (1)组成

(2)细节 

3.TCP协议 

(1)特性如下链接:

(2)组成 

(3)特点 

三. 网络层

四. 数据链路层

1.介绍

2.以太网协议

 3.mac地址和ip地址

五. 物理层

DNS


网络分层 

一. 应用层 

应用程序

现成的应用层协议有超文本协议http(不仅仅有文本).

http协议

http://t.csdnimg.cn/e0e8kicon-default.png?t=N7T8http://t.csdnimg.cn/e0e8k

自定义应用层协议,包含需要传输的信息以及格式,将信息转为字符串放入TCP或者UDP的socket中。常见传输格式xml,最流行的是json,但json仍然有网络带宽的消耗,protobuffer是将信息压缩为二进制,带宽消耗较小。

DNS介绍在最下面

二. 传输层

1. 介绍 

关注起点和终点

主要有TCP和UDP :

TCP:有连接,可靠传输,面向字节流,全双工。适用于需要确保数据完整性和顺序的场景。eg:文件传输,状态更新。

UDP:无连接,不可靠传输,面向数据报,全双工,接收缓冲区。适用于高速传输和对实时性要求较高的应用。


传输层一个重要概念:端口号

固定占2个字节,

表示范围0~65535(2^16-1),

0一般不用,1~1023是知名端口号,如80是http的端口号22是ssh的端口号(登录远程主机)

2.UDP协议

 (1)组成

UDP的首部长度固定为8个字节(64位)64k。它由源端口号、目标端口号、长度和校验和组成。每个字段都占用2个字节。

  1. 源端口号(Source Port):占用2个字节,表示发送方使用的端口号。
  2. 目标端口号(Destination Port):占用2个字节,表示接收方使用的端口号。
  3. 长度(Length):占用2个字节,表示UDP首部和数据的总长度,包括8字节的UDP首部和数据部分的长度。
  4. 校验和(Checksum):占用2个字节,用于检测UDP首部和数据在传输过程中是否发生错误。

UDP的简洁首部长度是其相对于TCP更轻量级的一个特点,但也意味着它没有TCP那样的可靠性保证和流量控制机制。因此,在使用UDP时需要注意数据的可靠性和完整性问题,并根据具体应用场景决定是否需要额外的机制来处理这些问题。

(2)细节 

✅1.当udp数据报携带信息过大,导致服务器与客户端交互的数据量接近64kb,超过上限会导致数据阶段,数据出错,解决办法:

1.将数据拆分为多个包,使用多个UDP传输()如何去拆包组包,开发测试成本大。

2.使用TCP,无包大小的限制(

3.升级UDP,比较麻烦。()UDP是在操作系统内核实现的.


✅2.网络传输中数据是有可能出错的,如何基于校验和来完成数据校验呢?


1.发送方,把要发送的数据整理好(称为 data1),通过一定的算法, 计算出校验和 checksum1发送方把 data1 和 checksum1 -起通过网络发送出去.
2.接收方收到数据,收到的数据称为 data2 (数据可能和 data1 就不一样了),收到数据 checksum1
3.接收方再根据 data2 重新计算校验和(按照相同的算法),得到 checksum2
4.对比 checksum1 和 checksum2 是否相同.如果不同,则认为 data2 和 data1 一定不相同如 5.checksum1 和 checksum2 相, 则认为 data1 和 data2 大概率是相同的 理论上存在不同的可能性。


✅3.在UDP中使用循环冗余校验(CRC):把需要进行校验和的数据的每个字节逐个累加,把结果保存在两个字节的变量中,累加过程溢出也没事。如果中间出现数据错误,第二次的校验和就和第一次不也一样。

更严谨的是md5,MD5进行了定长,分散(一个字节不同差异也很大),不可逆。MD5也适合作为hash算法(哈希表是把一个key通过hash函数转换为数组下标,hash函数尽量分散,哈希碰撞的可能从才能降低),


✅4.UDP特点:寄信

UDP进行网络通信可以通过java.net包下的DatagramSocketDatagramPacket类来实现

无连接:知道对方ip和端口号即可连接,

不可靠:发送端发送数据报后,如果因为网络问题并没有到接收方,UDP协议也不会给应用层返回任何错误信息。  

全双工:可以通过一个socket进行send和reseive,既能读也能写,即全双工;

缓冲区:UDP只有接收缓冲区,没有发送缓冲区。

UDP发送的数据会直接发送给内核,由内核将数据传给网络层协议进行后续传输动作;UDP具有接收缓冲区,这个缓冲区不能保证受到道德UDP报的顺序与发送UDP报的顺序一致;缓冲区满,再到达的UDP报就会被 丢弃。

大小受限:UDP协议首部有一个16位的最大长度,2个字节,也就是UDP能传输的最大长度是64KB(包含UDP首部)

面向数据报:以DataGaramSocket为单位传输

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, receiverAddress, receiverPort);

UDP是一种面向数据报的无连接协议,因此发送方和接收方之间不存在建立连接的过程,也没有可靠性保证。每个UDP数据报都是独立的,可能会丢失、重复或乱序。实际使用中可能需要考虑超时重传,分片传。

import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.InetAddress;public class UDPExample {public static void main(String[] args) {try {// 创建发送方的UDP socketDatagramSocket senderSocket = new DatagramSocket();// 准备要发送的数据String message = "Hello, UDP!";byte[] sendData = message.getBytes();InetAddress receiverAddress = InetAddress.getByName("127.0.0.1"); // 接收方的IP地址int receiverPort = 12345; // 接收方的端口号// 创建要发送的数据报文DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, receiverAddress, receiverPort);// 发送数据报文senderSocket.send(sendPacket);// 创建接收方的UDP socketDatagramSocket receiverSocket = new DatagramSocket(receiverPort);// 准备接收数据的缓冲区byte[] receiveData = new byte[1024];// 创建接收数据的数据报文DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);// 接收数据报文receiverSocket.receive(receivePacket);// 解析接收到的数据String receivedMessage = new String(receivePacket.getData());System.out.println("Received message: " + receivedMessage);// 关闭socketsenderSocket.close();receiverSocket.close();} catch (Exception e) {e.printStackTrace();}}
}

5.UDP无连接不可靠面向数据报的协议如果要基于传输层UDP协议来实现可靠传输应该如何设计?大小有限制,如果要基于传输层UDP协议,传输超过64k的数据,如何设计?

参考TCP可靠性的实现

5.2+5.1分片重组+序列化保证顺序;5.1确认应答;超时重传;滑动窗口控制流量,校验和.......


简单了解基于UDP的应用层协议
NFS: 网络文件系统
TFTP:简单文件传输协议
DHCP:动态主机配置协议
BOOTP:启动协议 (用于无盘设备启动)
·DNS: 域名解析协议

3.TCP协议 

(1)特性如下链接:

 http://t.csdnimg.cn/NHMHb

(2)组成 

 初心:可靠传输~

数据报=首部(报头)+载荷;一行4个字节

报头长度是不固定的,选项也是报头的一部分,TCP报头包括固定部分和可选部分。固定部分的长度是20个字节(160位),包括源端口号、目标端口号、序列号、确认号、数据偏移、控制位、窗口大小、校验和和紧急指针等字

报头最短是20个字节(没有选项),最长是60个字节(选项最多是40字节);

保留位(6位):有需要就用。比udp的64kb好。扩展余地。

TCP首部长度字段占用4个位(即4个二进制位也就是4个字节,32个比特位),它使用4位来表示长度。由于4位最多能表示16个不同的取值(从0000到1111),因此TCP首部长度字段的取值范围是0-15,表示TCP首部的长度是以32位(此处设定4字节,所以有4倍的设定关系)为单位的倍数。也就是说,长度值乘以4才得到TCP首部的实际长度。当TCP首部长度字段取值为5时,长度为5 * 4 = 20字节,即TCP首部固定部分的长度。

TCP协议的组成主要包括以下部分:

  1. 源端口号(Source Port):占用2个字节,表示发送方使用的端口号。
  2. 目标端口号(Destination Port):占用2个字节,表示接收方使用的端口号。
  3. 序列号(Sequence Number):占用4个字节,表示本次传输的第一个字节的序列号。
  4. 确认号(Acknowledgment Number):占用4个字节,表示期望接收到的下一个字节的序列号。
  5. 数据偏移(Data Offset):占用4个位,表示TCP首部长度,单位为4字节,因此TCP首部长度最大值为60字节。
  6. 保留位(Reserved):占用6个位,保留未来使用,必须设置为0。
  7. 控制位(Flags):占用6个位,包含ACK、SYN、FIN等标志位,用于控制TCP连接的建立、维护和关闭。其中ack为1,表示它表示应答报文,ack为0表示普通报文。SYN为。
  8. 窗口大小(Window Size):占用2个字节,表示接收窗口的缓冲区大小,用于流量控制。
  9. 检验和(Checksum):占用2个字节,用于检测TCP首部和数据在传输过程中是否发生错误。
  10. 紧急指针(Urgent Pointer):占用2个字节,表示紧急数据的位置,用于处理紧急数据。

(3)特点 

有连接

 Socket clientSocket = serverSocket.accept();
accept方法会阻塞当前线程直到有客户端连接请求到达并被接受
记得抛出异常防止网络故障类问题

可靠传输+面向字节流+全双工(既可以读也可以写)

 // 获取输入输出流
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

💡TCP的可靠不在于它是否可以把数据100%传输过去,而是

  • 1.发送方发去数据后,可以知道接收方是否收到数据;
  • 2.如果接收方没收到,可以有补救手段;

三. 网络层

关注路径规划,很多路径到底如何走?

地址管理:制定一系列规则,通过地址,描述出网络中一个地址的位置。

路由选择:ip数据报在网络中的转发。

IP协议链接如下:http://t.csdnimg.cn/53Pts

四. 数据链路层

1.介绍

关注路径中节点的连接,相邻节点之间如何转发?

数据链路层的作用是在两个相邻节点之间提供可靠的数据传输服务,

2.以太网协议

(1)以太网协议就是一种常见的数据链路层协议(通过光纤,网线来通信使用的协议,以太网协议)。横跨数据链路层和物理层。

(2)组成:类型描述载荷数据是什莫类型;

MTU(Maximum Transmission Unit):数据链路层数据包能携带的最大载荷长度。在以太网上传输的数据包大小不能超过1500个字节。会想起ip数据报的拆包组包,很可能是因为mtu而不是64kb的上限。不同的数据链路层协议的MTU是不一样的,也和物理层介质有关。

下面的两种

这里的6个字节目的地址(2^48)和源地址指的是mac地址。

.mac地址采用16进制表示,两个十六进制数字就是1个字节。(4个二进制位数字是一个字节表示0~15的数值)

 物理地址. . . . . . . . . . . . . : C4-75-AB-5C-9B-BB

在交换机中遇到 以太网数据帧 的时候,就需要进行转发,转发过程就需要根据mac地址判定数据从哪个网口转发。    转发表主要就通过arp协议生成 。

 3.mac地址和ip地址

ip协议立足于全局,关注整个网络通信过程的路径规划。

mac地址,以太网协议关注相邻两个设备之间的通信过程。

eg:我从西安到北京,源ip:西安,目的ip:北京;源mac:可能西安,目的mac:可能河北;

每次到达一个节点,源mac和目的mac都会改变

sum:

1. 网络拓扑结构:以太网规定了常见的拓扑结构,如总线型、星型、环型等,并规定了各种拓扑结构下的连接方式和限制条件。

2. 访问控制方式:以太网使用CSMA/CD(载波监听多点接入/碰撞检测)协议来控制节点对共享媒体的访问,以避免碰撞和冲突。

3. 传输速率:以太网支持多种传输速率,如10Mbps、100Mbps、1Gbps等,其中10Mbps和100Mbps是最常见的。

4. 以太网帧格式:以太网规定了数据在网络上的传输格式,也就是以太网帧格式。它包含了目的MAC地址、源MAC地址、类型/长度字段和数据字段等。

5. MAC地址:MAC地址是一个48位的硬件地址,用于唯一标识网络上的每个设备。以太网使用MAC地址来进行帧的寻址和传输。

6. ARP协议:ARP(地址解析协议)用于将IP地址转换为MAC地址。当一个设备需要与另一个设备进行通信时,它需要知道目标设备的MAC地址,而ARP协议就是用来解决这个问题的。

7. MTU:MTU(最大传输单元)指的是数据链路层能够承载的最大数据包大小。以太网规定了不同传输速率下的MTU大小,例如在10Mbps上,MTU为1500字节。

五. 物理层

关注设备

DNS

DNS是应用层协议,也是一套域名解析系统。它使得域名能够被解析为对应的IP地址,并提供了其他与域名相关的信息,比如 www.baidu.com,baidu就是域名,可以把域名和ip地址想象成键值对结构。

最早的域名解析系统就是hosts文件:这些都需要手写来维护

于是出现专属dns服务器,给dns服务器发起请求,查询当前域名对应IP,然后再访问目标网站。但是这样会面临高并发的情况。面对高并发,我们有开源节流方案:

节流:减少请求量,让每个上网的设备搞本地缓存

开源:号召网络运营商搞更多的DNS镜像服务器;用户就可以访问离自己最近的镜像        DNS服务器。

ipv6的DNS与ipv4截然不同。ipv6升级有意义!

相关文章:

网络体系结构 和网络原理之UDP和TCP

目录 网络分层 一. 应用层 http协议 二. 传输层 1. 介绍 2.UDP协议 (1)组成 (2)细节 3.TCP协议 (1)特性如下链接: (2)组成 (3)特点 三. 网络层 四. 数据链路层 1.介绍 2.以太网协议 3.mac地址和ip地址 五. 物理层 DNS 网络分层 一. 应用层 应用程序 现成的…...

将Android APP安装到sm8550 HDK的NVMe SSD

APP存储路径 在Android中&#xff0c;App在运行过程中主要访问的数据路径通常包括以下几个方面&#xff1a; 内部存储&#xff08;Internal Storage&#xff09;&#xff1a;App会访问其私有的内部存储空间&#xff0c;这个空间通常位于&#xff1a; /data/data/<package…...

(Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息

国家青藏高原科学数据中心下载中国1千米分辨率逐日全天候地表土壤水分数据集&#xff08;2003-2022&#xff09; 问题&#xff1a;数据在arcgis打开特别大&#xff0c;无法和矢量数据重合&#xff0c;没有设置地理坐标系 数据在网站上提供了投影信息&#xff0c;提示可以进行py…...

Linux:进度条的创建

目录 使用工具的简单介绍&#xff1a; \r &#xff1a; fflush &#xff1a; 倒计时的创建&#xff1a; 倒计时的工作原理&#xff1a; 进度条的创建&#xff1a; 不同场景下、打印任意长度的进度条&#xff1a; main .c procbor.c 测试效果&#xff1a; 使用工具…...

treeview

QML自定义一个TreeView&#xff0c;使用ListView递归 在 Qt5 的 QtQuick.Controls 2.x 中还没有 TreeView 这个控件&#xff08;在 Qt6 中出了一个继承自 TableView 的 TreeView&#xff09;&#xff0c;而且 QtQuick.Controls 1.x 中的也需要配合 C model 来自定义&#xff0c…...

Android开发中自定义View实现RecyclerView下划线

本篇文章主要讲解的是有关RecyclerView下划线的使用&#xff0c;主要有几个方法&#xff0c;具体如下&#xff1a; 第一种方式&#xff1a;网格分割线 public class GridDivider extends RecyclerView.ItemDecoration { private Drawable mDividerDarwable; private i…...

MySQL前百分之N问题--percent_rank()函数

PERCENT_RANK()函数 PERCENT_RANK()函数用于将每行按照(rank - 1) / (rows - 1)进行计算,用以求MySQL中前百分之N问题。其中&#xff0c;rank为RANK()函数产生的序号&#xff0c;rows为当前窗口的记录总行数 PERCENT_RANK()函数返回介于 0 和 1 之间的小数值 selectstudent_…...

【高效开发工具系列】Wolfram Alpha

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

分享7种SQL的进阶用法

推荐一款ChatGPT4.0国内站点,每日有免费使用额度,支持PC、APP、VScode插件同步使用 SQL(Structured Query Language)是一种强大的数据库查询和操作语言,它用于与关系数据库进行交互。随着数据的不断增长和应用需求的日益复杂,掌握SQL的进阶用法对于数据库管理员、数据分析…...

protobuf-go pragma.go 文件介绍

pragma.go 文件 文件位于&#xff1a; https://github.com/protocolbuffers/protobuf-go/blob/master/internal/pragma/pragma.go 该文件核心思想&#xff1a; 利用 Golang 语法机制&#xff0c;扩展 Golang 语言特性 目前&#xff0c;该文件提供以下 4 个功能&#xff1a; …...

C#设置程序开机启动

1&#xff1a;获取当前用户&#xff1a; System.Security.Principal.WindowsIdentity identity System.Security.Principal.WindowsIdentity.GetCurrent();System.Security.Principal.WindowsPrincipal principal new System.Security.Principal.WindowsPrincipal(identity);…...

爱可声助听器参与南湖区价值百万公益助残捐赠活动成功举行

“声音大小合适吗&#xff1f;能听清楚吗&#xff1f;”今天下午&#xff0c;一场助残捐赠活动在南湖区凤桥镇悄然举行&#xff0c;杭州爱听科技有限公司带着验配团队和听力检测设备来到活动现场&#xff0c;为南湖区听障残疾人和老人适配助听器。 家住余新镇的75岁的周奶奶身体…...

SpringBoot 实现定时任务

在项目我们会有很多需要在某一特定时刻自动触发某一时间的需求&#xff0c;例如我们提交订单但未支付的超过一定时间后需要自动取消订单。 定时任务实现的几种方式&#xff1a; Timer&#xff1a;java自带的java.util.Timer类&#xff0c;使用这种方式允许你调度一个java.util…...

将Vue2中的console.log调试信息移除

前端项目构建生产环境下的package时&#xff0c;咱们肯定要去掉development环境下的console.log&#xff0c;如果挨个注释可就太费劲了&#xff0c;本文介绍怎么使用 babel-plugin-transform-remove-console 移除前端项目中所有的console.log. 1. 安装依赖 npm install babel-…...

EMC设计检查建议,让PCB layout达到最佳性能

EMC&#xff1a;Electro Magnetic Compatibility的简称&#xff0c;也称电磁兼容&#xff0c;各种电气或电子设备在电磁环境复杂的共同空间中&#xff0c;以规定的安全系数满足设计要求的正常工作能力。 本章对于 RK3588产品设计中的 ESD/EMI防护设计及EMC的设计检查给出了建议…...

常用抓包软件集合(Fiddler、Charles)

1. Fiddler 介绍&#xff1a;Fiddler是一个免费的HTTP和HTTPS调试工具&#xff0c;支持Windows平台。它可以捕获HTTP和HTTPS流量&#xff0c;并提供了丰富的调试和分析功能。优点&#xff1a;易于安装、易于使用、支持多种扩展、可以提高开发效率。缺点&#xff1a;只支持Wind…...

C++入门(一)— 使用VScode开发简介

文章目录 C 介绍C 擅长领域C 程序是如何开发编译器、链接器和库编译预处理编译阶段汇编阶段链接阶段 安装集成开发环境 &#xff08;IDE&#xff09;配置编译器&#xff1a;构建配置配置编译器&#xff1a;编译器扩展配置编译器&#xff1a;警告和错误级别配置编译器&#xff1…...

PeakCAN连接到WSL2 Debian

操作步骤 按照以下步骤进行操作&#xff1a; 在Windows下安装PeakCAN驱动并安装&#xff0c;地址是https://www.peak-system.com/PCAN-USB.199.0.html?&L1 在Windows下安装usbipd&#xff0c;地址是https://github.com/dorssel/usbipd-win/releases&#xff0c;最新版是…...

Spring Boot导出EXCEL 文件

主要功能:实现java导出excel到本地 JDK版本&#xff1a;openJDK 20.0.1 依赖pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchem…...

编程笔记 html5cssjs 060 css响应式布局

编程笔记 html5&css&js 060 css响应式布局 一、响应式布局二、Bootstrap简介总结 CSS响应式布局是一种可以在不同设备&#xff08;例如桌面电脑、平板电脑、手机等&#xff09;上自动调整页面布局和样式的技术。 一、响应式布局 使用CSS响应式布局的关键是媒体查询&am…...

建筑行业如何应用3D开发工具HOOPS提升实时设计体验?

建筑行业一直在迅速发展&#xff0c;技术的不断创新也为其带来了新的机遇与挑战。在这一领域&#xff0c;三维图形技术的应用变得尤为重要。HOOPS技术&#xff0c;作为一套用于开发三维图形应用程序的工具和库&#xff0c;为建筑行业带来了深刻的变革。本文将探讨HOOPS技术在建…...

【grafana】使用教程

【grafana】使用教程 一、简介二、下载及安装及配置三、基本概念3.1 数据源&#xff08;Data Source&#xff09;3.2 仪表盘&#xff08;Dashboard&#xff09;3.3 Panel&#xff08;面板&#xff09;3.4 ROW&#xff08;行&#xff09;3.5 共享及自定义 四、常用可视化示例4.1…...

seata 分布式

一、下载安装seata 已经下载好的朋友可以跳过这个步骤。这里下载的是seata1.6.1这个版本。 1、进入seata官网 地址&#xff1a; https://seata.io/zh-cn/index.html 2、进入下载 3、点击下载地址 下载地址&#xff1a; https://github.com/seata/seata 二、配置seata 进入c…...

前端面试题-说说你了解的js数据结构?(2024.1.29)

1、数组 (Array) 数组是一组有序的值的集合&#xff0c;可以通过索引访问。JavaScript 数组可以包含不同的数据类型&#xff0c;并且长度是动态的。 let myArray [1, hello, true, [2, 3]];2、对象 (Object) 对象是无序的键值对的集合。每个键都是字符串或符号&#xff0c;…...

音视频数字化(数字与模拟-录音机)

之前我们说了【数字与模拟-照相机】照相机的数字化,今天聊聊录音机。 说录音机之前,必须说说留声机。留声机是爱迪生1877年宣布发明成功的,研发过程相当复杂,但原理是简单的。 声音的本质是“波”,是物体振动产生的。以乐器为例,打击乐就是敲击(鼓、钹、木鱼、木琴、三…...

鸿蒙开发-UI-组件3

鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 文章目录 前言 一、文本输入 1.创建文本输入框 2.设置输入框类型 3.自定义样式 4.添加事件 5.常用场景 二、自定义弹窗 三、视频播放 1.创建视频组件 2.加载视频资源 1.加载本地视频 2.加载网络视频 3.添加属性 4.事件调用 …...

安全测试几种:代码静态扫描、模糊测试、黑盒测试、白盒测试、渗透测试

代码扫描 参考&#xff1a;https://www.toutiao.com/article/6697188900344955404/?channel&sourcesearch_tab 安全性测试工具很多&#xff0c;还包括黑客常用的一些工具&#xff0c;如暴力破解口令工具、端口扫描工具、防火墙渗透工具、渗透测试平台等。从某种意义看&a…...

Mac安装及配置MySql及图形化工具MySQLworkbench安装

Mac下载配置MySql mysql下载及安装 下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/ 根据自己电脑确定下载x86还是ARM版本的 如果不确定&#xff0c;可以查看自己电脑版本&#xff0c;终端输入命令 uname -a 点击Download下载&#xff0c;可跳过登录注册&…...

【Vue】为什么Vue3使用Proxy代替defineProperty?

先来看看 Vue2 中 defineProperty 来操作数据&#xff1a; const obj {a: 1,b: 2,c: {a: 1,b: 2} } function _isObject(v) {return typeof v object && v ! null; } function observe(object) {for (let key in object) {let v object[key];if (_isObject(v)) {ob…...

3、css设置样式总结、节点、节点之间关系、创建元素的方式、BOM

一、css设置样式的方式总结&#xff1a; 对象.style.css属性 对象.className ‘’ 会覆盖原来的类 对象.setAttribut(‘style’,‘css样式’) 对象.setAttribute(‘class’,‘类名’) 对象.style.setProperty(css属性名,css属性值) 对象.style.cssText “css样式表” …...