网络七层协议及请求方式

网络七层协议:

	1.应用层
	2.表示层
	3.会话层
	4.传输层
	5.网络层
	6.数据链路层
	7.物理层

应用层

与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层。但是,如果添加了一个传输文件的选项,那么字处理器的程序员就需要实现OSI的第7层。示例:TELNET,HTTP,FTP,NFS,SMTP等。

表示层

这一层的主要功能是定义数据格式及加密。例如,FTP允许你选择以二进制或ASCII格式传输。如果选择二进制,那么发送方和接收方不改变文件的内容。如果选择ASCII格式,发送方将把文本从发送方的字符集转换成标准的ASCII后发送数据。在接收方将标准的ASCII转换成接收方计算机的字符集。示例:加密,ASCII等。

会话层

它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的,在某些情况下,如果表示层收到了所有的数据,则用数据代表表示层。示例:RPC,SQL等。

传输层

这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。示例:TCP,UDP,SPX。

网络层

这层对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。示例:IP,IPX等。

数据链路层

它定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关。示例:ATM,FDDI等。

物理层

OSI的物理层规范是有关传输介质的特性,这些规范通常也参考了其他组织制定的标准。连接头、帧、帧的使用、电流、编码及光调制等都属于各种物理层规范中的内容。物理层常用多个规范完成对所有细节的定义。示例:Rj45,802.3等。

请求方式:

一. HttpUrlConnection
1.get请求
2.post请求
3.delete请求
4.下载网络视频/音乐/图片到SD卡中
它用于AsyncTask中,会有内存泄漏,所以必须配合Thread+Handler使用

二.HttpClient
AndroidSDK中包含了HttpClient,Android6.0直接删除了这个类库,如果想要使用,解决方法就是在相应的module下的build。gradle中接入代码
这种请求方式已经过时
在4.0版本之后就不再使用了
书写简单,但是效率不如HttpUrlConnection

三.Xutils
这是一个第三方框架,这个框架非常的庞大并且周全, 这个框架可以网络请求,同时可以图片加载,又可以数据存储,又可以 View 注解,使用这种框架很方便,这样会使得你整个项目对它依赖性太强,所以到时后期维护时非常的不方便,所以在2014年之后就很少被使用

四.OkHttp
okhttp是一个第三方类库,用于android中请求网络,它主要有俩种模式:
1.责任链模式
2.构造者模式
这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCanary) 。用于替代HttpUrlConnection和Apache HttpClient(android API23 里已移除HttpClient)。
1.同步get请求:开启子线程
2.同步post请求:开启子线程
3.异步get请求:不需要开启子线程
4.异步post请求:不需要开启子线程

五.Volley
它是2013年Google I/O上发布的一款网络框架,基于Android平台,能使网络通信更快,更简单,更健全,底层是数组

优点:
(1)默认Android2.3及以上基于HttpURLConnection,2.3以下使用基于HttpClient;
(2)符合Http 缓存语义 的缓存机制(提供了默认的磁盘和内存等缓存);
(3)请求队列的优先级排序;
(4)提供多样的取消机制;
(5)提供简便的图片加载工具(其实图片的加载才是我们最为看重的功能);(6)一个优秀的框架。

缺点:
它只适合数据量小,通信频繁的网络操作,如果是数据量大的,像音频,视频等的传输,还是不要使用Volley的为好

六.Retrofit
Retrofit其实我们可以理解为OkHttp的加强版,它也是一个网络加载框架。底层是使用OKHttp封装的。准确来说,网络请求的工作本质上是OkHttp完成,而 Retrofit 仅负责网络请求接口的封装。它的一个特点是包含了特别多注解,方便简化你的代码量。并且还支持很多的开源库(著名例子:Retrofit + RxJava)。与其他框架不同的是它更多使用运行时注解的方式提供功能

好处:
超级解耦
我们在请求接口数据的时候,API接口定义和API接口使用总是相互影响,什么传参、回调等,耦合在一块。有时候我们会考虑一下怎么封装我们的代码让这两个东西不那么耦合,这个就是Retrofit的解耦目标,也是它的最大的特点。
Retrofit为了实现解耦,使用了特别多的设计模式,这里附上一片很好的文章,里面讲的就是实现原理:
Retrofit分析-漂亮的解耦套路

可以配置不同HttpClient来实现网络请求,如OkHttp、HttpClient…
支持同步、异步和RxJava
可以配置不同的反序列化工具来解析数据,如json、xml…
请求速度快,使用非常方便灵活

上一篇:Python面向对象编程进阶2之__slots__魔法


下一篇:android – 用于离线使用的改进缓存数据