| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> TCP粘包 -> 正文阅读 |
|
[网络协议]TCP粘包 |
什么是TCP粘包?TCP粘包就是发送方发送的若干个数据到达接受方时粘成了一个包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。 举个例子: 假如发送方发送了两个数据包A和B。其中A的消息内容为 如何解决粘包问题由于TCP是面向字节流的协议,因此用户层协议是需要将一个个包拆开的。比如常见的HTTP协议,其就不用担心粘包和拆包的问题。但是对于自己实现一个TCP server的话,需要在应用层处理该问题。好在,前人已经给出了很多相关的经验去处理该问题。下面给出三种常见的方式,这也是Netty的三种decode方式。 固定包长度以本文的AB粘包为例。假设我们设计一个TCP server,第一种解决粘包问题的方法就是 固定每个包长为5字节。发送方和接受方约定好。这样接受方无论接受到的是 指定分割符比如 我们指定两个不同语义包的分割符为 固定长度请求头第三种方式 是 采用请求头+请求体的方式。其中请求头是固定字节的,比如4个字节。 如包结构为: header:content 5 : hello 这样接受方每次先读取请求头的四个字节,得到请求体的长度,然后再读取请求体长度,这样就得到一个语义包的内容了。 总结TCP粘包一般在设计私有应用层协议时需要注意。如果采用流行的HTTP或者其他RPC协议时,其内部网络框架会帮使用者处理好该问题。不过这对于理解网络传输本身还是有益的。 ? |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 21:01:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |