数据粘包(数据nba)

2023-09-28 12:21:49
查md5足球直播网 > NBA > 数据粘包(数据nba)

本篇文章给大家谈谈数据粘包,以及数据nba的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

文章详情介绍:

阿里Android一面;谈谈TCP粘包半包

什么是TCP粘包半包?

首先,我们知道,TCP/IP通常被认为是一个四层协议系统,包括链路层,网络层,传输层,应用层。其中TCP在传输层,IP在网络层,我们一般的应用程序如浏览器,使用的HTTP协议则工作在应用层。

在TCP/IP规范里,数据是分包发送的,每一层都有自己的分包格式和大小。比如我们通过浏览器上网时,在我们这边会发生什么事情呢?

网络中传输的数据包由两部分组成:一部分是本层协议所要用到的首部,另一部分是上一层传过来的数据。首部的结构由协议的具体规范详细定义。在数据包的首部,明确标明了协议应该如何读取数据。反过来说,看到首部,也就能够了解该协议必要的信息以及所要处理的数据。于是在通信上,我们发出的任何一个请求都要经过以下几步:

① 应用程序处理
首先浏览器会将数据进行编码处理,编码为HTTP协议所规定的报文格式。

② TCP 模块的处理
TCP 根据应用的指示,负责建立连接、发送数据以及断开连接。TCP 提供将应用层发来的数据顺利发送至对端的可靠传输。为了实现这一功能,需要在应用层数据的前端附加一个 TCP 首部。

③ IP 模块的处理
IP 将 TCP 传过来的 TCP 首部和 TCP 数据合起来当做自己的数据,并在 TCP 首部的前端加上自己的 IP 首部。IP 包生成后,根据路由控制表决定接受此 IP 包的路由或主机。

④ 网络接口(以太网驱动)的处理
从 IP 传过来的 IP包对于以太网来说就是数据。给这些数据附加上以太网首部并进行发送处理,生成的以太网数据包将通过物理层传输给接收端。
经过层层转发后,服务器就会收到我们的请求报文,经过4-3-2-1的顺序将网络上传递的数据包再变成我们服务端程序可以处理的数据,整个过程如图所示:


但是在实际发送时有可能发生所谓的粘包和半包这种现象,比如:

假设客户端分别发送了两个数据包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层就会进行分片,把数据包分成若干片,以方便链路层进行传输。注意,分片可以发生在原始发送端主机上,也可以发生在中间路由器上。

当然,如果应用程序写入数据的字节大小大于套接字发送缓冲区的大小,也会产生所谓的分包现象。

而且从实际使用的TCP/IP实现来说,为了提高网络传输的效率,还存在着将多个较小的数据包进行合并然后再发送的情况。于是在这种情况下就会产生所谓的粘包。

解决粘包半包问题

由于底层的TCP无法理解上层的业务数据,所以在底层是无法保证数据包不被拆分和重组的,这个问题只能通过上层的应用协议栈设计来解决,根据业界的主流协议的解决方案,可以归纳如下。

(1)在包尾增加分割符,比如回车换行符进行分割;
(2)消息定长,例如每个报文的大小为固定长度200字节,如果不够,空位补空格;
(3)将消息分为消息头和消息体,消息头中包含表示消息总长度(或者消息体长度)的字段,通常设计思路为消息头的第一个字段使用int32来表示消息的总长度。

如果我们自己使用JDK的原生网络通信API进行网络程序的编写,则这些问题全部需要我们自行处理,而如果我们使用Netty进行网络程序的编写,作为优秀而成熟的网络通信框架,Netty已经为我们提供了很多网络通信方面的组件来解决我们在网络通信上所遇到的问题,比如我们上面所说的粘包半包。

在包尾增加分割符的方式,Netty为我们提供了LineBasedFrameDecoder,以回车换行符进行分割,保证数据的完整性,如果想要自定义分割符,可以使用
DelimiterBasedFrameDecoder。

定长类的消息发送,可以使用Netty为我们提供的FixedLengthFrameDecoder。如果是不定长的消息,那么就可以使用
LengthFileldBasedFrameDecoder,通过在消息中增加一个消息的长度字段,来告诉Netty如何从网络数据中正确的拆分。

希望大家能够支持我的文章,点个关注不迷路,点完关注的小伙伴可以找我私聊领取Java学习资料、大厂面试题库等福利! 也欢迎大家在评论区留言交流讨论。

高达7成命中率!盘点本赛季NBA各项数据之王:哈登榜上有名!

NBA22-23赛季常规赛已经结束,季后赛的征途已经开始,除了MVP等大奖的获奖人还没公布外,得分王,助攻王,篮板王等的归属已经明确了,出现了很多新面孔,本文就带你了解下22-23赛季各项数据之王。

失误最多的球员:特雷杨

特雷杨是18年选秀大会的5号秀,他的身体天赋并不是很强,体格比较单薄,运动能力也并不是很强,但凭着极强的射术和组织能力,特雷杨还是在NBA闯出了一片天。

本赛季的特雷杨,得分助攻一把抓,而且表现很不错,在场均贡献26.2分的情况下,还贡献了10.2助攻,两项表现都在前十,但特雷杨也有短板存在,那就是失误过多,场均有4.1次失误,位列失误榜第一名,特雷杨想在季后赛走得更远,需要提升自己控制失误的能力。

投篮命中率最高的球员:克拉克斯顿

克拉克斯顿是19年选秀大会的二轮秀,他的技术比较粗糙,但是运动天赋非常的优秀,正因这点,克拉克斯顿被篮网选中,并给了他不少的机会培养他。

克拉克斯顿是篮网本赛季的首发中锋,场均登场29分钟,虽然自主进攻能力比较差,但吃饼能力很强,命中率非常的高,达到了70.5%,在投篮命中率榜上,排在第一名,克拉克斯顿的上限不会很高,但继续努力下去,他能够成为一个顶级蓝领球员。

罚球命中率最高的球员:希罗

希罗是19年选秀大会的13号秀,进入NBA前,希罗很受人轻视,但希罗没有气馁,打进NBA后,他很快就用精彩的表现证明了自己,赢得了大合同。

本赛季的希罗三分球表现和投篮命中率都不是很突出,但他的罚球命中率很高,把握住了这轻松得分的机会,罚球命中率达到了93.4%,在罚球命中率榜上,希罗排在第一,希罗现在的表现没有新秀赛季那么惊艳,但他还很年轻,有机会提升自己的能力。

三分球命中率最高的球员:肯纳德

肯纳德是17年选秀大会的12号秀,他的天赋并不是很强,但他的射术非常的精湛,是一个非常优秀的射手,本赛季,肯纳德的三分球表现更加的精彩了。

本赛季的肯纳德从快船来到了灰熊,灰熊很重视他,给他制造了很多的机会,而肯纳德也把握住了这些机会,投进了一记记让对手心寒的三分球,三分球命中率为49.4%,场均投进2.3记三分球,是既有产量又有命中率,引进肯纳德是灰熊非常重要的引援。

三双王:约基奇

约基奇的运动能力虽然不是很强的,但是他的技术真的是非常的细腻,作为一个大个子,他的传球像小个子后卫一样精妙,投篮手感更是十分的柔和。

约基奇的特点是全面,能得分,能传球,能抢篮板,本赛季的他,将这点完全发挥了出来,多场比赛砍下三双,掘金也在约基奇的带领下取得了非常好的成绩,在三双榜上,约基奇以29次三双排在榜首,比第二名萨博尼斯多了15次。

盖帽王:小贾伦杰克逊

杰克逊是18年选秀大会的4号秀,他的身体条件非常的优秀,个子高,臂展好,运动能力更是十分爆炸,在克服伤病的影响后,杰克逊兑现了自己的天赋。

本赛季杰克逊在攻防两端的表现是十分亮眼的,在防守端展示出了很强的统治力,单防时,机动灵敏,能限制对手的命中率,协防时,位置感好,护框表现非常的优秀,场均能够贡献3个盖帽,杰克逊如果能够保持这个状态,大概率成为巨星级别的内线球员。

抢断王:阿奴诺比

阿奴诺比是17年选秀大会的23号秀,刚进入NBA的他,得分能力不是很强,但他的防守基本功扎实,身体条件也好,正因这点,阿奴诺比在猛龙得到了不少的机会。

本赛季的阿奴诺比,在得分能力上有了非常大的提升,三分球投射表现很好,而他的看家本领,防守也不错,断球能力特别强,下手稳准狠,不仅是猛龙锋线球员中最善于抢断的球员,还是联盟中抢断表现最好的球员,场均贡献1.9个抢断。

助攻王:哈登

哈登个人能力很强,既能得分,还能够组织,在火箭时期他就证明了这点,在加盟76人后,哈登减少了自己的出手机会,更多的为队友创造机会。

本赛季的哈登出战了58场比赛,出勤率并不是很高的,但表现很不错,场均贡献10.7个助攻,位列助攻榜第一名,领先第二名特雷杨0.5个,生涯第二次位列助攻榜第一名,这个表现对哈登来说,并不是巅峰表现,他曾场均贡献11.2个助攻,哈登还是有希望拿下更多助攻王的。

篮板王:小萨博尼斯

小萨博尼斯是16年选秀大会的11号秀,是绰号“世界屋脊”萨博尼斯的儿子,他继承了父亲的篮球天赋,虽然运动能力有限,但技术非常出色,球商也非常高。

本赛季的萨博尼斯在国王发挥的非常出色,作为球队的内线核心,他承担了得分,助攻,抢篮板三项任务,其中场均贡献12.3个篮板,位列篮板榜第一名,26岁的萨博尼斯正在兑现自己的天赋,在国王这支充满活力的球队中,他会交出更加精彩的表现。

得分王 恩比德

恩比德是14年选秀大会的探花秀,他的天赋非常的优秀,个子高,但协调性还不错,脚步很扎实,还有一定的投篮能力,本赛季的恩比德大爆发,表现十分精彩。

本赛季的76人,哈登主要负责组织,恩比德就主要负责得分,恩比德很好的完成了这个任务,赛季场均贡献33.1分,而且效率还很高,投篮命中率为54.8%,在得分榜上,恩比德以微弱的优势领先东契奇,成为了得分王,这是恩比德生涯第一次得到这个荣誉。

作者:piikee | 分类:NBA | 浏览:39 | 评论:0