应用层协议之DNS协议

一.应用层协议的相关数据传输格式

1.文本字符串格式

应用层主要是自定义协议,以点外卖为例:

客户点开软件,就是应用程序和服务器之间进行网络通信交互。请求和响应可以如下设置

请求:用户信息,位置信息,并使用文本的方式,用逗号分隔->10011,100E,30W。代码中就会构造出这样的字符串,写到TCP/UDP的Socket api中

响应:有多个商家,每个商家都是商家名称+饭菜图+距离+简介+评分,同理用文本的方式,每个商家占一行,用逗号分割。

上述就是自定义协议,方式灵活。而上述通过文本构造协议的方式是比较粗糙的方式,下面就介绍几种开发中常见的格式

2.xml格式

这也算是很老式的一种方式了

该格式的关键是既有开始标签,又有结束标签,结束标签就是在开始标签的前面再加一个反斜杠,例如下面的请求格式

<request>

      <userid>10011</userid>

      <position>100e.30w<</position>

</request>

上下两个request之间就是要传输的数据

xml的优势:让数据的可读性加强

xml的劣势:标签写起来繁琐,同时在网络传输过程中要消耗一定的带宽

3.json格式

这时当下最流行的数据组织格式。格式如下:

{

    userid :"10011",

    position:"100,30"

}

它采用的是键值对结构,外面的花括号把所有的键值对都包裹起来。键(就是key,就是这里的userid)固定使用字符串形式,也就是String类型,值可以是数字,可以是字符串,也可以是数组,还可以是json对象……。两对键值对之间用逗号分隔,键和值之间用冒号分隔,键是字符串但引号可以省略。

优势:可读性好,比xml简洁(因为只有一个标签,没有结束标签)

劣势:在网络传输中消耗一定的带宽(因为key也得传)

虽然有劣势,但是json再网络通信时仍然非常流行,除非性能要求很高的场景

4.protobuffer

这里与json和xml不同的是,它是以二进制的形式组织数据

优势:二进制形式组织,占用带宽最低,传输效率最高,计算机的执行效率最高

劣势:可读性差,降低了开发效率

相比于计算机的执行效率,更重要的还是程序员的开发效率,所以json更流行

二.DNS协议

DNS 即domain name system表示域名解析系统。

1.域名

我们之前说过,在网络上是使用IP地址来表示一个设备在网络上的位置。但是开发网站的关键是有人乐意使用,然而IP这种二进制的形式却不适合进行宣传。

所以就引入了域名的概念:它实际上是用单词组成的,能够表示实际意义,比如www.baidu.com

这就需要有一套自动系统来将域名翻译成IP。

2.hosts文件

最早的域名解析系统,是通过hosts文件实现的

通过这个路径可以找到我们电脑上的host文件

但是打开发现其实里面没啥东西,因为这个机制现在基本上不用了,因为用hosts文件来维护域名与IP地址的映射真的很不方便,每次有一个新的IP地址,就得把每个用户电脑里面的hosts文件进行手动更新。

所以就有了DNS协议

3.工作流程

DNS系统是一组服务器,要想访问某个域名,就要给此DNS服务器发送请求,查询当前域名对应的IP地址。后续若有域名更新,只需要更新这一组服务器即可,不需要修改每个用户的hosts文件

问题:全世界,无时无刻有很多台设备进行DNS请求。那么这一组服务器能抗住这么多请求量吗?一个服务器硬件资源(cpu,内存,硬盘,网络带宽……)优先,单位时间内请求太多,小号的粽子元超过了机器本身的资源上线,就会挂了。那该如何解决?

核心思路:开源,节流

1.开源:搭建DNS的大佬们,号召每个网络运营商都自己搭建一组“DNS镜像服务器”,其中的数据从它们那里同步。此时用户就会邮上线访问离自己最近的DNS镜像服务器。此时,原始DNS服务器就称作根服务器

2.节流:让请求量变少。让美国上网设备,搞一个本地缓存(例如:我的电脑一分钟要访问10次www.baidu.com,那我只让第一次请求DNS即可,然后把结果存到缓存中,后9次都是用第一次的结果

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-03-29 04:00:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-29 04:00:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-29 04:00:02       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-29 04:00:02       20 阅读

热门阅读

  1. 算法日记————对顶堆(4道题)

    2024-03-29 04:00:02       18 阅读
  2. go env 命令详解

    2024-03-29 04:00:02       19 阅读
  3. MongoDB聚合运算符:$isArray

    2024-03-29 04:00:02       18 阅读
  4. Python 的chatGPT API小例子

    2024-03-29 04:00:02       23 阅读
  5. scau:程序设计与算法基础 学习笔记

    2024-03-29 04:00:02       19 阅读
  6. 基于Ubuntu的Linux系统安装jsoncpp开发包过程

    2024-03-29 04:00:02       23 阅读