TCP_IP 应用层

本文介绍了TCP/IP协议栈的应用层,重点讨论了常见的数据格式如XML、JSON和Protobuf,以及它们在网络通信中的优缺点。同时,文章还阐述了应用层的重要协议DNS的工作原理,包括域名与IP地址的映射以及域名解析过程。
摘要由CSDN通过智能技术生成

文章目录

  • 关于应用层
    • 比较流行的协议模板
      • xml
      • json
      • protobuffer
  • 应用层的一些重要协议
    • DNS

关于应用层

应用层和其他协议不同,应用层是程序猿最容易打交道的一层,其他的四层,都是操作系统,驱动,硬件实现好的

而应用层需要做的就是涉及并且实现一个应用层协议 (工作中最常做的事情)

举个栗子:

此时要设计一个点外卖的软件,当前有一个功能叫做获取 用户的订单历史(存于数据库,服务器取数据)这个功能就需要涉及到客户端和服务器端的交互

前端和后端是通过网络进行交互的,交互过程中需要约定好前端发什么样的数据,后端回应什么样的数据

image-20220529180936612

image-20220529181020617

此时只是一种可能的格式,此处这里的组织格式可以随心所欲的约定

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

  1. 明确传输的数据
  2. 明确传输数据的组织格式

因为程序猿在协议设计的时候参差不齐,所以大佬们约定了一些友好协议的模板,可以直接让程序猿往上套用

比较流行的协议模板

xml

xml属于一种比较老牌的数据格式

格式

<标签名> 内容 </标签名>

例如上面例子的请求,可以表示为

<request>
	<userId>123</userId>
	<startTime>2022-5-20</startTime>
	<finishTime>2022-5-30</finishTime>
	<count>10>/count>
</request>

使用键值对的形式

标签名就是Key

标签值就是Value

通过这些标签名就可以很好的体现出这个数据的可读性,每个数据是什么意思一目了然

虽然xml提高了可读性,但是又引入的太多的辅助信息,就浪费了网络带宽

xml格式最多用来当配置文件

json

json是当下最流行的一种设计应用层协议的数据结构了

格式

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

通过{}构成了键值对结构,一个{}中可以有多个键值对,

键值对之间用逗号分割

键和值之间用冒号分割

要求键必须是字符串类型

值就可以很多种(数字,字符串,布尔,数组,另一个json)

例如上面例子的请求,可以表示为

{
	userId:123,
	startTime:'2022-5-20',
	finishTime:'2022-5-30',
	count:10
}

json中表示字符串可以用双引号,同时可以用单引号

最后一个键值对,后面可以有逗号,也可以没有逗号,

json要求键必须是字符串,所以key的引号可以省略

除非key中包含了一些特殊字符(比如空格)必须加上引号

json相比较于xml,在拥有了可读性的同时又节省了网络带宽

protobuffer

json虽然传输效率比xml高,但是仍然要传输一些冗余信息,就是key的名字,特别是在表示数组的时候,尤为明显

例如,用json表示响应格式

{
	ok:true,
	resaon:"",
	data:[
		{
			name:'蛋炒饭',
			price:10,
			count:1,
			totalPrice:10
		},
		{
			name:'炒面',
			price:8,
			count:1,
			totalPrice:8
		}
	]
}

此时key出现了很多次,发生了冗余

protobuffer应运而生 , protobuffer是一种二进制格式的数据,在protobuffer的数据中,不再包含上面key的名字,而是通过顺序以及一些特殊符号来区别每个字段的含义.同时再通过一个IDL文件来描述这个数据格式(每个部分是什么意思)IDL只是起到一个辅助开发的效果,并不会真正的进行传输,纯属的只是二进制纯粹的数据

简化版本

1\3\3 蛋炒饭\210\21\210\3炒面\28\21\28

综上所述 设计应用层协议是一个非常普遍的事情,并且也不是特别复杂

设计应用层协议,要做的工作

  1. 明确传输的数据
  2. 明确传输的格式

应用层的一些重要协议

介绍完应用层协议的设计之后,就来看一些应用层中的重要协议

DNS

DNS,即Domain Name System,域名解析系统。DNS是一整套从域名映射到IP的系统。

TCP/IP中使用IP地址来确定网络上的一台主机,但是IP地址不方便记忆,且不能表达地址组织信息,于是人们发明了域名,并通过域名系统来映射域名和IP地址。

虽然ip地址被写成了点分十进制的形式,但是对于人类来说仍然不是很友好,所以就出现了域名

最简单的例子,www.baidu.com就是百度的域名,域名和ip地址之间是映射关系,我们可以通过域名访问百度网址,也可以通过ip地址进行访问.其实归根到底,我们仍然是通过ip地址进行访问,那为啥我们可以通过域名访问呢?

这就需要介绍到我们你的域名解析DNS系统,DNS系统最开始的时候只是一个普通的文件,称之为hosts文件,里面记录了ip地址和域名的对应关系,这些数据会被保存在本机主机中,后续可直接访问.

现如今,域名越来越多了,我们不可能对这个hosts文件改来改去,所以就专门成立了一个机构,负责维护这里的域名和ip地址的应对关系,我们要申请域名就必须在这个机构报备才可以.这个机构维护了一组服务器,将hosts文件存放在这个服务器中,叫做域名解析服务器

全世界的电脑如此之多,每个设备上网去访问这个服务器的话,这个服务器补得瘫痪?

漏漏漏~ 全世界各个国家,地区都有各自的运营商,这些运营商就可以就近架设域名解析 镜像 服务器,里面存放的数据和域名解析服务器一模一样,而我们平时上网访问的就会域名解析 镜像 服务器

域名是一个字符串,如 www.baidu.com , hr.nowcoder.com

域名系统为一个树形结构的系统,包含多个根节点。其中:

  1. 根节点即为根域名服务器,最早IPv4的根域名服务器全球只有13台,IPv6在此基础上扩充了数量。

  2. 子节点主要由各级DNS服务器,或DNS缓存构成。

    • DNS域名服务器,即提供域名转换为IP地址的服务器。

    • 浏览器、主机系统、路由器中都保存有DNS缓存。

    • Windows系统的DNS缓存在 C:\Windows\System32\drivers\etc\hosts 文件中,

    • Mac/Linux系统的DNS缓存在 /etc/hosts 文件中。

网络通信发送数据时,如果使用目的主机的域名,需要先通过域名解析查找到对应的IP地址:

  • 域名解析的过程,可以简单的理解为:发送端主机作为域名系统树形结构的一个子节点,通过域名信息,从下到上查找对应IP地址的过程。如果到根节点(根域名服务器)还找不到,即找不到该主机。
  • 域名解析使用DNS协议来传输数据。DNS协议是应用层协议,基于传输层UDP或TCP协议来实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值