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

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

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

时间: 2024-12-24 01:01:42

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

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

原文:https://github.com/alex/what-happens-when/blob/master/README.rst 一个版本的翻译: https://github.com/skyline75489/what-happens-when-zh_CN#id9 另一个版本的翻译:http://blog.jobbole.com/84870/ ·         键盘的USB元件通过计算机上的USB接口与USB控制器相连接,USB接口中的第一号针为它提供了5V的电压[1.由电源的+5VD

在浏览器中输入网站域名并按下回车

主要有以下几个部分: 1 DNS解析,获取Web服务器IP 2 向Web服务器发送HTTP请求 3 Web服务器收到请求并处理 4 Web服务器返回响应 5 浏览器对响应解码,并显示数据 6 页面显示完成后,浏览器发送异步请求 下面详细过程: 1 DNS解析,获取Web服务器IP 请求方按照以下顺序进行DNS解析: (1)浏览器缓存 (2)系统缓存 (3)路由器缓存 (4)ISP DNS服务器缓存 (5)根域名服务器 如果第(5)步也找不到域名,则该域名不存在. 2 向Web服务器发送HTTP请

在浏览器中输入网站域名并按下回车的详细过程

主要有以下几个部分: 1 DNS解析,获取Web服务器IP 2 建立TCP连接 3 向Web服务器发送HTTP请求 4 Web服务器收到请求并处理 5 Web服务器返回响应 6 浏览器对响应解码,并显示数据 7 页面显示完成后,浏览器发送异步请求 8 关闭TCP连接 下面详细过程: 1 DNS解析,获取Web服务器IP 请求方按照以下顺序进行DNS解析: (1)浏览器缓存 (2)系统缓存 (3)路由器缓存 (4)ISP DNS服务器缓存 (5)根域名服务器 如果第(5)步也找不到域名,则该域名不

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

在浏览器中输入URL按下回车键后发生了什么 [1]解析URL[2]DNS查询,解析域名,将域名解析为IP地址[3]ARP广播,根据IP地址来解析MAC地址[4]分别从应用层到传输层.网络层和数据链路层分别加入各个层的头部封装为包[5]进行三次握手后,客户端与服务器建立连接[6]客服务器向客户端返回数据,浏览器接收到数据[7]浏览器开始渲染页面 补充:浏览器渲染页面详解 [1]由从服务器接收到的html形成DOM[2]样式被加载和解析,形成css对象模型CSSOM[3]DOM和CSSOM创建一个渲

在浏览器中输入网址后是怎么跳转到指定的服务器的

1. 首先,在浏览器里输入要网址 2. 浏览器查找域名的IP地址 DNS查找过程如下: 浏览器缓存 – 浏览器会缓存DNS记录一段时间. 有趣的是,操作系统没有告诉浏览器储存DNS记录的时间,这样不同浏览器会储存个自固定的一个时间(2分钟到30分钟不等). 系统缓存 – 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用(windows里是gethostbyname).这样便可获得系统缓存中的记录. 路由器缓存 – 接着,前面的查询请求发向路由器,它一般会有自己的DNS缓存. ISP

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

背景 “从浏览器中输入URL到页面加载的发生了什么“,这是一道经典的面试题,涉及到的知识面非常多,但作为一个自认为对网络知识掌握的比较好的老码农来说,回答这个问题自然不在话下.如果这道题目如果在面试出现,对我来说就是送分题啊.尽管如此,我还是愿意花一些时间根据我自己的理解回答一下这个题目,看我自己到底掌握的有多深,同时也把自己的知识梳理一下. 这让我想起另外一件往事,这道题有点类似于“在手机上浏览器上输入一个URL,手机做了一些什么”,我当时学习通信里的核心网时就给自己提出过这个问题. 我非常愿

在浏览器中输入 www.baidu.com 后执行的全部过程

现在假设如果我们在客户端(客户端)浏览器中输入http://www.baidu.com,而baidu.com为要访问的服务器(服务器),下面详细分析客户端为了访问服务器而执行的一系列关于协议的操作: 1.客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径.客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层. 2.在客户端的传输层,把HTTP会话请求分成报文段,添

解释一下,在你往浏览器中输入一个URL后都发生了什么,要尽可能详细(转)

原文链接:解释一下,在你往浏览器中输入一个URL后都发生了什么,要尽可能详细 题目 一步一步解释一下,在你往浏览器中输入一个URL后都发生了什么,要尽可能详细. 解答 这道题目没有所谓的完全的正确答案,这个题目可以让你在任意的一个点深入下去, 只要你对这个点是熟悉的.以下是一个大概流程: 浏览器向DNS服务器查找输入URL对应的IP地址. DNS服务器返回网站的IP地址. 浏览器根据IP地址与目标web服务器在80端口上建立TCP连接 浏览器获取请求页面的html代码. 浏览器在显示窗口内渲染H

在浏览器中输入URL并回车后都发生了什么?

1.解析URL ________________________________________________________________________ 关于URL: URL(Universal Resource Locator):统一资源定位符.俗称网页地址或者网址. URL用来表示某个资源的地址.(通过俗称就能看出来) URL主要由以下几个部分组成: a.传输协议 b.服务器 c.域名 d.端口 e.虚拟目录 f.文件名 g.锚 h.参数 也就是说,通常一个URL是像下面这样 连起来