SOS协议:亲密短信通信技术规范
SOS协议定义了基于短信的亲密文本通信的结构与逻辑。它采用严格的消息格式,包含状态、标志位和校验和,以确保通信同步与完整性校验。本文档详细说明消息格式、有限状态机行为及错误处理机制——使系统在完全离线(无互联网连接)环境下仍能稳定可靠运行。
消息格式与结构
SOS消息遵循如下模式:SOS消息 = 起始标记 "|" 版本号 "|" 状态 "|" 会话ID "|" 标志位 "|" 负载长度 "|" 负载 ["|" 校验和]。各字段以竖线(|)分隔。
- 起始标记:"SOS" —— 协议标识符。
- 版本号:"1" —— 当前唯一版本。
- 状态:取值为以下之一(IDLE、SYNS、SYNR、ESTD、FINW、PRMT、BUSY、SUSP、CLSD、MORE)。
- 会话ID:5位数字(1–65535),每轮会话内单调递增。
- 标志位:"A"(确认应答)、"F"(终止请求)、"R"(重置)、或为空。
- 负载长度:三位数字,表示负载内容的字符数(0–160)。
- 负载:纯文本,可选嵌入控制序列。
- 校验和:两个大写十六进制字符(可选)。
示例:SOS|1|SYNS|42||12|你好美极了|3E。
校验和计算方法
算法步骤:
- 将负载按空格拆分为单词(忽略所有空白字符);
- 计算各单词长度乘积(若负载为空,则乘积默认为1);
- 减去原文中空格总数;
- 对256取模,并转换为两位大写十六进制字符串。
该方法兼顾简洁性与鲁棒性,能有效抵御移动终端短信传输中常见的字符失真问题。
术语与控制序列
核心概念:
- 发起方:发送首条消息的一方。
- 目标接收方:接受或拒绝本次交互的一方。
- 状态:协议有限状态机中的某一阶段。
- 控制序列:嵌入在负载中的情感提示或功能标记。
常见负载内控制序列:
| 序列 | 含义 |
|----------|---------|
| Y | 同意 |
| N | 拒绝 |
| ... | 暂停/留白 |
| :-) | 友好暗示 |
| ;-) | 调皮潜台词 |
| :-D | 开怀大笑 |
| ^_^ | 欣喜确认 |
| >_< | 尴尬 |
| ~ | 模糊态度 |
| (.)(.) | 暗指身体特征 |
| ¯\\_(ツ)_/¯ | 不确定 |
实际实现中可解析这些序列,用于自动回复或界面情感化增强。
协议状态机与状态定义
双方各自维护一个有限状态机,通过状态与标志位字段实现同步。
状态说明:
- IDLE:初始空闲态。
- SYNS:已发出邀请,等待对方响应。
- SYNR:收到邀请,已发出应答。
- ESTD:会话已建立,正常交互中。
- FINW:已发起终止,等待对方确认。
- PRMT:异常提前终止。
- BUSY:当前暂时不可用。
- SUSP:检测到可疑行为。
- CLSD:会话已关闭。
- MORE:FIN后需继续交互,进入续传态。
状态迁移规则
由收发SOS消息触发的状态迁移:
- IDLE → SYNS:主动发送SYNS;10分钟未响应则超时进入PRMT。
- SYNS → ESTD:收到SYNR且含ACK标志(A)。
- SYNS → PRMT:超时或收到RST标志(R)。
- ESTD → FINW:发送FIN标志(F);2分钟未确认则超时。
- FINW → CLSD:收到ACK(A)。
- FINW → MORE:收到MORE + ACK(A),返回ESTD。
- 任意状态 → PRMT:收到RST或发生超时。
- IDLE → BUSY:收到SYN但自身处于忙线,立即回BUSY。
- SYNR → SUSP:会话ID非单调递增或校验和异常。
超时机制与惩罚策略
- SYN阶段:10分钟无响应 → 进入PRMT。
- ESTD阶段:连续10分钟未收到ACK → 进入PRMT。
- FINW阶段:2分钟无确认 → 直接进入CLSD。
- MORE阶段:10分钟无后续 → 进入CLSD。
惩罚机制:
- PRMT:封禁30分钟;累计3次 → 7天永久封禁。
- BUSY:需等待15分钟后方可重试。
- SUSP:立即发送RST并封禁24小时。
冲突处理
若新SYN到达时已有活跃会话:立即回复BUSY,附带消息"会话已存在";发起方退回IDLE态。若检测到会话ID非单调递增 → 触发SUSP → 自动发送RST。
核心要点:
- SOS协议通过状态感知与内置校验和,为短信通信提供标准化、高可靠性保障。
- 全流程同步(SYNS/SYNR/ESTD)完全离线完成,无需任何网络支持。
- 控制序列让文字交流更富表现力,精准传递情绪与潜台词。
- 科学的超时与惩罚机制,有效遏制垃圾信息、恶意滥用及协议异常。
- 轻量级校验和设计,在典型短信信道干扰下依然保持高度鲁棒性。
— Editorial Team
暂无评论。