浏览器里输入域名,回车键后会涉及到的所有协议?(七层里你能想得到的协议)

您所在的位置:网站首页 网络层用到的协议是 浏览器里输入域名,回车键后会涉及到的所有协议?(七层里你能想得到的协议)

浏览器里输入域名,回车键后会涉及到的所有协议?(七层里你能想得到的协议)

2023-09-11 14:27| 来源: 网络整理| 查看: 265

文章目录 协议otherDNS查询选择的两种方式递归与迭代

协议 DNS协议----DNS请求报文:向指定DNS域名服务器发送DNS请求报文,以解析域名www.target.com对应的IP地址。UDP协议—DNS基于UDP协议的。TCP协议----TCP连接报文:根据IP地址,与www.target.com服务器建立TCP连接。ARP协议----ARP请求报文:根据默认网关的IP地址查询其MAC地址。HTTP协议—HTTP请求报文:向www.target.com网页服务器发送HTTP请求报文,以获取该网站首页的内容。ICMP协议—提供网络传输中的差错检测。LLC和MAC—提供数据链路层的组帧、透明传输等功能。

在浏览器输入URL会发生什么?和一个HTTP请求过程等同。 输入URL后会发生:

进行DNS的域名解析建立TCP三次握手连接发送一个HTTP的请求报文服务器处理相关的请求服务器向客户端返回响应的结果,HTTP的响应报文通过四次挥手关闭TCP的连接浏览器解析HTML浏览器进行布局渲染(图片等) other DNS查询选择的两种方式

域名服务器:根域名服务器;顶级域名服务器(二级域名,org,com,edu);权威域名服务器;本地域名服务器 eg: https://www.xidian.edu.cn/----cn-根,edu-顶级域名,xidian-权威域名

递归查询—以本地域名服务器为中心查询—默认方式 在这里插入图片描述 客户端—》本地-----》根–》本地–》顶级—》本地—》权威—》本地—》客户端–》Web服务器 在这里插入图片描述 迭代查询----以DNS客户端为中心查询 在这里插入图片描述

客户端–》本地—》客户端—》根—》客户端—》顶级–》客户端–》权威–》客户端–》Web服务器

总结:递归本地域名服务器为中心,默认;迭代DNS客户端为中心。

DNS 查询选择 UDP 或者 TCP 两种不同协议时的主要原因:

UDP协议 DNS查询的数据包较小,机制简单; UDP协议的额外开销小,有着更好的性能表现;

TCP协议 DNS 查询由于 DNSSEC 和 IPv6 的引入迅速膨胀,导致 DNS 响应经常超过 MTU 造成数据的分片和丢失,我们需要依靠更加可靠的 TCP 协议完成数据的传输; 随着 DNS 查询中包含的数据不断增加,TCP 协议头以及三次握手带来的额外开销比例逐渐降低,不再是占据总传输数据大小的主要部分;

总结:无论是选择 UDP 还是 TCP,最核心的矛盾就在于需要传输的数据包大小,如果数据包小到一定程度,UDP 协议绝对最佳的选择,但是当数据包逐渐增大直到突破 512 字节以及 MTU 1500 字节的限制时,我们也只能选择使用更可靠的 TCP 协议来传输 DNS 查询和相应。

递归与迭代 程序结构不同:

递归是重复调用函数自身实现循环。迭代是函数内某段代码实现循环。

算法结束方式不同:

遇到满足终止提交的情况是逐层返回来结束。当n=1时结束; 迭代使用计数器结束循环,当n=n时结束。

效率不同:

在循环的次数较大的时候,迭代的效率明显高于递归。

递归与迭代的关系

a.递归中一定有迭代,但是迭代中不一定有递归;大部分可以相互转换。

b.相对来说,能用迭代不用递归(因为递归不断调用函数,浪费空间,容易造成堆栈溢出)

例子: 基于Python用递归和迭代实现阶乘

递归—重复调用函数自身实现循环

def factorial1(n): if n==1: #1!=1 resutl=1 else: result = n*factorial1(n-1)#重复调用函数自身实现循环 return result

n=3 进入else: result=3factorial1(2) n=2 进入else:result=2factorial(1) n=1 进入if:result=1

迭代—函数内某段代码实现循环

def factorial2(n): result=1 for i in range(1,n+1): result= result*i #该段代码实现循环 return result #range(1,n+1)==[m+1 for m in range(n)]


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3