浏览器输入一个URL之后发生了什么?这个问题一直是一个非常经典的问题,透过这个问题,我们可以从数据包的角度,自顶向下 (也可以自底向上) 地理解计算机网络各层发生的事情,同时也是一个面试的热点问题。但很多的回答都是从应用层和传输层的角度做一个浅显的回答,没有继续对下面的层次进行挖掘。但这篇文章将不仅局限于最上面的两层,而是会设涉及到每一层的传输细节。相信只要把这个问题理解思考透彻,对计算机网络的各层协议将会有一个更加深层次的理解。

<p> 假设现在在局域网下,通过以太网线访问google服务器,有如下的网络拓扑关系</p>

<p>为了方便查看,下面将不时出现上面这张图</p>

<p>下面我们沿着协议栈自顶向下,以一个数据包的角度,来观察这个过程发生了什么事情。每个发生事情的背后都有面试或者研究生笔试对应的考点</p>

<h2>DHCP  UDP  IP  以太网</h2>

每个能够上网的主机都需要有一个ip地址,用来唯一标志网络中的主机。<strong>【考点:IPv4地址的划分<附录1>、IPv6协议<2>、CIDR、IP数据报格式、子网掩码】</strong>

<h5>生成DHCP请求报文<3></h5>

本地主机需要请求DHCP服务器(这里假定了DHCP服务器运行在路由器中)分配得到一个ip地址,因此,本地主机发出DHCP请求报文,这个报文被封装在UDP报文中。不难想到,本地主机一开始不知道路由器的ip地址,所以它也不知道应该将这个DHCP请求包往哪发,所以只能将这个UDP报文封装在一个目的ip地址为255.255.255.255 (广播) 和源ip地址为0.0.0.0 (本地)的IP数据报中。<strong>【考点:单播、多播 (组播)、广播】</strong> 这个数据帧接着翻译成比特流放置到物理层进行传输。<strong>【考点:物理层编解码】</strong>

<h5>继续向下,封装以太帧传输至DHCP服务器</h5>

以太网帧的目的MAC地址为FF:FF:FF:FF:FF:FF,源MAC地址为00:16:D3:23:68:6A,这里就还需要思考MAC帧的格式及传输特点<4> DHCP请求包到达交换机后<strong>【考点:交换机】</strong>,在所有的出口广播入帧,这样也必定能有一帧能够发到DHCP服务器。

<h5>DHCP服务器响应报文传输至本地主机</h5>

DHCP服务器通过报文的请求IP地址为255.255.255.255判定这是一个DHCP请求报文,因此交给上层协议处理。DHCP服务器确定要将地址68.85.2.101分配给本地主机,因此生成包含68.85.2.101和DNS服务器的IP地址、默认网关的IP地址、网络掩码的DHCP ACK报文,又经过与上述过程的层层封装发送给本地主机 (这个时候不需广播,因为DHCP服务器已经能从DHCP请求报文提取出源主机的MAC地址)

<h5>本地主机对DHCP ACK报文的处理</h5>

本地主机从DHCP ACK报文中提取出上面的种种信息进行初始化配置。

<h2>DNS  ARP</h2>

输入google服务器的URL,本地浏览器得先对URL进行解析<strong>【考点:URL知识点】</strong><5> 这里面最重要的是找到主机host name,之后又开启了一段新的旅程。

<h5>生成DNS查询报文</h5>

主机将要访问的host name<google>放到DNS查询报文中<6>,使用UDP封装,下层目的IP地址填入68.87.71.226,源IP地址填入68.85.2.101。

<h5>ARP请求得到默认网关的MAC地址</h5>

生成一个目的IP地址为68.85.2.1的ARP查询报文,放置在一个广播帧中发送给交换机,交换机洪泛发送给所有设备,默认网关必然也会收到一个ARP请求包。

<h5>默认网关ARP响应</h5>

默认网关从ARP请求报文中抽取出源MAC地址作为目的MAC地址,并将自己的MAC地址发还给本地主机。

<h5>将DNS查询报文发往默认网关</h5>

本地主机处理完ARP响应报文后 (主要是提取默认网关的MAC地址),将DNS报文中的目的MAC字段填充上默认网关的MAC地址。现在这个DNS数据帧,目的IP地址是DNS服务器,目的MAC地址的默认网关的MAC地址。本地主机只需将这个DNS数据包发送出去,这个数据包便会经过交换机的转发来到默认网关。

<h2>IGP  EGP 域内域间路由选择</h2>

<h5>默认网关转发DNS查询报文</h5>

默认网关根据目的地址68.87.71.226根据转发表决定发给Comcast网络中最左边的边界路由器 <strong>【考点:BGP协议】</strong>

<h5>域内路由选择</h5>

Comcast网络边界路由器接收到数据帧之后,抽取IP数据包,提取出目的IP地址为68.87.71.226,根据域内路由选择协议发送给下一跳路由器,由下一跳路由器存储转发 <strong>【考点:RIP协议、OSPF协议】</strong>

<h5>DNS查询过程</h5>

数据包到达DNS服务器之后,开始做分析和查询。这个时候得看DNS服务器采用的是迭代查询还是递归查询<strong>【考点:DNS查询】</strong>,总之无论经过哪种方式,DNS最终一定可以获得google服务器的IP地址,封装在DNS响应报文中,发还回本地主机,本地主机就可以使用这个ip地址访问google服务器了。此外,本地主机会将这个<域名,ip地址>缓存在本地中,下次直接用ip发起访问就好。

<h2>TCP  HTTP</h2>

下面相信对各位经历过面试的读者,已经非常熟悉了,从简。

<h5>建立TCP连接</h5>

使用TCP三次握手建立一次持久连接。<strong>【考点:TCP三次握手机制】</strong>

<h5>本地主机发送HTTP GET报文</h5>

主机浏览器生成包含要获取的 URL 的HTTP GET报文,写入套接字,成为TCP报文段的一个有效载荷。<strong>【考点:HTTP协议<font color="red">(重要!!!)</font>】</strong>

<h5>google服务器发送HTTP RESPONSE报文</h5>

google服务器接收到HTTP GET报文,处理并生成一个HTTP响应报文,发还给本地主机。

<h5>数据传输</h5>

WEB数据传输<strong>【考点:HTTP文档传输次数计算】</strong>

<h5>断开TCP连接</h5>

通过TCP四次挥手结束TCP持久连接<strong>【考点:TCP四次挥手机制】</strong>

<h2>学习附录</h2>

<ol>

<li><a href="https://www.cnblogs.com/lsgxeva/p/9208298.html">IPv4地址分类及特征</a></li>

<li><a href="https://zhuanlan.zhihu.com/p/35509560">IPv6原理、应用与实践</a></li>

<li><a href="https://blog.csdn.net/zqixiao_09/article/details/77131239">网络协议篇之DHCP协议(一)—— DHCP协议基础</a></li>

<li><a href="https://blog.51cto.com/u_10706198/1773705">MAC帧格式,IP数据报格式和ARP数据报格式</a></li>

<li><a href="https://blog.csdn.net/hhthwx/article/details/78567961">URL格式</a></li>

<li><a href="https://blog.csdn.net/cqcre/article/details/106512968">超全总结!关于 DNS 看这一篇就够了</a></li>

<li><a href="https://blog.csdn.net/weixin_44058932/article/details/104589918?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-1&spm=1001.2101.3001.4242">UDP协议格式及特点</a></li>

<li><a href="https://blog.51cto.com/u_10706198/1773705">MAC帧格式,IP数据报格式和ARP数据报格式</a></li>

</ol>

<h2>参考文献</h2>

<ul>

<li>计算机网络 自顶向下方法</li>

<li>计算机网络 考研复习指导</li>

<li>计算机网络 第7版 (谢希仁)</li>

<li>计算机网络与下一代互联网</li>

</ul>

<h2>写在最后</h2>

这篇文章简要自顶向下漫游了计算机网络的协议栈,虽然涉及面非常广,但还是有挺多的细节是值得我们去关注的。比如,数据包丢失时,还需要网际控制报文协议ICMP协助处理;网络拥塞时,还需要有传输层的拥塞控制机制;发送和接收速度不对等时,还需要有传输层的流量控制机制;数据链路层发送数据帧,有停等协议、ARQ协议、滑动窗口协议;保证数据的可靠性,有序号、确认、重传、校验,校验又有奇偶校验、CRC循环冗余校验、海明码;以及通信界最伟大的定理——香农定理等...... 面试中,我们一般常说诸如“服务器将数据发送给本地主机”这样的话,这里的“发送”包含了太多太多,我们一直站在传输层以上的角度学习计算机网络,其实这样是学得不深刻的,这也是我们今天总结回顾传输层底下的目的所在。作为计算机科班学生,学习计算机网络,除了理论课本之外,用WireShark抓取分析各种包、使用Chrome开发者工具分析HTTP请求和响应报文、多用一些网络命令行指令跟踪网络、玩一玩云服务器、捣弄捣弄路由器和交换机,这些方式是实践并深化计算机网络理论的最佳实践。

【计算机网络漫游】浏览器输入一个URL后发生了什么相关推荐

  1. 当你在浏览器地址栏输入一个URL后回车,将会发生的事情?

    之前和前辈交流,他问了我这样一个问题,自己一时没有答上来,今天可以研究了一下,看到了一篇很不错的博客,转载过来,供大家学习. 原文地址:http://blog.csdn.net/libin_1/art ...

  2. 当你在浏览器地址栏输入一个URL后回车,浏览器做了什么?

    以下是一个大概流程: 1. 浏览器向DNS服务器查找输入URL对应的IP地址. 2. DNS服务器返回网站的IP地址. 3. 浏览器根据IP地址与目标web服务器在80端口上建立TCP连接 4. 浏览 ...

  3. c++软件开发面试旋极面试题_经典软件开发面试题:浏览器中输入一个网址后发生了什么?...

    经典软件开发面试题:浏览器中输入一个网址后发生了什么? ​ 大家好, 这一期呢,我们来谈一个经典的面试题.这种题目是在浏览器中输入一个网址以后, 会显示一个网页,这期间到底发生了什么? 答案要求说的越 ...

  4. 关于浏览器输入一个网址后页面经历的过程总结

    浏览器进程 浏览器输入一个网址后的主流程 一.用户输入 根据以下规则,把用户输入的内容加上协议,合成为完整的 URL. 判断输入的关键字是搜索内容,还是请求的 URL 如果是搜索内容:使用浏览器默认的 ...

  5. 浏览器输入一个URL地址后发生的事情

    在浏览器中输入一个URL至页面呈现,发生的事情? 1.域名解析:浏览器获得URL地址,向操作系统请求该URL对应的IP地址,操作系统查询DNS(首先查询本地HOST文件,没有则查询网络)获得对应的IP ...

  6. 输入一个网址后发生了什么

    当你在浏览器输入一个网址,如http://www.taobao.com,按回车之后发生了什么?请从技术的角度描述,如浏览器.网络(UDP.TCP.HTTP等),以及服务器等各种参与对象上由此引发的一系 ...

  7. 当在浏览器地址栏输入一个URL后回车,将会发生的事情?

    作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等. 本文将更深入的研究当你输入一个网址 ...

  8. 在浏览器地址栏输入一个URL后回车,执行的全部过程

    作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等. 本文将更深入的研究当你输入一个网址 ...

  9. 头条面试官:在浏览器地址栏输入一个URL后回车,背后会进行哪些技术步骤?

    本题为头条校招测开经典面试题,如果你去看过头条面经合集,会发现3次面试里至少出现有1次,也是非常基础的一个知识点. 好了,不说废话. 先上答案,一共6个步骤: DNS解析 TCP连接 发送http请求 ...

最新文章

  1. office使用技巧
  2. 提升码农90%学习效率的10大学习工具
  3. 概念的图解 —— 数学
  4. I/O模型之一:Unix的五种I/O模型
  5. 解题报告 poj 3207
  6. DevExpress的进度条控件ProgressBarControl的使用-以ZedGraph添加曲线进度为例
  7. Spring Boot + IntelliJ IDEA——自动部署[Spring Boot热部署]+LiveReload[前端自动刷新、热加载]解决方案
  8. 微服务架构:BFF和网关是如何演化出来的?
  9. python 版本分布式锁
  10. 家里wifi网速越来越慢_家里的wifi信号不好?有了它再也不怕网速慢啦
  11. 剪花布条(HDU-2087)
  12. APP应用下载站源码-带后台
  13. 实践详细篇-Windows下使用VS2015编译的Caffe训练mnist数据集
  14. 高性能nginx HTTP服务器 配置实例(转自我的收藏)
  15. CentOS下安装Tomcat并配置JRE
  16. centos7重新加载服务的命令_CentOS7服务管理(重启,停止,自动启动命令)
  17. 软件测试,从零开始:测试新手入门必读
  18. 主题样式之花里胡哨之鼠标点击效果
  19. FLUENT边界条件和计算模型
  20. .net使用本地MQ消息队列( .net 4.5 环境)

热门文章

  1. {} matlab,MATLAB
  2. Microsoft Sql Server Studio 2019 没有配置管理器解决办法
  3. matlab quadprog_合成控制法及Matlab操作与应用
  4. MTK FlashTool 设备软件下载说明
  5. 从实验室走向生活,亚略特推动AI商业价值落地
  6. java redis session共享_Springboot+redis实现session共享
  7. mysql定时更新_mysql刷题(不定时更新)
  8. 机械故障诊断信号幅域分析- 时域统计特征 | 基于python代码实现,在CWRU和IMF轴承数据集上实战
  9. 从psd文件到html
  10. GPU Graphics软件架构