TCp传输粘包问题
解决TCP网络传输“粘包”问题 | |
|
|
当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API)。TCP/IP传输层有两个并列的协 议:TCP和UDP。其中TCP(transport control protocol,传输控制协议)是面向连接的,提供高可靠性服务。UDP(user datagram protocol,用户数据报协议)是无连接的,提供高效率服务。在实际工程应用中,对可靠性和效率的选择取决于应用的环境和需求。一般情况下,普通数据 的网络传输采用高效率的udp,重要数据的网络传输采用高可靠性的TCP。 在应用开发过程中,笔者发现基于TCP网络传输的应用程序有时会出现粘包现象(即发送方发送的若干包数据到接收方接收时粘成一包)。针对这种情 况,我们进行了专题研究与实验。本文重点分析了TCP网络粘包问题,并结合实验结果提出了解决该问题的对策和方法,供有关工程技术人员参考。 一、TCP协议简介 TCP是一个面向连接的传输层协议,虽然TCP不属于iso制定的协议集,但由于其在商业界和工业界的成功应用,它已成为事实上的网络标准,广泛应用于各种网络主机间的通信。 作为一个面向连接的传输层协议,TCP的目标是为用户提供可靠的端到端连接,保证信息有序无误的传输。它除了提供基本的数据传输功能外,还为保证可靠性采用了数据编号、校验和计算、数据确认等一系列措施。它对传送的每个数据字节都进行编号,并请求接收方回传确认信息(ack)。发送方如果在规定 的时间内没有收到数据确认,就重传该数据。数据编号使接收方能够处理数据的失序和重复问题。数据误码问题通过在每个传输的数据段中增加校验和予以解决,接收方在接收到数据后检查校验和,若校验和有误,则丢弃该有误码的数据段,并要求发送方重传。流量控制也是保证可靠性的一个重要措施,若无流控,可能会因接收缓冲区溢出而丢失大量数据,导致许多重传,造成网络拥塞恶性循环。TCP采用可变窗口进行流量控制,由接收方控制发送方发送的数据量。 TCP为用户提供了高可靠性的网络传输服务,但可靠性保障措施也影响了传输效率。因此,在实际工程应用中,只有关键数据的传输才采用TCP,而普通数据的传输一般采用高效率的udp。 二、粘包问题分析与对策 TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。 出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一包数据。若连续几次发送的数据都很少,通常TCP会根据优化算法把这些数据合成一包后一次发送出去,这样接收方就收到了粘包数据。接收方引起的粘包是由于接收方用户进程不及时接收数据,从而导致粘包现象。这是因为接收方先把收到的数据放在系统接收缓冲区,用户进程从该缓冲区取数据,若下一包数据到达时前一包数据尚未被用户进程取走,则下一包数据放到系统接收缓冲区时就接到前一包数据之后,而用户进程根据预先设定的缓冲区大小从系统接收缓冲区取数据,这样就一次取到了多包数据(图1所示)。 图1 图2 图3 图4 图5 |
TCp传输粘包问题相关推荐
- 解决TCP网络传输“粘包”问题
当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport contro ...
- UNIX网络编程——解决TCP网络传输“粘包”问题
当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport ...
- 解决TCP网络传输粘包问题
作者:杨小平 王胜开 文章出处:http://blog.csdn.net/michelsn/archive/2008/01/02/2009894.aspx 当前在网络传输应用中,广泛采用的是TCP/ ...
- TCP通信粘包问题分析和解决
在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的 ...
- TCP数据粘包的处理
1. 背锅侠 TCP 在前面介绍套接字通信的时候说到了 TCP 是传输层协议,它是一个面向连接的.安全的.流式传输协议.因为数据的传输是基于流的所以发送端和接收端每次处理的数据的量,处理数据的频率可以 ...
- 「 计算机网络 」TCP的粘包拆包问题
「 计算机网络 」TCP的粘包/拆包问题 参考&鸣谢 大病初愈,一分钟看懂TCP粘包拆包 雷小帅 TCP 的粘包拆包以及解决方案 一乐说 文章目录 「 计算机网络 」TCP的粘包/拆包问题 一 ...
- 面试题:聊聊TCP的粘包、拆包以及解决方案
TCP的粘包和拆包问题往往出现在基于TCP协议的通讯中,比如RPC框架.Netty等.如果你的简历中写了类似的技术或者你所面试的公司使用了相关的技术,被问到该面试的几率会非常高. 今天这篇文章就带大家 ...
- socket Php 粘包,python3 tcp的粘包现象和解决办法解析
这篇文章主要介绍了python3 tcp的粘包现象和解决办法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 服务器端 import socket ...
- 关于TCP的粘包问题
简单的说就是通过TCP协议发送了多条独立的数据,但接收的时候,有些数据不幸的合并成了一个.比如客户端向服务器发送两个命令:"Start"."Parameter[x.x.x ...
最新文章
- 干货丨三大特征选择策略,有效提升你的机器学习水准
- 程序员大危机,工作难逃监视系统“法眼”!
- linux下磁盘分区
- 网站外链如何发布才能更快的得到高排名呢?
- 【新星计划】MATLAB-冒号:符号详解
- Qt-ros插件:创建工程,编译实现操控小乌龟(二)
- 算法描述怎么写_管件材料描述怎么写
- 树,森林,二叉树的互相转换
- Keras与PyTorch全方位比较 哪一个深度学习框架更适合初学者?
- 湖北2018年GDP同比增长7.8% 进出口增速有所回升
- flask ai 简单语音对话
- CSRF与XSS攻击的原理与防范
- 熊猫烧香病毒的分析报告
- python运维都做些什么_python运维工程师主要干什么
- 【Unit 1】Python以及Pycharm的安装与设置
- C语言---学生奖学金评定系统设计
- 【5】天猫精灵开放平台实验—基于天气查询模板创建开发屏显页面技能
- 强大的电子书管理软件Calibre
- 十道必问的软件测试面试题(含答案解析)
- DateDiff 数据库时间差函数