课程名称:(打造简历金牌项目)Vue+Go 开发企业级微服务网关项目
课程章节:2-7
课程讲师:牛儿吃草
课程内容:
为什么会出现粘包拆包?
- 应用程序写入程序大于socket套接字缓冲区大小,这将会发生拆包。
- 应用程序写入程序小于socket他借字缓冲区大小,网卡将应用多次写入的数据发送到网络上,这将会发生粘包。
- 进行MSS(最大报文长度)大小的IP分段,当TCP报文长度-TCP头部长度>MSS的时候将发生拆包。
- 接收方法不及时读取套接字数据,这将发生粘包。
如何获取完整应用的数据报文
- 使用带消息头的协议,头部写入包长度,然后再读取包内容。
- 设置定长消息,每次读取定长内容,长度不够时空位补固定字符。
- 设置消息边界,服务端从网络流中按消息边界分离出消息内容, 一般使用’\n’
- 更为复杂的协议,例如json,protobuf
课程收获:
今天学习了网络协议的粘包,拆包相关内容,明确了粘包拆包产生的原因,以及如何获取完整应用的数据报文,老师以思维导图的形式将获取应用完整报文的代码实现步骤以思维导图的形式展现,使得编程实现的思路更加清晰,明了。