在浏览器中输入一个URL后会发生什么

浏览器中输入一个URL后会发生什么

  1. 首先对URL进行解析,提取出服务器A的域名以及要请求的资源,然后根据这些信息构造出HTTP报文
  2. 进行DNS域名解析过程,查询服务器A的域名对应的IP地址:首先查看自己本地的DNS缓存中是否有A的域名对应的记录;如果没有,则向本地DNS服务器发送DNS查询请求,本地DNS服务器的缓存中如果有则返回,否则向根域名DNS服务器发起递归或迭代式的DNS查询请求(此处以递归为例);根DNS收到后,向对应的顶级域DNS发送DNS查询请求;顶级域DNS收到后,向对应的权威域名DNS服务器发送查询请求;权威DNS服务器收到后,返回该域名对应的IP地址,然后一路返回到主机浏览器;
  3. HTTP是基于TCP来传输数据的,所以在有了服务器A的ip地址后就可以与A建立TCP连接了,通过三次握手以后,主机成功和服务器A建立了TCP连接;
  4. 如果HTTP报文的长度大于MSS,则TCP会对数据进行分割,形成多个TCP报文段,并为每个报文段添加上TCP头部,然后将报文段交付给IP;
  5. IP为每个数据报添加上IP头,指明源ip地址和目的ip地址等信息,然后将其交付给链路层;
  6. 链路层需要在IP数据报的头部添加上MAC头,指明源MAC地址和目的MAC地址,源MAC地址就是主机自己的MAC地址,这是网卡在出厂时固化在网卡的ROM中的。至于目的MAC地址,如果是局域网内的主机则为该主机的MAC地址,如果服务器A不在局域网内则目的MAC地址为默认网关(第一条路由器)接口的MAC地址,然后需要通过ARP协议(作用为根据ip地址来查询MAC地址)来查询,如果主机自己的ARP表(格式为)中有对应的,则可以直接获取到。否则主机需要广播一个查询分组,其中包含默认网关B接口的ip地址,B收到并匹配成功后向向主机单播一个应答,其中就包含了B的MAC地址,此时就拿到了目的MAC地址,同时主机会在自己的ARP表中缓存该记录。然后在末尾添加上CRC校验字段,此时就完成了将数据报封装成帧的过程;
  7. 网卡驱动拿到数据帧后将其复制到网卡内的缓存区中,最后网卡将二进制数据转换为电信号,并通过网线发送出去;
  8. 电信号通过网线到达交换机,被交换机里的模块进行接收后转化为数字信号。然后交换机从自己的MAC地址表(格式为,每接收到一个数据就会在该表中插入一条记录)中查询目的MAC地址所对应的端口,如果找到了就将数据发送到对应的端口上,如果找不到则将数据转发给除源端口外的所有端口(泛洪);
  9. 数据包经过交换机的转发来到了路由器(网关路由器),然后路由器从数据包中提取出数据帧并进而提取出ip数据报。每一个路由器都有一张路由转发表(通过运行路由选择算法来维护),然后路由器根据这个数据包的目的ip地址来从路由表中进行匹配,决定要把这个数据包转发到哪个输出端口以及下一跳的ip地址。然后路由器修改ip数据报的头部,将源ip地址从主机的私网地址替换为路由器接口的公网地址,TTL-1,更新首部校验和。并再次将数据报封装成帧,源MAC地址为路由器接口的MAC地址,目的MAC地址为下一跳路由器接口的MAC地址或目的主机的MAC地址(通过ARP协议去查询)。最后路由器将数据包从对应的接口处发送出去。
  10. 经过一系列路由器的转发,数据包最终来到了目的主机。数据包被网卡接收后,沿协议栈向上传递,最终被Web服务器的HTTP进程收到。Web服务器对HTTP请求进行相应,构造了一个HTTP相应报文,然后通过以上过程发送给源主机;
  11. 源主机接收到HTTP相应报文后,交给浏览器去解析、渲染页面;
  12. 当用户主动关闭网页或者HTTP服务器检测到该连接在一定时间范围内没有被使用,则会触发两者之间的TCP四次握手,最后TCP连接被关闭,资源被释放。

你可能感兴趣的:(计算机网络,计算机网络,面试题)