一次完整的HTTP网络请求过程

本文转改与 一次完整的HTTP网络请求过程详解

  1. 输入 域名地址后, 如 www.baidu.com, 跳转到百度一下的展示页面。 那么这中间 经历了什么呢?

「简略的回答有
域名解析-》TCP的三次握手-》建立TCP链接后发起HTTP请求-》服务器响应HTTP请求-》浏览器解析HTML代码&同时请求HTML代码中的资源(如js,css,图片等)-》最后,浏览器对页面进行渲染并呈现给用户;

1.域名解析:
以Chrome浏览器为例,Chrome会解析域名对应的IP地址。

(1)Chrome浏览器会首先搜索浏览器自身的DNS缓存(可以使用 chrome://net-internals/#dns 来进行查看),浏览器自身的DNS缓存有效期比较短,且容纳有限,大概是1000条。如果自身的缓存中存在blog.****.net 对应的IP地址并且没有过期,则解析成功。

(2)如果(1)中未找到,那么Chrome会搜索操作系统自身的DNS缓存(可以在命令行下使用 ipconfig /displaydns 查看)。如果找到且没有过期则成功。

(3)如果(2)中未找到,那么尝试读取位于C:\Windows\System32\drivers\etc下的hosts文件,如果找到对应的IP地址则解析成功。

(4)如果(3)中未找到,浏览器首先会找TCP/IP参数中设置的本地DNS服务器,如果要查询的域名包含在本地配置的区域资源中,则完成域名解析,否则根据本地DNS服务器会请求根DNS服务器。

(5)本地DNS会把请求发至13台根DNS,根DNS服务器收到请求后会返回负责这个域名(.net)的服务器的一个IP,本地DNS服务器使用该IP信息联系负责.net域的这台服务器。这台负责.net域的服务器收到请求后,如果自己无法解析,会返回.net域的下一级DNS服务器地址(blog.****.net)给本地DNS服务器。以此类推,直至找到。

HTTP 消息结构&客户端请求消息
一次完整的HTTP网络请求过程
一次完整的HTTP网络请求过程
一次完整的HTTP网络请求过程
【以上是:一次完整的HTTP网络请求过程的内容】
http协议各版本的区别
HTTP 响应头信息
一次完整的HTTP网络请求过程

python+seleniumm 自动化测试
2

为什么只有13台dns根服务器

NS协议的最初定义要从20世纪80年代未期开始算起,它使用了端口上的UDP和TCP协议。

UDP通常用于查询和响应,TCP用于主服务器和从服务器之间的区传送.遗憾的是,在所有UDP实现中能保证正常工作的最大包长是512字节,对于在每个包中必须含有数字签名的一些DNS新特性(例如,DNSSEC)来说实在是太小了。

512字节的限制还影响了根服务器的数量和名字。

要让所有的根服务器数据能包含在一个512字节的UDP包中,根服务器只能限制在13个,而每个服务器要使用字母表中的单个字母命名。

以太网数据的长度必须在46-1500字节之间,这是由以太网的物理特性决定的。

事实上,这个1500字节就是网络层IP数据包的长度限制,理论上,IP数据包最大长度是65535字节。

这是由IP首部16比特总长度所限制的,去除20字节IP首部和8个字节UDP首部,UDP数据包中数据最大长度为65507字节。

在Internet数据传输中,UDP数据长度控制在576字节(Internet标准MTU值),而在许多UDP应用程序设计中数据包被限制成512字节或更小。这样可以防止数据包的丢失。

许多解析器首先发送一条UDP查询,如果它们接收到一条被截断的响应,则会用TCP重新发送该查询。

这个过程绕过了512字节的限制,但是效率不高。您或许认为DNS应该避开UDP,总是使用TCP,但是TCP连接的开销大得多。

一次UDP名字服务器交换可以短到两个包:一个查询包、一个响应包。一次TCP交换则至少包含7个包:三次握手初始化TCP会话、一个查询包、一个响应包以及最后一次握手来关闭连接。

http://baike.baidu.com/view/704566.htm
http://baike.soso.com/v43303576.htm
本文“DNS根服务器、根服务器、全球13台根域名服务器、详细介绍”,来自:Nuclear’Atk 网络安全研究中心,本文地址:http://lcx.cc/?i=2343,转载请注明作者及出处!
标签:
除非注明,文章均为树梢老李原创,转载请注明本文地址:http://jiaweili.com/post/250.html