从浏览器输入地址按下Enter键到网页出现到底发生了什么?

问题: 在浏览器输入网址, 按下回车键, 网页出现。经历了什么过程?

其实这个问题非常能考核回答者的综合素质, 也非常地难答

  1. 硬件方面
  2. 软件方面
  3. 网络方面
  1. 外设与CPU进行通信

    键盘通过外设接口电路与CPU进行通信, 外设接口电路向CPU发起中断请求, 因为该中断请求是可屏蔽中断,所以如果CPU在处理其它的任务优先级比较高时,会屏蔽该中断。

  2. 浏览器解析访问URI的IP地址

    先查询本地hosts文件, 如果找到了对应的IP, 发起http请求.

    如果没有查询到, 用UDP协议访问本机设置的DNS服务器, 如果该DNS服务器缓存了这条记录, 直接返回. 如果网络比较堵塞, 可能有包丢失的情况,但是因为使用的UDP协议,所以不会重传。可能要重新发起一遍查询。 如果该DNS服务器没有这条记录,那么向它的父级DNS服务器进行转发,一直递归这种操作,直到访问根DNS服务器,然后一级级返回,并缓存下这条DNS记录,避免再次向父DNS服务器查询。

  3. 查询到IP之后,发起HTTP请求

    因为http协议是应用层的协议, 它还是要依赖tcp协议进行传输, 而tcp协议是依赖于ip协议的, ip协议是运行在链路层上的. 所以会封装成链路层上传输的包。

  4. 在本机和网关进行通信时是局域网的通信

    局域网通信协议一般是以太网的协议, 所以要先进行载波监听. 争抢带宽的使用权. 如果监听发现已经有通信在进行,则根据策略选择重新监听的时机。 直到线路不再繁忙时再和网关进行通信.

  5. 网关或路由器转发包

    因为路由器是三层设备, 所以是用IP进行通信的。先要进行路由选择, 根据路由选择算法进行路由选择, 转发到不同的端口。

  6. 最后一层路由器转发包给服务器

    服务器防火墙检查包, 如果包通过防火墙进站策略, 则根据包中的端口转发给监听该端口的服务器软件。 否则该包会被丢弃。

  7. 负载均衡

    如果存在负载均衡服务器,通过负载均衡服务器转发给内网应用服务器, 这取决于网站架构

  8. 服务器处理http请求

    如果请求的是静态资源, 如html文件或CSS、JS或者图片文件。则直接返回。 如果是php等动态文件, 则交给PHP模块或PHP CGI进行处理,处理后再交给服务器软件返回给客户端

  9. 客户端

    浏览器对返回的数据进行处理, 如果content-type是html, 那么对html文件进行渲染. 如果content-type是json数据, 那么调用回调函数进行处理

笔者只是粗浅地进行了回答, 如果要更加详细,更加深入地回答, 其实每一个步骤都可以说的很久. 这个问题真的很难

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值