全方位剖析iOS高级技术问题(八)之网络相关问题

1,811 阅读12分钟

本文主要内容

一.HTTP协议
二.HTTPS与网络安全
三.TCP/UDP
四.DNS解析
五.Session/Cookie

截屏2022-08-24 11.38.35.png

一.HTTP协议

HTTP就是超文本传输协议。主要包含如下内容:

  • 请求/响应报文
  • 连接建立流程
  • HTTP的特点

1.1 请求报文 & 响应报文

  • 请求报文
    • 请求行
      1.方法字段包含GET、POST等;
      2.URL指请求的地址;
      3.协议版本一般为HTTP1.1版本;
      4.CRLF:回车换行。

    • 请求头部字段:Key&Value的形式组装起来
      1.首部字段名--:--值--回车换行; 2.由多个首部字段名构成首部字段区域

    • 请求实体主体:Get请求没有,Post请求才有。

截屏2022-08-29 09.35.46.png

  • 响应报文
    • 响应行
      1.版本;
      2.状态码;
      3.短语指状态码的描述; 4.CRLF回车换行。

    • 响应头部字段:Key&Value的形式组装起来
      1.首部字段名--:--值--回车换行; 2.由多个首部字段名构成首部字段区域

    • 响应实体主体

问题一:什么是HTTP?

  • 请求报文和响应报文组成结构;

问题二:HTTP的请求方式都有哪些?

  • GET、POST、HEAD、PUT、DELETE、OPTIONS

问题三:GET和POST方式的区别
基本描述

  • GET请求参数以?分割拼接到URL后面,POST请求参数在Body里面;
  • GET参数长度限制2048个字符,POST一般没有该限制;
  • GET请求不安全,POST请求比较安全。

深层描述:从语义的角度来回答,即从协议的定义规范。

  • GET用来获取资源,是安全的幂等的可缓存的
  • POST用来处理资源,是非安全的非幂等的不可缓存的

安全性:不应该引起Server端的任何状态变化。常用的安全性的请求方式有GETHEADOPTIONS
幂等性:同一个请求方法执行多次和执行一次的效果完全相同。如PUTDELETE等。 可缓存行:请求是否可以被缓存。如GET、HEAD等。

问题四:理解哪些状态码?含义是什么

  • 1XX:
  • 2XX:响应成功等
  • 3XX:网路重定向
  • 4XX:客户端请求问题
  • 5XX:Server端异常

1.2 连接建立流程

  • 三次握手
  • 四次挥手 截屏2022-08-29 10.15.39.png

1.3 HTTP的特点

  • 无连接。HTTP的连接有建立连接和释放连接的过程。解决无连接的问题可以使用HTTP的持久连接
  • 无状态。在多次发送HTTP请求时,server端无法知道是否是同一用户。涉及到Cookie/Session。

非持久连接和持久连接

  • 非持久连接
    客户端Client和服务端Server在进行交互时,会打开一个TCP连接进行网络数据的传输,然后会关闭此TCP连接。当发送第二个请求时,会重新建立一个新的TCP连接。即每次发送的网络请求,都需要重新创建TCP连接,重新进行三次握手和四次挥手的过程,此过程就是非持久连接。 截屏2022-08-29 10.24.09.png

  • 持久连接
    (1)打开一条TCP通道后,在一定时间内,多个HTTP请求可能在同一条TCP链路上进行请求和响应的传递,在持续一定时间后,再关闭TCP连接通道。 截屏2022-08-29 10.24.41.png

(2)头部字段

  • Connection: Keep-alive,客户端期许采用持久连接;
  • time:20,持久连接或TCP连接需要持续多长时间有效;
  • max:10,此条TCP连接最多能发送多少条HTTP请求和响应对。

(3)在持久连接中,如何判断一个请求是否结束?

  • Content-length:请求报文和响应报文都有头部字段,在响应报文的头部字段中有Content-length头部字段,在发送请求时Server端会携带响应数据的数据大小通过此字段标识,客户端根据接收数据的字节数是否达到此字段的对应的值,如果达到,说明此条HTTP请求的响应已经接收完毕,HTTP请求结束。
  • chunked:在POST请求数据时,Server返回给客户端的数据需要多次响应返回,可以通过HTTP响应报文中头部字段chunked来判断请求是否结束。当有多个块通过HTTP的TCP连接传输给客户端,每一个报文都带有chunked字段,最后一个块有一个空的chunked,通过判段此字段是否为空来判断前一个HTTP请求是否结束。

问题五:Charles抓包原理是怎样的?

  • 也称中间人攻击;
  • 原理是:对客户端伪装成服务器,对服务器伪装成客户端。Charles 通过将自己设置成系统的网络访问代理服务器,使得所有的网络访问请求都通过它来完成,从而实现了网络封包的截取和分析。 过程中,Charles需要拿到服务器证书公钥 和 HTTPS连接的对称密钥,前提是客户端选择信任并安装Charles的CA证书。

截屏2022-08-29 10.59.41.png

image.png

二.HTTPS与网络安全

2.1 HTTPS和HTTP的区别

截屏2022-08-29 11.06.01.png

  • HTTP在应用层,SSL/TLS位于应用层和传输层之间的协议中间层。HTTPS就是在应用层HTTP的基础上,在应用层和传输层之间插入了SSL/TLS的协议中间层,实现网络安全的机制。
  • HTTPS是安全的HTTP,其安全是由插在应用层和传输层之间的SSL/TLC协议中间层来保障的

2.2 HTTPS连接建立流程

截屏2022-08-29 11.44.16.png

截屏2022-08-29 11.44.57.png

问题:HTTPS都使用了哪些加密手段?

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

非对称加密

  • 当使用公钥加密时,用私钥解密;当使用私钥加密时,要公钥解密
  • 只有公钥在网络传递过程中传递,私钥保留在可靠方Server端截屏2022-08-29 11.48.36.png

对称加密

  • 加密解密使用同一把密钥
  • 该密钥会在网络中进行传递,可能会发生中间人攻击。 截屏2022-08-29 11.50.44.png

三.TCP/UDP

传输层协议:

  • TCP:传输控制协议
  • UDP:用户数据报协议

3.1 UDP用户数据报协议

特点

  • 无连接:发送UDP数据报时无需事先建立连接,也不需要释放连接;

  • 尽最大努力交付:不保证可靠传输;

  • 面向报文:既不合并,也不拆分。

    既不合并,也不拆分含义:
    1.首先应用层会产生应用层报文,该报文可大可小,如果小了不会做合并,大了也不会做拆分,才向运输层传输。
    2.而是将报文原封不动的作为UDP用户数据报的数据部分,再拼接一个UDP首部,就组成了运输层的UDP数据报。
    3.接着将UDP数据报作为IP数据报的数据部分,拼装一个IP首部,通过数据链路层、物理层向外传送。
    

截屏2022-08-29 17.05.10.png

功能

  • 复用、分用 截屏2022-08-29 17.07.20.png

  • 差错检测 截屏2022-08-29 17.10.27.png

3.2 TCP传输控制协议

特点

  • 面向连接
    数据传输开始之前,需要建立连接,即三次握手;

为什么要进行三次握手?
有一种场景:客户端发送连接建立请求的SYN同步报文,在网络路由传输过程中发生了超时。如果只有两次握手,当发送的SYN同步报文发生了超时(或丢失),客户端会启用超时重传策略,重新发送一个SYN同步报文,当Server端收到SYN同步报文后,会回复客户端一个同步确认报文,此时TCP连接就建立了。假设在Server端回复客户端同步确认报文之后,又收到了刚才超时的SYN同步报文,Server服务端会认为客户端需要又建立一个连接,如果是两次握手,对于Server端来说相当于客户端发生了2次TCP连接,而实际上第二次TCP连接是由于重传机制导致的,客户端真正只想发起一个连接。
如果是三次握手,当客户端经过重传SYN同步报文,Server端会回复客户端同步确认报文,客户端收到同步确认报文会回传给Server端一个ACK确认报文。如果此时超时的SYN报文到达Server端,同时Server端回复给客户端同步确认报文,经过一段时间,客户端并没有再次给Server端回复ACK确认报文,Server端就可以把第二次发送的SYN报文看成是一个超时的报文,客户端并没有想真正建立连接。

数据传输结束之后,需要释放连接,即四次挥手。(全双工)
客户端主动发起连接释放,由客户端发送终止报文FIN到Server端,Server端回复给客户端一个ACK确认报文,此时由客户端到Server的连接就关闭了,称为半关闭状态。如果Server端还有数据可以向客户端发送,可以通过Server端到客户端方向的连接进行数据传送,但客户端无法向Server端传递。在一段时间内,Server端会发送一个终止确认报文来断开由Server端到客户端的连接,然后客户端回给Server端一个ACK确认报文。

截屏2022-08-30 09.19.03.png

  • 可靠传输
    保证可靠传输,报文需要(1)无差错(2)不丢失(3)不重复(4)按序到达。 在TCP层面,通过停止等待协议实现,

    • 无差错情况 截屏2022-08-30 09.22.27.png

    • 超时重传 截屏2022-08-30 09.24.37.png

    • 确认丢失 截屏2022-08-30 09.26.00.png

    • 确认迟到
      截屏2022-08-30 09.26.37.png

  • 面向字节流

  • 流量控制

  • 拥塞控制 TCP慢启动:慢开始、拥塞避免 截屏2022-09-14 10.30.51.png

四.DNS解析

1、DNS解析详细过程

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

截屏2022-09-14 10.37.18.png

2、DNS解析查询方式

  • 递归查询 “我去给你问一下”

截屏2022-09-14 10.40.47.png

  • 迭代查询 “我告诉你谁可能知道”

截屏2022-09-14 10.41.39.png

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

  • DNS劫持问题

DNS劫持与HTTP的关系是怎样的? 没有关系。DNS解析发生在HTTP建立连接之前,DNS解析请求使用UDP数据报,端口号53。

怎样解决DNS劫持?
1.httpDNS。本身用DNS协议向DNS服务器的53端口进行请求,换成使用HTTP协议向DNS服务器的80端口进行请求。

截屏2022-09-14 10.54.22.png

2.长连接

截屏2022-09-14 10.55.24.png

  • DNS解析转发问题

截屏2022-09-14 10.49.55.png

五.Session/Cookie

Session和Cookie的产生是对HTTP协议无状态特点的补偿

截屏2022-09-17 11.17.35.png

1、Cookie

Cookie主要用来记录用户状态,区分用户;状态保存在客户端

Cookie在客户端和Server端运作过程
当客户端发送一个HTTP请求请求对应的Server端,Server端会生成Cookie,然后通过HTTP的响应报文携带上Cookie返回给客户端,客户端会保存Cookie。Server端生成的Cookie是如何通过响应报文传送给客户端的?由于响应报文有头部字段,Server端通过添加头部字段Set-Cookie把对应的内容通过首部字段传给客户端,客户端在后续的HTTP请求报文中把之前Server端返回给客户端的Cookie添加到HTTP请求报文的Cookie首部字段中,就可以传回给Server端,Server端对传回来的Cookie进行判断来对用户进行识别。

截屏2022-09-14 11.49.25.png

  • 客户端发送的Cookie在HTTP请求报文的Cookie首部字段中;
  • 服务器端设置HTTP响应报文的Set-Cookie首部字段

问题一:怎样修改Cookie

  • 新Cookie覆盖旧Cookie
  • 覆盖规则:name、path、domain等需要与原Cookie一致;

问题二:怎样删除Cookie

  • 新Cookie覆盖旧Cookie
  • 覆盖规则:name、path、domain等需要与原Cookie一致;
  • 设置Cookie的expires=过去的一个时间点,或者macAge=0

问题三:怎样保证Cookie的安全?

  • 对Cookie进行加密处理;
  • 只在HTTPS上携带Cookie;
  • 设置Cookie为HTTPOnly,防止跨站脚本攻击。

2.Session

Session也是用来记录用户状态,区分用户的;状态存放在服务器端

问题一:Session和Cookie的关系是怎样的?

  • Session需要依赖于Cookie机制;
  • Session工作流程

截屏2022-09-20 14.21.48.png

本文总结

问题1:HTTP中的GET和POST方式有什么区别?

从语义的角度来回答,即从协议的定义规范。

  • GET用来获取资源,是安全的幂等的可缓存的
  • POST用来处理资源,是非安全的非幂等的不可缓存的

问题2:HTTPS连接建立流程是怎样的?

客户端给服务器端发送一个支持的加密算法列表,包括TLS版本号和随机数C,然后服务器端会回给客户端server证书、商定的加密算法和随机数S。接着先通过非对称加密进行对称加密的密钥传输,之后HTTP之间的网络请求通过被非对称加密所保护的对称密钥进行网络访问等。 image.png

问题3:TCP和UDP有什么区别?

从特点和功能方面:

  • TCP面向连接,支持可靠传输,面向字节流,并且提供了流量控制和拥塞的控制;
  • UDP无连接,简单提供复用、分用以及差错检测等基本的传输层功能。

问题4:简述TCP的慢开始过程?

TCP拥塞控制的机制原理,涉及慢开始拥塞避免算法。

问题5:客户端怎样避免DNS劫持?

  • 1.httpDNS。本身用DNS协议向DNS服务器的53端口进行请求,换成使用HTTP协议向DNS服务器的80端口进行请求;
  • 2.长连接。

有任何问题,欢迎👏各位评论指出!觉得博主写的还不错的麻烦点个赞喽👍