Pipelined State Machine Corruption
a year ago
- #protocols
- #pipelining
- #networking
- 文本协议(CRLF协议)涉及向服务器发送一行文本并接收响应。
- 流水线技术允许客户端无需等待单个响应即可发送多个请求,但不同协议的支持情况各异(例如NNTP要求支持,HTTP 1.1定义了该机制但实际支持已消亡,SMTP将其作为可选功能但警告因服务器缺陷可能导致问题)。
- 若简单服务器未实现流水线处理,可能每次仅读取一个请求;但当服务器依赖隐式状态驱动状态机时,会导致潜在的数据损坏问题。
- 典型场景:使用'select'进行IO多路复用的服务器若假设命令逐条到达(如MAIL FROM和RCPT TO命令),可能错误处理流水线命令,引发状态机损坏。
- RFC 2920指出诸如stdio缓冲区问题(如执行辅助进程时数据丢失)等风险,并警告若流水线请求期间未读取响应可能导致死锁。