应用层协议设计

C/C++Linux服务器开发/后台架构师知识体系整理

应用协议概述

在这里插入图片描述

  • 在对外提供网络服务时,服务端和客户端需要遵循同一套数据 通讯协议
  • 每个系统不一样,提供的服务也不一样,因此每个系统都要有 自己的应用协议
  • 流式传输解决粘包和半包问题

一个协议设计案例

在这里插入图片描述

具体的代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

协议设计的种类

二进制协议
比如网络通信运输层中的tcp协议,rtsp,rtmp,rtp。

明文的文本协议
比如应用层的http、redis协议。

混合协议(二进制+明文)
很多企业产品都采用这个。

固定边界协议
能够明确得知一个协议报文的长度,这样的协议易于解析,比如tcp协议。

模糊边界协议
无法明确得知一个协议报文的长度,这样的协议解析较为复杂,通常需要通过某些 特定的字节来界定报文是否结束,比如http协议。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
https://cloud.tencent.com/developer/article/1038381

redis协议

https://xargin.com/redis-protocal/
在这里插入图片描述

协议设计的注意事项

大小端

在这里插入图片描述

字节对齐

任何变量,不管是堆变量还是栈变量都对应着操作系统中的一块内存,由于内存对齐的要求程序中
的变量并不是紧凑存储的,例如一个c语言的结构体Test在内存中的布局可能如下图所示。

struct Test
{
char a; char b; int32_t c;
};

在这里插入图片描述

结构体操作的变量便宜

在这里插入图片描述

协议设计的优劣评判

Netyy中的实现

高效的
快速的打包解包减少对cpu的占用,高数据压缩率降低对网络带宽的占用。

简单的
易于人的理解、程序的解析。

易于扩展的
对可预知的变更,有足够的弹性用于扩展。

容易兼容的
• 向前兼容,对于旧协议发出的报文,能使用新协议进行解析,只是新协议支持的新功能不能使用。
• 向后兼容,对于新协议发出的报文,能使用旧协议进行解析,只是新协议支持的新功能不能使用。

架构师体系

在这里插入图片描述


Linux服务器开发/高级架构师 系统性学习公开课:https://ke.qq.com/course/417774?flowToken=1031343
Linux服务器开发/架构师面试题、学习资料、教学视频和学习路线图(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享有需要的可以自行添加学习交流群960994558

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值