DNS服务器收到响应后如何查到域名对应的IP

DNS服务器收到响应后如何查到域名对应的IP,第1张

客户端首先访问最近的一台DNS服务器(客户端的TCP/IP设置中填写的DNS服务器地址),假设要查询www.lab.glasscom.com这台Web服务器的相关信息(图1.16①)。

由于最近的DNS服务器中没有存放www.lab.glasscom.com域名对应的信息,所以需要从顶层开始向下查找。

最近的DNS服务器中保存了根域DNS服务器的信息,因此它会将来自客户端的查询消息转发给根域DNS服务器(图1.16②)。

根域服务器中也没有这个域名,但根据域名结构可以判断这个域名属于com域,因此根域DNS服务器会返回它所管理的com域中的DNS服务器的IP地址。

接下来,最近的DNS服务器又会向com域的DNS服务器发送查询消息(图1.16③)。

com域中也没有www.lab.glasscom.com这个域名的信息,和刚才一样,com域服务器会返回它下面的glasscom.com域的DNS服务器的IP地址。

以此类推,只要重复前面的步骤,就可以顺藤摸瓜找到目标DNS服务器(图1.16⑤),只要向目标DNS服务器发送查询消息,就能得到www.lab.glasscom.com的IP地址了。

当然,DNS服务器有一个 缓存 功能,可以记住之前查询过的域名。如果要查询的域名和相关信息在缓存中,就可以直接返回响应,接下来的查询可以从缓存的位置开始向下进行。

这个缓存机制中有一点需要注意,那就是信息被缓存后,原本的注册信息可能会发生改变,这时缓存中的信息就有可能是不正确的。因此,DNS服务器中保存的信息都设置有一个 有效期 ,当缓存中的信息超过有效期后,数据就会从缓存中删除。而且,在对查询进行响应时,DNS服务器也会告知客户端这一 响应的结果是来自 缓存中 还是来自 负责管理该域名的DNS服务器。

本文摘取自周自恒翻译的户根勤编写的《网络是怎样连接的》。

1、HTTP请求概述

在前面有一篇文章对HTTP协议有详细的描述,这里就不再过多的做说明,只是简单的作为这篇文章的引子。

HTTP协议又被称为超文本传输协议,它的的设计目的是保证客户机与服务器之间的通信。HTTP 的工作方式是客户端与服务器之间的请求-应答协议。在客户端和服务器之间进行请求-响应时,有两个最基本的请求方式:GET 和 POST。

其中,GET请求表示从指定的资源请求数据,POST请求表示向指定的资源提交要被处理的数据。

2、HTTP请求格式

在HTTP请求中,首先是请求行,注意这里的请求行一定要放在最前面;其次,是请求头,英文表示为header;然后会空一行,紧接着就可以是请求的具体内容了,一般称之为请求体,request-body。给出一个图示如下:

3、GET请求与POST请求对比

GET请求与POST请求有一些异同点,主要有以下几点问题:

(1)、GET请求和POST请求都是客户端与服务器之间交互,请求--应答模式的协议

(2)、GET请求是通过URL直接请求数据,数据信息可以在URL中直接看到,比如浏览器访问;而POST请求是放在请求头中的,我们是无法直接看到的;

(3)、GET提交有数据大小的限制,一般是不超过1024个字节,而这种说法也不完全准确,HTTP协议并没有设定URL字节长度的上限,而是浏

览器做了些处理,所以长度依据浏览器的不同有所不同;POST请求在HTTP协议中也没有做说明,一般来说是没有设置限制的,但是实际上浏览器也有默认

值。总体来说,少量的数据使用GET,大量的数据使用POST。

(4)、GET请求因为数据参数是暴露在URL中的,所以安全性比较低,比如密码是不能暴露的,就不能使用GET请求;POST请求中,请求参数信息是放在请求头的,所以安全性较高,可以使用。在实际中,涉及到登录操作的时候,尽量使用HTTPS请求,安全性更好。

下面给出一副图示,说明一下HTTP中GET与POST请求的差异:

4、使用步骤:

在Android中使用HTTP请求,主要步骤如下:

(1)、实例化一个HttpGet(或HttpPost)对象,将请求的URL地址通过构造方法传给HttpGet(或HttpPost)对象;

(2)、使用DefaultHttpClient类的execute方法发送GET或POST 请求,并返回HttpResponse对象;

(3)、通过HttpResponse接口的getEntity方法返回响应信息。

5、实例代码

给出一个在实际应用中的一个POST请求的代码片段:

[java] view plain copy print?

params = new LinkedList<BasicNameValuePair>()

params.add(new BasicNameValuePair("param1", "Post方法"))

params.add(new BasicNameValuePair("param2", "第二个参数"))

try {

HttpPost post = new HttpPost(baseUrl)

post.setEntity(new UrlEncodedFormEntity(params, "utf-8"))//将参数填入POST Entity中

HttpResponse response = httpClient.execute(post)//执行POST方法

resCode = response.getStatusLine().getStatusCode())//获取响应码

result = EntityUtils.toString(response.getEntity(), "utf-8"))//获取响应内容

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace()

} catch (ClientProtocolException e) {

// TODO Auto-generated catch block

e.printStackTrace()

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

6、HTTP请求状态码意义

HTTP请求中,主要有这样几个类型:1XX:表示信息提示,2XX:表示成功,3XX:表示重定向,4XX:表示客户端请求错误,5XX:表示服务器错误。常见的几个HTTP请求状态码意义如下:

200 OK: 找到了该资源,并且一切正常。

304 NOT MODIFIED: 该资源在上次请求之后没有任何修改。这通常用于浏览器的缓存机制。

401 UNAUTHORIZED: 客户端无权访问该资源。这通常会使得浏览器要求用户输入用户名和密码,以登录到服务器。

403 FORBIDDEN: 客户端未能获得授权。这通常是在401之后输入了不正确的用户名或密码。

404 NOT FOUND: 在指定的位置不存在所申请的资源。

505 NOT SUPPORTED:服务器不支持请求中所指明的HTTP版本

这个要说到TCP(传输控制协议)了。

比如你的QQ吧。当你的QQ要登陆的时候,就要从你的机器发出一个数据包,发到主机服务器上。当你发送这个数据包的之后,当服务器接到这个数据包,它就会相应地回应一个数据包。到时候,你的机器还会回应一个数据包,以完成连接。这个过程就是TCP著名的三次握手。

如果你发送的数据包服务器没有接收到,或者服务器发送的数据包你没有收到,则显示服务器超时。一般情况是因为网速慢造成的。你的数据包发出去之后,在一定时间内没有收到相应的回应,则按没有受到处理。

可能是你的网络出了问题,或时因为冲突掉线

呵呵,服务器拒绝您的请求,出错原因:非常抱歉,QQ系统出现了一个错误,请您稍后再尝试。如问题持续出现可与腾讯客服联系。 错误代号: 43

邮箱也有

邮箱有连接时间限制,在你断网后重新连接也会出现,这是为了安全

不过QQ掉线是服务器问题


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/160730.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-23
下一篇2023-03-23

发表评论

登录后才能评论

评论列表(0条)

    保存