按下回车键,当然会产生操作系统的中断响应,产生一个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连接。

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

转载于:https://www.cnblogs.com/stemon/p/4746208.html

浏览器中输入Google.com然后按下回车键相关推荐

  1. 学科综合 | 当你在浏览器中输入Google.com并且按下回车之后发生了什么?

    来自:skyline75489 (Liu Jialiang) · GitHub 译文出处:skyline75489 链接:https://github.com/skyline75489/what-ha ...

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

    这个仓库试图回答一个古老的面试问题:当你在浏览器中输入google.com并且按下回车之后发生了什么? 不过我们不再局限于平常的回答,而是想办法回答地尽可能具体,不遗漏任何细节. 这将是一个协作的过程 ...

  3. 当你在浏览器中输入 google.com 后按下回车发生了什么?

    按下"g"键 接下来的内容介绍了物理键盘和系统中断的工作原理,但是有一部分内容却没有涉及.当你按下"g"键,浏览器接收到这个消息之后,会触发自动完成机制.浏览器 ...

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

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

  5. 一名学生A希望访问网站www.google.com。学生A在其浏览器中输入http://www.google.com并按回车.....

    一名学生A希望访问网站www.google.com.学生A在其浏览器中输入http://www.google.com并按回车,直到Google的网站首页显示在其浏览器中,请问: (1) 在此过程中,按 ...

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

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

  7. 从在浏览器中输入URL到页面渲染出来的完整过程是怎样的?

    从宏观上看,主要包括以下几个步骤:域名解析.建立连接.发送请求.响应数据.关闭连接.下面以在Chrome浏览器中输入https://yq.aliyun.com/articles/580962为例,讨论 ...

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

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

  9. 在浏览器中输入网址后的流程

    1.浏览器发起DNS查询请求 在广域网中是基于IP地址进行通信的.但通常客户访问的是一个网址,为此需要先得到网址对应的IP地址,这就需要域名服务系统将域名转换成IP地址.在客户端浏览器中输入网址时,浏 ...

最新文章

  1. poj1201(差分约束+SPFA)
  2. python使用什么函数接收用户输入的数据_python 3.x:调用和执行函数的用户输入...
  3. 蓝牙协议 HFP,HSP,A2DP等等
  4. 平板就是生产力?东京大学研究者“辟谣”了,用纸笔记录,更有利于记忆
  5. VC++ AfxBeginThread 与 CreateThread 的区别
  6. php怎麼讲$字段的值截取第一个字,PHP截取中文字符串方法总结
  7. php基础标签大全,HTML基础之HTML常用标签
  8. WebView::drawExtras
  9. 牛客网-数据结构笔试题目(一)-猫咪特征提取思路解析(附源码)
  10. 押中三位奥运冠军 元气森林“赢麻了”
  11. linux+删除+grub,请问:如何删除grub引导
  12. YOLO: 3 步实时目标检测安装运行教程 [你看那条狗,好像一条狗!]
  13. 网页提示“证书错误:导航已阻止”,无法跳转解决办法
  14. html640设计稿,移动设备分辨率(终于弄懂了为什么移动端设计稿总是640px和750px)...
  15. 强化学习:训练加速技巧
  16. uni-app实现扫码功能
  17. C++高斯分布随机数的产生
  18. 学大伟业:2019年学习生物竞赛究竟从何下手?
  19. 什么是克鲁斯卡尔算法?
  20. 生命中最重要的两个日子,一个是你出生,一个是你发现自己为什么而生

热门文章

  1. 这个简单的常见面试题,怎么答才会加分?
  2. html转word 图片丢失 java_Java 实现 Word 转 pdf 文档的工具来了
  3. 存储过程(简单入门)
  4. 下降沿触发的jk触发器(带异步复位和置位功能)_边沿触发器 || D触发器 || JK触发器 || 逻辑功能转换 工作特性 || 重难点 || 数电...
  5. python是个啥玩意儿_Pythonic到底是什么玩意儿?
  6. python代码注释规范-Python编程规范之注释
  7. html软件dr,了解HTML锚点 - osc_mbqdr3w5的个人空间 - OSCHINA - 中文开源技术交流社区...
  8. 2ask调制解调信噪比matlab实现,MATLAB模拟2ASK调制误码率与信噪比关系曲线的程序...
  9. 用户计算机安全管理,关于加强用户计算机安全管理工作的通知
  10. 基于迁移学习的辣椒病虫害搜索模型(裁剪病害区)