4.21 用了 TCP 协议,数据一定不会丢吗?

目录

数据包的发送流程:

建立连接时丢包

流量控制丢包

网卡丢包

RingBuffer过小导致丢包

网卡性能不足

接收缓冲区丢包

两端之间的网络丢包

ping命令查看丢包:

mtr命令:

发生丢包了怎么办

用了TCP协议就一定不会丢包吗​编辑

这类丢包问题怎么解决?


数据包的发送流程:

举例简单聊天软件数据包的发送流程:

用户A和用户B两端先会通过三次握手,建立TCP连接。

        一个数据包从聊天框里发出,消息会从聊天软件所在的用户空间拷贝到内核空间发送缓冲区(send buffer),数据包就这样顺着传输层、网络层,进入到数据链路层,在这里数据包会经过流控(qdisc),再通过RingBuffer发到物理层的网卡。数据就这样顺着网卡发到了纷繁复杂的网络世界里。这里头数据会经过n多个路由器和交换机之间的跳转,最后到达目的机器的网卡处。

         此时目的机器的网卡会通知DMA将数据包信息放到RingBuffer中,再触发一个硬中断给CPU,CPU触发软中断让ksoftirqd去RingBuffer收包,于是一个数据包就这样顺着物理层,数据链路层,网络层,传输层,最后从内核空间拷贝到用户空间里的聊天软件里。

建立连接时丢包

TCP三次握手后半连接队列,全连接队列满了,丢弃新来的包

流量控制丢包

让数据按一定的规则排个队依次处理,qdisc(Queueing Disciplines,排队规则),这也是我们常说的流量控制机制。

ifconfig命令下查看到txqueuelen后面的数字1000,其实就是流控队列的长度。

当发送数据过快,流控队列长度txqueuelen又不够大时,就容易出现丢包现象。

网卡丢包

网卡和它的驱动导致丢包的场景也比较常见,原因很多,比如网线质量差,接触不良

RingBuffer过小导致丢包

在接收数据时,会将数据暂存到RingBuffer接收缓冲区中,然后等着内核触发软中断慢慢收走。如果这个缓冲区过小,而这时候发送的数据又过快,就有可能发生溢出,此时也会产生丢包

RingBuffer增大之后,可以减少因为容量小而导致的丢包情况。

网卡性能不足

网卡作为硬件,传输速度是有上限的。当网络传输速度过大,达到网卡上限时,就会发生丢包。

接收缓冲区丢包

我们一般使用TCP socket进行网络编程的时候,内核都会分配一个发送缓冲区和一个接收缓冲区

发送数据包会在代码中执行send(msg),这时候把数据拷贝到内核发送缓冲区中,什么时候发数据发多少数据由内核自己决定。

接收数据包也是,从外部网络收到数据包就暂存在这个地方,然后坐等用户空间的应用程序将数据包取走。

对于发送缓冲区,执行send的时候,如果是阻塞调用,那就会等,等到缓冲区有空位可以发数据。

如果是非阻塞调用,就会立刻返回一个 EAGAIN 错误信息,意思是 Try again。让应用程序下次再重试。这种情况下一般不会发生丢包。

接受缓冲区满了,事情就不一样了,它的TCP接收窗口会变为0,也就是所谓的零窗口,并且会通过数据包里的win=0,告诉发送端,"球球了,顶不住了,别发了"。一般这种情况下,发送端就该停止发消息了,但如果这时候确实还有数据发来,就会发生丢包

两端之间的网络丢包

两端之间那么长的一条链路都属于外部网络,这中间有各种路由器和交换机还有光缆啥的,丢包也是很经常发生的。

这些丢包行为发生在中间链路的某些个机器上,我们当然是没权限去登录这些机器。但我们可以通过一些命令观察整个链路的连通情况。

ping命令查看丢包:

想知道你的机器到baidu服务器之间,有没有产生丢包行为。可以使用ping命令。

mtr命令:

可以查看到你的机器和目的机器之间的每个节点的丢包情况。

发生丢包了怎么办

TCP协议去做传输

建立TCP连接的两端,发送端在发出数据后会等待接收端回复ack包,ack包的目的是为了告诉对方自己确实收到了数据,但如果中间链路层发生了丢包,那发送端会迟迟收不到确认ack,于是就会进行重传。以此来保证每个数据包都确确实实到达了接收端。 

用了TCP协议就一定不会丢包吗

 TCP位于传输层,上面应用层还有HTTP和RPC协议,TCP保证的可靠性是传输层的可靠性,它可以保证数据从A机器的传输层可靠的发到机器B的传输层。

数据到了接收端的传输层之后,能不能保证到应用层,TCP并不管。

聊天软件还需要将数据从TCP的接收缓冲区里读出来,如果在读出来这一刻,手机由于内存不足或其他各种原因,导致软件崩溃闪退了。

发送端以为自己发的消息已经发给对方了,但接收端却并没有收到这条消息。

于是乎,消息就丢了。

这类丢包问题怎么解决?

TCP只保证传输层的消息可靠性,并不保证应用层的消息可靠性。如果我们还想保证应用层的消息可靠性,就需要应用层自己去实现逻辑做保证。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1618201.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

c++中的基本类型

专栏简介:为什么我要重新介绍c的相关知识,在此之前,我对于c的了解也仅仅是在表面。而在后来与c慢慢的接触中,c编程语言越来越让我觉得深奥,所以还是想要重新开创一个专栏来介绍c。对于c的介绍,本专栏会先介…

DTC状态变化例子 4

例子1: 此示例概述了两个操作周期排放相关的 OBD DTC 中 DTC 状态位的操作。该图显示了两个操作周期排放相关的 OBD DTC 的处理。该处理也可应用于非排放相关的 OBD DTC,此处显示仅供一般参考。 0 接收到清除诊断信息 → DTC 状态字节初始化。 1, 2 相关…

CPU深度解析

操作系统课程 计算机组成 ALU:计算单元(运算器)PC:pc寄存器存执行指令Registers:寄存器存数据MMU:控制器程序的构成:指令+数据 总线:一个程序读入内存,全是由0和1构成,从内存读取到cpu计算,需要通过总线。一段01数据段是指令还是数据是通过来源总线区分的。总线分…

c语言练习题34:打印整数二进制的奇数位和偶数位

打印整数二进制的奇数位和偶数位 获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列 思路: 1. 提取所有的奇数位,如果该位是1,输出1,是0则输出0 2. 以同样的方式提取偶数位置检测num中某一位是0还…

储能辅助电力系统调峰的容量需求研究(matlab代码)

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《储能辅助电力系统调峰的容量需求研究》,是一个很常规很经典的matlab优化代码,主要是对火电、风电和储能等电力设备主体进行优化调度,在调峰能力达不到时采…

特殊要求!2023年初级会计考试报名需要这些材料!

不少小伙伴都在关心 23年初级会计考试什么时候报名 目前,23年初级会计考试报名简章暂未公布 不过每年的报名流程都大同小异 参考22年考试流程, 给大家做了个初级会计考试的整体流程图 2023年初会报考条件 一、基本条件 报名参加会计资格考试的人员…

青岛计算机操作员初级考试时间,青岛市2021年初级会计考试时间安排在这里!...

各位报考2021年初级会计考试的小伙伴们,山东省青岛市2021年初级会计考试时间在这里!大家肯定非常关心一件事情,那便是2021年初级会计考试时间!小编为大家整理了相关信息,详情如下~ 初级会计考试时间 考试日期为2021年5…

青岛计算机操作员初级考试时间,青岛市2021年初级会计考试时间公布了吗?

山东省青岛市2021年初级会计职称考试时间公布了吗?目前青岛市2021年初级会计考试时间已经公布了哦,定于2021年5月15日举行。详细内容如下: 2021年初级会计考试时间 初级资格考试于2021年5月15日至19日,5月22日至23日,分…

湖北计算机初级考试时间,湖北省2021年初级会计考试时间安排在这里!

各位报考2021年初级会计考试的小伙伴们,湖北省2021年初级会计考试时间在这里!大家肯定非常关心一件事情,那便是2021年初级会计考试时间!小编为大家整理了相关信息,详情如下~ 初级会计考试时间 考试日期为2021年5月15日…

2023年初级会计考试详细报考流程(图文)

2023年2月7日,会计师考试报名官网“全国会计资格评价网"正式开通考试报名系统。 报名流程 1.登录官网 全国会计资格评价网(网址:http://kzp.mof.gov.cn/index.jsp) 进入网站后,点击左上角考试报名。 2.进入初级会…

2022年初级会计考试精选复习题及答案

1、某公司签发一张商业汇票,根据《票据法》的规定,该公司的下列签章行为中。正确的是(  )。 A.公司盖章 B.公司法定代表人李某盖章 C.公司法定代表人李某签名加盖章 D.公司盖章加公司法定代表人李某盖章 2、第15题&#xf…

2022年初级会计考试仿真试题及答案

1、某公司共有职工500名,其中生产工人为400名,管理人员为100名。2016年12月份,该公司向职工发放自产产品作为福利,每人发放一台。该产品的成本为每台150元,计税价格为200元,增值税税率为17%。不…

初会考试怎么用计算机,2020年初级会计考试系统自带的是哪种计算器?怎么使用?...

2020年初级会计职称考试即将在8月29日开考,初级会计考试考场纪律是非常严格的,考试即将开始,很多考生都在问初级会计考试可以提前交卷吗?能否提前离开考场?2020年初级会计考试系统自带的是哪种计算器?怎么使…

初级会计可以用计算机,初级会计考试能带计算机吗?还不知道速看!

哈喽大家好,随着初级考试的临近,同学们也有了越来越多的考试相关的问题,其中就有人问考试时能带计算器吗? 答案是不能 2020初级会计考试采用无纸化方式,《全国会计专业技术资格无纸化考试考场规则》其中明确规定了考生…

2020计算机初级考试地点,2020年初级会计考试地点在哪里呢?

2020年初级会计职称考试地点在哪里,你知道吗?这跟我们的考试与关系的,大家可以参考下面内容。那初级会计考试时长变了吗?2020年初级会计考试地点在哪里呢?接下来,就和中公初级会计职称小编一起往下看吧~ 20…

初级会计考试用计算机,注意:今年初级会计考试有一个新变化!考试可以带计算器吗?...

原标题:注意:今年初级会计考试有一个新变化!考试可以带计算器吗? 初级算是会计类考试中,机考操作相对简单的一门考试,但依旧还是有很多考生都会栽在机考操作上,所以,小编提醒你们&am…

2022年初级会计考试综合试题及答案

1、下列各项中,应通过“其他应付款”科目核算的是(  )。 A.应付现金股利 B.应交教育费附加 C.应付租入包装物租金 D.应付管理人员工资 2、甲企业本期主营业务收入为450万元,主营业务成本为300万元,其他业务收入…

2022年初级会计考试精选模拟题

1、 企业在计提固定资产折旧时,对于当月增加的固定资产当月照提折旧,当月减少的固定资产当月不提折旧。 ( ) A.正确 B.错误 2、甲股份有限公司采用回购本公司的股票方式减资,回购本公司股票时应该借记的会计科目是…

2022年长沙初级会计考试及答案

1、 某商场2010年1月1日针织品存货25万元,本月购进60万元,本月销售收入78万元,发生的销售折让为1.5万元。上季度该类商品毛利率为20%,本月月末库存商品的成本为( )元。 A.90000 B.75000 C.226000 D.238000 2、 某企业为经税…

2022年初级会计考试经典试题及答案

1、甲公司为增值税一般纳税人,委托外单位加工一批应交消费税的商品,以银行存款支付加工费400万元、增值税52万元、消费税60万元,该加工商品收回后将直接用于销售。甲公司支付上述相关款项时,应编制的会计分录是(&#…