平时我们做Android应用开发肯定是会接触到网络数据传输的,虽然app开发只需要处理网络数据的请求与解析操作,但是大概了解一下通用的网络分层对我们开发来说还是大有裨益的,今天我就稍微总结一下我平时对网络分层的理解,做一个简单的记录,以后有新的理解再慢慢补充吧。
所谓的网络分层实质上就是在网络通信过程中,硬件与软件模块对数据的分层处理,主要涉及到一些数据的发送,包装,解析等操作,根据现有的知识总结下来,网络模型大概分为7个层级,从上到下:
应用层 |
表示层 |
会话层 |
传输层 |
网络层 |
数据链路层 |
物理层 |
1.应用层:应用层是我们接触的最多的网络层级,这一层主要是通过一些协议规定了我们应用程序的数据格式,其中最常用的就是http协议了,当然还有smtp,ftp,xmpp,ssh等等这一类协议都属于应用层协议。
我们平常使用的第三方网络开源库,例如okhttp,就是运用http协议对网络进行访问的。http是应用层面向对象的协议,主要解决网络数据的包装与应用的识别,HTTP一共有8种请求方法,而我们移动开发接触的最多的就是get与post请求方法。
http有两种报文:请求报文和响应报文
请求报文一般由请求行,请求报头,空行和请求数据4个部分组成,而响应报文则由状态行,响应报头,空行,响应正文组成,它们的关系如下图:
2.传输层:该层主要是为两台通信主机上的应用程序提供端到端的通信。传输层最常接触的两个协议就是TCP(传输控制协议)和UDP(用户数据报包协议),TCP是一个可靠的面向连接的协议,UDP是不可靠的无连接的协议。
3.网络层:该层主要是决定如何将数据从发送方路由到接收方,建立主机与主机之间的通信。
上面所说的应用层HTTP协议就是建立在TCP协议之上的通信协议,我们平时所说的TCP/IP协议就是属于传输层/网络层协议。例如手机设备底层实现了TCP/IP协议才能进行联网的操作,可以使用手机设备终端通过无线网络建立TCP连接,而TCP协议则可对上层网络也就是HTTP提供接口,传输层/网络层协议主要解决了数据在网络中传输的问题。
建立TCP连接需要经过“三次挥手”,而断开TCP连接则要经过“四次挥手”,每次挥手都是服务端与客户端的一些状态值的改变,过程如下图所示
(图片来自网络)
所以TCP传输的流程归纳起来就是:打开连接----写请求数据-----读响应数据------关闭连接
这里需要特别说明一下的是Android开发中接触到的socket(套接字),它本身不是一个通信协议,而是一个调用接口(API),它可以对TCP/IP协议进行封装和应用,对于我们Android开发人员来说可以把socket视为TCP/IP或UDP的编程接口
4.物理层:该层就是负责比特流在网络节点中的传输,就是把通信设备连接起来的物理手段,主要有光纤,无线电等手段
通信网络要介绍起来真的有很多很多的知识点,但我觉得作为普通Android应用开发人员只要大概了解上面的这些知识就可以了,如果文中有错误的地方欢迎指正,今后如果对网络部分有更深刻的理解也会及时更新上来的