技术标签: 网络通信
今天在公司问老大,公司的项目底层,是使用的TCP,因为可靠,自动断线重连,在底层都实现了,但是我记得TCP也会有掉包的问题,所以这文章就诞生了——关于TCP掉包的问题,TCP是基于不可靠的网络实现可靠的传输,肯定也会存在掉包的情况。
tcp是一个“流”的协议,一个完整的包可能会被TCP拆分成多个包进行发送,也可能把小的封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。
假设客户端分别发送数据包D1和D2给服务端,由于服务端一次性读取到的字节数是不确定的,所以可能存在以下4种情况。
如果此时服务端TCP接收滑动窗非常小,而数据包D1和D2都很大,很有可能发送第五种可能,即服务端多次才能把D1和D2接收完全,期间多次发生拆包情况。(TCP接收滑动窗:是接收端的大小,随着流量大小而变化,如果我的解释还不明确,请读者自行百度,或者查阅《计算机网络》、《TCP/IP》中TCP的内容)
由于底层的TCP无法理解上层的业务逻辑,所以在底层是无法确保数据包不被拆分和重组的,这个问题只能通过上层的应用协议栈设计来解决,根据业界的主流协议的解决方案,归纳如下:
作者:orange1438 出处:http://www.cnblogs.com/orange1438/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
文章浏览阅读2.1k次。一、Throwable结构在Java中,Throwable是所有错误与异常的超类。Throwable包含两个子类:Error(错误)和Exception(异常)异常和错误的区别是:异常能被程序本身可以处理,错误是无法处理Error: 是程序无法处理的错误,表示运行应用程序中较严重问题. 大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。(如Java虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefF.._java 错误和异常
文章浏览阅读229次。一、引言在排好顺序的数组中,要查找某个元素,我们可以通过二分法来快速查找,这其实依赖的是数组的随机访问的特性,我可以通过arr[6],来访问数组中的第七个元素(因为第一个元素下标是0),因此我就可以跳跃着访问数组中任意一个元素。但如果是普通的链表,第七个元素的地址,我只能通过第六个元素知道,第六个元素的地址我只能通过第五个元素知道,以此类推,我如果要查找链表中的任意一个元素,我都需要从头遍历,就使用不了二分法查找,那么对于链表这样的数据结构的快速查询,是否有合理的解决方案?有的,把链表变为跳表!_跳表level怎么计算
文章浏览阅读223次,点赞5次,收藏3次。SM2255EH是一款应用于投光灯、工矿灯、LED照明灯等多种灯具中五段低THD、高功率因数LED线性恒流控制芯片,芯片集成了700V高压MOSFET,采用独特创新的器件工艺技术,具有优越的抗雪崩击穿及浪涌能力,在外围无保护器件时可通过600V雷击浪涌测试,内置过温保护功能,提升系统应用可靠性。其次,这种芯片集成了700V高压MOS管和JFET高压供电功能,能够轻松通过440Vac高压和4kV雷击。高可靠低THD高压线性恒流芯片是一种特殊的电子芯片,主要用于驱动高电压、低电流的LED灯串。
文章浏览阅读604次。十、rabbitmq集群10.1. clustering10.1.1. 使用集群的原因最开始我们介绍了如何安装及运行 RabbitMQ 服务,不过这些是单机版的,无法满足目前真实应用的要求。如果 RabbitMQ 服务器遇到内存崩溃、机器掉电或者主板故障等情况,该怎么办?单台 RabbitMQ 服务器可以满足每秒 1000 条消息的吞吐量,那么如果应用需要 RabbitMQ 服务满足每秒 10 万条消息的吞吐量呢?购买昂贵的服务器来增强单机 RabbitMQ 务的性能显得捉襟见肘,搭建一个 Rabbi_suggestion: check if the erlang cookie is identical for all server nodes and
文章浏览阅读892次,点赞12次,收藏30次。为了实现这种融合,必须在所有设备的驱动中设计面向操作系统内核的接口,这样的接口由操作系统规定,对一类设备而言结构一致,独立于具体的设备。融合到系统内核里的设备驱动使用的编程语言是和编写系统所用的语言一致的,例如Linux系统内核是用C语言和汇编语言写的,所以其设备驱动也是用C语言和汇编语言写的。首先,不同编程语言对应不同的编译器,而不同编程语言的编译器对函数的解释不同,会翻译成不同的符号表。函数的可执行代码位于一个DLL中,该DLL包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。
文章浏览阅读356次。天萃荷净运维DBA工程师在巡检时发现alert日志存在错误ORA-19583 ORA-27206 ORA-06512,结合mos分析原因为RMAN备份导致报错1.检查alert日志发现近期数据库出现了ORA-19583 ORA-27206 ORA-06512错误Fri Dec 30 12:22:36 2011Errors in file /oracle9/app/admin/ykcdb/udump..._ora-27206
文章浏览阅读695次。CASE Top NSD AUTOMATION DAY01 案例1:部署Ansible 案例2:Ansible ad-hoc应用一 案例3:Ansible ad-hoc应用二 ..._unsupported parameters for (file) module: register. supported parameters inc
文章浏览阅读1k次。为什么80%的码农都做不了架构师?>>> ..._维文网址
文章浏览阅读352次。come from :https://www.jianshu.com/p/a91502c00fb0YUVYUV是一种颜色空间,基于YUV的颜色编码是流媒体的常用编码方式。Y表示流明,U、V表示色度、浓度,这种表达方式起初是为了彩色电视与黑白电视之间的信号兼容。 对于图像每一点,Y确定其亮度,UV确认其彩度。Y'CbCr也称为YUV,是YUV的压缩版本,不同之处在于Y'CbCr用于数字..._16位yuv色彩
文章浏览阅读403次。卫星导航差分定位,动态相对定位关键技术_动态差分算法
文章浏览阅读349次。在.bashrc文件末尾添加:export LC_ALL="C"_std::runtime_error' what(): time is out of dual 32-bit range
文章浏览阅读349次,点赞5次,收藏4次。① 2000多本Python电子书(主流和经典的书籍应该都有了)② Python标准库资料(最全中文版)③ 项目源码(四五十个有趣且经典的练手项目及源码)④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)⑤ Python学习路线图(告别不入流的学习)