应用层协议之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次都是用第一次的结果

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值