《新浪微博剖析 iOS 高级面试》笔记(八):网络相关面试问题

633 阅读6分钟

我的Github地址

小码哥《恋上数据结构与算法》笔记

极客时间《iOS开发高手课》笔记

iOS大厂面试高频算法题总结

iOS面试资料汇总

HTTP协议

1、请求/响应报文

a、请求报文

  • 请求行
  • 首部字段区
  • 请求实体主体
  • get请求一般不带实体主体,post请求一般带实体主体。

b、响应报文

  • 响应行
  • 首部字段区
  • 响应实体主体

c、HTTP的请求方式都有哪些?

d、GET和POST的区别?

  • get请求参数以?分隔拼接到URL后面,post请求参数在Body内部。
  • get参数长度显示2048个字符,post一般没有该限制。
  • get请求不安全,post请求比较安全。
  • 安全性表示不应该引起server端的任何状态变化。
  • 幂等性表示同一个请求方法执行多次和执行一次的效果完全相同。
  • 可缓存性表示请求是否可以被缓存。

e、你都了解哪些状态码?

HTTP 响应代码

2、连接建立流程

3、HTTP的特点

  • 无连接
    • HTTP持久连接方案可解决该问题
  • 无状态
    • Cookie/Session

4、持久连接

a、开启持久连接需要设置的头部字段

  • Connection: keep-alive 需要开启持久连接
  • time: 20 持续时间
  • max: 10 持久连接最多可发起的网络请求次数

b、怎样判断一个请求是否结束?

  • Content-length: 1024根据所接受数据是否达到Content-length来判断。
  • chunkedpost请求会有多次返回,最后一次返回会有一个空的chunked

5、Charles抓包原理是怎样的?

  • 是利用HTTP中间人攻击漏洞来实现的。
  • 中间人可以篡改发送和接收的数据。

HTTPS与网络安全

1、HTTP和HTTPS有什么区别?

  • HTTPS就是在HTTP的基础之上,在应用层传输层之间增加了SSL/TLS,为我们实现网络安全机制。
  • HTTPS安全的HTTP

2、HTTPS链接建立流程是怎样的?

  • 客户端向服务器发送一段报文,报文内容包括部分,客户端支持的TLS协议版本客户端支持的加密算法一段随机数C
  • 服务器返回客户端一段握手的报文消息,内容也包括部分,服务器从客户端上报的多种加密算法中选择的加密算法一段随机数S服务器证书
  • 客户端对服务器返回的证书进行验证,判断服务器是否是合法的服务器,即对服务器公钥进行验证。
  • 客户端通过预主密钥一段随机数C一段随机数S,组装会话密钥
  • 客户端通过服务器的公钥预主密钥进行加密传输。
  • 服务器通过私钥解密得到预主密钥
  • 服务器通过预主密钥一段随机数C一段随机数S,组装会话密钥
  • 客户端和服务器相互发送加密的握手消息,验证握手是否完成。

a、会话秘钥

3、HTTPS都使用了哪些加密手段?为什么?

  • 连接建立过程使用非对称加密,非对称加密很耗时
  • 后续通信过程使用对称加密

a、非对称加密

b、对称加密

  • 对称加密秘钥如果遗失,可能会造成中间人攻击

TCP/UDP

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

  • 特点
    • 无连接
    • 尽最大努力交付
    • 面向报文
      • 即不合并、也不拆分
  • 功能
    • 复用
    • 分用
    • 差错检测

2、TCP(传输控制协议)

  • 特点
    • 面向连接
    • 可靠传输
      • 停止等待协议
        • 无差错情况(无差错)
        • 超时重传(不丢失)
        • 确认丢失(不重复)
        • 确认迟到(按序到达)
    • 面向字节流
    • 流量控制
      • 滑动窗口协议
      • 接收方有接收缓存,如果发送速度过快,可能造成溢出
      • 接收方可以动态调整发送方的发送窗口,达到动态调整发送速率的目的。
      • 发送窗口接收窗口是两个字段,位于TCP报文的首部。
    • 拥塞控制
      • 慢开始、拥塞避免
      • 快恢复、快重传

a、为什么要进行三次握手而不是两次?

  • 是为了解决超时场景。
  • 如果第一个1.SYN超时,客户端会重新发送一次1.SYN
  • 服务器在收到第二次SYN后,会发送确认信息,建立连接。
  • 如果没有第三次握手,那么第一个超时1.SYN可能会再次发送给服务器服务器会认为客户端想再次建立一个新的链接。
  • 如果有第三次握手,那么第一个超时1.SYN会接收到服务器2.SYN,但是不会再发送1.ACK服务器,就不会再建立一个新的链接。

  • 断开连接时,需要分别断开客户端服务器服务器客户端的链接。
  • 客户端发送6.FIN服务器接收后返回7.ACK,即断开客户端服务器的链接。
  • 此时处于半关闭状态,如果服务器还有未发送完的信息,可以继续从服务器客户端发送信息。
  • 服务器客户端发送8.FIN,ACK,客户端发送9.ACK,即断开服务器客户端的链接。

DNS解析

1、了解DNS解析吗?

  • 域名到IP地址的映射,DNS解析请求采用UDP数据报,且明文。
  • DNS解析查询方式
    • 递归查询
    • 迭代查询

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

  • DNS劫持问题

  • DNS解析转发问题

    • 可能造成跨网访问,效率降低。

a、DNS劫持与HTTP的关系是怎样的?

  • 没有关系
  • DNS解析发生在HTTP建立连接之前
  • DNS解析请求使用UDP数据报,端口号53

b、怎么解决DNS劫持?

  • httpDNS
    • 使用HTTP协议向DNS服务器的80端口进行请求
  • 长连接

Session/Cookie

  • HTTP协议无状态特点的补偿

1、Cookie

  • Cookie主要用来记录用户状态,区分用户;状态保存在客户端
  • 客户端发送的cookiehttp请求报文的Cookie首部字段中。
  • 服务器端设置http响应报文的Set-Cookie首部字段。

a、怎样修改Cookie?

  • cookie覆盖旧cookie
  • 覆盖规则:name、path、domain等需要与原cookie一致。

b、怎样删除Cookie?

  • cookie覆盖旧cookie
  • 覆盖规则:name、path、domain等需要与原cookie一致。
  • 设置cookieexpires=过去的一个时间点,或者maxAge=0

c、怎样保证Cookie的安全?

  • Cookie进行加密处理。
  • 只在https上携带Cookie
  • 设置CookiehttpOnly,防止跨站脚本攻击。

2、Session

  • Session也是用来记录用户状态,区分用户的;状态存放在服务器端
  • Seesion需要依赖于Cookie机制实现。

网络相关面试总结

  • HTTP中的GETPOST方式有什么区别?
  • HTTPS链接建立流程是怎样的?
  • TCPUDP有什么区别?
  • 请简述TCP的慢开始过程
  • 客户端怎样避免DNS劫持?