背景
我们常使用邮件客户端,如 Foxmail 、Outlook 等收发邮件。大家应该了解邮件协议基础知识吧,发送邮件是通过 SMTP 协议完成,收取邮件则走的是 POP3 协议。由于工作原因,笔者曾对邮件协议的通信过程进行过完整的分析,这里整理下邮件协议的通信过程,以巩固对通信协议的理解。
协议是什么
我曾经做过一个基于 UDP 字节序列的应用:两个进程【一个用 Java 开发,另一个 是C++ 进程】之间,通过逐个解析 UDP 数据包中的字节数据完成通信业务,最小业务数据单位是比特。
大概的流程是这样子的:
- 循环读取 UDP 数据包
- 先取出第一个字节
- 再读取这个字节的前 2 个 bit 数据,它代表某一种业务类型
- 紧接着的 6 比特代表业务数据总长度
- 再循环读取第二个字节以后的数据,直到达到总长度
很多年过去了,已经忘记了那个应用的具体功能,但是对 UDP 字节数据的解析流程依然清晰。它让我理解了什么是协议,这其实就是一种基于简单处理规则的通信协议,也算是一种自定义的应用层协议了吧。
由此推及到 OSI 七层模型中的其他协议,它们跟这种简单约定类似,只不过通信规则更复杂一些!
SMTP 协议基础
SMTP 全称为「 Simple Mail Transfer Protocol 」,这是来自百度百科的解释:
SMTP 是一个相对简单的基于文本的协议。在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的)