电子邮件的协议太难,看看这篇文章

我的公众号「码农之屋」(id: Spider1818) ,分享的内容包括但不限于 Linux、网络、云计算虚拟化、容器Docker、OpenStack、Kubernetes、SDN、OVS、DPDK、Go、Python、C/C++编程技术等内容,欢迎大家关注。


​现在我们都经常使用微信、QQ等IM工具,我们称之为实时通信软件,可能大家都还不知道,微信的前身还是QQ邮箱里面的一个小插件。今天我们来介绍下,邮件这种东西,在互联网中是如何传输的,是什么样的形式存在呢。

电子邮件的协议太难,看看这篇文章_第1张图片

电子邮件诞生的时间比较早,早就在几十年前,虽然有了网络,但是不同人,交流起来仍然非常麻烦。计算机底层是二进制,怎么把想表达的东西变成二进制而对方又能顺利看到,一直是一个难题。于是,大家就发明一种叫做SMTP的协议,从计算机网络的角度来看,它的传输层使用的是TCP协议传输,两台机器建立TCP连接后,双方开始在这个连接上进行控制应答与数据传递。这种模式,就好比一个人直接拉了一条电话线到另外一个人家,可以随时进行通信了。

电子邮件的协议太难,看看这篇文章_第2张图片

但是这种模式存在什么问题呢?那便是如果对方不在线,就无法建立连接。对方的电脑没开启,你就永远无法发邮件给对方,如果你想发邮件给对方,那就只好提前打个电话,跟他说哥们,我要给你发邮件了,赶紧上线吧。设想,如果我们不在线,就不能收发消息,那得多麻烦,只要有麻烦的地方,就有商机。很快就有一些厂商,愿意用科技的力量,帮大家解决这个问题,像国外有谷歌,雅虎这样的邮件服务商,国内有搜狐、网易这些。他们是怎么解决的呢?就是提供一个服务器,把大家的东西存放起来。就好比双十一了,我们经常有快递,我们不可能每次快递员来的时候,都有空收快递,于是,我们就跟快递员说,先把这个东西放在物业那边,然后在有空的时候,再去物业那里询问有没有新的快递。

去物业看快递有没有新的快件,便是著名的POP3协议,谷歌雅虎会提供一些支持POP3协议的服务器,提供给大家去询问有没有新的邮件,在此之前,发送者使用SMTP协议将将发送的东西发给服务器,由服务器暂时保存,等着用户来收取。我们举一个例子,用户A从华为邮箱发送一份邮件给网易邮箱的用户B。

 

用户A在自己的电脑上编写邮件,填上收件人的地址,点击发送。当然,这里他必须知道收件人的地址,格式为xxx@yyy这里,yyy表示的是邮箱的提供厂商,可以是谷歌的、网易的、也可能是中国移动的。xxx表示对方在这个厂商注册的账号的信息。

华为的服务器收到这份邮件,他首先判断A是否是自己的用户,然后开始解析发送地址,发现发送的对象是网易服务商的,于是开始跟网易的服务器建立连接,把这个邮件发给网易的服务器。

网易的服务器收到腾讯发送过来的邮件,检查B发现是自己的用户,接收这份邮件,并转发到自己的POP服务器,等待着用户来拉取。

用户B登上网易邮箱,去网易的POP服务器上面询问有没有自己的最新邮件,然后接收到自己的邮件。以上就是一份邮件的神奇互联网之旅了,当然这其中还有各种各样的反垃圾校验呀,各种寻址呀,我们就不一一赘述了。我们学习了邮件中最为关键的两个协议SMTP与POP3协议,这都是程序员面试常问的内容。相信读到这里,大家已经清楚邮箱的基本流程了,关注我,让我们一起学习,共同进步!

你可能感兴趣的:(Linux核心技术)