网络原理——应用层

发布时间:2024年01月24日

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

1. 概念

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

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

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

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

2. 自定义协议?

举个例子:

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

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

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

地址\n

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

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

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

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

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

1.xml

大致形式如下:

//请求
<requset>
    <position>地址</position>
<requset>



//响应
<response>
    <merchants>
        <merchant>
            <name> 名称 </name>
            <score> 评分 </score>
            <commodity>商品名称</commodity>
        </merchant>
    </merchants>
</response>

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

2. json

大概形式如下:

//请求
{
    position:地址
}


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

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

文章来源:https://blog.csdn.net/2303_78892316/article/details/135824725
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。