Android开发,或者任何的互联网相关的服务,总免不了会使用到网络通信,而Android开发中,现今有很多优秀的框架,比如Volley、Okhttp3、Retrofit等,使用起来很方便,但是还是有必要了解一下整体上的网络编程结构的。

1 基本介绍

计算机的网络世界是由一台台主机和路由器组成的,主机间需要通信,这就造成一个问题,主机不可能和其它主机都连接上,所以需要路由器,将信息进行分发,通信的信息是指程序创建的字节序列,也称为分组报文(packet)。

前面提到了,通信的信息是一组组的字节序列,一台计算机接受到一组字节序列之后,在计算机眼中它们就是一堆二进制数,所以相互通信的应用之间必须预先达成一定的约定,以什么方式编码、以什么方式解码、分组报文的结构等都需要预先规定好,一组协议通常是为了解决一个特定的问题,为了使问题可管理,就出现了TCP/IP协议,TCP/IP协议就是一组解决方案,也称为协议族(protocol suite),当然还有其它的协议族,但是TCP/IP协议已经是事实上网络世界中通用的方案了。

2 基础结构

为了保证不同的计算机网络厂商之间的产品能够互相通信,必须有一套统一的标准,最先ISO(国际标准化组织)制定了OSI协议,但是由于OSI协议实现过于复杂,就没有普及开来,但是作为其指导方针的OSI参考模型却被用于制定网络协议中。

OSI参考模型的分层结构是较为理想化的,分层的好处就是模块化,简化网络间的通信处理,每层独立作用,利于扩展,但是模块化得适当,太过就会造成处理起来太过沉重,以及模块间出现类似的逻辑处理。

OSI参考模型与TCP/IP模型对比

为了方便理解TCP/IP协议的分层结构,可以先事先了解一下OSI的,因为TCP/IP就相当于简化版。我们接触比较多的HTTP(超文本传输协议)就是属于应用层的,专门针对于超文本对象的通信。

OSI参考模型的七个分层作用

2.1 物理层

负责计算机的0和1序列和硬件高低电压的转换;

2.2 数据链路层

负责物理层连接的节点间数据通信,将0和1序列传送到另一端;

2.3 网络层

将数据传输到目标地址,主要作用就是寻址和路由器选择,定位接受方地址;

2.4 传输层

起着可靠传输的作用,在通信双方的节点进行处理;

2.5 会话层

负责建立和断开连接,以及数据的分割等数据相关的管理操作

2.6 表示层

将应用处理的信息转化为网络传输的格式,或者是将下一层格式的数据转换为能够处理的格式,主要负责数据格式的转换,比如说文本格式、图片格式的文件要传输的话得先转换成比特流;

1.7 应用层

为应用提供服务,并规定好相关的细节。

3 TCP/IP结构

TCP/IP协议族是分层结构,可以对应到OSI参考模型,一般将其分为4层结构。

一个TCP/IP网络

3.1 网络接口层(物理层+数据链路层)

TCP/IP中的最低层是网络接口层,包括物理层,比如以太网和WiFi等通信信道,而数据链路层利用以太网等硬件接口进行通信,可以把数据链路层看作为驱动程序(驱动程序在操作系统和硬件之间充当了桥梁的作用)。

3.2 网络层

网络层使用的是IP协议,它使两个主机间的一系列通信信道和路由器看起来像是单独一条主机到主机的信道。IP协议使用IP地址作为标识,将数据通过网络独立处理和分发,从而发送到目的地。

IP协议属于非可靠性传输协议,就是说数据发送过程中出现丢失也不会重复发送。

3.3 传输层

传输层主要包括两个协议,TCP和UDP。这两种协议都建立在网络层所提供的服务基础上,它们有一个共同的作用,就是寻址,因为网络层只负责将数据发送到主机上,而具体的到达应用程序并没有特别指定,TCP和UDP协议用的地址就是端口号,可以将数据传输到具体的程序之上。

3.3.1 TCP协议:能够检测和恢复网络层传输过程中可能造成的数据丢失等错误。TCP协议是一种面向连接的协议,在通信之前,两个应用程序之间得先建立连接,涉及到握手信息(handshake message)的交换。

3.3.2 UDP协议:不尝试对网络层产生的错误进行恢复,是一种面向无连接的协议,它只是单纯的扩展了网络层的服务,使它能够在应用程序之间正常工作,而不仅是只在主机之间进行数据交换。如果使用UDP协议,应用程序要自己处理数据丢失等可能会发生的问题,因为其不关心对方是否收到数据。

3.4 应用层

TCP/IP分层中,集中实现了OSI参考模型中的会话层、表示层和应用层。它包括了一些服务,负责与终端的用户做一些认证、数据处理及压缩,将应用程序的数据处理之后交给传输层。