-
外设与CPU进行通信
键盘通过外设接口电路与CPU进行通信, 外设接口电路向CPU发起中断请求, 因为该中断请求是可屏蔽中断,所以如果CPU在处理其它的任务优先级比较高时,会屏蔽该中断。
-
浏览器解析访问URI的IP地址
先查询本地hosts文件, 如果找到了对应的IP, 发起http请求.
如果没有查询到, 用UDP协议访问本机设置的DNS服务器, 如果该DNS服务器缓存了这条记录, 直接返回. 如果网络比较堵塞, 可能有包丢失的情况,但是因为使用的UDP协议,所以不会重传。可能要重新发起一遍查询。 如果该DNS服务器没有这条记录,那么向它的父级DNS服务器进行转发,一直递归这种操作,直到访问根DNS服务器,然后一级级返回,并缓存下这条DNS记录,避免再次向父DNS服务器查询。
-
查询到IP之后,发起HTTP请求
因为http协议是应用层的协议, 它还是要依赖tcp协议进行传输, 而tcp协议是依赖于ip协议的, ip协议是运行在链路层上的. 所以会封装成链路层上传输的包。
-
在本机和网关进行通信时是局域网的通信
局域网通信协议一般是以太网的协议, 所以要先进行载波监听. 争抢带宽的使用权. 如果监听发现已经有通信在进行,则根据策略选择重新监听的时机。 直到线路不再繁忙时再和网关进行通信.
-
网关或路由器转发包
因为路由器是三层设备, 所以是用IP进行通信的。先要进行路由选择, 根据路由选择算法进行路由选择, 转发到不同的端口。
-
最后一层路由器转发包给服务器
服务器防火墙检查包, 如果包通过防火墙进站策略, 则根据包中的端口转发给监听该端口的服务器软件。 否则该包会被丢弃。
-
负载均衡
如果存在负载均衡服务器,通过负载均衡服务器转发给内网应用服务器, 这取决于网站架构
-
服务器处理http请求
如果请求的是静态资源, 如html文件或CSS、JS或者图片文件。则直接返回。 如果是php等动态文件, 则交给PHP模块或PHP CGI进行处理,处理后再交给服务器软件返回给客户端
-
客户端
浏览器对返回的数据进行处理, 如果content-type是html, 那么对html文件进行渲染. 如果content-type是json数据, 那么调用回调函数进行处理