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

161 阅读6分钟

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

请你描述TCP三次握手与四次挥手的过程与意义

这道题想考察什么?

这个问题属于网络体系中的基础理论知识,对于这种类型的问题如果没有一个清晰的认识,那会让你在掌握一些“高大上“技术的时没有支撑,也难以把整体框架理顺。比如Http、RTSP 、RTMP等被广泛运用的应用层协议都是基于TCP来实现的。所以被问到这个问题并不稀奇。

考察的知识点

网络的基础知识

考生如何回答

TCP/IP协议定义了计算机在网络中如何发送数据、数据格式如何定义、发出消息后在网络中如何寻址找到目标计算机,最后目标计算机又如何检验收到消息的正确性、对数据拆解最后得到消息内容的一套处理标准。

有了这些标准后生产提供TCP/IP服务的软件商家就有了一套统一的规范,只要遵循这个规范去实现自己的软件功能。

三次握手

在进行业务通信前,必须建立好连接,而TCP/IP连接的建立需要经过三次握手的过程。其过程如下图:

在这里插入图片描述

  1. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
  2. 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
  3. 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
为什么要三次握手?
全双工通信

三次握手是确定通信双方通讯线路是全双工的最小次数,全双工通信是指:通信的双方可以同时发送和接收信息 。

正如双方电话通话:

A:喂,能听到吗?

B:可以

此时如果A没有反馈,B无法确定A是否能够接收数据。

保证可靠性

另外TCP是可靠传输协议,保证通信的可靠性的手段中包含序列号与确认应答机制。

  • 序列号:TCP传输时将每个字节的数据都进行了编号,保证数据的有序性与可靠性(当接收到的数据总少了某个序号的数据时,能马上知道 );
  • 确认应答:TCP传输的过程中,每次接收方收到数据后,都会对传输方进行确认应答。也就是发送ACK报文。这个ACK报文当中带有对应的确认序列号,告诉发送方,接收到了哪些数据,下一次的数据从哪里发。

而三次握手的同时也能确定通信双方的初始序列号。

  1. C --> S SYN my sequence number is X
  2. S <-- C ACK your sequence number is X my sequence number is Y
  3. C --> S ACK your sequence number is Y

如果C 未确认收到 B 的。也就是说,只有 C 发送给 S 的包都是可靠的, 而 S 发送给 C 的则不是,所以这不是可靠的连接。

避免资源浪费

除此之外,第一次握手:客户端发送连接请求消息到服务端,服务端收到信息后需要进行第二次握手:应答告知客户端已经接收连接请求。而服务端发送出去的应答消息,需要等客户端第三次握手响应后,才能确定此次连接为有效连接。

若客户端发出去的第一个连接请求由于某些原因在网络节点中滞留了导致延迟,直到客户端放弃连接后的某个时间点才到达服务端,这是一个早已失效的报文,但是此时服务端仍然认为这是客户端的建立连接请求第一次握手,于是服务端第二次握手回应了客户端。如果没有第三次握手,那么到这里,连接就建立了,但是此时客户端并没有任何数据要发送,会让服务端空等,造成资源浪费。

四次挥手

在完成数据交互之后,如果选择关闭连接,以回收资源,则完成四次挥手来进行“和平分手”。过程如下图: 在这里插入图片描述

  1. 第一次挥手:主动关闭方发送第一个包,其中FIN标志位为1,发送顺序号seq为X。
  2. 第二次挥手:被动关闭方收到FIN包后发送第二个包,其中发送顺序号seq为Z,接收顺序号ack为X+1。
  3. 第三次挥手:被动关闭方再发送第三个包,其中FIN标志位为1,发送顺序号seq为Y,接收顺序号ack为X。
  4. 第四次挥手:主动关闭方发送第四个包,其中发送顺序号为X,接收顺序号为Y。至此,完成四次挥手。
为什么断开连接需要四次挥手?

三次握手是因为建立连接时,ACK和SYN可以放在一个报文里来发送。而关闭连接时,被动关闭方可能还需要发送一些数据后,再发送FIN报文表示同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。因此断开连接需要4次。


更多Android面试题 可以详细Vx关注公众号:Android老皮 解锁            《2023最新Android中高级面试题汇总+解析》

目录 目录

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面试题解析