网络相关知识点

163 阅读6分钟

相关的问题可以从“一个完整的HTTP请求过程”来讲述,包括:

域名解析(此处涉及 DNS 的寻址过程)

二种方式解析

主机向本地域名服务器的查询一般都是采用递归查询。
所谓递归查询就是:如果主机所查询的本地域名服务器不知道被查询域名的IP地址,那么本地域
名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询的请求报文(即替该主机继续
查询),而不是该主机自己进行下一步的查询,因此,递归查询返回的查询结果或者是所要查询
的IP地址,或者是报错,表示无法查询所需的IP地址
本地域名服务器向根域名服务器查询通常是采用迭代查询。
迭代查询的特点是这样的:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要
么给出所要查询的IP地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行
查询”。然后让本地域名服务器进行后续的查询(而不是代替本地域名服务器进行后续的查询)。
根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器。让本地域名
服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,那么
给出所要查询的IP地址,要么告诉本地域名服务器下一步应当向哪一个权限域名服务器进行查
询,本地域名服务器就这样进行迭代查询,最后,知道了所要解析的域名的IP地址,然后把这
个结果返回给查询的主机。当然,本地域名服务器也可以采用递归查询,这取决于最初的查询
请求报文的设置是要求使用哪一种查询方式

浏览器先检查自身缓存中有没有被解析过的这个域名对应的IP地址,如果有解析结束,同时域名被缓存的时间也可通过TTL属性来设置。

如果浏览器缓存中没有命中(没有),浏览器会检查操作系统缓存中有没有对应的已解析的结果。而操作系统也有一个域名解析的过程,在windows中可通过C盘里面一个叫做hosts的文件来设置,如果你在这里指定一个域名对应的IP地址,那浏览器会首先使用这个IP地址。但是这种操作系统级别的域名解析过程也被很多黑客利用,通过修改你的hosts文件里的内容吧特定的域名解析到他指定的IP地址还是那个,造成所有的域名劫持。所以在window7中将hosts文件设置成了readonly,防止恶意篡改

如果还没有命中域名,才会真正的请求本地域名服务器(LDNS)来解析和这个域名,这个服务器一般在你的城市的某个角落,距离不是很远,而且这台服务器的性能很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了。浏览器(主机)向其本地域名服务器进行的是递归查询。

  1. 本地域名服务器采用迭代查询,它先向下一个根域名服务器查询
  2. 根域名服务器如果有查询的IP的值则返回,没有命中,则告诉本地域名服务器,下一次查询的顶级域名服务器的IP的值
  3. 本地域名服务器向收到的顶级域名服务器进行查询
  4. 顶级域名服务器如果有查询的IP地址则返回,没有命中,则告诉本地域名服务,下一次查询的权限域名服务器的IP的地址
  5. 本地域名服务器向权限域名服务器进行查询
  6. 权限域名服务器告诉本地域名服务器,所查询的IP地址
  7. 本地域名服务器最后把查询的结果告诉浏览器(主机)。 这10个步骤,后面的八个步骤一共使用了8个UDP用户数据报的报文。
baidu.com 4399.com等,这些都是域名,但是如果前面加上www. 那么它们就不是域名了。
解析http://www.163.com/index.html

1.http:// 这个是协议,也是HTTP超文本传输协议,也就是网页在网上传输的协议.
2.www 这个是服务器名,代表超文本服务器
3.163.com这是一个域名,用来定位网站的独一无二的名字
4.www.163.com这是一个网站名,有服务器名+域名组成
5./这个是根目录,也就是说,通过网站名找到服务器,然后在服务器存放网页的根目录
6.index.html这个是根目录下的默认网页
7.http://www.163.com/index.html 这个是URL,统一资源定位符,全球性地址,
用于定位网上的资源.

TCP 的 3 次握手

image.png

参考:# TCP的三次握手与四次挥手理解及面试题(很全面)

建立 TCP 连接后发起 HTTP 请求、服务器响应 HTTP 请求

TCP三次握手建立连接成功后,客户端按照指定的格式开始向服务端发送HTTP请求,服务端接收请求后,解析HTTP请求,处理完业务逻辑,最后返回一个具有标准格式的HTTP响应给客户端。

HTTP请求格式如下所示四部分组成,分别是请求行、请求头、空行、消息体,每部分内容占一行。

请求行:由三部分组成:分别是请求方法(GET/POST/DELETE/PUT/HEAD)、URI路径、HTTP版本号。

请求头:缓存相关信息(Cache-Control,If-Modified-Since)、客户端身份信息(User-Agent)等键值对信息。

空行。

主体:客户端发给服务端的请求数据,这部分数据并不是每个请求必须的。

服务器响应 HTTP 请求

传输过程中不免发生传输错误,例如丢包、乱序,TCP协议在此过程中及时纠错保证数据正确到达。图中标黑的包就是发生的错误,错误是接收方通过判断收到包的序列号seq和包长度等参数是否有误发现的。

参考:HTTP请求与服务器响应流程

以上的内容都需要尽数掌握,除此以外,关于 HTTP 的还有以下常见内容:

> HTTP 消息的结构,包括 Request请求、Response响应;常见的 HTTP 状态码

见上题

HTTP 请求方法,使用 PUT、DELETE 等方法时为什么有时候在浏览器会看到两次请求(涉及 CROS 中的简单请求和复杂请求)

参考:CORS跨域 GET、POST、PUT、DELETE等请求

浏览器是如何控制缓存的:相应的头信息、状态码

参考:浏览器缓存详解:expires,cache-control,last-modified,etag详细说明浏览器缓存控制三种方式(Expires、Last-Modified、Etag)

如何对请求进行抓包和改造

参考:Fiddler实现简单的抓包与纂改数据

Websocket 与 HTTP 请求的区别

参考:WebSocket与http的区别,以及它的原理

HTTPS、HTTP2 与 HTTP 的对比

参考:http与http2、https区别及含义