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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/505112.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

比KMP简单的Manacher

P3805 【模板】manacher - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) “没时间悼念KMP了&#xff0c;接下来上场的是Manacher&#xff01;” 什么是Manacher? 历史背景&#xff1a; 1975 年&#xff0c;一个叫 Manacher 的人发明了这个算法&#xff0c;所以叫Manacher 算…

【JavaWeb】Day28.SpringBootWeb请求响应——请求(一)

前言&#xff1a; 我们在开发web程序时呢&#xff0c;定义了一个控制器类Controller&#xff0c;请求会被部署在Tomcat中的Controller接收&#xff0c;然后Controller再给浏览器一个响应。 而在请求响应的过程中是遵循HTTP协议的。 但是&#xff0c;在Tomcat这类Web服务器中&a…

vivado JTAG 回退支持

JTAG 回退支持 基于 XVC 的调试解决方案可配合 AXI 主接口 &#xff08; 如 PCIe XDMA IP &#xff09; 一起使用。如果 AXI 主接口被挂起 &#xff0c; 或者无法正常 运作&#xff0c; 则无法在此类情况下进行调试。为了提供基于 JTAG 的回退调试途径 &#xff08; 与 X…

【Java多线程】8——CompletableFuture

8 CompletableFuture ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记仓库&#x1f449;https://github.com/A-BigTree/tree-learning-notes 个人主页&#x1f449;https://www.abigtree.top ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个s…

Native Instruments Kontakt 7 for Mac v7.9.0 专业音频采样

Native Instruments Kontakt 7是一款强大的软件采样器&#xff0c;它允许用户从各种来源采样音频并进行编辑和处理。它包含大量预设采样库&#xff0c;包括乐器、合成器、鼓组和声音效果等。此外&#xff0c;Kontakt 7还允许用户创建自己的采样库&#xff0c;以便根据自己的需要…

排列函数与组合函数

总实现&#xff1a; #include <iostream> using namespace std; long long CC(int a, int b)//求组合函数&#xff0c;a为C的下标&#xff0c;b为C上标&#xff0c;即:Ca!/(b!*(a-b)!) {int res 1; //记录结果for (int i a, j 1; j < b; i--, j){res * i / j;}r…

2025第四届CHWE出海网全球跨境电商展览会

2025第四届CHWE出海网全球跨境电商展览会 时间&#xff1a;2025年3月20-22日 地点&#xff1a;深圳会展中心&#xff08;福田&#xff09; 预订以上展会详询陆先生 I38&#xff08;前三位&#xff09; I82I&#xff08;中间四位&#xff09; 9I72&#xff08;后面四位&am…

数据结构(六)——图的遍历

6.3 图的遍历 6.3.1 图的广度优先遍历 ⼴度优先遍历&#xff08;Breadth-First-Search, BFS&#xff09;要点&#xff1a; 1. 找到与⼀个顶点相邻的所有顶点 2. 标记哪些顶点被访问过 3. 需要⼀个辅助队 FirstNeighbor(G,x)&#xff1a;求图G中顶点x的第⼀个邻接点&#xff…

小练习——if,switch语句,根据年份计算生肖

需求&#xff1a;根据用户输入的年份计算他是什么生肖 举例&#xff1a;输入2024年&#xff0c;控制台会显示你属龙 所用技术&#xff1a;控制台输入 Scanner if 语句 / switch语句 控制台输入 Java控制台输入的三种实现方法&#xff1a;使用标准输入对象System.in&#xff…

C语言预处理详解

前言 上篇博客我们总结了编译与链接&#xff0c;有说过编译里第一步是预处理&#xff0c;那本篇博客将对预处理进行进一步的详细的总结 个人主页&#xff1a;小张同学zkf 若有问题 评论区见 感兴趣就关注一下吧 目录 1. 预定义符号 2. #define 定义常量 3. #define定义宏 4…

零失误微信支付商家转账到零钱功能开通教程

商家转账到零钱是什么&#xff1f; 使用商家转账到零钱这个功能&#xff0c;可以让商户同时向多个用户的零钱转账。商户可以使用这个功能用于费用报销、员工福利发放、合作伙伴货款或分销返佣等场景&#xff0c;提高效率。 商家转账到零钱的使用场景有哪些&#xff1f; 商家…

如何使用Axure RP制作网页原型并结合IIS服务实现公网访问本地HTML网页

文章目录 前言1.在AxureRP中生成HTML文件2.配置IIS服务3.添加防火墙安全策略4.使用cpolar内网穿透实现公网访问4.1 登录cpolar web ui管理界面4.2 启动website隧道4.3 获取公网URL地址4.4. 公网远程访问内网web站点4.5 配置固定二级子域名公网访问内网web站点4.5.1创建一条固定…

STM32CubeIDE基础学习-RS232通信

STM32CubeIDE基础学习-RS232通信 文章目录 STM32CubeIDE基础学习-RS232通信前言第1章 工程配置第2章 代码编写第3章 实验现象总结 前言 RS232也是串口的一种&#xff0c;RS-232是由电子工业协会(Electronic Industries Association, EIA)所制定的异步传输标准接口。在1962年发布…

sql之每日五题day01--多表联查/聚合函数

sql错题记录 含有聚合函数的不能用where升序排列order byleft join多表联查inner join不返回null三表联查 含有聚合函数的不能用where SQL19 分组过滤练习题 题目&#xff1a;现在运营想查看每个学校用户的平均发贴和回帖情况&#xff0c;寻找低活跃度学校进行重点运营&#x…

PHP远程命令执行与代码执行原理利用与常见绕过总结

PHP远程命令执行与代码执行原理利用与常见绕过总结 远程命令执行 相较于SQL注入漏洞&#xff0c;远程命令执行更加少见。由于是直接执行系统命令&#xff0c;所以相较于前者此漏洞会更加危险&#xff1a; 攻击者通过远程命令执行漏洞可以直接掌控服务器攻击者可以通过存在此…

C语言:动态内存管理(二)

目录 前言 1.3 realloc​编辑 3、常见动态内存管理错误 3.1 对空指针的解引用操作 3.2 对动态开辟的空间进行越界访问 3.3 对非动态开辟内存使用free释放 3.4 使用free释放一块动态内存开辟的一部分 3.5 对同一块空间的多次释放 3.6 动态内存开辟之后忘记释放 总结 前…

python用户管理系统(加密)

在用户管理系统中使用哈希算法对用户密码进行加密处理 import hashlibusers []# 用户类&#xff0c;包含基本信息 class User:def __init__(self, name, password, emailNone):self.name nameself.password self._encrypt_password(password) # 加密密码self.email email…

ViveNAS性能调试笔记(一)

ViveNAS是一个开源的NAS文件服务软件&#xff0c;有一套独立自创的架构&#xff0c;ViveNAS希望能做到下面的目标&#xff1a; - 能支持混合使用高性能的介质(NVMe SSD)和低性能介质&#xff08;HDD&#xff0c;甚至磁带&#xff09;。做到性能、成本动态均衡。因此ViveNAS使用…

力扣刷题Days28-第二题-11.盛水最多的容器(js)

目录 1&#xff0c;题目 2&#xff0c;代码 3&#xff0c;学习与总结 3.1思路回顾 1&#xff0c;如何遍历 2&#xff0c;算法流程 3.2剖析问题 1&#xff0c;题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, h…

WordPress AutomaticPlugin SSRF漏洞复现(CVE-2024-27954)

0x01 产品简介 WordPress是一款免费开源的内容管理系统(CMS),最初是一个博客平台,但后来发展成为一个功能强大的网站建设工具,适用于各种类型的网站,包括个人博客、企业网站、电子商务网站等,并逐步演化成一款内容管理系统软件。 0x02 漏洞概述 WordPress AutomaticPlu…