目录
- 3.网络原理 -TCP/IP
- 3.1 应用层
3.网络原理 -TCP/IP
3.1 应用层
应用层是程序员打交道最多的一层,与应用程序直接相关
而应用层的协议,实际上就规定了你写的程序,通过网络传输的时候,按照什么样的格式来进行传输
不同的应用程序可以使用不同的应用层协议
但是实际我们在开发中更多的是 自定义应用层协议
自定义应用层协议本质上就是 对要传输的数据 做出约定
(1)约定传输的数据要包含哪些信息
(2)约定传输的数据要遵守怎么样的格式
举个例子就是
假设我们要做一个外卖平台
那么用户进去这个平台就会自动获取到用户附近的商家列表,这个过程涉及到请求
那么请求的信息就包含:用户的ID以及所在的位置
此时服务器的响应就包含:商家列表,商家名称,商家图片,商家评分,商家简介
而上面的数据都是"结构化数据"
我们就要规定传输的具体格式
(1)基于文本行的方式来传输
请求:用户ID,位置信息\n
响应:商家1名称,商家1图片,商家1介绍;商家2名称,商家2图片,商家2介绍;商家3名称,商家3图片,商家3介绍…
这种格式就是属于 一种自定义的格式,要包含哪些信息,分隔符使用哪个…都是可以灵活进行控制的,只要确保服务器和客户端使用的是同一套通信规则即可
但是上述这一套规则是属于不太好用的,可维护性比较差,当属性多了的时候,看上去就比较乱
(2)基于XML的方式
XML是一种经典的数据组织方式
请求:
<request><userId>1234</userId><position>180E40N</position></request>
(3)基于JSON
这是当前最流行,最广泛使用的方式
{ userId:1234, position:"180E40N"}
就是使用{ }作为边界
{ }里面是键值对,键值对之间用 ‘,’ 进行分割,键和值之间用 ‘:’ 进行分割
这种方式的可读性非常好,并且比 xml更加简洁
(4)yml
这种是基于 缩进的方式
request: userId:1234 position:"180E40N"
就是基于缩进来表示 包含 / 嵌套关系
这种方式对于 缩进 是严格要求的,可读性也非常好
但是缺点在于,万一没缩进正确,就会出错
(5)protobuffer (pb)
前面几种都是文本格式,而pb则是 二进制格式
这种我们就看不懂了
就是针对要传输的数据进一步整理和压缩了,虽然可读性不好,但能够把空间最充分的利用,最节省网络带宽,效率也就最高