网络原理之UDP和TCP协议详细解释

TCP/IP五层模型栈

应用层

应用层是程序猿最经常打交道的一层,其他四层都是操作系统,驱动,硬件实现好的,不需要程序猿管(除非系统工程师,驱动开发工程师…)

在应用层中,最重要的就是"设计并实现一个应用层协议"

设计一个应用层协议,主要包含两个工作

  1. 明确传输的信息,

  2. 明确数据的组织格式

举个栗子:

如果公司在开发一个项目,关于点外卖的软件,其中有个功能是这样的:

当前要开发的功能,叫做获取用户的订单历史,(在数据库里,服务器中来拿)这样的功能需要涉及到前端(客户端)和后端(服务器)彼此之间的交互

前端和后端是通过网络来进行交互的,在这个交互的构成中就需要约定好,前端发什么样的数据,后端回应什么样的

image-20220412133308891

形如这样的工作,就是在设计一个应用层协议,上图的这部分工作就是在规划请求和响应之间要传递的信息.

目前为止,我们约定了相互传的数据,但仍然是不够的,我们还需要一个具体的格式

但是由于应用层协议是可以随心所欲的来指定的,所以就会导致两极分化的情况非常严重 (大佬设计的非常好,菜鸟设计的协议就非常糟糕)对于次,大佬发明了一些比较好的协议的模板,可以让我们直接往上套.

当下比较流行的协议模板(数据的组织格式)]

  1. xml
  2. json
  3. protobuffer

xml

xml是属于一种比较老牌的数据格式了,虽然仍在使用,但是使用更多越来越少了

xml的格式是由标价构成的

<标签名>    内容    </标签名>
开始标签  要表示的值  结束便签

举个栗子:

发送请求的协议模板如下:

<request>
    <userId>1234</userId>
    <startTime>2022-04-01</startTime>
    <finishTime>2022-04-12</finishTime>
    <count>10</count>
</request>

可以将这看做k-v模型

标签名就是key

便签值就是value

通过这些便签,就更好的体现了这个数据的可读性,尤其是那部分是什么意思,一目了然.

虽然xml提高了可读性,但是引入了太多的辅助信息(标签名) ,对于一个服务器程序来说,最贵的硬件资源就是网络带宽,对于xml来说,因为要表示这些辅助信息,就会导致传输相同数目的请求的时候,占用的网络带宽是更高的;如果带宽固定,相同时间能传输的请求个数就是更少的.

xml模板的可读性好,但是运行效率不高

xml现在很少会作为应用层协议的设计模板,现在使用xml作为一些配置文件

json模板

json是当下最流行的一种设计应用层协议的数据格式

格式:

{
	键:值,
	键:值,
	.......
}

通过一对大括号构成了键值对结构.

一个大括号中有很多的键值对,

键值对之间使用逗号分割,

键和值之间使用冒号分割,

要求键必须是字符串类型

值允许为很多种类型(数字,字符串,布尔,数组,另一个json…)

举个栗子:

{
	userId:1234,
	startTime:'2022-04-01',
	finishTime:'2022-04-12',
	count:10
}

json中表示字符串使用单引号或者双引号都是可以的(类似于SQL)最后一对个键值对,后面可以加逗号,也可以不加逗号(标准是没有的,但是一般的json解析器不会在意这个细节)

json要求key一定是字符串,因此key这里的引号可以省略,除非key包含了一些特殊符号,(比如空格或者-…)必须要加上引号

json模型对比于xml,json他同样保证了可读性,同时又没有xml那样的繁琐,占

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值