我想知道TCP校验和机制是否可以确保TCP数据与原始数据相同,是否存在校验和不起作用的条件?我没有找到任何关于此的参考。
我有一个例子可以说明我的意见。
原始TCP数据为11111111 11111111 00000000 00000000 ......
,在物理层上旅行时会更改为011111111 11111111 10000000 00000000 ......
。
结束方将具有相同的校验和,它将接受错误的TCP数据。
我对网络很陌生。
答案 0 :(得分:2)
数据损坏总是很有可能保留校验和,或者也会破坏校验和,以便损坏的校验和与损坏的数据匹配。需要比TCP提供更高级别保证的应用程序必须添加自己的保护。
当然,这不会对恶意攻击者提供任何保护。如果他们可以拦截和修改数据包,他们可以轻松地调整数据和校验和。
答案 1 :(得分:1)
此处文章中的更多详细信息:http://criticalindirection.com/2016/02/22/tcp-checksum-the-fault-in-the-stars/
链接的一些摘录:
Following are the scenarios when the data gets corrupted while the checksum stays correct [2].
Reordering of 2 byte words:
Data: 0x01 0x02 0x03 0x04
Corrupted: 0x03 0x04 0x01 0x02
Inserting zero-valued bytes:
Data: 0x01 0x02 0x03 0x04
Corrupted: 0x01 0x02 0x00 0x00 0x03 0x04
Deleting zero-valued bytes:
Data: 0x01 0x02 0x00 00 0x03 0x04
Corrupted: 0x01 0x02 0x03 0x04
Replacing a string of sixteen 0’s with 1’s or 1’s with 0’s:
Data: 0xff 0xff 0xe9 0x1a 0x00 0x00 0x21
Corrupted: 0x00 0x00 0xe9 0x1a 0xff 0xff 0x21
Multiple errors which sum to zero:
Data: 0x01 0x02 0x03 0x04
Corrupted: 0x01 0x03 0x03 0x03
根据Stone J.等人的说法。人。 [1],1 1600万到10亿 数据包通过TCP校验和取消选中为false-positive。这个 对于网络上的1500 MTU数据帧,表示1个未检测到的TCP 腐败发生在大约20GB到1.2TB的数据中。