网络传输中的帧和payload

消息 = 数据帧(数据包)* N
数据帧 = 头 + payload

来自百度百科:记载着信息的那部分数据。通常在传输数据时,为了使数据传输更可靠,要把原始数据分批传输,并且在每一批数据的头和尾都加上一定的辅助信息,比如这一批数据量的大小,校验位等,这样就相当于给已经分批原始数据加一些外套,这些外套起到标示作用,使得原始数据不易丢失。一批数据加上它的“外套”,就形成了传输通道中基本的传输单元,叫做数据帧或者数据包(有的地方数据帧和数据包不是同一概念比如网络传输)。这些数据帧中的记录信息的原始数据就是有效载荷数据,即payload data

比如某协议规定每个应答消息由一个帧组成,约定每帧的前6个字节表示这一数据帧Frame长度,后面就是payload了,这样可以确定到底读取多少数据了而获得一个完整的消息。

上述协议的处理,在Netty 4中可以使用LengthFieldBasedFrameDecoder来做解码,解决拆包粘包问题,在Netty 3里边用的是继承FrameDecoder开发自定义帧解码器的方法。

Dubbo协议用的就是Length + payload的方式,类似的还有Http协议的分块传输、Transfer-Encoding: chunked。

posted on 2021-12-15 17:37  肥兔子爱豆畜子  阅读(458)  评论(0编辑  收藏  举报

导航