tcp 粘包是怎么产生的?

1、什么是 tcp 粘包?

发送方发送的多个数据包,到接收方缓冲区首尾相连,粘成一包,被接收。

2、原因

TCP 协议默认使用 Nagle 算法可能会把多个数据包一次发送到接收方。

应用程读取缓存中的数据包的速度小于接收数据包的速度,缓存中的多个数据包会被应用程序当成一个包一次读取。

3、处理方法

发送方使用 TCP_NODELAY 选项来关闭 Nagle 算法

数据包增加开始符和结束,应用程序读取、区分数据包。

在数据包的头部定义整个数据包的长度,应用程序先读取数据包的长度,然后读取整个长度的包字节数据,保证读取的是单个包且完整。

参考

[1]、什么是TCP粘包?怎么解决这个问题


【Java面试题与答案】整理推荐

  • 基础与语法
  • 集合
  • 网络编程
  • 并发编程
  • Web
  • 安全
  • 设计模式
  • 框架
  • 算法与数据结构
  • 异常
  • 文件解析与生成
  • Linux
  • MySQL
  • Oracle
  • Redis
  • Dubbo

tcp 粘包是怎么产生的?相关推荐

  1. 【Netty】入门Netty官方例子解析(三)处理一个基于流的传输 TCP粘包和拆包问题分析和解决

    关于 Socket Buffer的一个小警告 基于流的传输比如 TCP/IP, 接收到数据是存在 socket 接收的 buffer 中.不幸的是,基于流的传输并不是一个数据包队列,而是一个字节队列. ...

  2. Socket编程(4)TCP粘包问题及解决方案

    ① TCP是个流协议,它存在粘包问题 TCP是一个基于字节流的传输服务,"流"意味着TCP所传输的数据是没有边界的.这不同于UDP提供基于消息的传输服务,其传输的数据是有边界的.T ...

  3. tcp协议缓冲区溢出_关于TCP 粘包拆包,你了解吗?

    一.什么是粘包拆包? 粘包拆包是TCP协议传输中一种现象概念.TCP是传输层协议,他传输的是"流"式数据,TCP并不知道传输是哪种业务数据,或者说,并不关心.它只是根据缓冲区状况将 ...

  4. 《精通并发与Netty》学习笔记(13 - 解决TCP粘包拆包(一)概念及实例演示)

    一.粘包/拆包概念 TCP是一个"流"协议,所谓流,就是没有界限的一长串二进制数据.TCP作为传输层协议并不不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行数据包的 ...

  5. Netty详解(五):Netty TCP粘包 拆包

    1. 概述 无论是服务端还是客户端,我们读取或者发送消息的时候,都需要考虑TCP底层的粘包和拆包机制.下面我们来通过Netty来详解TCP底层的粘包和拆包机制. 2. TCP底层的粘包和拆包机制 TC ...

  6. 网络:TCP粘包问题?如何解决?

    看面经时,看到有面试官问TCP的粘包问题.想起来研一做购物车处理数据更新时遇到粘包问题,就总结一下吧. 1 什么是粘包现象 TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看, ...

  7. 6行代码解决golang TCP粘包

    什么是TCP粘包问题以及为什么会产生TCP粘包,本文不加讨论.本文使用golang的bufio.Scanner来实现自定义协议解包. 协议数据包定义 本文模拟一个日志服务器,该服务器接收客户端传到的数 ...

  8. 【Netty】TCP粘包和拆包

    一.前言 前面已经基本上讲解完了Netty的主要内容,现在来学习Netty中的一些可能存在的问题,如TCP粘包和拆包. 二.粘包和拆包 对于TCP协议而言,当底层发送消息和接受消息时,都需要考虑TCP ...

  9. Netty(二)——TCP粘包/拆包

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7814644.html 前面讲到:Netty(一)--Netty入门程序 主要内容: TCP粘包/拆包的基础知 ...

  10. TCP粘包和拆包原因

    最近研究Netty网络编程,以前项目中页遇到过数据接收过程中数据质量太差问题,很可能是TCP传输过程中问题,特此记录. 问题产生 一个完整的业务可能会被TCP拆分成多个包进行发送,也有可能把多个小的包 ...

最新文章

  1. interface declaration, parcelable declaration, AidlTokenType.import or AidlTokenType.package ...
  2. 学习《apache源代码全景分析》之过滤器部分摘录
  3. JavaFX实际应用程序:AISO HRC-Matic
  4. oracle12c 端口查看,Oracle12c修改端口号
  5. 基于人人网的简单爬虫(一)——正则表达式
  6. 虚拟机访问本地mysql_如何在本地远程连接linux虚拟机上面的mysql
  7. 如何配置数据库ODBC数据源
  8. 算法:回溯五 数组全排列permutations
  9. 计算机网络的拓扑结构
  10. win10系统的安装
  11. ORA-01950: 对表空间 USERS无权限
  12. LV的几种适配器特点
  13. shell 编程中空格的使用
  14. 云计算特点与发展方向
  15. linux ubuntu实验
  16. 大数据在金融领域主要面临哪些风险,应该怎么解决?
  17. Gopher转Rust辣眼睛语法排行榜
  18. Angular 踩坑之版本升级—— TS / Node版本
  19. ubuntu下gEDA安装及使用
  20. matlab 图像卷积的方法与应用

热门文章

  1. 小米手机无需刷入Recovery获取Root权限,卡刷包payload.bin提取boot.img文件
  2. slack 聊天机器人_无法筹集资金的Slack机器人
  3. 新版火狐 拖 功能_Firefox 3:新功能,新功能和新功能
  4. 在html中如何批量操作系统,网刻批量操作系统
  5. ws550 第三方固件_【详细图文】华为WS550固件升级方法
  6. Java8实现List转Map
  7. 台达plc控制伺服电机编程实例_三菱PLC控制伺服电机得编程实例
  8. 一步一步教你如何搭建自己的视频聚合站
  9. SSM项目实战:App信息管理平台(含源码与设计分析)
  10. 罗技鼠标 903 底部按键是干嘛的,板载模式