按下回车键,当然会产生操作系统的中断响应,产生一个WM_KEYDOWN消息,当然这些都不是计算机网络的东西,这里只讨论计算机网络相关的东西:

解析URL

浏览器通过URL能够知道下面的信息:

Protocol “http”,使用HTTP协议。Resource "/",请求的资源的位置。知道域名是www.google.com

DNS查询

浏览器提出检查域名的请求,调用操作系统的库函数进行查询,库函数首先看看要查询的域名是否在本地主机里,如果库函数在本地主机中没有找到这个域名的缓存记录,那么就要向默认的DNS服务器去查询,利用UDP的53端口。

具体的流程是:把要查询的域名作为data,然后加上帧头,目的端口53,封装成一个UDP的数据报文。然后把默认的DNS服务器的地址作为IP层的目的IP地址封装成一个IP报文,IP层根据报文中的目的IP地址,查看本地路由表,判断目标主机跟它本身在不在同一个局域网中,如果在同一个局域网中就直接交付,否则将这个报文发给网关(默认DNS域名服务器的地址是8.8.8.8就是一个例子)。

如果要交付给网关,就通过ARP地址解析网关IP,获得网关的MAC地址,然后直接把报文封装成Frame,发送给网关。

如果要交付给本地局域网,就通过ARP地址解析目的主机的IP地址,获得目的主机的MAC地址,然后直接把报文封装成Frame,发送给目的主机。

不管怎样,不管默认域名服务器(本地域名服务器)在本局域网还是在不同的子网,现在DNS查询报文都到了本地域名服务器。并通过端口把查询数据给力端口对应的那个应用程序。

如果本地域名服务器没有找到结果,主机和本地域名服务器之间采用递归查询的方式,本地域名服务器向根域名服务器以迭代的方式查询。

不管怎样,主机最后得到了Google.com域名对应的IP地址。

使用套接字

当浏览器得到了目标服务器的IP地址之后,以URL中给出的端口号(http协议默认80端口,https默认443),它会调用一个系统库函数socket,请求一个TCP流套接字。

这个连接请求(这时发送的不是网页请求,而是连接请求,因为TCP要先建立连接)首先会被交付给传输层,封装成TCP数据报,目标端口放在头部,源端口随机选择一个。

TCP送到网络层,加上IP头部,包含了目标服务器的IP地址和本地IP地址。封装成一个IP Packet。

这个IP Packet交给链路层,链路层会在封包中加入Frame头部,里面包含了本地内置网卡的MAC地址和网关的MAC地址(具体这个下一跳的MAC地址用谁的,要看路由表怎么指示的,根据路由表提供的下一跳的IP地址,ARP广播这个IP地址对应的主机或路由器端口的MAC地址

到现在为止一个连接请求的帧已经被封装到了MAC帧,然后就是通过什么介质传出去。

就这样这个数据在网络中传输,如果这个报文在传输或者在接收端发生错误,就会给发送端发送一个ICMP差错报文通知发送端。

正确到达对端的TCP后,通过三次握手,建立本地主机和远端服务器的连接。

然后浏览器发送取文件的GET命令,服务器给出响应,把响应的文件发送给本地主机。(客户对服务器文档的请求可以在第三次握手的确认报文中捎带过去)

然后通过四次挥手,双方断开TCP连接。

拿到文件的本地主机,通过浏览器去解析这个文件,在浏览器上呈现出来。

浏览器中输入Google.com然后按下回车键的更多相关文章

  1. 在浏览器中输入Google.com并且按下回车之后发生了什么(转载)

    原文地址:https://github.com/skyline75489/what-happens-when-zh_CN#id9 本文试图回答一个古老的面试问题:当你在浏览器中输入google.com ...

  2. 在浏览器中输入Google.com并且按下回车之后发生了什么?

    作者: skyline75489  来源: skyline75489的博客  发布时间: 2015-03-26 16:57  阅读: 4163 次  推荐: 23   原文链接   [收藏]      ...

  3. [转载]浏览器中输入url 并且按下回车之后发生了什么?

    解析URL 浏览器通过 URL 能够知道下面的信息: Protocol "http" 使用HTTP协议 Resource "/" 请求的资源是主页(index) ...

  4. 【计算机基础】当你在浏览器中输入Google.com并且按下回车之后发生了什么?

    本文转载自:https://github.com/skyline75489/what-happens-when-zh_CN#id9 按下"g"键 接下来的内容介绍了物理键盘和系统中 ...

  5. [原文 + 补充] 当你在浏览器中输入Google.com并且按下回车之后发生了什么?

    原文:https://github.com/alex/what-happens-when/blob/master/README.rst 一个版本的翻译: https://github.com/skyl ...

  6. 在浏览器中输入URL按下回车键后发生了什么

    在浏览器中输入URL按下回车键后发生了什么 [1]解析URL[2]DNS查询,解析域名,将域名解析为IP地址[3]ARP广播,根据IP地址来解析MAC地址[4]分别从应用层到传输层.网络层和数据链路层 ...

  7. 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 3

    备注: 因为文章太长,所以将它分为三部分,本文是第三部分. 第一部分:深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1 第二部分:深入浅出经典面试题:从浏览器中输入URL ...

  8. 从浏览器中输入URL到页面加载的发生了什么-转载

    转:https://www.cnblogs.com/confach/p/10050013.html 背景 “从浏览器中输入URL到页面加载的发生了什么“,这是一道经典的面试题,涉及到的知识面非常多,但 ...

  9. 【ASP.NET Core】EF Core - “影子属性” 深入浅出经典面试题:从浏览器中输入URL到页面加载发生了什么 - Part 1

    [ASP.NET Core]EF Core - “影子属性”   有朋友说老周近来博客更新较慢,确实有些慢,因为有些 bug 要研究,另外就是老周把部分内容转到直播上面,所以写博客的内容减少了一点. ...

随机推荐

  1. Android中数据库的操作流程详解

    Android中数据库的操作方法: 1.Android平台提供了一个数据库辅助类来创建或打开数据库. 这个辅助类继承自SQLiteOpenHelper类.继承和扩展SQLiteOpenHelper类主 ...

  2. 404 Not Found The requested URL * was not found on this server

    1. 把从SVNcheckout下来的代码搭建起来.CakePHP+mysql.改动数据库配置. 2. 配置虚拟主机,发现訪问不了/user/login这个URL,报这个错误:404 Not Foun ...

  3. list 去重复

    两层遍历,如果后面的元素和前面的相同,就把后面的删除,达到去重复的目的. 比较的元素可以是list中含有的任意唯一性的元素. for(int x = 0;x < xglist.size()-1; ...

  4. Spring AOP那些学术概念—通知、增强处理连接点(JoinPoint)切面(Aspect)

    1.我所知道的AOP 初看起来,上来就是一大堆的术语,而且还有个拉风的名字,面向切面编程,都说是OOP的一种有益补充等等.一下让你不知所措,心想着:管不得很多人都和我说AOP多难多难.当我看进去以后, ...

  5. OC语法7——内存管理之@property参数

    @property的参数: 我们已经知道为了给开发者提供便捷,OC提供了@porperty关键字,它可以自动生成属性的set和get方法. 但是我们又知道,在OC中还面临者对象内存管理的问题,而且我们 ...

  6. Android RadioGroup/RadioButton

    RadioGroup      RadioButton的集合,提供多选一的机制      属性:   android:orientation="horizontal/vertical&quo ...

  7. Flink资料(1)-- Flink基础概念(Basic Concept)

    Flink基础概念 本文描述Flink的基础概念,翻译自https://ci.apache.org/projects/flink/flink-docs-release-1.0/concepts/con ...

  8. scss + react + webpack + es6

    scss + react + webpack + es6 写在前面: 刚学习完慕课网里的一个幻灯片案例,自己加了刚学的react,两者结合.首先让大家看看效果 点击此处 你可以先用纯js实现上面的效果 ...

  9. [方法] ubuntu12.04开启root账户

    ubuntu 12.04使用LightDM显示管理器,默认禁止root账户登录. 通过修改/etc/lightdm/lightdm.con文件可以打开root登录权限. 方法很简单,只要在lightd ...

  10. SelectDirectory使用方法以及EnableTaskWindows

    SelectDirectory使用方法 格式 Delphi syntax: On Windows: function SelectDirectory(const Caption: string; co ...