iOS开发小记-网络篇(持续更新)

工做须要,网络接触的不算深刻,留个坑后续填上~设计模式

五层协议体系


其中TCP/IP是一类协议系统,是用于网络通讯的协议集合。TCP/IP协议传统认为值四层协议 浏览器

HTTP和HTTPS


  • 什么是HTTP?

HTTP是客户端浏览器或者其余程序与Web服务器之间的应用层通讯协议。在Internet上的Web服务器上存放的内容都是超文本信息,客户端须要经过HTTP协议传输要访问的超文本信息。缓存

  • GET、POST

GET和POST是最经常使用的请求方式,有如下区别:安全

  1. GET一般用于查询、获取数据,而POST请求则用于发送数据。
  2. GET请求的参数明文放在URL中,所以不能使用GET请求传输敏感数据,POST请求的参数保存在请求头中(也是明文),相对安全一些。
  3. GET请求参数会被缓存,可是POST不会。
  4. GET请求参数类型只能为ASCII字符,POST没有限制。
  5. GET请求参数有长度限制,POST没有。
  • HTTP的缺点
  1. 通讯内容为明文,即未加密,内容可能被窃听。
  2. 通讯双方没有验证身份,可能会被冒充。
  3. 接受的报文没法确保完整性,可能中途被篡改。
  • HTTPS

针对上述安全性问题,在HTTP协议基础上,经过在HTTP和TCP中间加了一层SSL加密层,从而诞生了HTTPS。针对上述三个问题,HTTPS增长了通讯加密、证书认证和完整性保护。服务器

  • HTTPS的握手过程
  1. 客户端经过HTTPS访问Web服务器,要求创建SSL链接。
  2. Web服务器收到请求后,会将网站的证书信息(包含公钥)发送给客户端。
  3. 客户端收到后判断公钥是否有效,无效则警告,有效则随机生成数串,而且根据此数串生成共享密钥。
  4. 客户端经过公钥对数串加密,而后发送给Web服务器。
  5. Web服务器接收到加密报文后,经过私钥解密报文,并根据此数串生成共享密钥。此时服务器和客户端拥有相同的共享密钥,并以此加密通讯。
  • HTTP和HTTPS区别
  1. HTTPS协议须要在CA上申请证书,通常须要收费。
  2. HTTP是明文传输,HTTPS是SSL加密传输。
  3. 链接方式不一样,端口号也不一样,HTTP是80端口,HTTPS是443。
  4. HTTP是无状态的,HTTPS须要身份验证。
  5. HTTPS握手阶段比较耗时,会延长加载时间。
  • HTTP能实现长链接么?

也能,可是并不是真正的全双工通讯,它基于客户端的长轮询或者Long poll来实现的,比较消耗资源,也没法让服务器主动通知客户端。网络

TCP的三次握手和四次挥手


  • TCP链接的创建(三次握手)

最开始的时候客户端和服务器都是处于CLOSED状态。主动打开链接的为客户端,被动打开链接的是服务器。忽略报文内容,大体步骤为:网站

  1. 客户端告诉服务器须要创建TCP链接。
  2. 服务器收到报文后,若是赞成链接,则发出确认报文。
  3. 客户端收到确认后,告诉服务器收到确认,此后双方开始通讯。
  • 两次握手为何不行?

主要是为了防止已经失效的请求报文忽然又传送给服务器,从而创建错误链接。 若是是两次握手,假设这样的场景,客户端发送一个请求报文,在某一个网络节点由于网络缘由被滞留,客户端迟迟没有收到确认报文,觉得服务器没有收到,从而从新发送了一次请求报文,经历两次握手后双方创建链接,传输数据后关闭链接。后来忽然此前滞留的请求报文网络通畅又到达了服务器,这个报文本该是失效的,可是服务器经历两次握手后再次创建链接,但实际上客户端并不须要传数据,致使服务器空等,形成资源浪费。而若是是三次握手,即便服务器确认了失效的报文,客户端没有再次确认,也是不会创建链接的。加密

  • TCP链接的释放(四次挥手)

数据传输完毕后,双方均可释放链接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,而后客户端主动关闭,服务器被动关闭。忽略报文内容,大体步骤以下:设计

  1. 客户端发出链接释放报文,而且中止发送数据。
  2. 服务器端接收到报文后,发出确认报文吗,而后将最后的数据发送完毕后。
  3. 服务器发送完数据后发送链接释放报文,等待客户端的确认。
  4. 客户端收到链接释放报文后,必须发出确认报文,此时TCP链接还没释放,须要等2∗ MSL(最长报文段寿命)的时间后,才会进入CLOSE状态。
  5. 服务器端接收到确认报文后,当即进入CLOSE状态。
  • 为何客户端最后还要等待2MSL?

客户端之全部接收到服务器发送的链接释放报文后必须发出确认报文,是由于服务器在发送链接释放报文后,若是没有获得客户端的确认,会认为报文发送失败,那么它会从新发送链接释放报文,因此客户端不会当即关闭,若是2∗ MSL时间内没有再接收到服务器发送的链接释放报文,那么客户端认为服务器已经接收到了确认报文,则结束TCP链接。2MSL就是一个发送和一个回复所需的最大时间。cdn

  • 三次挥手为何不行?

因为TCP是全双工通讯,任意一方都能发送数据,一方想要关闭链接必须等待数据发送完毕,也就须要另外一方赞成,若是是三次挥手,服务器端发送了链接释放报文时,此时客户端和服务端均半关闭状态,客户端接收到链接释放报文后若是不发送确认报文,服务器端没法肯定客户端收到了关闭的消息,当前仅仅只有客户端知道双方能够关闭了,可是服务器端并不知道,因此须要发一次确认报文,而且客户端经过2MSL时间来判断服务器端也知道了此时双方能够关闭,最终双方断开这次连接。

Socket和WebSocket


  • 什么是Socket?

Socket是应用层与TCP/IP协议族通讯的中间软件抽象层,它是一组接口,提供一套调用TCP/IP协议的API。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来讲,一组简单的接口就是所有,让Socket去组织数据,以符合指定的协议。

  • 什么是WebSocket?

为了解决网络传输中的双向通讯问题,来做为HTTP协议的一个替代者,用于支持长链接(HTTP也能够长链接,但并不是真正的全双工通讯)。 WebSocket经过HTTP请求告诉服务器要创建WebSocket链接,而后进行三次握手,在此期间的数据通讯都是HTTP的,链接创建完成后,才使用WebScoket协议进行数据通讯。 其链接断开也是经过四次挥手。

相关文章
相关标签/搜索