[iOS面试]第8章 网络相关面试问题

注意:本文主讲网络相关面试问题,包括HTTP协议、HTTPS协议与网络安全、TCP/UDP区别、DNS解析。

一、HTTP协议(超文本传输协议)

HTTP协议主要包含内容:
请求/响应报文、连接建立流程、HTTP特点。

1、请求/响应报文

请求报文格式

请求报文格式:
请求方法 +请求URL +协议版本+请求首子段键值对 +报文主体(一般在请求中是没有报文主体的)

响应报文格式
响应报文格式:
协议版本 +状态吗 +响应首字段 +响应报文主体

1)、http的请求方式都有哪些?
GET、POST、HEAD、PUT、DELETE、OPTIONS

(2)、GET和POST方式的区别?
初级工程师回答
1>、GET请求参数以?分割拼接到URL后面,POST请求参数在Body里面。
2>、GET参数长度限制2048个字符,POST一般没有该限制。
3>、GET请求不安全,POST请求比较安全。

高级工程师回答,从语义的角度回答(标准答案)
(语义:指的协议的定义规范. 语法:具体实现手段或者路径)

  • GET:获取资源。安全的、幂等的、可缓存的。
  • POST:处理资源。非安全的、非幂等的、不可缓存的。

  • 安全性:不应该引起Server端的任何状态变化。常见安全性的请求方式 :get、head、options

  • 幂等性:同一个请求方法执行多次和执行一次的效果完全相同。常见幂等性的请求方式 :get、put、delete
  • 可缓存性:请求是否可以被缓存。(代理服务器可以做缓存,多次请求时可能是获取的缓存)。常见可缓存性的请求方式:get、head

(3)、你都了解哪些状态码,他们的含义是什么?
1xx:
2xx:响应成功(200)
3xx:网络重定向(301、302)
4xx:客户端发起请求出错,服务器没有相应(401、404)
5xx:服务器出错(502 503)

2、连接建立流程

  • 三次握手、四次挥手

3、HTTP的特点:无连接、无状态。

(1)、无连接: 指的是http的连接有建立和释放连接的过程。

解决方案:HTTP的持久连接。

1>、持久连接头部字段:
Connection:keep-alive (允许持久连接)
time:20 (持久连接连接时长)
max:10 (该http连接最多可以发生多少次请求)

2>、怎样判断一个请求是否结束?
Content-length :1024 (响应头)
chunked,最后会有一个空的chunked,server会给客户端返回多次响应,根据判断响应报文的头部字段chunked是否为空,为空则表示没有后续了。

(2)、无状态: 多次发送http请求,如果是同一个用户对于server端是不知道是同一个用户的。

解决方案:cookie、session。

问题: Charles抓包原理是咋样的?
利用HTTP中间人攻击漏洞实现的。

二、HTTPS协议与网络安全

1、HTTPS和HTTP有怎样的区别?

HTTPS = HTTP+SSL/TLS。HTTPS是安全版的HTTP, 是由一个SSL/TLS,插在传输层之上,应用层之下的协议来保证的。

https协议栈

2、HTTPS连接建立流程:

https连接建立流程

HTTPS连接过程大致可分为八步:

  • 1、客户端访问HTTPS连接。

客户端会把安全协议版本号、客户端支持的加密算法列表、随机数C发给服务端。

  • 2、服务端发送证书给客户端

服务端接收密钥算法配件后,会和自己支持的加密算法列表进行比对,如果不符合,则断开连接。否则,服务端会在该算法列表中,选择一种对称算法(如AES)、一种公钥算法(如具有特定秘钥长度的RSA)和一种MAC算法发给客户端。

服务器端有一个密钥对,即公钥和私钥,是用来进行非对称加密使用的,服务器端保存着私钥,不能将其泄露,公钥可以发送给任何人。
在发送加密算法的同时还会把数字证书和随机数S发送给客户端

  • 3、客户端验证server证书

会对server公钥进行检查,验证其合法性,如果发现发现公钥有问题,那么HTTPS传输就无法继续。

  • 4、客户端组装会话秘钥

如果公钥合格,那么客户端会用服务器公钥来生成一个前主秘钥(Pre-Master Secret,PMS),并通过该前主秘钥和随机数C、S来组装成会话秘钥

  • 5、客户端将前主秘钥加密发送给服务端

是通过服务端的公钥来对前主秘钥进行非对称加密,发送给服务端

  • 6、服务端通过私钥解密得到前主秘钥

服务端接收到加密信息后,用私钥解密得到主秘钥。

  • 7、服务端组装会话秘钥

服务端通过前主秘钥和随机数C、S来组装会话秘钥。
至此,服务端和客户端都已经知道了用于此次会话的主秘钥。

  • 8、数据传输

客户端收到服务器发送来的密文,用客户端密钥对其进行对称解密,得到服务器发送的数据。

同理,服务端收到客户端发送来的密文,用服务端密钥对其进行对称解密,得到客户端发送的数据。

(1)、会话秘钥:
会话秘钥 = random S + random C + 预主秘钥

(2)、https都使用了哪些加密手段?为什么?
1>、连接建立过程使用非对称加密,非对称加密很耗时的。
2>、后续通讯过程使用对称加密

(3)、对称加密(AES):

对称加密

(4)、非对称加密(RSA):

非对称加密

三、TCP/UDP区别

1、UDP(用户数据报协议)

特点:无连接;尽最大努力交付(不保证可靠传输);面向报文(既不合并,也不拆分)。

功能:复用、分用;差错检测。
复用分用

差错检测

2、TCP(传输控制协议)

特点:面向连接;可靠传输;面向字节流;流量控制;拥塞控制。

(1)、面向连接

数据传输开始之前, 需要建立连接。
三次握手
数据传输结束之后, 需要释放连接。
四次挥手

问题:TCP三次握手为什么不是两次?为什么要进行三次握手
答:
三次握手原因(不是两次握手原因):当客户端发送连接报文时,当出现网络超时时,会启动超时重发策略,服务端同时也会返回超时重发的报文,当客户端收到的报文是超时重发的,会取消和服务端创建连接,只保证会创建一个TCP连接。

(2)、可靠传输

如何保证可靠传输:保证我们的报文 ->无差错、不丢失、不重复、按序到达
如何实现可靠传输:通过停止等待协议实现。
停止等待协议四方面: 无差错情况、超时重发、确认丢失、确认迟到。

无差错情况

超时重传

确认丢失

确认迟到

(3)、面向字节流

面向字节流

  • 每次发送多少个字节是由TCP控制的
  • 不管发送方一次性提交给TCP的缓冲是多大的数据, 对于TCP本身来说它会根据实际情况来划分, 并不是发送方发送了10个字节,就把10个字节一次性发给接收方,可能会把10字节拆分成3个字节和7个字节分两次发送给接收方,这个就是面向字节流概念.
  • 可以和UDP面向报文特点比较
(4)、流量控制

流量控制

  • 滑动窗口协议: 发送方定义为客户端, 接收方为server端. 当发送数据, 如果接收方接收缓存没那么大,接收窗口很小,此时发送方窗口很大,会以更快速率往接收方发送数据,需要由接收窗口通过TCP报文首部字段中更改窗口值,调整发送方发送速率.
(5)、拥塞控制

慢开始、拥塞避免(策略);
快恢复、快重传(策略)。

拥塞控制
横轴:交互次数或者轮询次数 纵轴:窗口值大小

问题:请简单描述TCP慢启动特点?
答:考察TCP慢开始、拥塞避免策略

问题:什么是TCP? TCP的理解是怎样?
答:根据TCP五大特点回答.

四、DNS解析

1、了解DNS解析

问题:是否了解DND解析?DNS解析是怎样的过程?

DNS解析: 域名到IP地址的映射,DNS解析请求采用UDP数据报,且明文解析

2、DNS解析查询方式

(1)、递归查询

递归查询

(2)、迭代查询

迭代查询

3、DNS解析存在哪些常见的问题?

  • DNS劫持问题
  • DNS解析转发问题
(1)、DNS劫持问题

DNS劫持

问题: DNS劫持与HTTP的关系是咋样的?
答: 没有关系。
(1)、DNS解析发生在HTTP建立连接之前;
(2)、DNS解析请求使用UDP数据报,端口号53。

(2)、DNS解析转发问题

DNS解析转发

问题: 怎样解决DNS劫持?
答: 两种解决方案: httpDNS 和长连接

1>、httpDNS
DNS解析实质上 ,使用DNS协议向DNS服务器53端口进行请求 –>
使用httpDNS ,实质上使用HTTP协议向DNS服务器80端口进行请求,
不产生正常的DNS解析了,也就不涉及到DNS劫持问题.

httpDNS解决DNS劫持问题流程

2>、长连接
长连接解决DNS劫持问题

  • 长连server理解为代理服务器.
  • 客户端和长连server可以建立TCP的长连通道.(客户端发送http请求,可以通过长连通道把http请求传给长连server.)
  • 长连server通过内网专线进行内网的DNS的解析,这样就规避了公网DNS解析问题.
  • Session/Cookie 是对HTTP协议无状态特点的补偿.

1>、Cookie

问题:什么是Cookie?
Cookie主要用来记录用户状态, 区分用户; 状态保存在客户端.

1、怎样设置Cookie?
(1)、 客户端发送的Cookie在http请求报文的Cookie首部字段中;
(2)、 服务器端设置http响应报文的Set-Cookie首部字段, 向客户端传递Cookie内容。

2、怎样修改Cookie?
(1)、新Cookie覆盖旧Cookie。
(2)、覆盖规则:请求头部字段 name、path、domain等需要与原Cookie一致。

3、怎样删除Cookie?
(1)、新Cookie覆盖旧Cookie。
(2)、覆盖规则:name、path、domain等需要与原Cookie一致。
(3)、设置Cookie的expires=过去的一个时间点,或者maxAge=0

4、怎样保证Cookie的安全?
(1)、对Cookie进行加密处理。(会有脚本攻击获取Cookie)
(2)、只在HTTPS上携带Cookie。
(3)、设置Cookie为httpOnly,防止跨站脚本攻击。

2>、Session

Session也是用来记录用户状态,区分用户的;状态存放在服务器端
Session和Cookie的关系是怎样的?Session需要依赖于Cookie机制。

Session工作流程

六、网络相关面试问题总结:

1、HTTP中的get和post方式有什么区别?
答: 见上文

2、HTTPS连接建立的流程是咋样的?
答:

3、TCP和UDP有什么区别?
答:(可以从特点和功能回答)
TCP:面向连接;可靠传输;面向字节流;流量控制;拥塞控制。
UDP:复用、分用;差错检测 基本的传输功能。 无连接;尽最大努力交付(不保证可靠传输);面向报文(既不合并,也不拆分)。

4、请简述TCP的慢开始过程?
答: TCP慢开始、拥塞避免策略回答

5、客户端怎样避免DNS劫持?
答: 两种解决方案: httpDNS 和长连接