从浏览器地址栏里输入一个URL开始,到出现整个页面,网络上都发生了什么事?

 
 

最近谈到这个问题,觉得自己不能够清楚的讲明白这个过程的一些细节,所以差了些资料,觉得如下的解答还是比较详细的,后期还会慢慢完善这个过程中不足的地方。

回车前: 1. 如果用某些输循入法输入, 它会按标准结果、缓存匹配、发送到去端匹配, 给你几个联想结果。  你对结果的修改会反馈到去端。 2. 现在智能的浏览器,输入栏, 也做了第1步的事。 3. 可能有木马hook了地址栏, 或一系列调用链中的某一步,窃取你的信息,可能还会在后面转向你的网页 4. 安全软件可能hook了地址栏,或一系列调用链中的某一步, 分析你的输入, 比如发现是支付网站, 就帮你检查运行环境是否安全。 5. 统计插件也可以上报该网站增加了一次点击了。

回车后: 分析域名, 如果不是ip,在本地hosts里查一把, 没查到? 查dns缓存,没查到或过期? 发dns请求(windows一般配主备dns, 不解释了吧) dns服务器层层再向上查, 到根结点再指向具体网站的dns服务器。具体网站的dns服务器, 还可以做负载均衡, 选则合适的ip返回。 这里可以返回多ip, 但中转的dns怎么缓存, 怎么缓存时又支持不同的负载ip,没去研究。 发dns一般是udp也支持tcp, 它们都是ip网络层之上的。 dns服务器有ip地址,但两个ip地址中间可能隔了很多交换机路由器防火墙。 对于浏览器本地机器来说, 就是查路由表, 找到第一个ip(目标或中转ip)。 开始数据链路层了, 通过arp协议知道对方mac地址(这里可能被欺骗,然后就发给劫持者了,或者被斯诺登窃听了。所以要用https这类密文传输,或者关键字段自已加密,同时要做签名防篡改。整个链路的每两个点之间传输都有这个问题) 然后数据就发出去了 交换机不说了 防火墙, 按源目标ip/port协议等,匹配规则,看是否允许,生成session。新生成Session比较耗cpu, 所以长连接跨墙性能好。 还有应用层的防火墙功能, 还分析数据包, 目前类似绿坝这类,还有企业监控的,XX监控的会用。 但这个性能要求更高。 路由器, 基本功能不在连接session里的再查路由表。udp不像tcp有滑动窗口的,还有惩罚机制限速。 以上网络的部分是通用的, 不只是说dns.

查到ip后 有了ip 端口(按协议http默认80 https默认443), 进行tcp连接 从服务端说哈, 先到网关, 一般网关会做nat, 并会负载均衡到一台缓存机(CDN,或nx、squid等) , 缓存机存静态页面, 动态的有种协议可以在静态页里打个标记,只从后端取这个标记地址,或者动态页面完全不经过缓存机直接到大的web服务器。 web服务器一般会访问数据, 可能有memcache, 或读写分离的数据库,或中间件, 现在一般要分布式,要两地三中心跨城容灾, 在中国要互联互通,在海外建idc就近访问也不被墙。 要专线。。。

如果https还要各种加密签名几次握手做tcp上一层的连接

终于连接上了 send http get请求 终于收到第一个回包了(可能是zip啥格式的浏览器还要解一下) 右键看源码包, 里面还静态引用了无数的链接(脚本、图片、媒体等等)。 本地有没过期的缓存?用本地的, 不然,一个个拉回来吧。  浏览器也有规则怎么显示他们, 比如图片支持从模糊到清晰显示, 页面拉到的部分先显示等等。  页面获取cookie信息进行展现。  页面上的脚本开始跑了, 他们可以后台异步的做些事ajax啥的 脚本从cookie中获取session id get动态页面, 服务器收到session id取服务端未过期的信息。这些cooki/session和登录信息, 可以将行为关联起来, 可以做大数据的生成。 做动态页面的展现,比如精准广告。

猜你喜欢

转载自blog.csdn.net/u014304560/article/details/48715469