协议篇之UART协议

article/2025/9/17 12:11:43

协议篇之UART协议

  • 一、写在前面
  • 二、UART协议简介
  • 三、UART协议数据帧结构
    • 3.1 UART发送过程
    • 3.2 UART接收过程
    • 3.3 UART传输速率
  • 四、UART收发模块设计
    • 4.1 UART接收模块设计
    • 4.2 UART发送模块设计
    • 4.3 UART回环顶层模块
    • 4.4 UART回环上板验证
  • 五、写在最后

一、写在前面

  由于设计需要,需要入门学习一下UART协议。本文主要学习UART协议的数据帧结构,并根据其数据接收和数据发送的原理进行RTL级代码设计。

二、UART协议简介

  通用异步收发传输协议(Universal Asynchronous Receiver/Transmitter Protocol,UART)是一种在计算机、嵌入式系统和其他电子设备之间传输数据的通信协议。它使用串行全双工通信来传输数据,发送和接收设备之间的数据传输是异步的,也就是说,每个比特都是按照预定义的时间间隔传输的,而不是在固定的时钟周期内进行传输。
  UART协议通常使用RS-232或RS-485等物理层协议来连接发送和接收设备。由于UART协议是一种简单、易于实现的协议,因此它在很多应用中得到广泛应用,例如串口通信、控制台、模块通信等。在工业、汽车、医疗和家庭等领域,UART协议都有着广泛的应用。

三、UART协议数据帧结构

  UART协议中传输数据是串行传输的,其数据帧结构通常包含以下几个部分:

  • 起始位(Start Bit):一个低电平的比特,用于标识数据传输的开始;
  • 数据位(Data Bits):包含要传输的数据的比特数,通常是5、6、7或8个比特。数据可以是数字、字母、符号或二进制数据;
  • 奇偶校验位(Parity Bit):可选的比特,用于验证数据的正确性。奇偶校验位的值可以是奇校验或偶校验,它们根据数据位中1的个数确定;
  • 停止位(Stop Bit):一个时钟高电平的比特,用于标识数据传输的结束;

  值得注意的是,UART数据帧结构的长度和内容可以根据需要进行调整,但它们必须在发送和接收设备之间协商一致,以确保数据的正确传输。

  UART完整的数据帧结构如下图所示(这里不包含校验位)。
在这里插入图片描述

3.1 UART发送过程

  在UART数据发送的过程中,发送设备会先发送一个起始位START,然后发送数据位DATA(数据位的发送是先发送低位,后发送高位),然后发送可选的奇偶校验位PARITY(一般不设置奇偶校验位),最后发送一个停止位STOP。

3.2 UART接收过程

  UART数据接收的过程,与UART数据发送的过程是差不多的,接收设备会一直等待发送设备的一个低电平的起始位。当接收到起始位,接收设备将开始接收发送设备发送的数据位,并将多比特的数据存储在缓冲区中。然后如果使用了奇偶校验位,接收设备需要使用接收到的奇偶校验位来校验数据位,验证接收到的数据是否正确。然后等待停止位的到来,结束一帧数据的接收,并将接收到的数据从缓冲区中读出,等待下一帧数据的到来。

3.3 UART传输速率

  UART协议的数据传输速率有多种,其中我们常用的波特率有4种:9600bps、19200bps、38400bps和115200bps。

  • 9600bps:UART通信中最常见的传输速率之一,适用于大多数低速数据传输应用;
  • 19200bps:中等速度的传输速率,适用于一些需要快速传输数据的应用;
  • 38400bps:较快的传输速率,适用于需要更快数据传输速度的应用;
  • 115200bps:UART通信中更快的传输速率,适用于需要非常快速数据传输速度的应用;

  同样的,UART的传输速率必须保证发送设备与接收设备之间一致,否则发送设备无法传输正确的数据到接收设备。
  波特率表征串口传输的速率,比如串口波特率为9600bps,那么表示1秒可以传输9600bit,那么,每个比特传输的时间为:

1000000000 n s / 9600 = 104166 n s 1000000000ns/9600=104166ns 1000000000ns/9600=104166ns

  如果我们给系统约束的系统时钟频率为50MHz,则系统时钟周期为20ns,也就是说,每个比特传输的时钟周期个数为:

104166/20=5208

  也就是说,在系统时钟频率为50MHz的情况下,传输每个比特需要保持5208个时钟周期不变。

  在这里,需要补充一个重要概念:波特率Baud与比特率Bit Rate是两个不同的概念。波特率与比特率的关系也可换算成:

                          比特率 = 波特率 * 单个调制状态对应的二进制位数

  而在串口传输中,由于采用二进制传输,数值非0即1,所以在串口传输中,波特率与比特率的关系如下:

                                      比特率 = 波特率

四、UART收发模块设计

4.1 UART接收模块设计

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/04/29 16:17:06
// Design Name: 
// Module Name: uart_rx
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module uart_rx
#(parameter BAUD_RATE   = 9600       , //波特率parameter SYS_CLK_FRE = 100_000_000  //系统时钟频率
)
(input  sys_clk  , //系统时钟input  sys_rst_n, //复位信号input  uart_rx_i, //串行接收数据output [7:0] uart_rx_data_o, //接收到的8bit信号output       rx_end //接收结束
);/**************************参数**************************/
localparam CLK_DIV = SYS_CLK_FRE/BAUD_RATE; //单比特数据传输耗费时钟数量
localparam IDLE    = 11'b0000_0000_001; //初始化
localparam START   = 11'b0000_0000_010; //起始位
localparam BIT_0   = 11'd0000_0000_100; //第0比特
localparam BIT_1   = 11'b0000_0001_000; //第1比特
localparam BIT_2   = 11'b0000_0010_000; //第2比特
localparam BIT_3   = 11'b0000_0100_000; //第3比特
localparam BIT_4   = 11'b0000_1000_000; //第4比特
localparam BIT_5   = 11'b0001_0000_000; //第5比特
localparam BIT_6   = 11'b0010_0000_000; //第6比特
localparam BIT_7   = 11'b0100_0000_000; //第7比特
localparam STOP    = 11'b1000_0000_000; //停止位/**************************寄存器**************************/
reg                       r_uart_rx_i_dly1; //串行数据接收打一拍
reg                       r_uart_rx_i_dly2; //串行数据接收打两拍(消除亚稳态)
reg [$clog2(CLK_DIV)-1:0] clk_div_cnt; //时钟计数器
reg [7:0]                 rx_data    ; //数据寄存
reg [7:0]                 r_uart_rx_data_o; //接收到的8bit数据
reg                       rx_en    ; //接收使能(高电平期间,处于接收工作状态)
reg                       r_rx_end; //接收结束reg [10:0] cuur_state;
reg [10:0] next_state;/**************************网表型**************************/
wire negedge_check; //下降沿检测信号/**************************组合逻辑**************************/
assign negedge_check = (~r_uart_rx_i_dly1) && r_uart_rx_i_dly2;
assign uart_rx_data_o = r_uart_rx_data_o;
assign rx_end = r_rx_end;/**************************时序逻辑**************************/
always @(posedge sys_clk or negedge sys_rst_n)if(!sys_rst_n) beginr_uart_rx_i_dly1 <= 1'b1;r_uart_rx_i_dly2 <= 1'b1;endelse beginr_uart_rx_i_dly1 <= uart_rx_i;r_uart_rx_i_dly2 <= r_uart_rx_i_dly1;endalways @(posedge sys_clk or negedge sys_rst_n)if(!sys_rst_n)rx_en <= 1'b0;else if(negedge_check)rx_en <= 1'b1;else if(rx_end)rx_en <= 1'b0;elserx_en <= rx_en;always @(posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n)clk_div_cnt <= 'd0;else if(rx_en)if(clk_div_cnt < CLK_DIV)clk_div_cnt <= clk_div_cnt + 1'd1;elseclk_div_cnt <= 'd0;elseclk_div_cnt <= 'd0;
end/**************************状态机**************************/
always @(posedge sys_clk or negedge sys_rst_n)if(!sys_rst_n) cuur_state <= IDLE;elsecuur_state <= next_state;always @(*) begincase(cuur_state)IDLE : next_state = (negedge_check) ? START : IDLE;START: next_state = (clk_div_cnt == CLK_DIV-1) ? BIT_0 : START;BIT_0: next_state = (clk_div_cnt == CLK_DIV-1) ? BIT_1 : BIT_0;BIT_1: next_state = (clk_div_cnt == CLK_DIV-1) ? BIT_2 : BIT_1;BIT_2: next_state = (clk_div_cnt == CLK_DIV-1) ? BIT_3 : BIT_2;BIT_3: next_state = (clk_div_cnt == CLK_DIV-1) ? BIT_4 : BIT_3;BIT_4: next_state = (clk_div_cnt == CLK_DIV-1) ? BIT_5 : BIT_4;BIT_5: next_state = (clk_div_cnt == CLK_DIV-1) ? BIT_6 : BIT_5;BIT_6: next_state = (clk_div_cnt == CLK_DIV-1) ? BIT_7 : BIT_6;BIT_7: next_state = (clk_div_cnt == CLK_DIV-1) ? STOP  : BIT_7;STOP : next_state = (clk_div_cnt == CLK_DIV>>1) ? IDLE  : STOP;default: next_state = IDLE;endcase
endalways @(posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n) beginrx_data <= 8'd0;endelse begincase(cuur_state)BIT_0: rx_data[0] <= (clk_div_cnt == CLK_DIV>>1) ? uart_rx_i : rx_data[0];BIT_1: rx_data[1] <= (clk_div_cnt == CLK_DIV>>1) ? uart_rx_i : rx_data[1];BIT_2: rx_data[2] <= (clk_div_cnt == CLK_DIV>>1) ? uart_rx_i : rx_data[2];BIT_3: rx_data[3] <= (clk_div_cnt == CLK_DIV>>1) ? uart_rx_i : rx_data[3];BIT_4: rx_data[4] <= (clk_div_cnt == CLK_DIV>>1) ? uart_rx_i : rx_data[4];BIT_5: rx_data[5] <= (clk_div_cnt == CLK_DIV>>1) ? uart_rx_i : rx_data[5];BIT_6: rx_data[6] <= (clk_div_cnt == CLK_DIV>>1) ? uart_rx_i : rx_data[6];BIT_7: rx_data[7] <= (clk_div_cnt == CLK_DIV>>1) ? uart_rx_i : rx_data[7];default: rx_data <= rx_data;endcaseend
endalways @(negedge sys_clk or negedge sys_rst_n) if(!sys_rst_n) beginr_uart_rx_data_o <= 'd0;r_rx_end <= 1'b0;endelse if(cuur_state == STOP && clk_div_cnt == CLK_DIV>>1) beginr_uart_rx_data_o <= rx_data;r_rx_end <= 1'b1;endelse beginr_uart_rx_data_o <= r_uart_rx_data_o;r_rx_end <= 1'b0;endendmodule

4.2 UART发送模块设计

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/04/28 11:03:30
// Design Name: 
// Module Name: uart_tx
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module uart_tx
#(parameter BAUD_RATE   = 9600       , //波特率parameter SYS_CLK_FRE = 100_000_000  //系统时钟频率
)
(input       sys_clk       , //系统时钟input       sys_rst_n     , //复位信号input       tx_start      , //发送开始信号input [7:0] uart_tx_data_i, //需要发送的8bit数据output      uart_tx_o     , //串行发送数据output      tx_end          //发送结束);/**************************参数**************************/
localparam CLK_DIV = SYS_CLK_FRE/BAUD_RATE; //单比特数据传输耗费时钟数量
localparam IDLE    = 11'b0000_0000_001; //初始化
localparam START   = 11'b0000_0000_010; //起始位
localparam BIT_0   = 11'd0000_0000_100; //第0比特
localparam BIT_1   = 11'b0000_0001_000; //第1比特
localparam BIT_2   = 11'b0000_0010_000; //第2比特
localparam BIT_3   = 11'b0000_0100_000; //第3比特
localparam BIT_4   = 11'b0000_1000_000; //第4比特
localparam BIT_5   = 11'b0001_0000_000; //第5比特
localparam BIT_6   = 11'b0010_0000_000; //第6比特
localparam BIT_7   = 11'b0100_0000_000; //第7比特
localparam STOP    = 11'b1000_0000_000; //停止位/**************************寄存器**************************/
reg [$clog2(CLK_DIV)-1:0] clk_div_cnt     ; //时钟计数器
reg [7:0]                 r_uart_tx_data_i; //发送数据寄存
reg                       tx_en      ; //发送使能(该信号为高电平期间,进行数据的发送)
reg                       r_uart_tx_o; //串行发送数据
reg                       r_tx_end   ; //发送结束reg [10:0] cuur_state; //现态
reg [10:0] next_state; //次态/**************************网表型**************************/
assign uart_tx_o = r_uart_tx_o;
assign tx_end = r_tx_end;/**************************组合逻辑**************************/
always @(posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n)clk_div_cnt <= 'd0;else if(tx_en && clk_div_cnt < CLK_DIV)clk_div_cnt <= clk_div_cnt + 1'd1;elseclk_div_cnt <= 'd0;
endalways @(posedge sys_clk or negedge sys_rst_n)if(!sys_rst_n)r_uart_tx_data_i <= 'd0;else if(tx_start)r_uart_tx_data_i <= uart_tx_data_i;elser_uart_tx_data_i <= r_uart_tx_data_i;/**************************状态机**************************/
always @(posedge sys_clk or negedge sys_rst_n)if(!sys_rst_n) cuur_state <= IDLE;elsecuur_state <= next_state;always @(*) begincase(cuur_state)IDLE : next_state = (tx_start) ? START : IDLE;START: next_state = (clk_div_cnt == CLK_DIV-1) ? BIT_0 : START;BIT_0: next_state = (clk_div_cnt == CLK_DIV-1) ? BIT_1 : BIT_0;BIT_1: next_state = (clk_div_cnt == CLK_DIV-1) ? BIT_2 : BIT_1;BIT_2: next_state = (clk_div_cnt == CLK_DIV-1) ? BIT_3 : BIT_2;BIT_3: next_state = (clk_div_cnt == CLK_DIV-1) ? BIT_4 : BIT_3;BIT_4: next_state = (clk_div_cnt == CLK_DIV-1) ? BIT_5 : BIT_4;BIT_5: next_state = (clk_div_cnt == CLK_DIV-1) ? BIT_6 : BIT_5;BIT_6: next_state = (clk_div_cnt == CLK_DIV-1) ? BIT_7 : BIT_6;BIT_7: next_state = (clk_div_cnt == CLK_DIV-1) ? STOP  : BIT_7;STOP : next_state = (clk_div_cnt == CLK_DIV>>1) ? IDLE  : STOP;default: next_state = IDLE;endcase
endalways @(posedge sys_clk or negedge sys_rst_n) beginif(!sys_rst_n) begintx_en <= 1'b0;r_uart_tx_o <= 1'b1;r_tx_end <= 1'b0;endelse begincase(cuur_state)IDLE :beginr_uart_tx_o <= 1'b1;if(tx_start)tx_en <= 1'b1;elsetx_en <= 1'b0;endSTART: r_uart_tx_o <= 1'b0;BIT_0: r_uart_tx_o <= r_uart_tx_data_i[0];BIT_1: r_uart_tx_o <= r_uart_tx_data_i[1];BIT_2: r_uart_tx_o <= r_uart_tx_data_i[2];BIT_3: r_uart_tx_o <= r_uart_tx_data_i[3];BIT_4: r_uart_tx_o <= r_uart_tx_data_i[4];BIT_5: r_uart_tx_o <= r_uart_tx_data_i[5];BIT_6: r_uart_tx_o <= r_uart_tx_data_i[6];BIT_7: r_uart_tx_o <= r_uart_tx_data_i[7];STOP :beginr_uart_tx_o <= 1'b1;if(clk_div_cnt == CLK_DIV>>1)r_tx_end <= 1'b1;elser_tx_end <= 1'b0;enddefault:begintx_en <= 1'b0;r_uart_tx_o <= 1'b1;r_tx_end <= 1'b0;endendcaseend
endendmodule

4.3 UART回环顶层模块

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/04/30 10:52:44
// Design Name: 
// Module Name: uart_loop
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//module uart_loop
#(parameter BAUD_RATE   = 9600       , //波特率parameter SYS_CLK_FRE = 100_000_000  //系统时钟频率
)
(input   sys_clk     , //系统时钟input   sys_rst_n   , //复位信号input   uart_rx_i   , //串行接收数据output  uart_tx_o     //串行发送数据
);/**************************网表型**************************/
wire            rx_end    ; //接收结束
wire            tx_start; //发送开始
wire    [7:0]   uart_rx_data_o; //接收到的8bit数据
wire    [7:0]   uart_tx_data_i; //发送的8bit1数据
wire            tx_end; //发送结束/**************************组合逻辑**************************/
assign tx_start = rx_end;
assign uart_tx_data_i = uart_rx_data_o;/**************************模块例化**************************/
//接收模块
uart_rx
#(.BAUD_RATE  (BAUD_RATE  ), .SYS_CLK_FRE(SYS_CLK_FRE)  
)
uart_rx_inst
(.sys_clk       (sys_clk       ), .sys_rst_n     (sys_rst_n     ), .uart_rx_i     (uart_rx_i     ), .uart_rx_data_o(uart_rx_data_o), .rx_end        (rx_end        )
);//发送模块
uart_tx
#(.BAUD_RATE  (BAUD_RATE  ), .SYS_CLK_FRE(SYS_CLK_FRE)  
)
uart_tx_inst
(.sys_clk       (sys_clk       ), .sys_rst_n     (sys_rst_n     ), .tx_start      (tx_start      ), .uart_tx_data_i(uart_tx_data_i), .uart_tx_o     (uart_tx_o     ), .tx_end        (tx_end        )  );endmodule

4.4 UART回环上板验证

  将比特流文件写入FPGA开发板后,打开串口助手,依次发送11、22给FPGA,FPGA在接收到数据后又发送回PC端,可以看到在串口助手接收窗口中分别接收到了数据11和22。

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

  也可以连续发送多个字节数据,分别发送33、44、55、66、77、88、99、AA、BB、CC、DD、EE、FF给FPGA,在串口助手的接收窗口中看到PC端接收到了FPGA发送的数据33、44、55、66、77、88、99、AA、BB、CC、DD、EE、FF,上板验证通过。

在这里插入图片描述

五、写在最后

  在本文中,我们学习了UART数据帧结构以及UART协议中一些基本的概念,并使用Verilog实现串口通信的收发操作,并进行上板验证。欢迎评论区友好交流批评指正!!!

在这里插入图片描述


http://chatgpt.dhexx.cn/article/gGkaFNHk.shtml

相关文章

UART通信协议

UART通信协议 UART ( universal asynchronous receiver-transmitter&#xff09;是一种采用异步串行通信方式的通用异步收发传输器;它在发送数据时将并行数据转换成串行数据来传输&#xff0c;在接收数据时将接收到的串行数据转换成并行数据。UART串口通信需要两根信号线来实现…

UART协议讲解

UART协议讲解 一、什么是UART协议二、通信方式的分类1、串行通信&#xff08;一&#xff09;、同步通信和异步通信&#xff08;二&#xff09;、单工和半双工以及全双工 2、并行通信 三、UART协议具体介绍1、UART数据传输的格式2、UART电平标准 三、UART的优缺点四、参考 一、什…

【数字IC】深入浅出理解UART协议

深入浅出理解UART协议 一、什么是UART&#xff1f;二、UART的帧格式2.1 为什么UART的传输需要起始位&#xff1f;2.2 UART基本的数据形式2.3 为什么UART的数据位可变&#xff1f; 三、UART的波特率3.1 什么是波特率3.2 如何换算波特率3.3 波特率和采样频率是一样的吗&#xff1…

最详细的 UART协议 分析在这里!

1. 协议基础 1.1. 协议简介 UART是“Universal Asynchronous Receiver/Transmitter”&#xff0c;通用异步收发器的缩写。在19世纪60年代&#xff0c;为了解决计算机和电传打字机通信&#xff0c;Bell发明了UART协议&#xff0c;将并行输入信号转换成串行输出信号。因为U…

UART协议

UART协议 简介 UART是通用异步收发传输器&#xff08;Universal Asynchronous Receiver/Transmitter)&#xff0c;通常称作UART&#xff0c;是一种异步收发传输器,是设备间进行异步通信的关键模块。UART负责处理数据总线和串行口之间的串/并、并/串转换&#xff0c;并规定了帧…

【云域网络社区】云域网络社区APP

【软件名称】云域社区 【功能介绍】资源分享&#xff0c;游戏交流交友 【下载地址】http://sss.shmmec.com/apk.apk 图片

怎么划分领域、子域、核心域、通用域和支撑域

怎么划分领域、子域、核心域、通用域和支撑域 如何理解领域和子域&#xff1f;什么是领域什么是子域怎么划分领域和子域如何理解核心域、通用域和支撑域&#xff1f;为什么要划分核心域、通用域和支撑域 总结 DDD 的知识体系提出了很多的名词&#xff0c;像&#xff1a;领域、子…

网络安全-域服务器(二)

域服务器&#xff1a; 域服务器&#xff08;一&#xff09;&#xff1a;网络安全-域&#xff08;一&#xff09;_IT之一小佬的博客-CSDN博客域服务器&#xff08;二&#xff09;&#xff1a;网络安全-域服务器&#xff08;二&#xff09;_IT之一小佬的博客-CSDN博客 域 11.O…

网课管理系统

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 3. 功能简介 用户中心 1.1用户注册&#xff1a;用户需要注册才能登陆进入web 1.2用户登录&#xff1a;通过判断匹配来进…

如何搭建域服务器

实验名称&#xff1a;如何搭建域服务器 实验环境&#xff1a;wind2003*2 实验过程&#xff1a; 由于Windows Server 2003在默认的安装过程中DNS是不被安装的&#xff0c;所以我们需要手动去添加&#xff0c; 添加方法如下:“开始—设置—控制面板—添加删除程序”&#xff…

搭建域环境(win)

目录 常见域环境是用&#xff1a;win2012 win7 win2003 本blog环境&#xff1a;Windows Server 2012 R2 and Win2008 1.Window Server 2012 R2 服务器配置 1&#xff09;变更计算机名DC&#xff08;用于存储活动目录数据库的计算机&#xff09; 2&#xff09;设置服务器…

网络教学管理系统

1、项目介绍 网络教学管理系统拥有三种角色 管理员&#xff1a;专业管理、班级管理、学生教师管理、公告管理、留言板管理、学习资料管理、教学视频管理、试题管理等 教师&#xff1a;系统留言、发布作业等 学生&#xff1a;可以查看作业视频、登录注册、下载作业资料等 2、…

域控-笔记二(域权限,域组,域管理,Kerberso 协议)

文章目录 一. 域环境搭建1.1 添加AD功能1.2 安装1.3 部署 二. 如何加入域2.1 加入域2.2 域中主机登录2.3 退出域2.4 添加域用户 三. 域权限3.1 A-G-DL-P策略3.2 组几个比较重要的域本地组几个比较重要的全局组、通用组的权限 四. 域管理4.1 域用户账户的管理4.2 组的管理4.3 组…

中职网络搭建 域用户密码设置

中职网络搭建 密码设置 域密码策略&#xff1a; 进入域控制器组策略&#xff08;组策略管理&#xff09; 计算机配置–Windows设置–安全设置–账户策略–密码策略 “密码必须符合复杂性要求”&#xff1a;密码设置必须要有数字、大写字母、小写字母、字符&#xff0c;四种中…

第一讲 数域

1. 引入 数是数学的一个最基本概念, 回顾一下我们曾经学习过的数的发展过程: (1) 代数性质: 关于数的加, 减, 乘 , 除等运算的性质称为数的代数性质. (2) 数集: 数的集合简称数集. 常见的数集: 复试C; 实数R;有理数Q等等. 它们有一个共同的性质就是对加减乘除运算封闭. 2. 数…

域控知识与安全02:初始访问

初始访问 前言信息收集1.Nmap命令参数使用方法 2.Metasploit命令参数使用方法 3.地址解析协议命令参数使用方法 4.ICMP5.Nbtscan命令参数使用方法 6.telnet使用方法 暴力破解1.Hydra命令参数使用方法 2.Hashcat常用参数使用方法 总结系列相关内容 前言 攻击者首先通过初始访问入…

1. 跨域学习

1. 跨域学习 1.1 什么是跨域 出于浏览器的同源策略限制。同源策略&#xff08;Sameoriginpolicy&#xff09;是一种约定&#xff0c;它是浏览器最核心也最基本的安全功能&#xff0c;如果缺少了同源策略&#xff0c;则浏览器的正常功能可能都会受到影响。可以说Web是构建在同…

域的基础概念

初具规模的办公网络通常以Windows域的形式进行管理&#xff0c;域在内网渗透中的地位举足轻重&#xff0c;本文主要介绍域的基础概念&#xff0c;为后续域渗透的介绍做铺垫 部分内容参考文章&#xff1a;https://blog.csdn.net/wulantian/article/details/42418231 文章目录 1.…

域&#xff0c;Domain。 计算机域是一个有安全边界的计算机集合&#xff0c;在同一个域中的计算机彼此之间已经建立了信任关系&#xff0c;在域内访问其他机器&#xff0c;不再需要被访问机器的许可。 1.一台计算机在内网环境中有两种工作模式&#xff1a; 工作组&#xff1a;默…

域环境的搭建(单域、父子域、域树)

准备材料&#xff1a;虚拟机 Windows server 2012 r2 两台、Windows 10 一台**&#xff08;关闭所有防火墙&#xff09;** 实验一&#xff1a;单域的搭建 前提&#xff1a;将网络链接模式改为仅主机模式&#xff0c;并手动配置IP地址。 1.打开一台干净的Windows server 2012 …