TCP 为啥是可靠的?
我说的可靠是指差错、如比特翻转的,而不是不可达之类的。 1.TCP 包校验和只用 16 个比特,我们一般的摘要都要 128 以上来保证可靠,所以 TCP 包是否也会出现差错,不是那么的可靠? 2.如果一问是肯定的,那么基于 TCP 的、比如 HTTP 有额外做校验吗?
我说的可靠是指差错、如比特翻转的,而不是不可达之类的。 1.TCP 包校验和只用 16 个比特,我们一般的摘要都要 128 以上来保证可靠,所以 TCP 包是否也会出现差错,不是那么的可靠? 2.如果一问是肯定的,那么基于 TCP 的、比如 HTTP 有额外做校验吗?
不过像目前每层都有校验的情况下, 某些校验可能是多余的
但不能保证你的数据一定是正确的,从安全方案的角度来看,你还需要进行签名,摘要,授权,加密 /…,才能保证数据传输不会被监听 /篡改 /替换
任何事情都有例外。md5 也有碰撞。sha1,sha256 这些,任何哈希算法,只要是校验长度小于原文长度,因为不具备完整信息,都是有可能出错的,最终反映在数学上都是一个多对一的映射。校验长度大于或等于原文长度又没有太大的实用价值。
一般来说我们做了 md5,而且 md5 也对了,就认为是没有问题的。有些下载网站提供多种哈希供校验,也是如此。
如果链路层,TCP 层的内容都错了, 但是两层的 CRC 又同时都是能通过的,这个概率在可靠性要求不高的场合可以忽略不计。
2.HTTP 没有,HTTPS 有
所有都是概率的问题,在应用层面算概率,在物理层面上算信噪比;都没有绝对可靠的;除了数学。
最重要的是 CRC 在硬件里实现非常简单。所以这是一种高性能低成本的办法。如果你需要 /愿意付出更多性能成本,你可以在上层实现更复杂的加密 /校验。比如 TLS