粘包/拆包问题——如何获取一个完整的网络包?
本文章开始讲解 Netty 通信过程中的编解码技术。编解码技术是实现网络通信的基础,让我们可以定义任何满足业务需求的应用层协议。在网络编程中,我们经常会使用各种网络传输协议,其中 TCP 是最常用的协议。我们首先需要了解的是 TCP 最基本的拆包/粘包问题以及常用的解决方案,才能更好地理解 Netty 的编解码框架。
文章目录
- 为什么有拆包/粘包
- MTU 最大传输单元和 MSS 最大分段大小
- 滑动窗口
- Nagle 算法
- 拆包/粘包的解决方案
- 消息长度固定
- 特定分隔符
- 总结
为什么有拆包/粘包
TCP 是传输协议是面向流的,没有数据包界限。客户端向服务端发送数据时,可能将一个完整的报文拆分成多个小报文进行发送,也可能将多个报文合并成一个大的报文进行发送。因此就有了拆包和粘包。
为什么会出现拆包粘包现象呢?在网络通信的过程中,每次可以发送的数据包大小是受多种因素限制的,如 MTU 传输单元大小、MSS 最大分段大小、滑动窗口等。如果一次传输的网络包数据大小超过传输单元大小,那么我们的数据可能会拆分为多个数据包发送出去。如果每次请求的网络包数据都很小,一共请求了 10000 次,TCP 并不会分别发送 10000 次。因为 TCP 采用的 Nagle 算法
粘包/拆包问题——如何获取一个完整的网络包?相关推荐
- 一个完整的网络项目,如何根据需求配置交换机?值得收藏学习
通过实例来详细讲解一个完整的网络项目从规划到交换机配置的详细过程. 一.案例要求拓扑图 小型园区中,分为两个部门,每个部门相互独立,却又通信,进行组网如下图. 二.分析 在拿到项目后,首先就是对项目进 ...
- 一个完整的MSI包的配置文件XML的内容形式和查看方法ORCA
完成的XML配置形式内容模式 <?xml version="1.0" encoding="utf-8"?> <Wix><Produ ...
- 一个完整的网络访问过程的分析(从计算机网络的角度)
首先,我们要明确上网需要的四个参数(本机),分别是: 1.本机的ip地址 2.子网掩码 3.网关的ip地址 4.DNS的ip地址 这里,我以自己的电脑为例(我的电脑用的是配置ip,当然大多数用的都是动 ...
- tcpdump抓两个网卡的包_如何抓取网络包?两个方法告诉你
本文转载自[微信公众号:手机电脑双黑客,ID:heikestudio],经微信公众号授权转载,如需转载与原文作者联系 世界那么大,谢谢你来看我!!关注我你就是个网络.电脑.手机小达人 显形" ...
- java获取一个tcp包大小_Java网络编程之TCP粘包拆包
TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想象河里的流水,他们是连成一片的,其间并没有分界线.TCP底层并不了解上层业务数据的具体含义,他会根据TCP缓冲区的实 ...
- 《精通并发与Netty》学习笔记(13 - 解决TCP粘包拆包(一)概念及实例演示)
一.粘包/拆包概念 TCP是一个"流"协议,所谓流,就是没有界限的一长串二进制数据.TCP作为传输层协议并不不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行数据包的 ...
- 【Netty入门】TCP 粘包/拆包问题产生原因
TCP粘包/分包问题的由来 因为TCP是以流的方式来处理数据,一个完整的包可能会被TCP拆分成多个包进行发送,也可能把小的封装成一个大的数据包发送. 这样说可能比较抽象,下面举例来说明TCP拆包/粘包 ...
- Netty中的粘包拆包
文章目录 一.问题描述: 1. 什么是粘包.拆包 2. 粘包拆包演示 二.解决思路: 三.解决方案: 一.问题描述: 1. 什么是粘包.拆包 粘包和拆包是TCP网络编程中不可避免的,无论是服务端还是客 ...
- Netty详解(五):Netty TCP粘包 拆包
1. 概述 无论是服务端还是客户端,我们读取或者发送消息的时候,都需要考虑TCP底层的粘包和拆包机制.下面我们来通过Netty来详解TCP底层的粘包和拆包机制. 2. TCP底层的粘包和拆包机制 TC ...
最新文章
- Java NIO系列教程(十二) Java NIO与IO
- Angular 中得 scope 作用域梳理
- [WUSTCTF2020]level4
- C#--WinForm项目主窗体设计
- easyui combobox开启搜索自动完成功能
- 理论 | 教你彻底学会Java序列化和反序列化
- python flask框架是什么_Python Flask框架详解
- URL,URLConnection,HttPURLConnection的使用
- 华为的鸿蒙系统是安卓吗,华为鸿蒙,一个本属于2025年的产品
- 25款.NET开发工具
- 实验室计算机系统权限管理规程,计算机辅助建筑设计实验室使用规范(试行)...
- linux查看耗费流量的进程--iftop
- C++实现离散数学之真值表(试着自写头文件)
- 免费版的进销存管理软件可以用吗
- Windows API——SHFileOperation——文件操作
- web前端面试题-1
- 物联网大赛“千里挑一”,华为、上海交大共铸人才引擎
- 华为3COM正式更名为『杭州华三通信技术有限公司(H3C)』
- ANE总结(Android+iPhone)
- jquery append添加的元素用jquery无法获取到
热门文章
- 桌面只计算机图标发白,Win7电脑桌面图标变成白色如何解决?
- 2020德勤面试开始了吗_2020秋招,德勤群面par面,面试小白怎么准备?
- 看过的一篇有关Linux的文章
- 第七章 MyBatis的核心配置
- 你知道怎样用Excel打印【条形码】吗?
- SCI投稿经验分享:成功发表一篇中科院2区智能物联网类SCI真的不难
- python执行脚本失败恢复环境_Textmate 执行python脚本的错误:env: python3: No such file or directory...
- 给大家分享一个选择困难症必备点餐方法吧 吃点什么好呢 早餐 午餐 晚餐
- 计算机中丢失VComp140.dll
- 【Webpack】1362- 通过插图来理解webpack