This commit is contained in:
周伟
2022-05-11 18:46:27 +08:00
commit 387f48277a
8634 changed files with 2579564 additions and 0 deletions

View File

@@ -0,0 +1,782 @@
<!DOCTYPE html>
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<link rel="icon" href="/static/favicon.png">
<title>24 辛苦的邮政 - SMTP.md</title>
<!-- Spectre.css framework -->
<link rel="stylesheet" href="/static/index.css">
<!-- theme css & js -->
<meta name="generator" content="Hexo 4.2.0">
</head>
<body>
<div class="book-container">
<div class="book-sidebar">
<div class="book-brand">
<a href="/">
<img src="/static/favicon.png">
<span>技术文章摘抄</span>
</a>
</div>
<div class="book-menu uncollapsible">
<ul class="uncollapsible">
<li><a href="/" class="current-tab">首页</a></li>
</ul>
<ul class="uncollapsible">
<li><a href="../">上一级</a></li>
</ul>
<ul class="uncollapsible">
<li>
<a href="/专栏/全解网络协议/01 我应该站在谁的肩膀上 - OSI vs TCPIP模型.md">01 我应该站在谁的肩膀上 - OSI vs TCPIP模型.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/02 万丈高楼平地起- 物理层 + 数据链路层.md">02 万丈高楼平地起- 物理层 + 数据链路层.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/03 OSI的灵魂就是我 - 网络层.md">03 OSI的灵魂就是我 - 网络层.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/04 要快还是要稳你说好了 - 传输层.md">04 要快还是要稳你说好了 - 传输层.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/05 是时候展现真正的技术了 - 应用层.md">05 是时候展现真正的技术了 - 应用层.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/06 重回小学课堂 - 二进制101.md">06 重回小学课堂 - 二进制101.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/07 1+1 = 2吗 - 二进制的计算.md">07 1+1 = 2吗 - 二进制的计算.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/08 16进制又是个什么鬼 - 16进制的讲解.md">08 16进制又是个什么鬼 - 16进制的讲解.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/09 我想有个家 - 什么是IP地址.md">09 我想有个家 - 什么是IP地址.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/10 我可是住二环的人 - IP地址的组成和分类.md">10 我可是住二环的人 - IP地址的组成和分类.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/11 我已经没地方住了吗 - IPv6.md">11 我已经没地方住了吗 - IPv6.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/12 向左还是向右 - IP路由.md">12 向左还是向右 - IP路由.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/13 我能给你安全感 - TCP.md">13 我能给你安全感 - TCP.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/14 我那不为人知的秘密是什么 - TCP.md">14 我那不为人知的秘密是什么 - TCP.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/15 不问收没收到,就问快不快 - UDP.md">15 不问收没收到,就问快不快 - UDP.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/16 我为什么与众不同 - TCP高级篇拥塞模型.md">16 我为什么与众不同 - TCP高级篇拥塞模型.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/17 来,先看看我的家谱 - HTTP的身世.md">17 来,先看看我的家谱 - HTTP的身世.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/18 我都这么成功了,你却说我不行 - HTTP 的特点和缺点.md">18 我都这么成功了,你却说我不行 - HTTP 的特点和缺点.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/19 我老了,让我儿子来吧 - HTTP2.md">19 我老了,让我儿子来吧 - HTTP2.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/20 稳重的大外甥 - HTTPS.md">20 稳重的大外甥 - HTTPS.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/21 HTTP的高级篇 - HTTPClientJava.md">21 HTTP的高级篇 - HTTPClientJava.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/22 想来我家,你自己查呀 - DNS.md">22 想来我家,你自己查呀 - DNS.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/23 来的早,不如来得巧 - NAT.md">23 来的早,不如来得巧 - NAT.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/全解网络协议/24 辛苦的邮政 - SMTP.md">24 辛苦的邮政 - SMTP.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/25 你就是看不见我 - VPN.md">25 你就是看不见我 - VPN.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/26 黑客的好帮手 - SSH.md">26 黑客的好帮手 - SSH.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/27 你可以得到我的心,却得不到我的人 - 物理安全设备.md">27 你可以得到我的心,却得不到我的人 - 物理安全设备.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/28 你怎么证明你就是你 - 身份验证和访问控制.md">28 你怎么证明你就是你 - 身份验证和访问控制.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/29 我要怎么藏好我的考研资料 - 网络攻击(一).md">29 我要怎么藏好我的考研资料 - 网络攻击(一).md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/30 我要怎么藏好我的考研资料 - 网络攻击(二).md">30 我要怎么藏好我的考研资料 - 网络攻击(二).md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/31 如何保护我的考研资料 - 网络攻击防范.md">31 如何保护我的考研资料 - 网络攻击防范.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/32 Linux网络安全 - 安全实战.md">32 Linux网络安全 - 安全实战.md.html</a>
</li>
<li>
<a href="/专栏/全解网络协议/33 结语.md">33 结语.md.html</a>
</li>
</ul>
</div>
</div>
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
<div class="sidebar-toggle-inner"></div>
</div>
<script>
function add_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.add('show')
}
function remove_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.remove('show')
}
function sidebar_toggle() {
let sidebar_toggle = document.querySelector('.sidebar-toggle')
let sidebar = document.querySelector('.book-sidebar')
let content = document.querySelector('.off-canvas-content')
if (sidebar_toggle.classList.contains('extend')) { // show
sidebar_toggle.classList.remove('extend')
sidebar.classList.remove('hide')
content.classList.remove('extend')
} else { // hide
sidebar_toggle.classList.add('extend')
sidebar.classList.add('hide')
content.classList.add('extend')
}
}
function open_sidebar() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.add('show')
overlay.classList.add('show')
}
function hide_canvas() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.remove('show')
overlay.classList.remove('show')
}
</script>
<div class="off-canvas-content">
<div class="columns">
<div class="column col-12 col-lg-12">
<div class="book-navbar">
<!-- For Responsive Layout -->
<header class="navbar">
<section class="navbar-section">
<a onclick="open_sidebar()">
<i class="icon icon-menu"></i>
</a>
</section>
</header>
</div>
<div class="book-content" style="max-width: 960px; margin: 0 auto;
overflow-x: auto;
overflow-y: hidden;">
<div class="book-post">
<p id="tip" align="center"></p>
<div><h1>24 辛苦的邮政 - SMTP</h1>
<h3>什么是通信?</h3>
<p>什么是通信?这个可能是一个比较文绉绉的词,说白了就是计算机之间的交流,唠嗑。我们从出生开始就一直在唠嗑。所以你应该对这个词不陌生。你细想一下,你唠嗑是为了啥,是不是在交流我们的需求。而且唠嗑也是我们用来了解某人的方法,比如你看上了一位美女,你直接要微信是不是比较鲁莽,除非你和老师一样帅(开玩笑)。</p>
<p><img src="assets/20210219132000589.png" alt="在这里插入图片描述" /></p>
<p>你是不是应该先去聊聊天,唠唠嗑,然后再要微信。在微信上可以继续的聊天,交流你们之间的感受。因此,交流是将我们的想法与其他人联系起来的机制。</p>
<p>现在不要想小姐姐了想想比较实际的。思考一下每天与你们交流的所有人。和工作中的同事你们会交流什么是不是会包含项目的进展项目取得了哪些成功潜在的困难是什么回到家中你还会与朋友和家人就生活中发生的事情进行交流可能是重要的事也可能只是一个有趣的事情也可能是令人兴奋的事情。现在微信比较流行了但是使用电话也是一种很好的交流方式。你可以给你的朋友打电话。或者是给你刚认识的小姐姐打电话你先介绍你自己让这个美女知道他正在和刚才认识的那个帅哥说话。然后你可能会说听说市中心有一家新的咖啡店开业你要不要尝试一下然后你是不是就和小姐姐有了一次潜在约会的机会。当然这里不是教你怎么约小姐姐就像电话可以帮助我们交流和交换思想一样互联网也是一种交流机制这个才是我们的主题虽然刚才讲的东西可能才是你最关心的现在把思想收一下回到主题上来。它在我们的生活中发挥着巨大作用也真真切切的影响着我们如今的沟通方式。只要考虑一下你每天使用Internet在计算机上完成的所有工作即可。你可以创建文档和PPT来更新你的项目进度并与同事共享该信息。你可以浏览互联网以阅读自己喜欢的小说。看自己喜欢的小电影。阅读有关电视节目的信息比如巡回检察组我之前天天追剧到不行查看电影放映时间好约小姐姐一起阅读或查找餐厅评论去哪里约小姐姐还可以使用互联网购物。你细想一下所有这些活动都可以通过使用协议来实现。协议是你的计算机用于与包含我们要使用的所有信息的其他网络进行对话的机制。</p>
<h3>SMTP的历史</h3>
<p>在1960年代的计算机初期人们不得不使用大型主机才能相互通信。下面这个老照片就是大型计算机你能想象有一个这样的计算机在你家里吗?</p>
<p><img src="assets/20210219132013273.png" alt="在这里插入图片描述" /></p>
<p>我们今天拥有的小型便携式笔记本电脑平板电脑和智能手机在那个年代是根本不存在的。大多数大型机是由大学大型企业和政府所有的。随着越来越多的大型机变得普及所有者也希望与其他大型机所有者建立联系。就好像单机游戏再好玩你也会希望和别人一起玩对不对。所以他们需要找一个办法来进行沟通。因此在此期间这些人创建了许多不同的协议并使用这些协议来允许所有这些大型机相互通信。最终为了大家能一起玩”魔兽世界“的这个愿望SMTP协议诞生了。</p>
<p>SMTP协议允许这些大型机作为邮件服务器。因为文本能够通过连接的网络从一个大型机发送到另一个大型机。有时文本可以直接发送给收件人。但有时则要困难一些文本必须通过几个大型机才能到达目的地。因此随着越来越多的大型机连接到网络要传送的文本到达其目的地变得越来越复杂。 SMTP作为一个协议可用于在使用大型机的人员之间传输这些文本。随着SMTP协议在其早期的发展它已经进化了很多正因如此它也广泛的应用了。 SMTP协议运行得非常好最终在1982年8月成为电子邮件通信的全球标准。在1982年创建了RFC 821RFC 821就是提供了有关什么是SMTP以及其如何工作的说明手册。多年来SMTP协议还在不断的完善自己它在2008年10月又对自己进行了更新RFC 5321</p>
<p><img src="assets/20210219132027536.png" alt="在这里插入图片描述" /></p>
<h3>SMTP是什么</h3>
<p>了解了SMTP的历史就好像你看了SMTP的出生证一样知道他是什么时候出生的那我们来认真的了解一下这位好少年看看他究竟优秀在哪SMTP是一个用户用于发送电子邮件时使用的协议。该协议对应的端口是25这是所有电子邮件系统都知道的标准那标准是哪来的呢当然是因为我们上面提到的RFC 821和5321。</p>
<p>SMTP协议会在你和小伙伴使用的电子邮件系统之间创建连接或管道。就像当你看到小姐姐时你会说美女你好。然后这个小姐姐会回头看你说你好帅哥。这个回头其实也就是我们说的ACK确认。这个ACK就打开了你们俩之间的沟通渠道使你们可以进行对话。你可能会说小姐姐你眼睛真漂亮小姐姐会笑一下然后说是不是想加微信这种我们日常每天都进行的来来回回也发生在邮件系统中。你可能说中文我和同事说英文那邮件系统呢使用的是SMTP协议作为其语言。 SMTP协议允许在邮件服务器之间发送一堆基于文本的命令。这些命令会建立连接并允许会话的确认也就是ACK。我听到你了你还挺可爱的这种对话是你向别人发送电子邮件的基本机制。</p>
<p>现在我们举个例子比如你要给你的金主爸爸王老板发送电子邮件。当你想向王老板发送电子邮件时你的电子邮件客户端比如我们熟悉的Microsoft Outlook会将消息发送到电子邮件服务器。然后此服务器与王老板使用的另一个邮件服务器建立连接。每当你发送电子邮件时都会发生一系列特定的事件。首先你的SMTP客户端或Outlook将联系你的SMTP服务器以便它可以建立与王老板的SMTP服务器的连接。但是为了建立此会话我需要找到王老板的SMTP服务器所在的位置。如何到达那里呢你想一下是不是要使用DNS。具体来说你的电子邮件服务器将向DNS询问王老板的域名的邮件交换记录。假设这个金主爸爸是京东的。那你就要去询问JD.COM的记录。然后DNS服务器将使用该MX记录答复我们的邮件服务器该记录将提供王老板的SMTP服务器的IP地址。该IP地址是王老板的SMTP服务器所在的Internet上的虚拟地址。</p>
<h3>SMTP具体的工作流程</h3>
<p>我们来分解一下SMTP对话的实际工作流程。首先电子邮件服务器需要通过查询DNS来查找金主爸爸的SMTP服务器的MX记录。一旦获得邮件服务器将通过端口25尝试建立与jd.com的连接。一旦建立了到jd服务器的连接jd的服务器就会通过确认ACK响应你的邮件服务器。通常此确认采用SMTP服务器的完全限定域名的形式(220 mail.jd.com)。然后你的邮件服务器将发送一个ehlo命令。 金主爸爸的SMTP服务器将对此进行确认ACK并打个招呼。然后从命令发送邮件该命令提供了你的电子邮件地址MAIL FROM <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="097a617c68606e6c49717171276a6664">[email&#160;protected]</a>。接着jd的服务器将对此进行确认并指示可以继续进行对话。已经在监听了。然后你的SMTP客户端将发送一个收件人命令RCPT <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9aedfbf4fdf6fbf5f8fbf4daf0feb4f9f5f7">[email&#160;protected]</a>。此时金主爸爸的服务器以250 OK(250 Recipient OK)的响应ACK。现在你的SMTP服务器希望了解邮件的内容因此服务器发送了DATA命令。一旦发送了DATA命令构成正文消息的每一行文本都会被发送到王老板那。为了向王老板的服务器发出已完成该消息的信号我已经说了我需要说的所有内容我按回车键换了一个新行然后输入一个句号然后再换回另一行。因此新行句号新行。这个就是暗号了。然后金主爸爸的SMTP服务器回复我的SMTP服务器250 Message accepted for delivery让你知道他已经知道了一切。他会传达你的信息。至此完成了邮件的传递。你的SMTP服务器发送了Quit命令从而结束了对话。或者你可以将其视为挂断电话。我画一下图就是这样</p>
<p><img src="assets/20210219132105365.png" alt="在这里插入图片描述" /></p>
<h3>Microsoft Exchange</h3>
<p>我们现在来看一个具体的例子呀。outook大家应该都不陌生。那我们就以Microsoft Exchange为例。Microsoft Exchange简单地说它是一种服务器端允许客户传递消息的产品。你可以使用Microsoft Exchange发送和接收电子邮件。实际上你可能已经是Exchange的忠实客户每天都在使用Exchange甚至可能没有意识到。</p>
<p>假如正坐在办公桌旁工作并且收到Microsoft Outlook中一位同事的电子邮件要求你提供有关你正在一起工作的项目的信息。使用Outlook你可以回复邮件在午餐期间你可以继续使用手机与同事回复邮件不要问我为什么你们不能当面谈也许你同事是一个漂亮的小姐姐。但是整天你都无法获得所需的答案于是你终于鼓足勇气安排一次面对面的会议。你创建了一个会议请求并将你的同事添加到该请求中你找到了适合双方的时间然后发送会议邀请。在几分钟之内你会收到一封电子邮件通知告知小姐姐已接受你的会议请求。这一切听起来熟悉吗我们在美国的工作流程是这样的哦如果是这样则你可能正在使用Microsoft Exchange的多个功能。</p>
<p>Microsoft Exchange Server是世界上最受欢迎和功能最强大的邮件服务器之一。普遍用于已经使用Active Directory如果你做过windows运维的话你会知道如果不知道也没关系架构的企业。你是否用过称为Outlook的Microsoft Office应用程序Exchange就是支撑Microsoft Outlook这个强大功能软件的背后的那个男人。你可以将电子邮件日历和联系人通过Microsoft Outlook发送到电脑上智能手机上也可以从Web浏览器访问这些项目如果你做过相关的开发你就会发现这是一个很复杂的东西。所以使用Microsoft Exchange的公司的员工可以从世界任何地方访问他们的电子邮件。无论他们在办公室还是在旅途中他们都可以进行交流比如说我可以回中国工作的时候仍然访问我的邮件你可以在受支持的Windows服务器版本上安装Exchange该版本通常位于Active Directory服务器所在的公司数据中心中。</p>
<h5>Active Directory</h5>
<p>Active Directory是Exchange基础结构中的重要组成部分你可以使用两个关键工具来管理Exchange环境这两个工具是基于Web的Exchange Admin Center和使用PowerShell的Exchange Management。 Exchange采用简化的方法来实现高可用性这意味着降低了实现高可用所需的复杂性。 Exchange与Active Directory紧密结合。没有Active DirectoryExchange甚至无法运行。Exchange使用Active Directory将帐户与邮箱相关联就像你用来登录工作PC的帐户一样。它使用Active Directory站点来确定将邮件路由到其他Exchange服务器的最佳方法。 Exchange软件使用许多不同的协议来实现传递电子邮件的功能。诸如HTTP和HTTPS之类的协议用于Web服务。 LDAP用于身份验证。然后是几种不同的客户端连接协议例如POP和IMAP和SMTP。作为Exchange的核心数据库技术提供了中央存储可以为用户发送和接收电子邮件进行存储。该数据库还可以在数据库中跟踪会议和其他与日历相关的任务。微软早在1996年就一直公开发行Exchange的第一个品牌版本。这说明Exchange是一款非常成熟且可靠的软件。如果你使用Exchange为用户提供邮件服务那么只要你设置正确且配置正确应该不会出现任何的环境问题。</p>
<p>基本上你不做运维的话。你不太会用到powershellActive Directory等等。我也不知道我是幸运还是不幸运曾经使用过一段Powershell和Active Directory。这也算是一段经历吧。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/全解网络协议/23 来的早,不如来得巧 - NAT.md">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/全解网络协议/25 你就是看不见我 - VPN.md">下一页</a>
</div>
</div>
</div>
</div>
</div>
</div>
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
</div>
<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"7099765249c63cfa","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
</body>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-NPSEEVD756');
var path = window.location.pathname
var cookie = getCookie("lastPath");
console.log(path)
if (path.replace("/", "") === "") {
if (cookie.replace("/", "") !== "") {
console.log(cookie)
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
}
} else {
setCookie("lastPath", path)
}
function setCookie(cname, cvalue) {
var d = new Date();
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
}
return "";
}
</script>
</html>