摘要
- RFC 1090 于 1989 年 2 月提出让每一次 SMTP 会话直接使用一条 X.25 双向虚电路,完成交谈后由呼叫方通常负责清除电路。
- X.25 的清除请求可能丢弃仍在途中的分组。呼叫方因此等待 SMTP 的服务关闭应答,通常是
QUIT后的回复,再清除虚电路。会话收尾、交易被接收和邮件最终处理,各有自己的时点。
挂断之前,听筒里还有半句话
1982 年的 RFC 821 已经考虑过让 SMTP 经过 X.25 公用数据网。附录 D 建议在 X.25 之上再放一层可靠的端到端协议,例如 TCP。到了 1989 年,R. Ullmann 在 RFC 1090 中提出另一种做法:SMTP 直接使用 X.25 虚电路。文档自报这套程序已在 22 个国家的 24 张公用分组数据网上投入使用。这是作者对当时实践的说明,也解释了为何一份只有几页的文件会写得像值班手册。
做法表面上很利落。发起方为一次 SMTP 会话建立一条虚电路,借它的双向通道交换命令、回应和邮件数据;结束时通常由发起方清除电路。双方还是说 SMTP 的语言,X.25 负责承载。然而这条线路并不把“已经发出”和“已经到达”揉成一件事。RFC 1090 特意指出,X.25 发起清除时不会同步送达尚在途中的数据,那些分组会被丢弃。
于是最容易出错的地方恰好是收工。发信端把最后几个字节送上线路,立刻清除虚电路,远端可能永远等不到这些字节。RFC 给呼叫方安排了一个清晰的动作顺序:发出 QUIT 后,等远端的 Service Closing 消息回来,再清除电路。像是离开办公室前,要听见隔壁房间说“收到,门可以锁了”。只凭自己已经说完便熄灯,走廊里可能还有一封信。
SMTP 本身也有不同层次的回执。邮件数据后的接受回应,说明接收服务对当前交易作了回应;Service Closing 是会话结束的回应;X.25 清除是线路结束的动作。接收系统随后如何处理邮件,还在更后面。RFC 1090 盯住的是线路末端的一小截时间:让服务层说完话,再拆走承载它的通道。这个顺序很窄,却决定最后的分组是否还有路可走。
线路建立时还需要先亮出身份。RFC 1090 建议在 X.25 的 Call User Data 开头放四个字节的协议标识,十六进制写作 C0F70000。实现仍应允许按目的地址配置呼叫数据,包括这段标识。公用网和私有连接可以有不同的接入习惯;统一的识别方式与逐地址调整并排存在。
会话中的 SMTP 字节流可由发送方自行分装成 X.25 分组。文档鼓励使用 M 位表示“后面还有数据”,并允许这种序列总长达到 2,048 字节;为了让故障追踪更好读,还建议一条 SMTP 命令或回应尽量落在一个分组或一组连续分组中。这是便于调试的建议,不是改变 SMTP 句法的闸门。Q 位限定数据与中断分组在这里没有用途,收到后应忽略。字符采用完整的八位 ASCII,行以 CRLF 结束;条件允许时也识别单独的 LF。线路上的分组怎么切,服务层的句子仍要能拼回去。
故障时另有剧本。如果收到 X.25 第三层的电路重置,就清除当前虚电路,重新尝试 SMTP 连接;可以稍后再试,也可以换一组呼叫设施。RFC 同时要求实现可按被叫地址设置这些设施。一条旧线路上的状态不能靠重新拨号原样延续,新连接要重新建立会话。
等待也被写成具体的钟点:呼叫接受最多等 100 秒,随后服务就绪问候再等 120 秒;会话建立后若 10 分钟收不到回应,可以清除电路;发出 QUIT 后,超时缩到 20 秒。最后一次等待若结束得不够体面,文档认为已完成的 SMTP 交易仍然完成。这些数字来自 RFC 所描述的操作经验。电路不能无限占着,另一端也要有机会说完最后一句话。
这份历史文件最好看的地方,是那个还没按下去的开关。邮件协议能在 X.25 上说话,只要双方把结束交谈的时刻说清楚。线路由一方清除;何时可以清除,要听另一方的回复。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限战略圈层会员
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance





