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

协议

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

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

  1. 进行DNS的域名解析
  2. 建立TCP三次握手连接
  3. 发送一个HTTP的请求报文
  4. 服务器处理相关的请求
  5. 服务器向客户端返回响应的结果,HTTP的响应报文
  6. 通过四次挥手关闭TCP的连接
  7. 浏览器解析HTML
  8. 浏览器进行布局渲染(图片等)

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 查询和相应。

递归与迭代

  1. 程序结构不同:

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

  1. 算法结束方式不同:

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

  1. 效率不同:

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

递归与迭代的关系

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=2
factorial(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)]	
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值