邮件服务器:Postfix

news2024/12/23 22:06:35

文章目录

  • 邮件服务器的功能与工作原理
    • 电子邮件的问题
    • Mail server与DNS 之间的关系
    • 邮件传输所需要的组件(MTA、MUA、MDA)以及相关协议
    • 用户收信时服务器端所提供的相关协议:MRA
    • 电子邮件的数据内容
  • 使用Postfix与Dovecot部署邮件系统
    • 部署基础的电子邮件系统
      • 配置Postfix服务程序
      • 配置Dovecot服务程序
      • Winodws邮件客户端
      • Linux邮件客户端

邮件服务器的功能与工作原理

下图来自百度百科

image-20240406122016597

邮件服务器用来收发电子邮件,电子邮件是利用网络传递信息给远程服务器的信息传递行为

电子邮件的问题

  • 夹带病毒的电子邮件问题
  • 黑客通过邮件程序入侵
  • 广告信与垃圾信等
  • 主机被大量不明邮件塞爆
  • 不实的邮件内容

Mail server与DNS 之间的关系

Mail server与合法的主机名

我们通常接收到的 E-mai 都是使用“账号@主机名”的方式来处理的。所以说,你的邮件服务器一定要有一个合法注册过的主机名才可以。因为网络恶意使用与垃圾邮件泛滥的种种因素,导致我们不被允许直接利用主机的 IP 来寄信了,因此,你想要架设 Mail server 就必须要有合法的主机名。

只要你拥有合法的主机名,也就是在 DNS 的查询系统当中你的主机名拥有一个A的标志,理论上你的 Mail server 就可以架设成功。只不过由于目前因特网上面的广告信、垃圾信与病毒信等占用了太多的带宽,导致整个网络社会消耗过多的成本在这些垃圾邮件上。所以为了杜绝垃圾邮件,目前的大型网络供货商(ISP)都会对不明来源的邮件加以限制,这也就是说想要架设一台简单可以工作的 Mail server 越来越难了

DNS的反解也很重要

反向 DNS 解析是指通过 IP 地址查询获取该 IP 地址对应的域名。

在邮件传输过程中,接收方的邮件服务器可能会对发送方的 IP 地址进行反向 DNS 解析,以验证发送方是否具有合法的域名。

需要DNS与MX及A标志

MX代表的是Mailexchanger(邮件交换器),当一封邮件要发送出去时,邮件主机会先分析那封信的目标主机的 DNS,先取得MX标志(注意,MX标志可能会有多部主机)然后以最优先 MX 主机为准将信发送出去,MX的优先级是数字越低越优先来确定邮件应该发送到哪个邮件服务器。

Email的地址写法

E-mai 通常是使用“账号@主机名”的方式来处理的

举例来说:www.linuxcsq.com主机上面有一个user的用户,则我的E-mail将会成为:user@www.linuxcsq.com,当有人寄信给我时,它会分析@后面的主机名,就是www.linuxcsq.com的MX标志,然后通过刚刚说明的流程来发出邮件。而当我的www.linuxcsq.com 收到这封信时,它会将信放到user的邮箱当中。

邮件传输所需要的组件(MTA、MUA、MDA)以及相关协议

邮件发送的过程:

  • 为了发送电子邮件,你需要设置/注册一个邮件服务器来转发邮件。
  • 通过配置邮件客户端,并与邮件服务器建立连接,你可以将邮件发送到目标邮箱。
  • 邮件客户端使用SMTP协议将邮件传输到配置的邮件服务器。
  • 邮件服务器找到目标邮件服务器并将邮件转发到目标邮箱。
  • 目标邮件服务器接收邮件并存储到收件人的邮箱中

image-20240406153917120

MUA(Mail User Agent)

MUA就是“邮件用户代理人的意思”,因为除非你可以直接利用类似 TeInet之类的软件登录邮件服务器来主动发出邮件,否则你就需要通过 MUA 来帮你送信到邮件服务器上去。

最常见的 MUA 如 Mozia 推出的 Thunderbird(雷鸟)自由软件、 Windows 自带的 Outlook Express(OE)等。

MUA 主要的功能就是收取邮件主机的电子邮件,以及提供用户浏览与编写邮件

MTA(Mail Transfer Agent)

MUA 帮用户发送邮件到邮件主机上,那这台邮件主机如果能够帮用户将这封邮件寄出去,那它就是一台邮件发送主机(MTA)了。MTA就是“邮件发送代理人”的意思。既然是“发送代理人”,那么用户发出的信,帮用户将属于该用户的邮件收下时,找它(MTA)就可以了。

程序:

  • Postfix
  • Sendmail

MTA功能如下:

  • 接收邮件:使用简单邮件传送协议(SMTP,port 25)
  • 转发邮件

MDA(Mail Delivery Agent)

MDA 字面上的意思是“邮件传送代理人”。事实上,MDA 是挂在 MTA 下面的一个小程序,最主要的功能就是:分析由MTA所收到的邮件表头或内容等数据,来决定这封邮件的去向。所以说,上面提到的 MTA的邮件转发功能,其实是由 MDA 实现的。举例来说,如果MTA 所收到的这封邮件目标是自己,那么 MDA 会将这封邮件转到用户的邮箱 (Mailbox)中去,如果不是,那就准备要转发出去了。

MDA功能:

  • 过滤垃圾邮件
  • 自动回复

Mailbox

Mailbox是某个账号专用的电子邮件收取文件,对于Linux系统而言,默认情况下,用户的邮箱通常存储在/var/spool/mail/用户账号目录下。当MTA接收到本机用户的邮件时,MDA将邮件送到相应的Mailbox中

用户收信时服务器端所提供的相关协议:MRA

当用户收信的时候,可以通过MUA直接来连接取得自己的邮件邮箱内的数据

image-20240406154142184

MRA(Mail Retrieval Agent)

用户可以通过 MRA 服务器提供的邮政服务协议(Post Office Protocol,POP)来接收自己的邮件,也可以通过 IMAP(Internet Message Access Protocol)协议将自己的邮件保留在邮件主机上面,并进一步进行建立邮件数据文件夹等高级工作。也就是说,当客户端接收邮件时,使用的是 MRA 的 POP3、IMAP 等通信协议,并非 MTA的 SMTP。

POP3的收信方式:

(1)MUA 通过 POP3(Post Office Protocol version 3)的协议连接到 MRA 的 port 110.
并且输入账号与密码来取得正确的认证与授权。

(2)MRA 确认该用户账号/密码没有问题后,会前往该用户的 Mailbox(var/spoollmail
用户账号)取得用户的邮件并发送到用户的 MUA 软件上。

(3)当所有的邮件传送完毕后,用户的 Mailbox 内的数据将会被删除

IMAP(InternetMessagesAccess Protocol),这个协议可以让你将 Mailbox 的数据存储到你主机上的用户主目录,亦即 /home/账号/ 那个目录下那你不但可以建立邮件数据文件夹,也可以针对邮件分类管理,而且在任何一个可连上网络的地方你只要登录主机,原本的邮件都还是存在的。

程序:

  • Dovecot

电子邮件的数据内容

E-mail的标题部分(类似邮件信封)会有几个重要信息,包括:这封信来自那个MTA是由谁所发送出来的、要送给谁、主题为何等,至于内容(类似信封内的信纸)则是发信者所填写的一些说明。例如

[root@localhost ~]# echo "hello world!" | s-nail -s "from csq" csq
[root@localhost ~]# cat /var/spool/mail/csq 
From root@localhost.localdomain  Sat Apr  6 20:17:33 2024   # 发件人的E-mail
Return-Path: <root@localhost.localdomain>      # 这封信的来源
X-Original-To: csq
Delivered-To: csq@localhost.localdomain
Received: by localhost.localdomain (Postfix, from userid 0)
        id 55F702160572; Sat,  6 Apr 2024 20:16:19 +0800 (CST) # 邮件ID
# 这部分主要在讲这封E-mail的来源与目标收件人MTA在哪里的信息
Date: Sat, 06 Apr 2024 20:16:19 +0800  # 收到邮件的日期
To: csq@localhost.localdomain          # 收件人是谁
Subject: from csq                      # 邮件标题
User-Agent: s-nail v14.9.22
Message-Id: <20240406121733.55F702160572@localhost.localdomain> # 给机器看的邮件ID
From: root <root@localhost.localdomain>    # 发信人是谁

hello world!         # 内容

使用Postfix与Dovecot部署邮件系统

部署基础的电子邮件系统

主机名IP
mail.linuxcsq.com(NAT)IP:192.168.200.10
DNS:192.168.200.10
client(NAT)IP:192.168.200.20
DNS:192.168.200.10
windows10DHCP自动获取

第一步:配置服务器主机名称,需要保证服务器主机名称与发信域名保持一致

[root@localhost ~]# hostnamectl set-hostname mail.linuxcsq.com
[root@localhost ~]# bash
[root@mail ~]# 
[root@localhost ~]# hostnamectl set-hostname client
[root@localhost ~]# bash
[root@client ~]# 

第二步:为电子邮件系统提供域名解析

[root@mail ~]# yum install -y bind-chroot
# 防火墙放行dns规则
[root@mail ~]# firewall-cmd --add-service=dns --permanent        
[root@mail ~]# firewall-cmd --reload
[root@mail ~]# vim /etc/named.conf 
        listen-on port 53 { any; };
        allow-query     { any; };
[root@mail ~]# vim /etc/named.rfc1912.zones         
zone "linuxcsq.com" IN {            # 正向解析
        type master;
        file "linuxcsq.com.zone";
        allow-update { none; };
};
zone "200.168.192.in-addr.arpa" IN {  # 反向解析
        type master;
        file "192.168.200.arpa";
        allow-update { none; };
};
[root@mail ~]# cd /var/named/
[root@mail named]# cp -a named.localhost linuxcsq.com.zone
[root@mail named]# cp -a named.loopback  192.168.200.arpa
[root@mail named]# vim linuxcsq.com.zone 
$TTL 1D
@       IN SOA  linuxcsq.com. root.linuxcsq.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns.linuxcsq.com.
        MX 10   mail.linuxcsq.com.
ns      IN A    192.168.200.10
mail    IN A    192.168.200.10
[root@mail named]# vim 192.168.200.arpa 
$TTL 1D
@       IN SOA  linuxcsq.com. root.linuxcsq.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns.linuxcsq.com.
10      PTR     ns.linuxcsq.com.
10      PTR     mail.linuxcsq.com.
[root@mail named]# named-checkconf /etc/named.conf 
[root@mail named]# named-checkzone linuxcsq.com linuxcsq.com.zone
[root@mail named]# named-checkzone 200.168.192.in-addr.arpa 192.168.200.arpa 
[root@mail named]# systemctl restart named-chroot
[root@mail named]# systemctl enable named-chroot
[root@mail named]# nslookup mail.linuxcsq.com
Server:         192.168.200.10
Address:        192.168.200.10#53

Name:   mail.linuxcsq.com
Address: 192.168.200.10
# 客户端测试是否可以解析到
[root@client ~]# nslookup mail.linuxcsq.com
Server:         192.168.200.10
Address:        192.168.200.10#53

Name:   mail.linuxcsq.com
Address: 192.168.200.10

第三步:Mail服务器安装DHCP服务(非必须安装)

[root@mail ~]# yum install -y dhcp-server
[root@mail ~]# vim /etc/dhcp/dhcpd.conf   
subnet 192.168.200.0 netmask 255.255.255.0{
  range 192.168.200.100 192.168.200.200;
  option domain-name-servers 192.168.200.10;
  option domain-name "linuxcsq.com";
  option routers 192.168.200.1;
  default-lease-time 600;
  max-lease-time 7200;
}
[root@mail ~]# systemctl restart dhcpd
[root@mail ~]# systemctl enable dhcpd
[root@mail ~]# firewall-cmd --add-service=dhcp --permanent 
[root@mail ~]# firewall-cmd --reload

打开Windows10,关闭VMware虚拟网络编辑器的本地DHCP服务,禁用并启用Windows网卡

image-20240406211916033

配置Postfix服务程序

Postfx 是一款由 IBM 资助研发的免费开源电子邮件服务程序,能够很好地兼容 Sendmail服务程序,可以方便 Sendmail 用户迁移到 Postfix 服务上。Postfix 服务程序的邮件收发能力强于Sendmai 服务,而且能自动增加、减少进程的数量来保证电子邮件系统的高性能与稳定性,另外,Postfix 服务程由许多小模块组成,每个小模块都可以完成特定的功能,因此可在生产工作环境中根据需求灵活搭配。

主配置文件:

  • /etc/postfix/main.cf

这就是主要的Postfix配置文件,这个文件内容就可以设置号属于你的Postfix MTA了。

修改了这个文件记得重启Postfix

第一步:在邮件服务器上安装Postfix服务程序

[root@mail ~]# yum install -y postfix
[root@mail ~]# firewall-cmd --add-service=smtp --permanent
[root@mail ~]# firewall-cmd --reload

第二步:配置Postfix服务程序

要让你的postfix可以收发邮件,需要启动一些设置,常用的设置如下

参数作用
myhostname邮局系统的主机名
mydomain邮局系统的域名
myorigin从本机发出邮件的域名名称
inet_interfaces监听的网卡接口
mydestination可接收邮件的主机名或域名
mynetworks设置可转发哪些主机的邮件
relay_domains设置可转发哪些网域的邮件
[root@mail ~]# cd /etc/postfix/
[root@mail postfix]# vim main.cf
# 可以不用修改,因为函数gethostname()会获取本机主机的名称,mail.linuxcsq.com
 95 #myhostname = virtual.domain.tld   
# 也不用修改,因为它获取$myhostname信息之后,会截取域名信息后缀
102 #mydomain = domain.tld
# 取消注释,让myorigin调用前面mydomain的变量,来定义发出邮件的域
118 myorigin = $mydomain
# 指定要使用服务器的哪些IP地址对外提供电子邮件服务器,all表示所有IP地址都能提供电子邮件服务
135 inet_interfaces = all
# 定义可接受邮件的主机名或域名列表。就是对方填写mail to到底要写哪个主机名字
183 mydestination = $myhostname, $mydomain
# 验证Postfix的主配置文件(通常为/etc/postfix/main.cf)和其他相关配置文件的语法和正确性
[root@mail postfix]# postfix check
[root@mail postfix]# systemctl restart postfix
[root@mail postfix]# systemctl enable postfix

第三步:创建电子邮件系统的登陆账户

postfix与vsftpd服务程序一样,都可以调用本地系统的账号和密码,因此在本地系统创建常规账户即可

[root@mail postfix]# useradd  csq
[root@mail postfix]# useradd zhw
[root@mail postfix]# echo "000000" |passwd --stdin csq
[root@mail postfix]# echo "000000" |passwd --stdin zhw

邮件发送流程与收信

(1)发信端与收信端两台主机间会先经过一个握手(ehlo)的阶段,此时发信端被记录为发信来源(而不是 Mailfrom)。通过握手后就可以进行邮件标题(header)的传送

(2)此时收信端主机会分析标题的信息,若邮件的“Mail to:主机名”为收信端主机,且该名称符合 mydestination 的设置,则该邮件会开始被接受到队列,并进一步送到Mailbox 当中;若不符合 mydestination 的设置,则终止连接且不会进行邮件内容(body)的传送。

image-20240407015314310

配置Dovecot服务程序

你的MTA收了邮件,那么收信怎么收呢?通过POP3以及IMAP收信,这就是MRA

启动单纯的POP3/IMAP是很简单的,需要先确定已经安装了dovecot这个软件,而这个软件的配置文件只有一个,就是/etc/dovecot/dovecot.conf,我们仅要启动POP3/IMAP而已

第一步:安装Dovecot服务程序的软件包

[root@mail ~]# yum install -y dovecot

第二步:配置部署Dovecot服务程序

[root@mail ~]# cd /etc/dovecot/
[root@mail dovecot]# vim dovecot.conf 
# 配置指定了Dovecot服务器所支持的协议
24 protocols = imap pop3 lmtp submission
# 这意味着在这个IP地址范围内的计算机可以通过该网络访问Dovecot邮件服务器而不需要进行身份验证。
# 换句话说,这是一个免密码登录的信任网络,其连接源被认为是安全和可信的。
48 login_trusted_networks = 192.168.200.0/24

[root@mail dovecot]# vim conf.d/10-auth.conf 
# 禁用明文认证。这意味着用户在进行身份认证时,必须使用加密的认证方式,例如TLS/SSL
# 这里我们改成no开启明文认证,允许用户在进行身份认证时使用明文的用户名和密码
 10 disable_plaintext_auth = no
[root@mail dovecot]# vim conf.d/10-mail.conf 
# 指定了邮件存储的位置和格式
# mbox表示使用mbox格式的邮件存储,它将所有用户的邮件存储在单个文件中
# ~/mail表示每个用户的邮箱目录位于其家目录下的mail子目录中
# 例如,用户user1的邮箱目录将位于/home/user1/mail
# INBOX=/var/mail/%u指定INBOX文件的位置,它位于/var/mail/目录下
# 文件名为用户的用户名(%u表示用户名的特殊占位符)
 25    mail_location = mbox:~/mail:INBOX=/var/mail/%u

[root@mail ~]# su - csq -c 'mkdir -p mail/.imap/INBOX'
[root@mail ~]# su - zhw -c 'mkdir -p mail/.imap/INBOX' 
[root@mail ~]# tree -a /home/
# 删除了一些多余的信息,看起来简洁一些
/home/
├── csq
│   ├── mail
│   │   └── .imap
│   │       └── INBOX
└── zhw
    ├── mail
    │   └── .imap
    │       └── INBOX
[root@mail ~]# systemctl restart dovecot && systemctl enable dovecot
[root@mail ~]# firewall-cmd --add-service=imap --permanent
[root@mail ~]# firewall-cmd --add-service=pop3 --permanent
[root@mail ~]# firewall-cmd --reload
[root@mail ~]# netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address      Foreign Address         State    PID/Program name    
tcp        0      0 192.168.200.10:53    0.0.0.0:*          LISTEN      36386/named       
tcp        0      0 0.0.0.0:587       0.0.0.0:*    LISTEN      39224/dovecot       
tcp        0      0 127.0.0.1:53      0.0.0.0:*    LISTEN      36386/named         
tcp        0      0 127.0.0.1:25      0.0.0.0:*    LISTEN      38306/master        
tcp        0      0 0.0.0.0:993       0.0.0.0:*    LISTEN      39224/dovecot       
tcp        0      0 0.0.0.0:995       0.0.0.0:*    LISTEN      39224/dovecot       
tcp        0      0 0.0.0.0:110       0.0.0.0:*    LISTEN      39224/dovecot       
tcp        0      0 0.0.0.0:22        0.0.0.0:*    LISTEN      1088/sshd: /usr/sbi 
tcp        0      0 127.0.0.1:953     0.0.0.0:*    LISTEN      36386/named         
tcp        0      0 0.0.0.0:143       0.0.0.0:*    LISTEN      39224/dovecot       
tcp        0      0 127.0.0.1:631     0.0.0.0:*    LISTEN      1085/cupsd          
tcp6       0      0 :::587            :::*         LISTEN      39224/dovecot       
tcp6       0      0 ::1:25            :::*         LISTEN      38306/master        
tcp6       0      0 ::1:53            :::*         LISTEN      36386/named         
tcp6       0      0 :::993            :::*         LISTEN      39224/dovecot       
tcp6       0      0 :::995            :::*         LISTEN      39224/dovecot       
tcp6       0      0 :::110            :::*         LISTEN      39224/dovecot       
tcp6       0      0 ::1:631           :::*         LISTEN      1085/cupsd          
tcp6       0      0 :::22             :::*         LISTEN      1088/sshd: /usr/sbi 
tcp6       0      0 :::143            :::*         LISTEN      39224/dovecot       
tcp6       0      0 ::1:953           :::*         LISTEN      36386/named  

第三步:设置邮件别名

  • /etc/aliases:邮件别名的配置信息
  • /etc/aliases.db:是/etc/aliases文件的数据库形式

当对/etc/aliases文件进行更改后,需要使用newaliases命令来重新生成/etc/aliases.db文件,以便服务器能够快速地检索别名配置。

你的主机里面不是有很多系统账号吗?例如 named、apache、mysql等,那么以这些账号执行的程序若有信息发生时,会将该信息以E-mail 的方式传给谁?你会发现其实这些系统账号的信息都是丢给 root。这是因为其他的系统账号并没有密码可登录,自然也就无法接收任何邮件了,所以若有邮件就给系统管理员。不过,MTA 怎么知道这些邮件要传给root?这就需要 aliases 这个邮件别名配置文件来处理了。

[root@mail ~]# vim /etc/aliases
testgroup:      csq,zhw
user1:          csq
user2:          zhw
# 左边是别名,右边是实际存在的用户账号或者是E-mail address
# 通过这个设置值,可以让我们将所有系统账号所属邮件丢给指定用户账号或者E-mail address
[root@mail ~]# newaliases

Winodws邮件客户端

第一步:在windows10中运行Outlook软件程序

outlook下载地址:

链接:https://pan.baidu.com/s/1wbG_GZQVRESDnHI08ppwOg?pwd=1111
提取码:1111

下载完毕后,打开控制面板搜索mail

image-20240407130454989

点击显示配置文件

image-20240407130514486

添加一个配置文件

image-20240407130541946

配置文件名称点击确定

image-20240407130602250

点击手动设置或其他服务器类型

image-20240407130637547

选择POP或IMAP,然后点击下一步

image-20240407130728873

输入账号的邮件服务器设置,点击下一步

image-20240407131556543

测试结束后显示双完成即可,点击关闭

登录到接收邮件服务器 错误:可以看看是不是用户名填写错了

发送测试电子邮件信息 错误:可以查看上一步的其他配置,看看服务器端口有没有问题,然后查看mail端的服务器端口,是否设置所有可用的网络接口,还有防火墙放行规则【inet_interfaces = all】要设置为all

image-20240407133350941

设置完成

image-20240407133811648

打开outlook,在左上角点击新建电子邮件

image-20240407134334392

编辑邮件信息(testgroup是设置的邮件别名,同时发给csq,zhw两个用户),编辑完成点击发送

image-20240407134554103

可以看到马上就收到邮件了

image-20240407134714209

# 在Linux端查看
[root@mail ~]# su - csq
[csq@mail ~]$ mail
s-nail version v14.9.22.  Type `?' for help
/var/spool/mail/csq: 2 messages 1 new
    1 Microsoft Outlook     Sun Apr  7 13:33   40/1294  "Microsoft Outlook 测试消息                                                   "
▸N  2 csq                   2024-04-07 13:46   98/3116  "Hello testgroup(csq,zhw)                                                     "
& 
[-- Message  2 -- 98 lines, 3116 bytes --]:
From: "csq" <csq@linuxcsq.com>
To: <testgroup@linuxcsq.com>
Subject: Hello testgroup(csq,zhw)
Date: Sun, 7 Apr 2024 13:46:50 +0800
Message-ID: <000201da88ae$fc95be50$f5c13af0$@linuxcsq.com>


[-- #1.1 15/142 text/plain, 7bit, us-ascii --]

Hello csq zhw

Hello csq zhw

Hello csq zhw

Hello csq zhw

 


[-- #1.2 57/2046 text/html, quoted-printable, us-ascii --]
& 

Linux邮件客户端

第一步:安装Thunderbird(雷鸟)

[root@client ~]# yum install -y thunderbird

image-20240407135753250

可以看到已经安装成功了,点开Thunderbird,账户设置,手动设置

image-20240407160149982

手动设置完成点击,重新测试,最后点击确定

image-20240407160532666

这就是刚刚发送的邮件

image-20240407160734994

我们也可以用thunderbird发送一封邮件,点击上方的新建信息,编辑完信息点击发送

image-20240407161035863
在Windows端查看,收到邮件

image-20240407161117259

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1574539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

山海鲸智慧农业可视化:开启农业现代化高效管理新时代

随着科技的不断进步&#xff0c;农业现代化已成为当今社会发展的重要趋势。在这一背景下&#xff0c;山海鲸智慧农业可视化解决方案应运而生&#xff0c;为农业生产带来了革命性的变革。它通过创新的可视化技术&#xff0c;将农业生产过程中的各个环节进行高效整合&#xff0c;…

OSPF协议详解

静态缺点 1、中大型复杂网络----配置量大 2、不能实时收敛 动态-----可以实时收敛 IGP----内部网关路由协议 RIP OSPF EIGRP ISIS EGP----外部网关路由协议 BGP IGP &#xff08;选路佳 占用资源 收敛快&#xff09;----一个协议好需满足这三个 距离矢量 DV RIP…

Pandas分箱/离散化cut与qcut的区别

cut与qcut区别 1、pd.cut()2、pd.qcut()3、cut与qcut区别 Pandas提供了智能剪贴功能&#xff1a;pd.cut()与pd.qcut()&#xff0c;它们通常用于更方便直观地处理关系型或标签型数据&#xff0c;将数据进行分箱/离散化 1、pd.cut() 我们可以通过两种方式使用cut()函数&#xff…

C++的并发世界(七)——互斥锁

0.死锁的由来 假设有两个线程T1和T2&#xff0c;它们需要对两个互斥量mtx1和mtx2进行访问。而且需要按照以下顺序获取互斥量的所有权&#xff1a; -T1先获取mte1的所有权,再获取mt2的所有权。 -T2先获取 mtx2的所有权。再铁取 mtx1的所有权。 如果两个线程同时执行&#xff0c…

Android Studio学习4——gradle文件

视频讲解 https://developer.android.google.cn/studio/releases/gradle-plugin.htmIl#updating-gradle

二分查找与搜索树高频问题-算法通关村

二分查找与搜索树高频问题-算法通关村 1 基于二分查找的拓展问题 1.1 山脉数组的封顶索引 LeetCode852&#xff1a;这个题的要求有点啰嗦&#xff0c;核心意思就是在数组中的某位位置i开始&#xff0c;从0到 i 是递增的&#xff0c;从i1到数组最后是递减的&#xff0c;让你找到…

JavaEE 初阶篇-深入了解线程池(线程池创建、线程池如何处理任务)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 线程池概述 1.1 线程池的优点 1.2 不使用线程池的问题 1.3 线程池的工作原理图 1.4 如何创建线程池&#xff1f; 2.0 通过 ThreadPoolExecutor 类自定义创建线程…

数据结构与算法笔记:递归函数设计技巧

ACM金牌带你零基础直达C语言精通-课程资料 本笔记属于船说系列课程之一&#xff0c;课程链接&#xff1a; 哔哩哔哩_bilibilihttps://www.bilibili.com/cheese/play/ep66799?csourceprivate_space_class_null&spm_id_from333.999.0.0 你也可以选择购买『船说系列课程-年度…

Tensorflow2.0笔记 - 自定义Layer和Model实现CIFAR10数据集的训练

本笔记记录使用自定义Layer和Model来做CIFAR10数据集的训练。 CIFAR10数据集下载&#xff1a; https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz 自定义的Layer和Model实现较为简单&#xff0c;参数量较少&#xff0c;并且没有卷积层和dropout等&#xff0c;最终准确率…

穿越代码之海:探寻结构体深层逻辑,展望未来应用新天地

欢迎来到白刘的领域 Miracle_86.-CSDN博客 系列专栏 C语言知识 先赞后看&#xff0c;已成习惯 创作不易&#xff0c;多多支持&#xff01; 结构体作为一种数据结构&#xff0c;其定义和特点决定了它在各种应用中的广泛适用性。随着科技的进步和新兴行业的不断涌现&#xf…

测试自动化流程设计思路

a) 背景介绍 基于当前互联网敏捷开发的现状&#xff0c;手工人力测试已不足以满足当前快速的版本迭代&#xff1b;以下将介绍一种可实现的自动化设计与使用。 b) 当前版本迭代流程 研发同学从代码库master分支拉出新代码进行研发工作得开发开发完成之后提交到代码库测试同学介入…

从概念到实践:探索独立站在当代电商中的关键作用

随着数字化时代的到来&#xff0c;电子商务已成为全球商业生态的核心组成部分。在这个不断变化的市场中&#xff0c;独立站作为企业建立在线身份和拓展业务的强大工具&#xff0c;正逐步展现出其不可替代的价值。 从概念到实践&#xff0c;本文将深入探索独立站在当代电商中的关…

C++从入门到精通——类的作用域及类的实例化

类的作用域及类的实例化 前言一、类的作用域二、类的实例化引例类是对对象进行描述的示例 一个类可以实例化出多个对象示例 示例 前言 类的作用域是指类中定义的变量和方法的可见性和可访问性范围。在类的内部&#xff0c;所有成员&#xff08;包括属性和方法&#xff09;都具…

LeetCode-51. N 皇后【数组 回溯】

LeetCode-51. N 皇后【数组 回溯】 题目描述&#xff1a;解题思路一&#xff1a;回溯&#xff0c; 回溯三部曲。验证是否合法只需要检查:1.正上方&#xff1b;2. 左上方&#xff1b;3.右上方。因为是从上到下&#xff0c;从左到右遍历的&#xff0c;下方不可能有皇后。解题思路…

Day60:WEB攻防-XMLXXE安全无回显方案OOB盲注DTD外部实体黑白盒挖掘

目录 XML&XXE-传输-原理&探针&利用&玩法 XXE 黑盒发现 XXE 白盒发现 XXE修复防御方案 有回显 无回显 XML&XXE-黑盒-JSON&黑盒测试&类型修改 XML&XXE-白盒-CMS&PHPSHE&无回显 知识点&#xff1a; 1、XXE&XML-原理-用途&…

Unity与CocosCreator对比学习二

一、锚点与适配 1.在Creator中 适配通过锚点、位置和Widget达到适配目的&#xff1b;锚点是节点在其父节点坐标系中坐标对其点&#xff0c;其x,y范围在[0, 1]之间&#xff1b; 锚点为(0, 0)时在节点自身的左下角&#xff0c;节点坐标指其左下角在父节点中的坐标&#xff1b;锚…

【2024系统架构设计】案例分析- 5 Web应用

目录 一 基础知识 二 真题 一 基础知识 1 Web应用技术分类 大型网站系统架构的演化:高性能、高可用、可维护、应变、安全。 从架构来看:MVC,MVP,MVVM,REST,Webservice,微服务。

内存管理(SRAM)

内存管理介绍 内存管理实际上就是指管理SRAM. 内存管理&#xff0c;是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如 何高效、快速的分配&#xff0c;并且在适当的时候释放和回收内存资源。内存管理的实现方法有很多种&#xff0c;其实最终都是要实现两…

用vscode仿制小米官网

html内容: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><link rel&quo…

无线基本认识和配置

1、无线局域网 IEEE 802.11标准 根据应用范围分类 WPAN --- 个人无线网络 NFC、ZIgbee、Bluetooth WLAN --- 无线局域网 WiFi&#xff0c;使用到WPAN技术 WMAN --- 无线城域网 WiMax 802.16 WWAN --- 无线广域网 GSM、CDMA、WCDMA、LTE、5G、TD-SCDMA 2、…