我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

客户端与服务器断开连接。 HTML文档由客户端解释,图形结果呈现在客户端屏幕上;

一个简单的HTTP事务就是这样实现的。看起来很复杂,但原理其实很简单。需要注意的是,客户端与服务器之间的通信是非持久连接,即当服务器发送响应后,就断开与客户端的连接,等待下一个请求。

4 DNS域名解析

4.1 DNS域名解析过程

当用户在浏览器中输入域名,如:并回车时,DNS解析过程大致如下:

浏览器缓存检查(原生) 浏览器会首先搜索浏览器自身的DNS缓存(缓存时间比较短,只有1分钟左右,只能容纳1000个缓存条目),看看自己的缓存中是否有对应的条目。而且还没有过期。如果已经过期且尚未过期,则解析将在此结束。浏览器缓存域名也受到限制。不仅浏览器缓存大小有限,而且缓存时间也有限,通常在几分钟到几个小时之间。可以通过TTL属性设置域名缓存的时间限制。缓存时间太长或太短都不好。如果缓存时间过长,一旦域名解析的IP发生变化,客户端缓存的域名将无法解析到变化后的IP地址,导致域名无法正常使用。分析,部分用户在此期间可能无法访问网站。如果时间设置太短,用户每次访问网站都需要重新解析域名。

注意:我们如何检查自己的缓存?您可以使用://net-/#dns查看

操作系统缓存检查(本机)+hosts解析(本机) 如果在浏览器自带的缓存中没有找到对应的条目,其实操作系统也会有一个域名解析的过程,那么操作系统自带的DNS缓存将首先被搜索。该域名是否有对应的DNS解析结果?如果找到且未过期,则停止搜索,解析到此结束。其次,在Linux中,可以通过/etc/hosts文件进行设置。您可以将任何域名解析为任何可访问的IP地址。如果你在这里指定了域名对应的IP地址,浏览器会首先使用这个IP地址。当该配置文件中的域名被解析时,操作系统会将解析结果缓存到缓存中。缓存时间还受域名过期时间和缓存空间大小的控制。

本地域名服务器解析(LDNS) 如果在hosts文件中没有找到对应的条目,浏览器会发起DNS系统调用,并向本地配置的首选DNS服务器发送请求(LDNS一般由电信运营商提供,您可以同样使用提供的DNS服务器发起域名解析请求(使用UDP协议向DNS的53端口发起请求。这个请求是一个递归请求,即运营商的DNS服务器必须向我们提供我们的网络配置中会有一个“DNS服务器地址”项,这个地址是用来解决操作系统会发送这个域名的问题的。到这里设置的LDNS,就是这个地区的域名服务器,这个DNS通常为你本地的上网提供DNS解析服务,比如你在学校上网,那么你的DNS服务器就必须在你的本地。学校。如果你在小区里上网,那么这个DNS就是为你提供上网的应用提供商,也就是中国电信或者中国联通,也称为SPA。那么这个DNS通常位于你所在城市的某个角落,一般不会很远。这个专门的域名解析服务器的性能会非常好。他们一般都会缓存域名解析结果。当然,缓存时间是由域名的过期时间来控制的。一般来说,缓存空间并不是影响域名过期的主要因素。这里已经完成了大约80%的域名解析,所以LDNS主要负责域名解析。

运营商的DNS服务器首先搜索自己的缓存并找到相应的条目。如果没有过期,则解析成功。

根域名服务器解析(Root)如果LDNS没有找到对应的条目,运营商的DNS就会代表我们的浏览器发起迭代的DNS解析请求。它首先会查找根域的DNS的IP地址(该DNS服务器内置了13个根域的DNS的IP地址)。当它找到根域的DNS地址时,就会向其发起请求(这个域名的IP地址是多少?多少?)。

根域名服务器向本地域名服务器返回所查询域的主域名服务器(gTLD)地址。 gTLD是国际顶级域名服务器,如.com、.cn、.org等,全球仅有13个左右。根域发现这是com域中的一个域名,是顶级域,于是它告诉运营商的DNS我不知道这个域名的IP地址,但是我知道com的IP地址领域。你可以去找找。

然后,本地域名服务器 (Local DNS) 向上一步返回的 gTLD 服务器发送请求。于是运营商的DNS就得到了com域的IP地址,并向com域的IP地址发起了请求(这个域名的IP地址是多少?)。 com域中的服务器告诉运营商的DNS我不知道这一点。域名的IP地址,不过我知道这个域名的DNS地址,你可以去找找。

接受请求的gTLD服务器查找并返回该域名对应的Name域名服务器的地址。该名称通常是您注册的域名服务器。例如,如果您向域名服务商申请了一个域名,那么域名解析任务就是通过该域名来执行的。提供者的服务器来完成。于是运营商的DNS向这个域名的DNS地址发起请求(这个通常是域名注册商提供的,比如万网、新网等)(这个域名的IP地址是多少?)。这时,该域名的DNS服务器检查后发现确实是我的,于是将查找到的结果发送给运营商的DNS服务器。此时,运营商的DNS服务器就获取了该域名对应的IP地址。

Name域名服务器会查询存储的域名与IP的映射关系表。一般情况下,它会根据域名获取目标IP记录,并与TTL值一起返回给DNS域名服务器。

返回域名对应的IP和TTL值。本地DNS会缓存域名和IP的对应关系。缓存时间由TTL值控制。

将解析结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析过程结束。

通过以上步骤,我们最终获得的是IP地址,即浏览器最终发起请求时,是根据IP与服务器进行交互的。在实际的DNS解析过程中,可能不止这10个步骤。例如Name可能有多个级别,或者可能有GTM进行负载均衡控制,这可能会影响域名解析过程。根据上述解析过程,DNS解析的整个过程分为:递归查询过程和迭代查询过程。如图所示:

所谓递归查询过程是指“查询提交者”发生变化,而迭代查询过程是指“查询提交者”不变。

比如说,你想知道一个和你一起上法律课的女孩的电话号码,你偷偷给她拍了张照片,当你回到宿舍时,你告诉一个非常忠诚的哥们,他拍着她的胸口一言不发。告诉你,别着急,我给你查一下(这里完成了一次递归查询,也就是查询者的角色发生了变化)。然后他拿着照片询问了学院的学长,学长告诉他,这个女孩是xx系的;然后哥们马不停蹄的询问了xx系办公室主任的助理同学,助理说她是xx系yy班的,然后一个很忠实的朋友就去找了xx系yy班的班长为了得到女孩的电话号码。 (这里完成了几次迭代查询,即查询者的角色不变,但查询对象反复改变。)最后他把号码交给了你。完成整个查询过程。

4.2 跟踪域名解析过程

在Linux系统中,还可以使用dig命名来查询DNS解析过程,如下所示:dig +cmd +trace

上面清楚地展示了整个域名是如何发起和解析的,从根域名(.)到gTLD(.com.)再到Name(.)。还可以看出DNS服务器有多个备份,从任意一台服务器都可以获取解析结果。

4.3 清除缓存域名

我们知道DNS域名解析后会缓存解析结果。结果主要缓存在两个地方,一是本地DNS,二是用户本机。两种缓存均由TTL值和本地缓存大小控制,但最大缓存时间为TTL值。基本上,本地DNS的缓存时间是由TTL控制的。手动干预比较困难,但是我们本地的缓存可以通过如下方式来清除。

在Linux下,可以通过/etc/init.d/nscd清除缓存。如下:

JVM缓存DNS解析结果:在Java应用程序中,JVM也会缓存DNS解析结果。这个缓存是在类中进行的,而且缓存的时间比较特殊。它有两种缓存策略:一是缓存正确的解析结果。 ,另一个是解析失败结果的缓存。这两个缓存时间是由两个配置项控制的,这两个配置项是在%%中配置的。文件。这两个配置项是.cache.ttl和.cache..ttl。它们的默认值分别是-1(永不过期)和10(缓存10秒)。

修改这两个值有多种方法,即:直接修改java.util.包中的默认值。文件中,在Java启动参数中添加..ttl=xxx修改默认值,通过类动态修改。

这里还要强调一下,如果我们需要使用类来解析域名,那么一定是单例模式,否则会出现严重的性能问题。如果每次都创建一个实例,那么每次都必须进行一次完整的域名解析,这是非常耗时的,所以要特别注意这一点。

4.4 几种域名解析方法

A代表的记录用于指定域名对应的IP地址,例如115.238.23.241、121.14.24.241。一条记录可以将多个域名解析为一个IP地址,但不能将一个域名解析为多个IP地址。

MX记录代表Mail,也就是说你可以将某个域名下的邮件服务器指向你自己的Mail。例如,域名的A记录IP地址为115.238.25.245。如果MX记录设置为115.238.25.246,是的,邮件路由将由DNS完成。将邮件发送到115.238.25.246所在的服务器,如果发出正常的Web请求,仍然会解析为A记录的IP地址。

CNAME记录的全称是Name(别名解析)。所谓别名解析,就是可以为一个域名设置一个或多个别名。如果它被解析,它也将被解析,它们是 和 的别名。前面的跟踪域名解析中的“1542 IN CNAME”就是CNAME解析。

NS记录指定了某个域名的DNS解析服务器,即该域名指定IP地址的DNS服务器解析前面的“.IN NS”。这是 NS 分辨率。

TXT记录,针对某个主机名或域名设置指令。例如,您可以将 TXT 记录设置为“ | 中国”。

4.5 网络抓包分析

Linux虚拟机测试,使用命令wget进行请求,发现直接使用浏览器请求时,干扰请求较多,所以使用wget命令进行请求,但是使用wget命令只能请求回index.html ,并且不会影响指数。请求.html中包含的静态资源(js、css等文件)。

抓包截图如下:

1号包,这个是虚拟机广播,获取192.168.100.254的MAC地址(也就是网关),因为局域网通信依赖MAC地址,所以需要和网关通信是因为我们的DNS服务器IP是外围IP。想要出去,就必须依靠网关来帮助我们出去。

2号包,这是网关收到虚拟机的广播后对虚拟机的响应,告诉虚拟机自己的MAC地址,这样客户端就找到了路由出口。

3号包,这个包就是wget命令,向系统中配置的DNS服务器发出域名解析请求(准确的说,wget发起DNS解析系统调用)。请求的域名预计是IP6地址(AAAA表示的是IPv6地址)。

4号包,这个DNS服务器对系统的响应,显然使用IPv6的人还很少,所以AAAA记录不可用。

5&6号包仍然请求解析IPv6地址,但主机名不存在,所以结果是没有这个名称。

7号包,这是请求域名对应的IPv4地址(A记录)。

在8号包中,DNS服务器无论是从缓存中还是通过迭代查询,最终获得了该域名的IP地址。将响应给出给系统,然后系统给出wget命令。然后wget就获得了IP地址。这里我们还可以看到,客户端和本地DNS服务器是递归查询的(即服务器必须给客户端一个结果)。那么就可以开始下一步了,就是TCP三路握手。

5 发起TCP 3次握手

User-Agent(一般指浏览器)得到域名对应的IP地址后,会以随机端口向服务器WEB程序(常用包括httpd、nginx等)的80端口发起TCP调用(1024 < 端口 < 65535)。连接请求。这个连接请求(原来的http请求经过TCP/IP4层模型的层层数据包)到达服务器后(经过各种路由设备,局域网中除外),进入网卡,然后进入TCP/IP4层。内核的IP。协议栈(用于识别连接请求,解封装数据包,层层剥离)也可能经过防火墙(属于内核的一个模块)的过滤,最后到达WEB程序,最终建立一个TCP/IP 连接。 。

如下图:

首先,发送连接探测。 ACK=0表示确认号无效。 SYN = 1 表示这是一个连接请求或连接接受消息。它还表明该数据报不能携带数据。 seq = x 表示自己的初始序列号(seq = 0 表示这是0号包)。此时进入该状态,表示客户端正在等待服务器的回复。

监听到连接请求消息后,如果同意建立连接,就会向服务器发送确认消息。 TCP报文头中的SYN和ACK都设置为1。ack=x+1表示下一个报文段中预计从对方收到的第一个数据字节数为x+1,同时也表示所有直到x的数据都已被正确接收(ack=1实际上是ack=0+1,这是客户端期望的第一个数据包),seq = y表示其初始序列号(seq=0表示这是第0个数据包由服务器发送)包)。此时服务器进入,表明服务器已收到连接请求,正在等待确认。

收到确认后,需要再次发送确认,携带要发送的数据。 ACK设置为1表示确认号ack=y+1有效(代表期望收到服务器发来的第一个数据包),其自身的序列号seq=x+1(代表这是我的第一个数据包) ,相对于第0个数据包),一旦收到确认,TCP连接就进入状态,可以发起http请求。

看抓包截图:

为什么TCP需要3次握手?

举个例子:假设一个外国人在故宫迷路,看到了小明,于是就有了下面的对话:

外国人:我,你能说话吗?

小明:是的。

外国人:好的,我想要……

在问路之前,老外先问小明会不会说英语。小明回答是,然后老外就开始问路。

两台计算机之间的通信是通过协议(目前流行的TCP/IP协议)来实现的。如果两台计算机使用的协议不同,就无法通信,所以这种三向握手就相当于测试对方是否遵循TCP。 /IP协议,协商完成后即可进行通信。当然,这种理解并不那么准确。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/7601.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线