键入网址到网页显示期间发生了什么?
键入网址到网页显示期间发生了什么?
1、浏览器做的第一步是解析URL,从而生成发送给Web服务器的请求信息(URL就是请求server中的文件资源)
当没有路径名时,即访问根目录下实现设置的默认文件
2、URL解析后,浏览器就确定了Web服务器和文件名,然后根据这些信息来生成HTTP请求。
3、接下来需要委托操作系统将消息发送给Web服务器。但发送前要先去DNS服务器查询服务器域名对应的IP地址。每次解析域名前,浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器」。
域名层级关系类似一个树状结构:
- 根 DNS 服务器(.)
- 顶级域 DNS 服务器(.com)
- 权威 DNS 服务器(server.com)
客户端只要能找到任意一台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再一路顺藤摸瓜找到位于下层的某台目标 DNS 服务器
客户端首先会发出一个 DNS 请求,问 www.server.com 的 IP 是啥,并发给本地 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址)。
本地域名服务器收到客户端请求后,如果缓存里的表格能找到 www.server.com,则它直接返回 IP 地址。如果没有,本地 DNS 会去问它的根域名服务器要 www.server.com 的 IP 地址吗。根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路。
根 DNS 收到来自本地 DNS 的请求后,发现后置是 .com,就知道 www.server.com 这个域名归 .com 区域管理,然后就会返回 .com 顶级域名服务器的地址。
本地 DNS 收到顶级域名服务器的地址后,发起请求问 www.server.com 的 IP 地址
顶级域名服务器返回负责 www.server.com 区域的权威 DNS 服务器的地址,于是本地 DNS 转向问权威 DNS 服务器www.server.com对应的IP。server.com 的权威 DNS 服务器,它是域名解析结果的原出处。权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。本地 DNS 再将 IP 地址返回客户端,直到现在,客户端和目标建立连接。
4、通过DNS获取到IP后,就将HTTP的传输交给os的协议栈。浏览器通过调用socket库委托协议栈工作。
协议栈的上半部分有两块(负责收发数据的TCP和UDP协议),接受应用层得委托执行手法数据的操作。
下一半是IP协议,控制网络包收发操作。(包括ICMP和ARP协议)
IP下的网卡驱动程序负责控制网卡硬件,再下面的网卡负责完成实际的收发操作
将HTTP报文依次加上TCP头、IP头和MAC头,成为一个健全的网络包。
5、网络包通过网卡出口,需要将数字信息转为电信号在网线上传输。控制网卡需要靠网卡驱动程序,网卡驱动获取网络包后将其复制到网卡的缓存中,接着会在开头加上报头和起始帧分界符(用来表示包起始位置的标记),在末尾加上用于检测错误的帧校验序列FCS(用来检查包传输过程是否有损坏)。
6、电信号到达网线接口,交换机(工作在MAC层)里的模块进行接收,将电信号转为数字信号。通过包尾的FCS校验错误,没问题就放到缓冲区。
交换机和网卡不同:计算机网卡有MAC地址,交换机端口不具备MAC地址。
交换机内部有一张MAC地址与网线端口的表,交换机可以由此判断应该把包转发到哪里。
从表中找不到-> (设备还没向交换机发过包、设备过长时间没工作)就广发。
7、网络包此时经过交换机后到达路由器,继续转发,同样通过查表获取转发目标。
交换机和路由器不同:
- 路由器基于 IP 设计,各端口有MAC和IP地址
- 交换机基于以太网设计,端口没有MAC地址(链路层)
8、经过路由器终于到达服务器,开始扒数据包。