从输入一个URL到浏览器显示的过程
- 输入地址
当我们开始在浏览器中输入网址的时候,浏览器其实就已经在智能的匹配可能得 url 了,他会从历史记录,书签等地方,找到已经输入的字符串可能对应的 url,然后给出智能提示,让你可以补全url地址。对于 google的chrome 的浏览器,他甚至会直接从缓存中把网页展示出来,就是说,你还没有按下 enter,页面就出来了。
-
浏览器查找域名的 IP 地址
-
请求一旦发起,浏览器首先要做的事情就是解析这个域名,一般来说,浏览器会首先查看本地硬盘的 hosts 文件,看看其中有没有和这个域名对应的规则,如果有的话就直接使用 hosts 文件里面的 ip 地址。(局部域)
-
如果在本地的 hosts 文件没有能够找到对应的 ip 地址,浏览器会发出一个 DNS请求到本地DNS服务器 。本地DNS服务器一般都是你的网络接入服务器商提供,比如中国电信,中国移动。(本地域)
-
查询你输入的网址的DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询它的缓存记录,如果缓存中有此条记录,就可以直接返回结果,此过程是递归的方式进行查询。如果没有,本地DNS服务器还要向DNS根服务器进行查询。(根域)
-
根DNS服务器没有记录具体的域名和IP地址的对应关系,而是告诉本地DNS服务器,你可以到域服务器上去继续查询,并给出域服务器的地址。这种过程是迭代的过程。
-
本地DNS服务器继续向域服务器发出请求,在这个例子中,请求的对象是.com域服务器。.com域服务器收到请求之后,也不会直接返回域名和IP地址的对应关系,而是告诉本地DNS服务器,你的域名的解析服务器的地址。
-
最后,本地DNS服务器向域名的解析服务器发出请求,这时就能收到一个域名和IP地址对应关系,本地DNS服务器不仅要把IP地址返回给用户电脑,还要把这个对应关系保存在缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。
-
简单点来说就是有局部、本地域、根域、一级域、二级域这样子。
-
同一个网络下,IP地址是计算机的唯一标识
TCP/IP的三握四挥
| 层次 | 功能 |
|---|---|
| 物理层(最底层) | 定义网络的接口标准 |
| 数据链路层 | 定义帧的开始和结束以及实现透明传输,差错校验 |
| 网络层 | 负责选择最佳路径和规划IP地址 |
| 传输层 | 实现可靠传输,流量控制 |
| 会话层 | 实现管理对话和同步 |
| 表示层 | 完成某些特定功能 |
| 应用层(最上层) | 所有能产生流量的程序 |
- 三握
首先客户机向服务器发送
2. 四挥
四次挥手的原因是确保服务器响应数据的完整性:因为在客户端发送FIN告知发送完毕的时候,此时客户端还是需要接收服务器返回的数据的,数据还没有传输完成
需要说明的地方
ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1
SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。
FIN (finish):完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。
补充说明
补充一点理解:
客户端输入URL地址,DNS就会解析域名得到服务器的IP地址,服务器在对应的端口监听客户端的请求,端口通过TCP/IP协议建连接。这也是为什么在数据交互的时候我们称之为路由端口,路由就是用来接收请求响应数据的,路由是基于TCP/IP连接,网络层又有TCP/IP协议,所以说路由器基于网络层实现。
状态码
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误
| 分类 | 分类描述 |
|---|---|
| 1** | 信息,服务器收到请求,需要请求者继续执行操作 |
| 2** | 成功,操作被成功接收并处理 |
| 3** | 重定向,需要进一步的操作以完成请求 |
| 4** | 客户端错误,请求包含语法错误或无法完成请求 |
| 5** | 服务器错误,服务器在处理请求的过程中发生了错误 |