网络协议的设计(积累改进中)

本文介绍了网络协议设计的关键要素,包括长度字段以确保数据包边界,事务ID用于匹配请求与响应,命令字段区分不同类型的协议操作。还讨论了协议的请求、响应和通知三种类型,并强调了请求与应答ACK在可靠传输中的作用,以及网络断开和超时处理的考虑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做一个稍微复杂一点的APP都要涉及网络,网络通讯简单一点的是使用HTTP协议,HTTP协议是PULL的,我也蛮喜欢HTTP的,因为简单。对于需要大量交互的应用还是要用socket,所以基本上还是要自己制订协议,做过几个应用都有用到这方便的东西,所以也想总结一下,由于自己的知识有限,随着学到的东西越来越多,可能会发现这篇文章有一些错误或者需要改进的地方,我会随时更新。

协议的字段

先说说我认为一个协议必要的几个字段:
1、长度字段
TCP是一个流协议,我们想要发送一个包时,会将数据写入TCP的发送缓冲区中,至于TCP怎样发送,这是与TCP的实现和网络状况相关的,接收端收到可读通知可能一次从接收缓冲区读一部分数据也可能是全部数据,这都是不确定的。所以每一个协议都要有一个长度字段,这样接收端就可以知道某一个包是从何时开始从何时结束的,从而正确解析这个包。
2、transition id
我们把这个字段叫做事务id,为什么需要这个字段呢?
一般来说,我们发送给服务器的包,都想要服务器有一个回应,那么如何标志这个请求对应的是哪一个回应呢,使用的就是事务id,当然可能有人会说tcp是保证发包的顺序的,如果两个请求发出去然后收到两个回应的顺序应该是一样的,这样的说法虽然正确,但是它依赖于服务器的逻辑,虽然服务器收到的请求是按照顺序的,但是服务器的响应未必先返回最先接收的包;另外就是这样做客户端的逻辑处理会很麻烦,所以个人觉得事务id是很有必要的。
服务端发送的响应包也要有事务id字段,并且要与客户端请求包中的事务id相同。
3、协议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值