TLS 是如何确定这个数据包是一个完整的包 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
sunny1688
V2EX    程序员

TLS 是如何确定这个数据包是一个完整的包

  •  
  •   sunny1688 2022-02-26 15:11:17 +08:00 2812 次点击
    这是一个创建于 1324 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在没使用 tls 的时候,假设规定一个数据包由(包头( 4 字节)+包体)组成,这样就很好获取一个完整的包,那我的疑问就是使用 tls 后,数据经过加密了,因此数据包大小也会发生改变,之前的那套规则就行不通了,那在接收数据的时候,怎么才能知道接收到的是一个完整的加密数据包?

    14 条回复    2022-02-27 11:40:40 +08:00
    neoblackcap
        1
    neoblackcap  
       2022-02-26 15:17:16 +08:00
    流加密,加密前后信息长度是一样的。
    GGPlayer
        2
    GGPlayer  
       2022-02-26 15:18:58 +08:00
    只需要加密包体即可
    0o0O0o0O0o
        3
    0o0O0o0O0o  
       2022-02-26 15:22:48 +08:00   6
    sunny1688
        4
    sunny1688  
    OP
       2022-02-26 15:23:16 +08:00
    @neoblackcap 这个还没注意,我试下
    Biwood
        5
    Biwood  
       2022-02-26 15:25:18 +08:00
    数据完整性校验恐怕不是 TLS 来干的事情,而是 TCP 协议做的事情,一个应用层,一个传输层,TLS 协议建立在 TCP 协议之上,TCP 连接成功了,TLS 数据就没问题。有问题的话那也是证书验证不通过,密钥被篡改之类的问题,而不是丢包问题。
    rrfeng
        6
    rrfeng  
       2022-02-26 15:42:40 +08:00 via Android
    首先 TCP 是流没有包
    其次 TLS 是对数据流加密,头部不变。
    sunny1688
        7
    sunny1688  
    OP
       2022-02-26 15:44:46 +08:00
    @neoblackcap 加密前 18 字节,加密后 40 字节,不理解您说的长度不变是什么意思
    feather12315
        8
    feather12315  
       2022-02-26 15:54:18 +08:00 via Android
    多一比特跟少一比特解密后的数据不一样,这个是雪崩效应。

    换个角度想:block 类型的加密不需要关注包大小,解密后的数据包大小是固定的,协议自己验证相关的数据对不对。
    jinliming2
        9
    jinliming2  
       2022-02-26 16:12:16 +08:00   4
    你原始的 TCP 直接传裸数据时,自己可以定义包头+包体的结构。
    但是中间加了一层 TLS 之后,你自己定义的结构对于 TLS 来说都没有意义了,都看作一堆无意义的二进制流。
    然后 TLS 会自己对这一堆二进制数据流进行包装,包装成一个一个的 Application Data 帧,每个 Application Data 帧里可能包含了一个你的自定义包头+包体结构,也可能包含了两个,也可能包含了半个,具体包含多少是 TLS 层面决定的(单个帧最大 16K ,通常根据实际情况动态调整。单帧大了,可能会受 MTU 、MSS 限制而在 TCP 层面再拆分;单帧小了,则会浪费帧头的传输)。
    Application Data 帧的结构与你的包头+包体结构类似:1 字节的帧类型( 0x17 Application Data ),2 字节的 TLS 协议版本号,2 字节的数据长度,然后后面跟加密初始化向量和加密后的帧数据。(注:这里的数据长度是指后面初始化向量和**加密后**的数据的总长度,与加密前的数据多长无关)
    Rieouu
        10
    Rieouu  
       2022-02-26 16:12:54 +08:00
    包是应用层协议考虑的
    sunny1688
        11
    sunny1688  
    OP
       2022-02-26 16:22:27 +08:00
    @jinliming2 非常感谢,让我一下就明白了
    keepMyselfClam
        12
    keepMyselfClam  
       2022-02-26 22:17:20 +08:00
    之前是直接将数据放在 tcp 上传输的. 那么加上了 TLS 层之后不应该去关心或者直接处理 tls 加密后的数据.
    而应该使用 tls 解密以后的数据. 这样 TLS 层对上面是透明的,数据内容也不会变,就不会影响之前的逻辑.
    sunny1688
        13
    sunny1688  
    OP
       2022-02-27 10:42:14 +08:00
    @keepMyselfClam 是的,我有点搞混了
    ysc3839
        14
    ysc3839  
       2022-02-27 11:40:40 +08:00 via Android
    @Biwood TLS 是要保证数据完整性的,TCP 反而不需要保证。虽然 TCP 头有校验码,但是大多数网络设备都会忽略不管的。早年间 http 下载文件可能会损坏就是一个例子。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5899 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 03:19 PVG 11:19 LAX 20:19 JFK 23:19
    Do have faith in what you're doing.
    ubao 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