| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> TCP粘包半包问题和解决,成为阿里P7Android架构师到底有多难 -> 正文阅读 |
|
[网络协议]TCP粘包半包问题和解决,成为阿里P7Android架构师到底有多难 |
什么是TCP粘包半包?首先,我们知道,TCP/IP通常被认为是一个四层协议系统,包括链路层,网络层,传输层,应用层。其中TCP在传输层,IP在网络层,我们一般的应用程序如浏览器,使用的HTTP协议则工作在应用层。 在TCP/IP规范里,数据是分包发送的,每一层都有自己的分包格式和大小。比如我们通过浏览器上网时,在我们这边会发生什么事情呢? 网络中传输的数据包由两部分组成:一部分是本层协议所要用到的首部,另一部分是上一层传过来的数据。首部的结构由协议的具体规范详细定义。在数据包的首部,明确标明了协议应该如何读取数据。反过来说,看到首部,也就能够了解该协议必要的信息以及所要处理的数据。于是在通信上,我们发出的任何一个请求都要经过以下几步: ① 应用程序处理 ② TCP 模块的处理 ③ IP 模块的处理 ④ 网络接口(以太网驱动)的处理 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dVDG36xk-1630586587732)(TCP粘包半包问题和解决\数据包发送流程.png)] 但是在实际发送时有可能发生所谓的粘包和半包这种现象,比如: 假设客户端分别发送了两个数据包D1和D2给服务端,可能存在以下4种情况。 (1)服务端分两次读取到了两个独立的数据包,分别是D1和D2,没有粘包和半包; (2)服务端一次接收到了两个数据包,D1和D2粘合在一起,被称为TCP粘包; (3)服务端分两次读取到了两个数据包,第一次读取到了完整的D1包和D2包的部分内容,第二次读取到了D2包的剩余内容,这被称为TCP半包; (4)服务端分两次读取到了两个数据包,第一次读取到了D1包的部分内容D1_1,第二次读取到了D1包的剩余内容D1_2和D2包的整包,这样同时存在着TCP粘包和TCP半包。 TCP粘包半包产生的原因从前面的描述我们知道,TCP/IP每一层都有自己的分包格式和大小,每一层都存在着将上一层发给自己的报文按本层格式进行拆分的可能。 所以,细分起来,原因包括: 1、进行MSS大小的TCP分段。MSS是最大报文段长度的缩写,它是TCP报文段中的数据字段的最大长度。数据字段加上TCP首部才等于整个的TCP报文段。 2、如果IP层有一个数据包要传,而且数据的长度比链路层的大,那么IP层就会进行分片,把数据包分成若干片,以方便链路层进行传输。注意,分片可以发生在原始发送端主机上,也可以发生在中间路由器上。 【附】相关架构及资料CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》tps://codechina.csdn.net/m0_60958482/android_p7)**
|
|
网络协议 最新文章 |
使用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:32:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |