网络原理——应用层

网络通信中,协议是非常重要的概念,接下来我将按照协议的分层,来介绍每一层中的核心协议。

1. 概念

应用层是对应着应用程序的,是程序员关注的最多的地方,操作系统提供的网络API就是属于应用层的。应用层有很多现成的协议,但更多的,需要程序员根据场景自己制定协议,例如数据如何传输,以什么格式传输等。

自定义协议需要考虑两个内容:

  1. 服务器和客户端之间要交互哪些内容。
  2. 数据的具体格式

服务器必须按照上面的约定 解析请求,构造响应。
客户端也必须按照上面的约定 发送请求 ,解析响应

2. 自定义协议 

举个例子:

我们打开外卖软件,外卖软件获取到我们的位置后,会出现很多的附近的商家显示在手机上,显示的商家中还包含了,名称,菜品,评分等数据。上述数据是按照什么样的格式组织的。

我们现在约定,一个请求或响应,都是以文本表示,以 换行符 \n 结束,多个字段之间用 ; 隔开。那么我们要组织上面场景的数据就是:

1.请求(给服务器提供位置信息)

地址\n

2.响应(提供附件的商家信息)

名称;菜品;评分\n
名称;菜品;评分\n
......

服务器和客户端之间往往要交互的是“结构化数据”
网络传输的数据是“字符串” “二进制bit流”
约定协议的过程就是约定  结构化数据 和 字符串/二进制bit流  互相转化的过程

把结构化数据转成  字符串/二进制bit流  的过程称为序列化,反之称为反序列化

上面我们演示的约定协议的方法虽然能解决问题,但是可读性和扩展性并不好,为了让程序员更方便的去约定这里的格式,业界给出了几种比较好用的方案。

1.xml

大致形式如下:

//请求

    地址




//响应

    
        
             名称 
             评分 
            商品名称
        
    

<>为开始标签, 为结束标签,标签能对数据进行描述,提高了可读性,缺点是浪费空间过多,消费更多网络带宽。

2. json

大概形式如下:

//请求
{
    position:地址
}


//响应
[
    {
        name:商家名称,
        score:评分,
        commodity:商品名称,
    },
    {
        name:商家名称,
        score:评分,
        commodity:商品名称,
    }
]

我们可以看到json是键值对结构,键和值之间用 : 隔开,键值对之间用 , 隔开, 多个键值对用{}括起来形成一个json对象,多个json对象可以用[ ] 括起来用 , 分隔 形成一个json数组。

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