Android网络编程面试题汇总(含详细解析 三)

Android并发编程高级面试题汇总最全最细面试题讲解持续更新中👊👊
👀你想要的面试题这里都有👀
👇👇👇

谈谈你对TCP 流量控制与拥塞控制的理解(oppo

这道题想考察什么?

网络编程,TCP原理

考察的知识点

TCP流量控制与拥塞控制

考生应该如何回答

TCP的拥塞控制和流量控制虽然采取的动作很相似,但拥塞控制与网络的拥堵情况相关联,而流量控制

与接收方的缓存状态相关联,是针对完全不同的问题而采取的措施 。两者从不同的方面保证TCP协议可

靠性。流量控制

双方在通信的时候,发送方的速率与接收方的速率是不一定相等,如果发送方的发送速率太快,会导致

接收方处理不过来,这时候接收方只能把处理不过来的数据存在缓存区里。

如果缓存区满了发送方还在疯狂着发送数据,接收方只能把收到的数据包丢掉,而流量控制就是控制发

送者的发送速度从而使接收者来得及接收,防止丢失数据包的。

假设没有流量控制,发送端根据自己的实际情况发送数据,如果发送的速度太快,导致接收端的接收缓

冲区很快填满了,此时发送端如果继续发送数据,接收端处理不过来,这时接收端就会把本来应该接收

的数据丢弃,这会触发发送端的重发机制,从而导致网络流量的无端浪费。

滑动窗口

在TCP头中有一个Window字段,这个字段代表了接收端告诉发送端自己缓冲区还有多少剩余空间可以接

收数据。TCP 利用滑动窗口实现流量控制的机制, 而滑动窗口大小就是通过TCP头部的Window字段来

通知发送方。

接收端会在确认应答发送ACK报文时,将自己的即时窗口大小填入,并跟随ACK报文一起发送过去。而

发送方根据ACK报文里的窗口大小的值进而改变自己的发送速度。

假设我们窗口大小为20(32-51),发送方发送32-51序列包后,接收到ACK=36,表示 接收方只接收到

了32-35,下一次接收方期望接收到的是36序列号的包。如果接收方给到的ACK中窗口大小仍为20,发

送方窗口滑动,36-55则是发送方可以发送的包。

这就是滑动窗口的工作机制,发送方在发送过程中始终保持着一个发送窗口,只有落在发送窗口内的帧

才允许被发送;发送方收到ACK 计算获得接收方窗口大小之后,便会调整自己的发送速率,也就是调整

自己发送窗口的大小实现流量控制。但是当发送方收到接收窗口的大小为0时,发送方就会停止发送数

据!

零窗口

当发送方停止发送数据后,该怎样才能知道自己可以继续发送数据?

我们可以采用这样的策略:当接收方处理好数据,接受窗口 win > 0 时,接收方发个通知报文去通知发

送方,告诉他可以继续发送数据了。当发送方收到窗口大于0的报文时,就继续发送数据。

不过这时候可能会遇到一个问题,如果发送端在重发超时的时间内都没有收到窗口更新的通知或者窗口

更新的包丢失了,这时候就会引发一个问题:接收方发了通知报文后,继续等待发送方发送数据,而发

送方则在等待接收方的通知报文,此时双方会陷入一种僵局。为了解决这种问题,TCP为每一个连接设有一个持续计时器 :当发送方收到接受窗口 win = 0 时,这时

发送方停止发送报文,并且同时开启一个定时器,每隔一段时间就发个测试报文去询问接收方,打听是

否可以继续发送数据了,如果可以,接收方就告诉他此时接受窗口的大小;如果接受窗口大小还是为0,

则发送方再次刷新启动定时器。

拥塞控制

流量控制是接收方怕发送方发的太快,使得自己来不及处理。而拥塞控制的对象是网络,怕发送方发的

太快,造成网络拥塞,使得网络来不及处理,是一个全局性的过程。

拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。 拥塞是一个动

态问题,我们没有办法用一个静态方案去解决,从这个意义上来说,拥塞是不可避免的。就好像上下班

高峰期经常堵车,为了不让交通瘫痪,交警会去现场指挥,采用动态的方式对车辆进行限制,根据实际

情况,慢慢放行。

比如主机A给主机B传输数据。

两台主机在传输数据包的时候,如果发送方迟迟没有收到接收方反馈的ACK,那么发送方就会认为它发

送的数据包丢失了,进而会重新传输这个丢失的数据包。

然而实际情况有可能此时有太多主机正在使用信道资源,导致网络拥塞了,而A发送的数据包被堵在了

半路,迟迟没有到达B。这个时候A误认为是发生了丢包情况,会重新传输这个数据包。

结果就是不仅浪费了信道资源,还会使网络更加拥塞。因此,我们需要进行拥塞控制。TCP的拥塞控制

通过:慢启动、拥塞避免、快重传与快恢复完成。

慢启动

慢启动算法为TCP发送方新增的一个拥塞窗口 (cwnd )。对应到流量控制,发送方会根据拥塞窗口和

滑动窗口的最小值作为发送上限。

当新建连接时,发送方不了解网络的情况,cwnd(拥塞窗口)初始化比较小的值,RFC建议2-4个

MSS,具体视MSS的大小而定。

MSSMaximum Segment SizeTCP一次传输发送的最大数据段长度。

假设初cwnd为1个MSS。发送端开始按照拥塞窗口大小发送数据,如果被ACK,下次就发送2个。如果还

是收到了ACK,则发送4个,接着8个…。这样cwnd的值就随着网络往返时间(Round Trip Time,RTT)呈

指数级增长,事实上,慢启动的速度一点也不慢,只是它的起点比较低一点而已。

拥塞避免

从慢启动可以看到,cwnd可以很快的增长上来,从而最大程度利用网络带宽资源,但是cwnd不能一直

这样无限增长下去,一定需要某个限制。TCP使用了一个叫慢启动门限(ssthresh)的变量,当cwnd超过

该值后,慢启动过程结束,进入拥塞避免阶段。拥塞避免的主要思想是加法增大,也就是cwnd的值不再

指数级往上升,开始加法增加。此时当窗口中所有的报文段都被确认时,cwnd的大小加1(此处加1指的

是加1个MSS,下文同样如此),cwnd的值就随着RTT开始线性增加,这样就可以避免增长过快导致网络

拥塞,慢慢的增加调整到网络的最佳值。

快重传与快恢复

进入拥塞避免之后,最终还是会碰到拥塞点,发送方此时一直得不到接收端的确认。因此TCP在发送一

个数据以后就开启一个计时器, 在一定时间内如果没有得到发送数据报的ACK报文,那么就重新发送数

据,直到发送成功为止,这就是超时重传。而快重传算法首先要求接收方每收到一个失序的报文段就立即发出重复确认。比如A给B发送M1, M2,

M3, M4, M5,如果B收到了M1, M2, M4,M5;M3并没有接收到,那么在B接到M4时就会发送一次M2

的ACK,接到M5,又会发送一次M2的ACK,这样重复确认M2意在告诉A,M3还没收到,可能是丢失

了。

当A连续收到了三个确认M2的ACK,若M3超时事件还没发生,此时A也会假定M3丢失了,这个时候A就

不必等待M3设置的计时器到期了,而是进行快速重传

快速恢复是在上述的快速重传后添加的,快速重传和快速恢复算法会同时使用,快恢复会:

1.当收到3个重复M2的ACK时,为了预防网络发生拥塞,把ssthresh设置为cwnd的一半,把cwnd设置

为ssthresh的值加3,重传M3

快速恢复的思想是“数据包守恒”原则,即同一个时刻在网络中的数据包数量是恒定的,只有当“老”

数据包离开了网络后,才能向网络中发送一个“新”的数据包,如果发送方收到一个重复的ACK,那

么根据TCP的ACK机制就表明有一个数据包离开了网络,收到3个重复的ACK,表明有3个“老”的数

据包离开了网络,因此此处加3。

2.再收到重复的ACK时,cwnd增加1。

3.当收到M4(新数据包)的ACK时,把cwnd设置为第一步中的ssthresh的值

通过新数据包的ACK(M4)确认了新的数据,说明从重复ACK时的数据(M3)已收到,该恢复过程结束,可

以回到恢复之前的拥塞避免状态。

由于面试题内容比较多,篇幅有限,资料已经被整理成了PDF文档,有需要2023年Android中高级最全面试真题答案 完整文档的可扫描下方卡片免费获取~

PS:(文末还有使用ChatGPT机器人小福利哦!!大家不要错过)

目录

img

第一章 Java方面

  • Java基础部分
  • Java集合
  • Java多线程
  • Java虚拟机

img

第二章 Android方面

  • Android四大组件相关
  • Android异步任务和消息机制
  • Android UI绘制相关
  • Android性能调优相关
  • Android中的IPC
  • Android系统SDK相关
  • 第三方框架分析
  • 综合技术
  • 数据结构方面
  • 设计模式
  • 计算机网络方面
  • Kotlin方面

img

第三章 音视频开发高频面试题

  • 为什么巨大的原始视频可以编码成很小的视频呢?这其中的技术是什么呢?
  • 怎么做到直播秒开优化?
  • 直方图在图像处理里面最重要的作用是什么?
  • 数字图像滤波有哪些方法?
  • 图像可以提取的特征有哪些?
  • 衡量图像重建好坏的标准有哪些?怎样计算?

img

第四章 Flutter高频面试题

  • Dart部分
  • Flutter部分

img

第五章 算法高频面试题

  • 如何高效寻找素数
  • 如何运用二分查找算法
  • 如何高效解决雨水问题
  • 如何去除有序数组的重复元素
  • 如何高效进行模幂运算
  • 如何寻找最长回文子串

img

第六章 Andrio Framework方面

  • 系统启动流程面试题解析
  • Binder面试题解析
  • Handler面试题解析
  • AMS面试题解析

img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值