网络原理之应用层协议介绍

应用层

应用层和应用程序息息相关,不同的应用层想里面可能涉及到不同的应用层协议,作为码农很大一部分工作就是在自定义应用层协议。

自定义应用层协议

1、考虑客户端和服务器之间传输哪些信息

2、考虑传输的数据按照上面格式组织

客户端和服务器之间传输哪些信息

举栗子:

​ 请求:

​ 自行车,山地;偏好便宜,耐用,帅气。

请求中有两部分:商品信息和偏好信息,之间使用;来分割
商品信息和偏好信息内部各个部分使用,来分割

响应:

​ 自行车品牌,价格,颜色,优惠
​ 日本自行车,300,蓝色,-10

​ 美国自行车,200,紫色,-5

​ 欧洲自行车,350,黑色,-2

响应中包含多个上架信息,每个商品占一行,每行里面多个属性之间使用,来分割

这就是我约定的客户端和服务器之间传输哪些信息。

传输的数据格式

1、HTTP协议
2、XML

XML比较典型的数据组织格式,经典古老的格式。
特点:通过“标签”的形式来组织键值对数据。标签名字就是key,内容是value

例如:


	
		自行车
		山地
	
	
		价格
		颜色
		优惠
	

缺点:

1、代码丑

2、数据多了编写复杂

3、这些数据要通过网络传输,消耗网络带宽由于这里包含了大量的标签,就导致网络带宽占用的更高。

3、JSON

JSON是当前最流行的一种数据组织格式,相当于XML的替代品。

{
	goods:{
		name:自行车
		name2:山地
	},
	preference:[
        '价格','颜色','优惠'	
	]
}

JSON:

使用{},{}里面包含了多组键值对,键值对之间使用,来分割,键和之之间使用:分割

键只能是字符串类型
值可以是字符串,数字,数组([ ]就代表数组)

优点:

1、可读性非常好

2、看起来美观整洁

3、扩展性强

缺点:

引入额外的字符串,传输数据流变大,消耗更多的带宽

4、protobuffer

占用带宽低,高校组织数据。

封装/分用 vs 序列化/反序列化

一般来说,在网络数据传输中,发送端应用程序,发送数据时的数据转换(如java一般就是将对象转换为某种协议格式),即对发送数据时的数据包装动作来说:
如果是使用知名协议,这个动作也称为封装
如果是使用小众协议(包括自定义协议),这个动作也称为序列化,一般是将程序中的对象转换为特定的数据格式。

接收端应用程序,接收数据时的数据转换,即对接收数据时的数据解析动作来说:
如果是使用知名协议,这个动作也称为分用
如果是使用小众协议(包括自定义协议),这个动作也称为反序列化,一般是基于接收数据特定的格式,转换为程序中的对象

你可能感兴趣的:(网络)