什么是TCP粘包,tcp粘包
如何实现一个分布式RPC框架?
1.定义:明确下RPC是什么?PRC全称是Remote Procedure Call,是进程间的一种通信方式。2.解决的问题进程间调用就像本地调用函数一样简单,而业务层不需要去关心通信的细。3.组成在Nelson的论文Implementing Remote Procedurr Calls有论述,见图1User 调用方User-Stub 消息拼装,编解码RPCRuntime 发送,接受消息Service-Stub 消息拼装,编解码Server 服务方4.核心实现从图中可以看出我们需要实现Stub和RPCRuntime的功能。
Stub:主要功能是消息格式怎么定义和编解码。消息格式:一般需要设计消息头和消息体,当然越简洁越好,提高传输效率编解码:二进制最高效,可以使用Protocol Buffers,Thrift。当然也可以使用可读性比较好的JSON,XML。RPCRuntime主要负责通信,这里涉及到选择什么IO模型,BIO,NIO还是AIO,可以使用netty来实现NIO功能。
5.开源实现了解开源实现,更能促进自研的成熟稳定。当然看需求是否需要自研,一般开源就可以满足需求了。比较好的开源实现有Dubbo,brpc,grpc,Thrift,Hessian等6.小结虽然RPC说起来只是进程间的通信,但是RPC服务怎么注册,发现,路由这些都还是需要考虑的。再者毕竟是网络传输,就有可能出现延迟,丢包的情况,容错性也需要多考虑考虑。
这里再把RPC调用描述的全一点,见图2。图中的clinet,sever只和agent交互,agent就包含了Stub和RPCRuntime的功能,一般这里的agent实现为一个jar包,和应用程序部署在一起。现在Service Mesh也越来越成熟了,Service Mesh把agent独立为一个进程部署(必须和业务同一机器),这样降低了耦合性,同时业务和平台独立,开发迭代速度也更快。
怎么解决TCP网络传输「粘包」问题?
TCP粘包是指发送方发送的多个数据包到接收方后粘连在一起,导致数据包不能完整的提现发送的数据。 TCP协议TCP是一个面向连接的传输层协议,不属于ISO制定的协议集。TCP协议在商业界和工业界的成功应用,使它成为事实上的网络标准,广泛应用于各种网络主机间的通信。TCP目标是为用户提供可靠的端到端连接,保证信息有序无误的传输。
TCP为确保可靠性采用了数据编号、校验和计算、数据确认等一系列措施。TCP对传送的每个数据字节都进行编号,并请求接收方回传确认信息(ACK)。发送方如果在规定的时间内没有收到数据确认,就重传该数据。 数据编号使接收方能够处理数据的失序和重复问题。数据误码问题通过在每个传输的数据段中增加校验和予以解决,接收方在接收到数据后检查校验和,若校验和有误,则丢弃该有误码的数据段,并要求发送方重传。
流量控制也是保证可靠性的一个重要措施,若无流控,可能会因接收缓冲区溢出而丢失大量数据,导致许多重传,造成网络拥塞恶性循环。TCP采用可变窗口进行流量控制,由接收方控制发送方发送的数据量。这些可靠性保障措施为用户提供了高可靠性的网络传输服务,但也影响了传输效率。在实际工程应用中,只有关键数据的传输才采用TCP,而普通数据的传输一般采用高效率的UDP。
UDP不会出现粘包问题。UDP支持的是一对多的模式,不会使用块的合并优化算法,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(包含消息来源地址,端口等信息),接收端很容易就能进行区分处理了。粘包出现原因出现粘包现象的原因有很多方面,它既可能由发送方造成的,也可能是由接收方造成的。
发送方原因TCP需要尽可能高效和可靠,默认采用Nagle算法,发送方往往要收集到足够多的数据后合并相连的小数据包,才发送一包数据,这样接收方就收到了粘包数据。但接收方并不知晓发送方合并数据包,并数据包的合并在TCP协议中是没有分界线的,就会导致接收方不能还原其本来的数据包。接收方原因TCP是基于“流”的。
网络传输数据的速度可能会快过接收方处理数据的速度,这时候就会导致,接收方在读取缓冲区时,缓冲区存在多个数据包。在TCP协议中接收方是一次读取缓冲区中的所有内容,就不能反映原本的数据信息。粘包情况有两种:一种是粘在一起的包都是完整的数据包; 一种是粘在一起的包有不完整的包; 不是所有的粘包现象都需要处理如果传输的数据为不带结构的连续流数据(如文件传输),就不必把粘连的包分开(简称分包)。
但实际工程应用中一般为带结构的数据,这时就需要做分包处理。在处理定长结构数据的粘包问题时,分包算法比较简单;在处理不定长结构数据的粘包问题时,分包算法就比较复杂。特别是粘在一起的包有不完整的包的粘包情况,一包数据内容被分在了两个连续的接收包中,处理起来难度较大。实际工程应用中应尽量避免出现粘包现象。为了避免粘包现象,可采取以下几种措施:(1)发送方引起的粘包可通过编程设置来避免。
如:PUSH标志是TCP提供了强制数据立即传送的操作指令,TCP软件收到该操作指令后,就立即将本段数据发送出去,而不必等待发送缓冲区满。缺点:虽然可以避免发送方引起的粘包,但关闭了Negle优化算法,降低了网络发送效率,影响应用程序的性能,一般不建议使用。(2)接收方引起的粘包,可通过优化程序设计、精简接收进程工作量、提高接收进程优先级等措施来及时接收数据,尽量避免出现粘包现象。
缺点:只能减少出现粘包的可能性,但并不能完全避免粘包,当发送频率较高或某个时间段数据包到达接收方较快,接收方还是有可能来不及接收,导致粘包。(3)由接收方控制,将一包数据按结构字段,人为控制分多次接收,然后合并,通过这种手段来避免粘包。缺点:应用程序的效率较低,对实时应用的场合不适合。一种比较周全的对策是:接收方创建一预处理线程,对接收到的数据包进行预处理,将粘连的包分开。
微服务调用为什么用RPC框架,http不更简单吗?
简单点,HTTP是协议,RPC是概念!实现RPC可以基于HTTP协议(Feign),TCP协议(Netty),RMI协议(Soap),WebService(XML—RPC)框架。传输过程中,也因为序列化方式的不同,又有一些框架和协议,比如Dubbo中的Dubbo协议,gRpc—Protobuf序列化协议等等。
其实,都是基于远程调用的概念,何为远程调用?重点是,RPC就是远程调用,远程调用就是客户端把调用的接口,参数,参数类型,方法,返回值,返回值类型等(这些称为方法签名),通过如上的协议,发送给服务端,告知服务端需要调用的接口方法,这个过程就是RPC的实现过程!HTTP和RPC是不同层面的两个东西!性能方面,HTTP本身是基于TCP协议的,属于应用层协议,所以HTTP协议本身在实现过程中就会占用大量的资源(内存,带宽等),性能上肯定没有通过TCP直接实现RPC协议快,不管HTTP如何优化肯定的是不如TCP的!而TCP则是依靠字节码,现在普遍采用的是将客户端调用的接口信息,序列化的方式发送给服务端,序列化框架又包含很多(Hession,Protobuf,Kryo等等,序列化性能最高的是Kryo,序列化后字节码最小的是Protobuf),序列化后的字节码越小,占用带宽越少,序列化时间越短,线程IO等待时间就会越小。
为什么有很多出名开源的C/C 方面的高性能网络库,比如libevent,boost-asio,有些企业还要自己写?
到底是自己造轮子,还是直接使用开源库,我想很大程度上取决去部门老大的个人喜好。曾几何时,C 开发者都热衷于重复造轮子,那么为什么还有的企业要自己写呢?下面谈谈自己的看法:1)项目初期并不知道有这个库的存在,后面也懒得再引入。2)很多第三方库依赖的其他第三方库都比较多,为了引入A库,不得不引入B、C、D库,这无疑增加了部门成员的学习成本。
3)第三方开源库一般更新较频繁,明知有Bug了,你们要不要更新呢?基础库的更新无疑要花费更多的开发时间、测试时间。4)让项目整体可控性更强,一旦引入的开源库出现问题,而项目组有对它不熟悉,那么将是灾难性的。5)已有开源库过于复杂,学习成本高,组内成员水平参差不齐。最后附一张自己前段时间研读的书籍。本文为作者“一个程序员的奋斗史”悟空问答原创文章,未经允许转载、抄袭必究!。
本文地址:http://www.55jiaoyu.com/show-732476.html
本文由合作方发布,不代表展全思梦立场,转载联系作者并注明出处:展全思梦
推荐文档
- 11.湖南单招录取分数线预测2022(湖南单招录取分数线预测往届生比应届生低吗)
- 12.死而后已的已是什么意思,死而后已的已是什么用法
- 13.溶溶是什么意思溶溶的解释是什么(溶かす溶ける溶く区别)
- 14.往年开业贺词祝福语简短,养生馆开业贺词祝福语
- 15.天门职业学院(天门职业学院是中专还是大专)
- 16.爱屋及乌什么意思-男生说爱屋及乌什么意思
- 17.南京信息工程大学滨江学院排名多少?为什么说本校看不起滨江学院
- 18.圣诞节的由来英文(圣诞节的由来英文版50字带翻译)
- 19.什么什么什么魂的成语(什么什么什么魂的成语有哪些)
- 20.动物医学专业就业前景(中国农业大学动物医学专业就业前景)
- 21.PDD现在为什么不直播了?
- 22.任尔东西南北风前一句是什么(任尔东西南北风的前一句是啥来)
- 23.广东的一本大学有哪些学校?广东省一本大学名单排名(2023参考)
- 24.江苏南通职业大学(江苏南通职业大学有哪些专业)
- 25.天津高考作文(天津高考作文跑题了能给多少分)
- 26.上海财大录取分数线预测(上海财大录取分数线预测2022是多少分)
- 27.四级成绩什么时候出(四级成绩什么时候出2023年三月份的)
- 28.表达思念爱人的诗成语(表达思念爱人的诗成语有哪些)
- 29.2013会考成绩查询(2013会考成绩查询入口网站官网)
- 30.五年级牛郎织女缩写作文
- 31.简单一点的辞职信5篇
- 32.干警观看交通安全事故警示教育心得五篇
- 33.护理专升本难吗通过率有多大
- 34.图字行书图字书法图片大全(行书七字春联书法欣赏)
- 35.国家税务局山西省电子税务局网上申报系统怎么报税-牛求...(国家税务总局山西省电子税务局报税方法)
- 36.宝玉石鉴定与加工(宝玉石鉴定与加工毕业设计和任务书)
- 37.温情脉脉
- 38.淮北卫校(淮北卫校2023年招生计划)
- 39.cute是什么意思—mule是什么意思
- 40.新产品发布会开幕式致辞范文
- 41.学籍卡有什么用,学籍卡和学生证的区别是什么
- 42.中考体育没考好,可以申请重考吗?如何申请?
- 43.叫我如何不想她,叫我如何不想她赵元任唱
- 44.requires(requirespermissions注解)
- 45.动物医学就业前景(中国农业大学动物医学就业前景)
- 46.39所985大学排名2022最新排名-全国985大学最新排名2022
- 47.遵守教师职业道德情况总结
- 48.财务预算怎么做、财务预算怎么做模板
- 49.OPPO是什么意思OPPO是什么英文的缩写(oppo是什么意思oppo是什么英文的缩写)
- 50.袋鼠简笔画袋鼠简笔画简单又好看(qq红包袋鼠怎么画简笔画)
- 51.广东省教育局官网
- 52.送给兄弟的歌(送给兄弟的歌应该唱什么)
- 53.hd4000相当于什么显卡(笔记本hd4000相当于什么显卡)
- 54.初中毕业想学音乐去哪个学校(没考上高中可以上音乐学校吗)
- 55.985和211通俗易懂的解释
- 56.本科二批是什么意思,本科一批是什么意思
- 57.解放军第四军医大学(解放军第四军医大学录取分数线预测预测)
- 58.黑龙江工程学院邮编_黑龙江工程学院邮政编码查询_附地址和介绍
- 59.瞻仰是什么意思—瞻仰,是什么意思
- 60.现在学什么技术***(现在学什么技术***写不限学历,简单方便)
- 51.京州市规划图是哪里,含京州国际产业园等
- 52.欢迎登录丨前程无忧,51招聘网
- 53.国家政策查询上白鹿,白鹿智库
- 54.野草诗社五院《百花园集》,百花香手机铃声免费下载
- 55.中广核待遇,中广核待遇怎么样
- 56.联发科MT8127刷机包,8寸IPS屏导航四核酷比魔方U27GT
- 57.黄骅第四中学电话号码是多少,走进黄骅市第四中学
- 58.华电邵武电厂工资多少,福建华电邵武电厂工资
- 59.高尔夫6手刹开关怎么拆(高尔夫6手刹开关怎么拆开)
- 60.4月1号天津限行尾号
- 61.辅机间是什么意思,汽机各辅机的作用
- 62.设备计划检修必须得到什么的批准,特种设备安全及操作人员相关问题
- 63.麻窝水电站附近有什么好处,及时了解火灾灾情
- 64.莱芜城发广场建什么,城发广场开幕在即
- 65.?负忧?三官计生办在哪里,三官街道扎实开展人口计生工作
- 66.破碎物资一天能捐多少钱,到底要砸多少钱
- 67.多少目能过滤蓝藻,做好这些杜绝蓝藻
- 68.北张家园怎么样,小区隔离封闭怎么办
- 69.万源大唐在哪里,大唐盛世的爱情之道
- 70.漳浦哪里纳入圆山新城,构建创新经济中心

