mina中的Tcp粘包,半包的问题
TCP 问题 粘包 MINA
2023-09-27 14:22:12 时间
一 tcp与udp
1.1 tcp与udp的概念
TCP(transport control protocol,传输控制协议)是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的socket,因 此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。即面向流的通信是无消息保护边界的。
udp: 用户数据报协议)是无连接的,面向消息的,提供高效率服务。不会使用块的合并优化算法,, 由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样,对于接收 端来说,就容易进行区分处理了。 即面向消息的通信是有消息保护边界的。
1.2 tcp的粘包,半包
1.3 原因
1.4 解决办法
1.定长的方式:数据不够,用数据符号填充,在解包的时候,判断满足长度解包。
2.特殊字符开头和结尾,作为界定范围。
3.消息报文:制定固定格式:头部(长度,版本号)+消息体
相关文章
- TCP/IP入门(3) --传输层
- 当TIME_WAIT状态的TCP正常挥手,收到SYN后…
- java基础----->TCP和UDP套接字编程
- Linux网络编程(四)-协议04:TCP/UDP【TCP:安全可靠、丢包重传、面向连接、电话模型】【UDP:不可靠(可设计应用层使其可靠)、丢包不重传、不面向连接、邮件模型、快、局域网内用丢包少】
- linux的TCP连接数量最大不能超过65535个吗,那服务器是如何应对百万千万的并发的?
- TCP 粘包问题浅析及其解决方案
- TCP、UDP协议间的区别(转)
- TCP IP入门经典(第5版)
- 运输层TCP/UDP
- python之tcp自动重连
- windows 网络编程 tcp和udp
- TCP传输小数据包效率问题
- TCP异常关闭研究分析
- 基于TCP的Socket连接【Delphi版】
- 你知道吗?如何学习TCP协议
- socket使用TCP协议时,send、recv函数解析以及TCP连接关闭的问题
- 解决TCP网络传输“粘包”问题
- 使用wireshark分析tcp/ip报文之报文头
- 一次对server服务大量积压异常TCP ESTABLISHED链接的排查笔记