2 Star 20 Fork 45

胡老皮 / 2023年Android面试题合集解析

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
计算机网络方面面试题.md 12.09 KB
一键复制 编辑 原始数据 按行查看 历史
胡老皮 提交于 2023-02-07 08:27 . 计算机网络方面

这套Android面试题汇总大全,希望对大家有帮助哈~

全部答案,更新日期:2月7日,直接下载吧

全部答案,更新日期:2023年2月7日,直接下载吧!

下载链接:高清全答案解析,累计935页+大厂面试题 PDF

1、请简述 Http 与 Https 的区别?

HTTP协议传输的数据都是未加密的,也就是明文的,因此 使用HTTP协议传输隐私信息非常不安全,为了保证这些隐 私数据能加密传输,于是网景公司设计了SSL(Secure SocketsLayer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。 2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。 3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。 4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。 最后一点在Android 9.0 如果用http进行传输,需要在application节点下设置android:usesCleartextTraffic="true

2、说一说https,udp,socket区别?

https协议需要到CA申请证书。 http是超文本传输协议,信息是明文传输;https 则是具有安全性的ssl加密传输协议。 http和https使用的是完全不同的连接方式,用的端口也不 一样,前者是80,后者是443。http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

http默认使用80端口,https默认使用443端口TCP:传送控制协议(Transmission Control Protocol)

UDP:用户数据报协议 (UDP:User Datagram Protocol)

socket:

这是为了实现以上的通信过程而建立成来的通信管道,其真实的代表是客户端和服务器端的一个通信进程,双方进程通过socket进行通信,而通信的规则采用指定的协议。

socket只是一种连接模式,不是协议,socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。tcp、udp,简单 的说 (虽然不准确)是两个最基本的协议, 很多其它协议都是基于这两个协议如,http就是基于tcp 的,. 用socket可以创建tcp连接,也可以创建udp连接, 这意味着,用socket可以创建任何协议的连接,因为其它 协议都是基于此的。

3、请简述一次http网络请求的过程?

这个看OKHTTP的EventListerner就知道了。这里总结一张okhttp的回调表格。详细的需要自己阅读源码注释哦

请求步骤 含义
dnsStart DNS解析开始
dnsEnd DNS解析结束
connectStart TCP连接开始
secureConnectStart 建立TLS安全信道开始
secureConnectEnd 信道建立结束
requestHeadersStart 发送首部字段开始
requestHeadersEnd 发送首部字段结束
requestBodyStart 发送请求体开始
requestBodyEnd 发送请求体结束
responseHeadersStart 接受首部开始
responseHeadersEnd 接受首部结束
responseBodyStart 接受响应体开始
responseBodyEnd 接受响应ti结束
connectEnd TCP连接断开

另外截一张postman上的图

在这里插入图片描述

4、谈一谈TCP/IP三次握手,四次挥手?

常见的 TCP 中的头部数据表示

  • ACK:该位为 1 时,「确认应答」的字段变为有效,TCP 规定除了最初建立连接时的 SYN包之外该位必须设置为 1
  • SYN:该位为 1 时,表示希望建立连接,并在其「序列号」的字段进行序列号初始值的设定
  • RST:该位为 1时,表示 TCP 连接中出现异常必须强制断开连接
  • FIN:该位为 1 时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换 FIN位为 1 的 TCP 段

TCP 三次握手

在这里插入图片描述

TCP 三次握手

一开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端口,处于 LISTEN 状态

  • 第一个报文—— SYN 报文
    • 客户端会随机初始化序号( client_isn),将此序号置于 TCP 首部的「序号」字段中,同时把 SYN标志位置为 1,表示 SYN报文。接着把第一个 SYN 报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于 SYN-SENT 状态。
  • 第二个报文 —— SYN + ACK 报文
    • 服务端收到客户端的 SYN 报文后,首先服务端也随机初始化自己的序号( server_isn),将此序号填入TCP首部的「序号」字段中,其次把 TCP首部的「确认应答号」字段填入 client_isn + 1, 接着把SYN 和 ACK 标志位置为 1。最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于SYN-RCVD状态。
  • 第三个报文 —— ACK 报文
    • 客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文 TCP 首部 ACK标志位置为 1 ,其次「确认应答号」字段填入 server_isn1 ,最后把报文发送给服务端,这次报文可以携带客户到服务器的数据,之后客户端处于ESTABLISHED状态。

服务器收到客户端的应答报文后,也进入 ESTABLISHED 状态,此时 TCP 建立结束,双方可以收发数据

为什么是三次握手?不是两次、四次?

  • 三次握手才能保证双方具有接收和发送的能力
  • 三次握手才可以阻止重复历史连接的初始化
  • 三次握手才可以同步双方的初始序列号
  • 三次握手才可以避免资源浪费

TCP 四次挥手过程

在这里插入图片描述

客户端主动关闭连接 —— TCP 四次挥手

  • 客户端打算关闭连接,此时会发送一个 TCP 首部 FIN标志位被置为 1 的报文,也即 FIN 报文,之后客户端进入 FIN_WAIT_1状态。
  • 服务端收到该报文后,就向客户端发送 ACK 应答报文,接着服务端进入 CLOSED_WAIT状态。
  • 客户端收到服务端的 ACK 应答报文后,之后进入FIN_WAIT_2状态。LAST_ACK
  • 等待服务端处理完数据后,也向客户端发送 FIN 报文,之后服务端进入 LAST_ACK状态。
  • 客户端收到服务端的 FIN 报文后,回一个 ACK 应答报文,之后进入 TIME_WAIT状态
  • 服务器收到了 ACK 应答报文后,就进入了 CLOSED 状态,至此服务端已经完成连接的关闭。
  • 客户端在经过 2MSL 一段时间后,自动进入 CLOSED 状态,至此客户端也完成连接的关闭。

客户端和服务端都需要一个 FIN 和一个 ACK,因此通常被称为四次挥手。

这里一点需要注意是:主动关闭连接的,才有 TIME_WAIT状态。

为什么挥手需要四次?

回顾上方四次挥手双方发 FIN 包的过程,就能理解为什么需要四次了。

  • 关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。
  • 服务器收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。

从上面过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN 一般都会分开发送,从而比三次握手导致多了一次。

5、为什么说Http是可靠的数据传输协议?

HTTP是属于应用层的协议,TCP(传输控制协议)和UDP(用户数据报协议)是属于传输层的协议。

我们都知道TCP协议是面向连接的,每次进行连接都要进行三次握手和四次挥手,所以它的连接是可靠的。而HTTP 是在TCP上层的协议,所以它也是可靠的。

那为什么TCP可靠? 首先来讲一下网络的分层,因特网协议可以分为五层,分别是: 应用层->传输层->网络互联层->网络访问层->物理层或许你觉得很抽象,但是通过栗子你就会发现并没有那么复杂。

如访问一个Http请求:http://45.124.252.66:9090/main/

怎么访问到这个网站呢?首先我们需要通过网络,可能是移动网或者宽带网等(这就是物理层,它是一个传输介 质),然后找到对应那一台被我们访问的服务器的mac地址(网络访问层)进行连接,再匹配它的IP(网络互联层)是否对应,确定了主机后,再通过端口号9090(传输层)访问对应的进程,由于一个进程里面有很多业务模块,而我们需要访问main模块(应用层),最终通过不同层来实现网站的访问。每个层都是相互独立,并且向下依赖,而传输层是能确定唯一主机的,因为我们可以通过mac地址、host和端口来 确定唯一的一台访问主机上面的进程。或许有的人会问, 那如果网络中断呢?那不就不可靠了吗,我们常说的网络中断是属于物理层,由于是向下依赖,传输层的建立是依赖于下面的三层(网络互联层、网络访问层、物理层)已经连接成功,如果下面的层都没有连接成功,也就没有传输层这一说了,所以传输层协议是一个“靠谱”的协议。

我们通过分层了解了传输层是“靠谱”的协议,那么怎么保证它是可靠的呢?

那就要讲到三次握手和四次挥手的作用了

三次握手就是在建立连接之前需要客户端需要先给服务端发出SYN(c)报文,当服务器收到后需要返回客户端ACK=SYN(c)+1,并且传输自己生成的SYN(s)给客户端,客户端收到后进入已连接状态,需要再回一个ACK=SYN(s)+1 给服务器,服务器收到ACK后也进入了连接状态,这就是一个三次握手的过程,通过双方进行三次通信保证此时双方都已经进入准备状态。

四次挥手就是在结束连接的时候,客户端会发送FIN(c)给服 务器,服务器收到后回复客户端ACK=FIN(c)+1告知客户端收到客户端的结束请求了,这时客户端就会进入CLOSING(半关闭状态),等待服务器的结束请求。 在一段小延迟时间后,服务器也会发送一个FIN(s)请求给客户端, 客户端收到后发送ACK=FIN(s)+1给服务器,服务器收到ACK后就进入技术状态。客户端在等待2个MSL(避免服务器收不到ACK)后也进入结束状态。

在每次进行连接和断开连接都需要经过复杂的三次握手和四次握手,从而保证了每个连接都是可靠的,所以TCP协议是可靠的,而HTTP就是TCP上层的协议,所有连接都是基于TCP协议的。

在我们能够确定每个请求对应的唯一主机和端口号,并且通过Http协议添加响应的请求数据信息(如模块名字等)确定请求的代码位置,并且在每次请求都通过三次握手和四次挥手保证连接的可靠性,所以一个Http请求是可靠的。

6、TCP/IP协议分为哪几层?TCP和HTTP分别属于哪一层?

由于篇幅原因,此处仅展示部分内容,查看更多Android面试题点击直接查看

全部答案,更新日期:2023年2月7日,直接下载吧!

下载链接:全部答案,整理好了

新增:高清全答案解析,累计935页+大厂面试题 PDF

1
https://gitee.com/hu-laopi/NewDevBooks.git
git@gitee.com:hu-laopi/NewDevBooks.git
hu-laopi
NewDevBooks
2023年Android面试题合集解析
master

搜索帮助