iOS面试之网络大全
2020-03-13 本文已影响0人
原来是泽镜啊
网络
网络内容如下
-
HTTP协议
-
HTTPS与网络安全
-
TCP / UDP
-
DNS解析
-
Session/Cookie
image
1.HTTP
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:413038000,不管你是大牛还是小白都欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!
推荐阅读
iOS开发——最新 BAT面试题合集(持续更新中)
超文本传输协议
- 请求/响应报文
- 连接建立流程
- HTTP的特点
-
请求报文
image -
响应报文
- HTTP的请求方式都有哪些?
- get
- post
- head
- put
- delete
- options
- GET 和 POST方式的区别?
- GET请求参数以?分割拼接到URL后面,POST请求参数在Body里面
- GET参数长度限制2048个字符,POST一般没有限制
- GET请求不安全,POST请求比较安全
如果再发送请求的参数中进行加密,有服务器端解密,可以保护数据的安全性.
-
连接建立流程
image
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
- 持久连接
- 打开tcp连接,然后关闭tcp连接
- 重新建立tcp连接,每次发送的请求,都需要重新创建tcp的连接
image
- 打开tcp,在一定时间,tcp请求在同一时间并在同一条线路上进行请求
- 经历一段时间之后,会关闭连接
思考-http提供持久连接的作用?
其实,是在请求响应中提供了效率.一定时间范围内,对网络请求响应的过程,连接复用,节省tcp连接过程时间
2.HTTPS与网络安全
imageHTTPS和HTTP有怎样的区别?
HTTPS - > HTTP + SSL/TLS
- IP是网络层
- TCP是传输层
- HTTP是应用层
- SSL/TLS是应用层之下,传输层之上,一个中间层
-
HTTPS连接建立流程是怎样的?
image
- 客户单向Server端发送报文,TLS版本号,支持的加密算法,随机数C
- 商定加密算法,随机数S,server端证书
- 验证server证书,判断Server是否为合法server
- 组装会话秘钥
- 客户端发送报文,通过server的公钥对预主秘钥进行加密传输
- 通过私有解密得到预主秘钥
- 组装会话秘钥
- 加密的握手消息
会话秘钥
- random S + random C + 预主秘钥
https使用了哪些加密?
- 连接建立过程使用非对称加密,加密很耗时
- 后续通讯过程使用对称加密
3.TCP / UDP
- TCP与UDP,都属于传输层协议
- TCP,传输控制协议
- UDP,用户数据报协议
- UDP
- 无连接
- 尽最大努力交付
- 面向报文:既不合并,也不拆分
image
应用层会产生应用层报文
|
应用层原封不动通过UDP用户数据报的数据部分,拼接UDP首部,组成运输层的UDP数据报
|
UDP的数据报,在通过IP数据报的数据部分与IP首部拼接,组成了IP层
- UDP功能:
- 复用
- 分用
- 差错检测
image
image
- TCP
- 面向连接
- 可靠传输
- 面向字节流
- 流量控制
- 拥塞控制
面向连接:
- 数据传输开始之前,需要建立连接
- 三次握手
- 数据传输之后,需要释放连接
- 四次挥手
思考-为什么进行三次握手?
可靠传输
- 无差错
- 不丢失
- 不重复
- 按序到达
可靠传输是通过停止等待协议实现的
无差错情况
超时重传
确认丢失
确认迟到
image
image
image
image
4.DNS解析
- 域名到IP地址的映射,DNS解析请求采用UDP数据报,且明文
image
- 客户端通过发送域名到DNS服务器,经过DNS服务器解析之后,获取IP,获取到IP就可以访问Server
- DNS解析查询方式
- 递归查询
- 迭代查询
image
- 客户端向DNS服务器发送请求
- 客户端先通过本地DNS,返回一个结果的话,直接使用本地DNS
- 如果本地DNS不知道对应域名的IP的时候,询问根域DNS,
- 根域DNS再去询问顶级DNS
- 顶级DNS也不知道,通过权限DNS
- 把解析的IP返回客户端
- 迭代查询
- 如果本地DNS知道解析IP,直接返回客户端
- 如果顶级DNS/根域DNS/权限DNS告诉本地DNS那个DNS解析,把解析结
果最终返回本地DNS,本地DNS再把IP返回客户端
- DNS解析存在哪些常见的问题?
- DNS劫持
- DNS解析转向
- DNS劫持
- 我们通过DNS服务器解析,获取IP,通过获取的IP访问Server
- 如果再域名解析的过程中,通过对DNS的劫持,会返回错误的IP,这样就不能访问Server
思考: DNS劫持与HTTP的关系?
- 没有关系
- DNS解析发生在HTTP建立连接之前
- DNS解析请求使用UDP数据报,端口号53
-
DNS解析转发
image
- 为了节省资源,会把域名转发其他的DNS服务器(运营商DNS服务器)
- 域名到IP的转换,解析最终的IP结果
- DNS劫持解决
- httpDNS
- 长连接
- httpDNS
使用DNS协议向DNS服务器的53端口进行请求
|
使用HTTP协议向DNS服务器的80端口进行请求
- 长连接
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劫持?
文章来源于网络,如有侵权,请联系小编删除。