文章目录
应用层
应用层是负责应用程序之间沟通的一层。由于不同的网络应用的应用进程之间,有着不同的通信规则,因此自然就需要应用层协议来解决这些问题,这就构成了应用层的主要内容即:精确定义这些通信规则。
应用层有不少应用广泛的协议,像域名系统(DNS)、文件传输协议(FIP)、网络远程访问协议(Telent)等,(具体的协议规则这里不做介绍)除此之外,在日常程序员的工作中使用同样频繁的还有自定义应用层协议;
自定义应用层协议
什么是自定义应用层协议
所谓自定义,即程序的开发者自定义。自定义,包含着一个根据需要从无到有的过程。协议,则代表了某种约定。因此,自定义协议就可以简单理解为由程序的开发者根据程序开发的需要去约定客户端和服务器传输数据的格式;
自定义方式
在约定之前,首先要明确交互过程中传递的信息有哪些。以网上购物为例,用户作为请求的发出方,就需要明确用户的地址,电话号码等信息;而商家则是作为请求的接收方,需要明确商家的一些具体情况,像商品类型,商品销量、商品价格、接单时间等;
根据用户需求明确了交互中涉及到的信息之后,就需要根据实际情况来确定这些信息的组织格式,自此,即真正开始了应用层协议的自定义。
实际需求下,信息的组织格式是有多种方式的:
-
使用简单的分隔符来区分不同部分的信息;
仍然使用商品上网购物的例子,如上图,[;]就是用来区分不同信息的简单分隔符; -
使用固定长度确定不同信息;
使用固定长度来表示不同信息,也根据长度来区分不同信息; -
融合方式一和方式二,一部分字段信息使用分隔符来区分,一部分字段使用固定长度来区分;
-
使用xml格式来约定数据;
xml格式是一种标签结构的用来展示数据的格式,它包含了开始标签和结束标签,标签一般都是成对出现的;
- 使用json格式组织数据;
相比xml,json的使用更加广泛,它是使用键值对的方式来组织数据,每个键值对之间使用逗号进行分割,每个键值对的键和值之间使用冒号进行分割;
json格式的键必须是字符串形式;
- 二进制数据组织格式,protobuffer,thrift;
这种数据组织格式较为复杂,尽管它的效率相比json或xml要更高,且占用的带宽也要更低,但它的可读性却不如前者,在具体使用中,可以根据实际情况进行选择。
运输层
运输层概述
运输层是整个网络体系结构中的关键层次之一,为应用层提供通信服务。其实,对于通信而言,如果是主机对主机之间的通信,网络层即可实现。可是更多的情况下,是端口与端口之间的通信,像主机A的应用程序1与主机B的应用程序2通信,如果在这种情况下,仅仅依靠网络层就无法很好的实现,这时运输层就在这样的通信中起到了关键作用。
运输层特点
一般而言,运输层有2个特点,即复用(multiplexing)和分用(demultiplexing);
复用:即发送方不同的应用进程都可以使用同一个运输层协议传送数据;
分用:接收方的运输层可以把传送来的数据正确交付指定的应用进程;
运输层协议
TCP/IP运输层有2个主要协议,即用户数据报协议UDP和传输控制协议TCP;
UDP协议
UDP协议,即用户数据报协议。UDP数据报传送实际是一种不可靠的传输,因为UDP在传送数据之前不会有建立连接的操作,同时在主