美文网首页
iOS面试之网络模块

iOS面试之网络模块

作者: 木子心语 | 来源:发表于2019-11-30 19:06 被阅读0次

网络

网络内容如下

  • HTTP协议
  • HTTPS与网络安全
  • TCP / UDP
  • DNS解析
  • Session/Cookie


    网络.png

1.HTTP

超文本传输协议
- 请求/响应报文
- 连接建立流程
- HTTP的特点
  • 请求报文


    请求报文.png
  • 响应报文

响应报文.png
  • HTTP的请求方式都有哪些?
- get
- post
- head
- put
- delete
- options
  • GET 和 POST方式的区别?
- GET请求参数以?分割拼接到URL后面,POST请求参数在Body里面
- GET参数长度限制2048个字符,POST一般没有限制
- GET请求不安全,POST请求比较安全
如果再发送请求的参数中进行加密,有服务器端解密,可以保护数据的安全性.
  • 连接建立流程


    三次握手,四次挥手,网络请求.png
TCP三次握手(客户端Client,服务端Server)
- 客户端发起连接,需要发送一个SYN,同步报文,给Server端
- 连接建立
- 同时Server端会返回ACK(TCP报文),给客户端
- 这时候,客户端会再次回应一个确认报文ACK给Server端
- HTTP建立连接

HTTP请求
- http请求报文,到Server端
- Server端返回客户单一个http响应报文

TCP四次挥手
- 客户端发起连接断开
- Server端收到终止报文,会回给客户端确认的报文
- 此时,Server端仍有数据发给客户端,Server端向客户端FIN,ACK报文
- 客户端接收到Server的报文后,再次发送给Server确认报文,TCP连接四次挥手就完成了.
  • HTTP的特点
- 无连接:HTTP的持久连接
- 无状态: Cookie/Session
  • 持久连接
非持久连接.png
- 打开tcp连接,然后关闭tcp连接
- 重新建立tcp连接,每次发送的请求,都需要重新创建tcp的连接
持久连接.png
- 打开tcp,在一定时间,tcp请求在同一时间并在同一条线路上进行请求
- 经历一段时间之后,会关闭连接
思考-http提供持久连接的作用?
其实,是在请求响应中提供了效率.一定时间范围内,对网络请求响应的过程,连接复用,节省tcp连接过程时间

2.HTTPS与网络安全

HTTPS协议栈.png
HTTPS和HTTP有怎样的区别?
HTTPS - > HTTP + SSL/TLS

- IP是网络层
- TCP是传输层
- HTTP是应用层
- SSL/TLS是应用层之下,传输层之上,一个中间层
  • HTTPS连接建立流程是怎样的?


    HTTPS连接.png
- 客户单向Server端发送报文,TLS版本号,支持的加密算法,随机数C
- 商定加密算法,随机数S,server端证书
- 验证server证书,判断Server是否为合法server
- 组装会话秘钥
- 客户端发送报文,通过server的公钥对预主秘钥进行加密传输
- 通过私有解密得到预主秘钥
- 组装会话秘钥
- 加密的握手消息
会话秘钥
- random S + random C + 预主秘钥
https使用了哪些加密?
- 连接建立过程使用非对称加密,加密很耗时
- 后续通讯过程使用对称加密

3.TCP / UDP

- TCP与UDP,都属于传输层协议
- TCP,传输控制协议
- UDP,用户数据报协议
  • UDP
- 无连接
- 尽最大努力交付
- 面向报文:既不合并,也不拆分
面向报文.png
应用层会产生应用层报文
|
应用层原封不动通过UDP用户数据报的数据部分,拼接UDP首部,组成运输层的UDP数据报
|
UDP的数据报,在通过IP数据报的数据部分与IP首部拼接,组成了IP层
  • UDP功能:
- 复用
- 分用
- 差错检测
端口复用.png 端口分用.png
  • TCP
- 面向连接
- 可靠传输
- 面向字节流
- 流量控制
- 拥塞控制
面向连接:
- 数据传输开始之前,需要建立连接
- 三次握手
- 数据传输之后,需要释放连接
- 四次挥手
思考-为什么进行三次握手?
可靠传输
- 无差错
- 不丢失
- 不重复
- 按序到达

可靠传输是通过停止等待协议实现的
无差错情况
超时重传
确认丢失
确认迟到
无差错情况.png 超时重传.png 确认丢失.png 确认迟到.png

4.DNS解析

- 域名到IP地址的映射,DNS解析请求采用UDP数据报,且明文
DNS解析过程.png
- 客户端通过发送域名到DNS服务器,经过DNS服务器解析之后,获取IP,获取到IP就可以访问Server
  • DNS解析查询方式
- 递归查询
- 迭代查询
DNS解析递归查询.png
- 客户端向DNS服务器发送请求
- 客户端先通过本地DNS,返回一个结果的话,直接使用本地DNS
- 如果本地DNS不知道对应域名的IP的时候,询问根域DNS,
- 根域DNS再去询问顶级DNS
- 顶级DNS也不知道,通过权限DNS
- 把解析的IP返回客户端
  • 迭代查询
DNS解析迭代查询.png
- 如果本地DNS知道解析IP,直接返回客户端
- 如果顶级DNS/根域DNS/权限DNS告诉本地DNS那个DNS解析,把解析结
果最终返回本地DNS,本地DNS再把IP返回客户端
  • DNS解析存在哪些常见的问题?
- DNS劫持
- DNS解析转向
  • DNS劫持
DNS劫持.png
- 我们通过DNS服务器解析,获取IP,通过获取的IP访问Server
- 如果再域名解析的过程中,通过对DNS的劫持,会返回错误的IP,这样就不能访问Server
思考: DNS劫持与HTTP的关系?
- 没有关系
- DNS解析发生在HTTP建立连接之前
- DNS解析请求使用UDP数据报,端口号53
  • DNS解析转发


    DNS解析转发.png
- 为了节省资源,会把域名转发其他的DNS服务器(运营商DNS服务器)
- 域名到IP的转换,解析最终的IP结果
  • DNS劫持解决
- httpDNS
- 长连接
  • httpDNS
使用DNS协议向DNS服务器的53端口进行请求
|
使用HTTP协议向DNS服务器的80端口进行请求
  • 长连接
长连接.png

5.Session/Cookie

- HTTP协议无状态特点的补偿
  • Cookie
- Cookie主要用来记录用户状态,区分用户
- 状态保存在客户端
怎样修改Cookie ?
- 新cookie覆盖旧cookie
- 覆盖规则
怎样删除Cookie?
- 新cookie覆盖旧cookie
- 覆盖规则
- 设置Cookie的expires=过去的一个时间点,或者maxAge=0
怎样保证Cookie的安全?
- 对Cookie进行加密处理
- 只在https上携带Cookie
- 设置Cookie为httpOnly,防止跨站脚本攻击
  • Session
- Session也是用来记录用户状态的,区分用户的
- 状态存放在服务器端
session和cookie的关系
- session需要依赖于cookie机制

6.面试题

  • HTTP中的GET和POST方式有什么区别?
  • HTTPS连接建立流程是怎么样的?
  • TCP和UDP有什么区别?
  • TCP慢开始过程?
  • 客户端怎样避免DNS劫持?

QQ交流群: 796142709

相关文章

网友评论

      本文标题:iOS面试之网络模块

      本文链接:https://www.haomeiwen.com/subject/tlgrwctx.html