iOS开发之网络编程:常用网络协议

时间:2022-12-15 08:12:14

一、网络协议

看了上面那句不明所以得话,好像并没有什么luan用。在第一章有提过协议这个概念,就像咱们工作的时候,签的协议,生活中的保单协议,都需要双方同意签字,才能生效。基于网络的应用就决定了数据链上不仅仅只有客户端(应用)这一环,还需要有服务器(数据源)这一环。那我们的应用在与服务器交互的时候,服务器凭什么接收你的请求,发送给你想要的数据呢?除非你接受了它的协议,比如咱们之前做Get,Post请求的时候,为什么Post需要设置请求体,请求方式。这些都是“他们”的“协议”里规定的。你想要从我这里拿到东西,首先,你要有我的服务器地址(URL),你有了地址之后,你得给我凭证(相关表单数据,比如用户名,密码,设备ID等),证明你有这个资格,从我这里获取我的数据。当然有些资源获取是不需要凭证的,管你是谁,都可以从我这里获取数据(比如一些免费开放的API)。然后“协议”里面说了,你请求之后,给我乖乖等着,我这边给你个答复。不管你有没有请求成功,我都会给你一个答复(响应),失败会给你失败信息(Error),里面会告诉你为什么失败(URL错误— —著名的404 Not Found之类的);成功的话,那就恭喜你,你会获得一个Data或者responseObject(资源)。之所以会有这么一套流程,都是“协议”规定的,咱们照着做,就能拿到想要数据,这就是协议。

而我们上面所说的流程就是最最常见的Http协议的。

谁是制定这个协议的人?

国际标准化组织(ISO)定义了网络协议的基本框架,被称为OSI模型。要制定通讯规则,内容会很多,比如要考虑A电脑如何找到B电脑,A电脑在发送信息 给B电脑时是否需要B电脑进行反馈,A电脑传送给B电脑的数据的格式又是怎样的?内容太多太杂,所以OSI模型将这些通讯标准进行层次划分,每一层次解决 一个类别的问题,这样就使得标准的制定没那么复杂。OSI模型制定的七层标准模型,分别是:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层。

iOS开发之网络编程:常用网络协议

这是书本上的图,不过这个7层的OSI模型,也就单单用在学术教学上面。

之所以数据流向是这个样子,是因为咱们的真实的数据在传输过程中,因为介质的不同,需要给它做相应的包装,比如在路由器之间传输,在光纤上传输,包括在计算机内部传输,从二进制信号到数据脉冲,数据形态都无法保持一致,所以每一层都是为上一层的数据传输做铺垫。

咱们商业上普遍采用的是下面的5层模型:

iOS开发之网络编程:常用网络协议

上面这些,大家仅仅只需要在脑海里留下个印象,有兴趣的同学,可以找来《计算机网络》,细细研究一下。

二、HTTP协议

HTTP大家肯定不陌生,咱们在地址栏输入地址的时候,经常会看到一个前缀:http://……,那http是什么呢??下面来一段官腔:HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统,全称是Hypertext Transfer Protocol(超文本传输协议),而且它是属于上面的层次模型的应用层。

看不懂了吧??告诉你们,之前咱们一直都在用HTTP协议,做数据请求。从NSURLConnection到NSURLSession再到AFNetworking,它们的网络传输都采用的是HTTP协议,所以,没有任何神秘感。如果单单讲协议的话,这是计算机网络这门课所涉及到的,非常枯燥(反正这门课从一开始硬着头皮听,到最后,还是扛不住),所以,我也就不讲那么多知识点了(老师讲给我的都没怎么听懂,我也不指望我讲的你们能懂了),直接上咱们iOS所用到的HTTP才是王道。

请求方法。其实请求并不单单只有Get、Post这两种。一共有:GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、PATCH八种之多。而最常用的是Get、Post,我也没看到过有其他的请求方法的使用。

结合咱们以前的使用,HTTP协议也就只需要处理好请求和响应这两个步骤。其他并没有什么特别之处。

三、HTTPS协议

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。

为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS和HTTP的区别主要为以下四点:
  • https协议需要到ca申请证书,一般免费证书很少,需要交费。
  • http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
  • http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  • http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

反正咱们只需要记住一点,HTTPS比HTTP安全。但是iOS9.0之后,要求APP内网络访问必须采用HTTPS而不是HTTP,所以如果你们的接口还是HTTP的话,需要做一些简单的配置,这个在之前的iOS开发之网络编程篇二:Get,Post请求差异及用法有提及,不记得的同学可以返回去看一下。

四、TCP/IP协议

iOS开发中,TCP/IP一般会和Socket牵扯到一起。Socket是基于TCP/IP协议的封装,主要是用于数据传输,即时通讯这一块。单纯的TCP/IP,在网络层次模型中,TCP和IP是两个协议,TCP是运用的数据链路层的一个协议,用于将信息传送到更高一层的网络层,而IP协议就是为网络层服务的。

在下一章,咱们就来研究一下基于Socket的网络编程。