博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第四章 TCP粘包/拆包问题的解决之道---4.1---
阅读量:5805 次
发布时间:2019-06-18

本文共 662 字,大约阅读时间需要 2 分钟。

  4.1 TCP粘包/拆包

    TCP是一个“流”协议,所谓流,就是没有界限的一串数据。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。

    

    4.1.1 TCP粘包/拆包问题说明

      4.1.2 TCP粘包/拆包发生的原因

        问题产生的原因有三个,分别如下:

        ⑴ 应用程序write写入的字节大小大于套接口发送缓冲区大小;

        ⑵ 进行MSS大小的TCP分段

        ⑶ 以太网帧的payload大于MTU进行IP分段。

      4.1.3 粘包问题的解决策略

        由于底层的TCP无法理解上层的业务数据,所以底层是无法保证数据包不被拆分和重组的,这个问题只能通过上层的应用协议栈来解决,根据业界的主流协议的解决方法,可以归纳如下:

        ⑴ 消息定长,例如每个报文的大小为固定长度200字节,如果不够,空位补空格;

        ⑵ 在包尾增加回车换行符进行分割,例如FTP协议;

        ⑶ 将消息分为消息头和消息体,消息头中包含表示信息总长度(或者消息体长度)的字段,通常设计思路为消息头的第一个字段使用int32来表示总长度;

        ⑷ 更复杂的应用层协议。

        啦啦啦

啦啦啦

啦啦啦

    

转载地址:http://wwubx.baihongyu.com/

你可能感兴趣的文章
Js 对数值进行舍入
查看>>
centos7 NFS 共享openfiler
查看>>
关于Java的线程状态
查看>>
Linux 卷管理详解[ pv vg lv] —— 之一
查看>>
java操作OpenLdap示例
查看>>
Office缓慢
查看>>
6个原因说服你选择PostgreSQL 9.6
查看>>
ubuntu 安装QQ Wine QQ7.8
查看>>
CentOS7实现双机互信
查看>>
你真的了解 “事务与并发”吗? 事务与并发
查看>>
java优化
查看>>
使用System.Threading的Timer&Quartz.net两种方式实现定时执行任务,防止IIS释放timer对象...
查看>>
关于2012安装Exchange2013中由于引发了加密异常,无法授予网络服务访问包含指纹错误...
查看>>
阿里45K高级Java岗,必备技能清单
查看>>
WSFC2016 工作组部署模型
查看>>
PyQt5开发小记,如何实现程序启动画面和退出提示?
查看>>
djcelery入门:实现运行定时任务
查看>>
爬取OSC乱弹的歌曲
查看>>
终于找到一个方法可以使用EF的时候动态指定数据库路径了
查看>>
PHP 代码加密
查看>>