tcp 有对数据进行校验吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cheng6563

tcp 有对数据进行校验吗?

  •  
  •   cheng6563 2020 年 6 月 28 日 3364 次点击
    这是一个创建于 2127 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如 http 里的参数 a=1 会不会因为网络故障变成 a=2 了并且服务端正常接收?
    设计 RPC 组件的时候要不要考虑这个问题?
    19 条回复    2021-04-09 20:14:28 +08:00
    OliverDD
        1
    OliverDD  
       2020 年 6 月 28 日 via Android
    tcp 首部不是有校验和吗?校验和无法通过会重传这是网络层干的事情吧?
    zackwu
        2
    zackwu  
       2020 年 6 月 28 日   1
    应用层无需考虑这些,你要相信 TCP 连接是可靠的。

    TCP 是具有差错检测的,会自动重传。
    wysnylc
        3
    wysnylc  
       2020 年 6 月 28 日
    网络故障变成 2,笑出声
    si
        4
    si  
       2020 年 6 月 28 日
    TCP 自带校验,但是可能会被拦截修改。
    whileFalse
        5
    whileFalse  
       2020 年 6 月 28 日
    TCP 有简单的位校验和恢复能力。但如果多个位同时出错,也可能瞒过位校验,不过这种可能性很低,通常不需要考虑。
    liuminghao233
        6
    liuminghao233  
       2020 年 6 月 28 日 via iPhone
    tcp 本身校验用的 crc 不一定可靠
    但是加上 tls 的话 因为是 aead 会做校验
    一般就没问题了
    gadsavesme
        7
    gadsavesme  
       2020 年 6 月 28 日
    tcp 校验的是内容的完整性吧,丢包粘包这种。不是被劫持篡改,我是想象不出来啥网络能把请求参数 a=1 变成 a=2 的。。
    walsh
        8
    walsh  
       2020 年 6 月 28 日
    可以说是不存在完全可靠的通信系统,你重复发送数据 100 次都在同一个地方出现错误的可能性也是存在的,只是概率太小罢了。校验可以让误码率做到足够小,数据够多 TCP 也可以翻车,Amazon S3 在 2008 年 7 月就遇到过,单 bit 反转导致了一次严重线上事故。
    walsh
        9
    walsh  
       2020 年 6 月 28 日
    Amazon 吸取教训加了 check sum (非 tcp 自己的校验和,另外多加的)。你自己也可以再加一层校验,但是以一般人的数据量很难遇到这种情况罢了
    nicebird
        10
    nicebird  
       2020 年 6 月 28 日
    tcp crc+应用层校验和比如 tls aead 。
    shansing
        11
    shansing  
       2020 年 6 月 28 日
    @liuminghao233 @nicebird
    请教一下,为什么你们强调 AEAD 呢?我记得即使非 AEAD,TLS 协议也设计能保证消息完整性啊,虽然消息验证码效果可能介于 TCP checksum 跟 AEAD 就是了。
    whileFalse
        12
    whileFalse  
       2020 年 6 月 28 日
    @walsh 是数据位的单 bit 和校验位同时反转吗
    liuminghao233
        13
    liuminghao233  
       2020 年 6 月 28 日 via iPhone   1
    @shansing 因为现在都用 aead 了
    只要对数据做了 hash 就行
    比自带的 crc 要好不少
    walsh
        14
    walsh  
       2020 年 6 月 28 日
    @whileFalse 不清楚具体情况,一种可能是校验后的数据发生反转,二种可能是 checksum 也不是完全可靠的刚好碰撞上通过校验了
    gesse
        15
    gesse  
       2020 年 6 月 28 日
    楼主是不是应用层代码遇到了什么无法解决的 bug,然后想甩锅给 tcp ?( doge
    caviar
        16
    caviar  
       2020 年 6 月 28 日
    一般基本的应用不需要考虑这些,tcp 有 crc 的校验,如果是 https 的话那就更安全了,毕竟 TLS 层又做了一次。
    不过 tcp/udp 的 crc 校验确实出了名的弱,尤其是由于网络设备(例如交换机)的故障导致一直在随机 flip 一些 bit 的话,混过 crc 的概率并不低。近期读了一篇公司内部的 Postmortem 就是讲这样的事故,错误的数据被接受甚至处理了。
    opengps
        17
    opengps  
       2020 年 6 月 28 日 via Android
    TCP 虽然没问题,会丢弃不通过检验的数据重传,但是
    http 里的,很容易因为网络发生变化,很多流氓 js 就是这么注入的,注入虽然不是修改,但跟修改大同小异
    julyclyde
        18
    julyclyde  
       2020 年 6 月 28 日
    实际上我见过 bit 翻转的情况
    cubecube
        19
    cubecube  
       2021 年 4 月 9 日
    tcp 的 crc 强度不够,不能校验 2bit 及之上的翻转
    内存 bit 也可能翻转

    强一致性的系统最好在传输过程中增加 HMAC 校验数据
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2690 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 61ms UTC 12:47 PVG 20:47 LAX 05:47 JFK 08:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86