知识卡片
健壮通信要能质疑数据
内容
嵌入式通信不能默认每个字节都正确,需用校验、长度、序号、超时或重发来发现丢包和损坏。发散:协议设计的成熟度,体现在它如何处理坏消息,而不是只处理好消息。
参考来源
- 位置:《嵌入式系统设计与实践》第6章《外设通信》"校验和的类型"一节(源文件:_epub-src/OEBPS/text00098.html附近)
- 结论依据:原文说明单字节错误可用简单校验和捕获,但"这个方法无法检测到数据流中的两个字节交换……多个字节被修改的时候,错误还可以在校验和中相互抵消",因此更常用CRC来防范多字节篡改和交换类错误,体现通信设计需主动假设数据可能损坏。
- 原始内容:单字节的错误总是可以用一个简单的校验和捕获。但是,这个方法无法检测到数据流中的两个字节交换。多个字节被修改的时候,错误还可以在校验和中相互抵消。在很多通信方法中,错误会爆发,因此很多个字节会一次性同时被修改……CRC可以给多个字节被篡改和交换之类的错误提供更多的保护措施。