《UNIX网络编程卷1》- 带外数据(Out-of-Band Data, OOB)
以下是《UNIX网络编程卷1》中带外数据Out-of-Band Data, OOB的核心总结1. 基本概念带外数据是TCP协议提供的一种紧急数据传输机制通过设置MSG_OOB标志发送如引用[1][4]代码所示。它允许发送方告知接收方特定数据具有更高优先级常被用于中断通知或异常处理例如rlogin中中断服务器程序执行时的清刷输出指令。2. 实现机制单字节限制TCP标准规定每次仅允许传输1字节的带外数据多次发送时仅最后一个字节被认定为有效OOB数据。标记位置OOB标记接收端通过指针维护一个特殊位置标记最后一个OOB数据在正常数据流中的位置。新OOB数据到达时标记会移动到新位置。缓冲区分离OOB数据通常被放入独立缓冲区如TCP的URG指针与普通数据隔离处理。3. 接收与处理信号通知如SIGURG接收进程可注册信号处理函数在OOB数据到达时被异步通知。数据读取通过recv()的MSG_OOB标志读取单字节OOB数据或通过MSG_OOB定位标记位置后处理普通数据流。4. 应用场景网络协议控制如Telnet利用带外数据传递命令前缀值255的字节在普通数据流中标记控制指令。实时中断如rlogin要求服务器通过OOB通知客户端丢弃排队数据实现快速响应。5. 注意事项协议差异不同TCP实现处理OOB的方式可能不同如粘包问题可能影响标记位置。数据覆盖风险若连续发送多个OOB字节中间数据可能被覆盖仅最后一个有效。// 典型发送模式引用[1][4]Send(sockfd,4,1,MSG_OOB);// 发送OOB数据Write(sockfd,56,2);// 发送普通数据