Android 面试:网络基础会问哪些问题及解答

图片取自 Zoommy

Android面试中问到网络基础,基本是围绕OSI七层模型或者是TCP/IP四层模型展开的,主要包括各层名称及功能、每层有哪些协议。

另外会深入考察应用层和传输层。

应用层:(HTTP、DNS等)

  • HTTP报文格式、头部有哪些字段
  • HTTP状态码
  • HTTP和HTTPS的区别
  • HTTPS中SSL/TLS加密的握手过程
  • HTTP一次连接的具体过程
  • GET、POST的区别
  • DNS解析过程
  • Cookie、Session原理

传输层:(TCP、UDP等)

  • TCP/IP四层模型(和OSI的层次对应关系)
  • TCP三次握手、四次握手的过程,状态变化和原因
  • TCP、UDP区别
  • TCP拥控、流控原理
  • Socket原理

以下是正文,其中空出的标题是我目前还没有整理完毕,或者是整理不够完整的内容。在对应内容完善后会进行更新。其中包括Cookie、Session原理,TCP拥控、流控原理,Socket原理。

OSI七层模型及其功能

层级 功能
应用层 允许访问OSI的手段
表示层 对数据进行翻译、加密、压缩
会话层 建立、管理、终止会话
传输层 提供端到端的可靠报文传递和错误恢复
网络层 负责数据包从源到宿的传递和网际互联
数据链路层 将比特币组装成振和点到点的传递
物理层 通过媒介传输比特,确定机械及电气规范

TCP/IP 四层模型及对应协议

TCP/IP中的应用层对应OSI中的应用层、表示层、会话层,网络访问层对应OSI中的数据链路层和物理层。

层级 协议
应用层 HTTP、DNS、FTP、WWW
传输层 TCP、UDP
网络层 IP
网络访问层 ARP

注:DNS作用是将域名转为IP地址;ARP作用是将IP地址转为MAC地址

HTTP报文格式、头部有哪些字段

先说一下HTTP。
HTTP:HyperText Transfer Protocol 超文本传输协议,处于应用层,基于请求响应模式,无状态协议。
URL:Uniform Resource Location 统一资源定位符,就是常说的网页地址。

HTTP报文

  • 请求报文
    • 报文头部
      • 请求行:包括请求方法类型:GET、POST等,请求地址,协议版本
      • 请求头部字段
      • 通用头部字段
      • 实体头部字段
      • 其他
    • 报文主体:包括如POST中的请求参数、文件上传数据、邮件传输数据等内容
  • 响应报文
    • 报文头部
      • 状态行
      • 响应头部字段
      • 通用头部字段
      • 实体头部字段
      • 其他
    • 报文主体:包括网页正文等内容

根据上述内容,HTTP头部字段包括:

  • 请求头部字段:补充请求的附加内容、客户端信息、响应内容相关优先级等。有Accept、From、Host等字段
  • 响应头部字段:补充响应的附加内容
  • 通用头部字段:请求报文、响应报文都会使用,包括Cache-Control字段,作用是控制HTTP缓存机制
  • 实体头部字段:补充资源内容的更新时间等

HTTP状态码

状态码 含义
1xx 信息性状态码
2xx 成功状态码
3xx 重定向状态码
4xx 客户端错误状态码
5xx 服务器错误状态码

HTTP和HTTPS的区别

简单来说,HTTPS是加密的HTTP。
HTTPS = HTTP + SSL/TLS

HTTPS使用SSL/TLS进行加密,这既是它的优点也是它的缺点,加密使HTTPS的安全性大大提高,但是加密的过程也导致通信过程中性能的下降。
但总的来说用失去的一点点性能换来极高的安全性是非常值得的,苹果和谷歌也大力支持HTTPS的使用。

HTTPS的关键是加密过程,见下一标题。

HTTPS中SSL/TLS加密的握手过程

以下的C代表Client客户端,S代表Server服务端。

  1. C告诉S:协议版本号,支持的加密方法,以及自己生成的随机数
  2. S确认加密方法,给C方松证书和自己产生的随机数
  3. C确认证书有效性,产生新的随机数,并使用数字证书中的公钥加密随机数,发送给S
  4. S使用对应的私钥解密得到C发过来的随机数
  5. C和S使用约定的加密方法,使用前面的三个随机数,生成对话密钥,然后用此密钥加密接下来的整个对话过程

总的来说,整个过程就是使用非对称加密算法交换“对话中要使用的对称加密算法的密钥”,然后使用对称加密算法进行对话。

注:

  • 加密算法分为两种:对称和非对称
    • 对称加密是指对话双方使用同一密钥进行加密和解密。特性是速度快,但存在如何安全确认密钥的问题。
    • 非对称加密是指拥有两个密钥,公钥和私钥。公钥加密的内容只有私钥能够解密,私钥加密的内容只有公约能够加密。C向S发送内容时使用S的公钥加密,这样就只有持有对应私钥的S能够解密。特性是安全,但速度慢。同时存在如何证明公钥是S的问题,因为可能有人从中间劫持,伪装S发送劫持人的公钥。为了解决这个问题,引入了数字证书来保证公钥的有效性。
  • SSL/TLS结合了两个加密算法的优点,利用非对称加密的安全来交换对称加密的密钥,然后利用对称加密的速度快来对这个会话进行加密。

HTTP一次连接的具体过程

域名解析(DNS)——> TCP三次握手,建立连接 ——> 发起HTTP请求 ——> 服务器响应请求,返回数据 ——> 客户端处理数据 ——> 合适时刻四次握手,断开连接。

这里可能会继续追问诸如DNS解析过程、三次握手四次握手过程和原因等等问题,解答见下文。

GET、POST的区别

  • GET请求可以被浏览器缓存,POST不可以
  • POST安全一些,因为GET请求都在URL中,也会被浏览器保存记录;而POST请求可以放到Body中
  • POST可以用RequestBody传输更多的数据,GET的数据量受到URL长度限制
  • POST支持更多编码,且不对数据类型限制
  • GET的目标功能是查询数据,POST的目标功能是修改数据,或者上传数据

DNS解析过程

DNS功能是将域名解析为IP地址。

  1. 查找浏览器缓存,是否有解析记录,没有则进入第二步
  2. 查找系统缓存,是否有解析记录,没有则进入第二步
  3. 给配置的DNS服务器(LDNS)发送请求,LDNS查找到则返回
  4. LDNS没有找到时会请求RootServer,返回一个顶级域名服务器
  5. LDNS请求顶级域名服务器,返回NameServer地址
  6. NameServer返回IP给LDNS,LDNS会进行缓存
  7. LDNS返回给用户

注:各级都会对IP的解析进行缓存,同时会根据各自的缓存策略对一些记录进行清理

Cookie、Session原理

TCP三次握手、四次握手的过程,状态变化和原因

TCP三次握手、四次握手

为什么需要三次握手建立连接?
为了防止已失效的连接请求报文段突然又传到了服务端,服务端以为要建立连接,造成资源浪费(无效连接)。发生场景是,客户端发送第一个建立连接的请求由于网络原因服务端一开始没有接收到,因此客户端发了第二个连接请求,这个请求成功,建立起了连接。但是第一个请求后来又到达服务端,如果没有第三次确认,服务端将多形成一个连接,造成资源浪费。

为什么需要四次握手断开连接?
断开连接时,分为两个阶段。一次是客户端通知服务器,告知自己不会再发送数据。注意,此时服务器仍可以发数据给客户端。第二次是服务器告知客户端自己不会再发送数据。
要弄清楚的是,断开时,任意一方都可以主动断开,表明自己不再发送数据,但仍可接收数据。所以中间的FIN和ACK不能合并。另外每次断开连接需要FIN请求 + ACK,所以断开需要四次。

TIME_WAIT等待2MSL的意义?

  1. 确保连接可靠关闭,防止最后一个ACK的丢失。
  2. 避免套接字混淆(同一个端口对应多个socket)

注:主要目的是,对客户端会发的ACK丢失的情况做处理,可以在服务端再次发送FIN时回发ACK。

TCP、UDP区别

特性 TCP UDP
有无连接
数据有序性、完整性
效率高低
数据大小 无限制 每个数据包64K
应用方面 可靠通信 不需要可靠通信

TCP拥控、流控原理

Socket原理

版权声明
本文首发自简书,搜索作者 QinGeneral
同步发于CSDN博客,搜索作者 QinGeneral
同步发于微信公众号:AndroidRain
无需授权即可转载,甚至无需保留以上版权声明;
转载时请务必注明作者。

KhanZhang wechat
扫码关注公众号