Wangxiong's Tech

「Stay hungry. Stay foolish.」

嗨,我是王雄 (@Outlier),一名职业PHP开发者,业余Go/Linux爱好者。现居北京,专注金融。我深信,所有的非常,都源于不懈的日常。


这里是我的Jekyll博客,关于Hexo博客,也欢迎前往了解

【网络连接】网络连接的全貌

摘要:本文主要回答在浏览器输入URL回车后发生了什么?实质上这个问题背后涉及了大部分计算机网络知识,如果能够站在更高的层面去思考这个问题,相信你的知识面会得到很大的扩充。我在网上参考很多资料,为了能够全面回答这个问题,最后参考了作者户根勤写的《网络是怎样连接的》这本书,本篇文章也是在学习完本书后自身所做的一些思考和整理。网络技术这么复杂,我为什么要去一点一点的去学习这些网络知识呢?用本书作者的话说就是:不理解网络的全貌,也就无法理解每一种网络技术背后的本质意义。而如果无法理解其本质意义, 就只能停留在死记硬背的程度,无法做到实际应用。

前言

由于网络世界的复杂性,本篇文章只是整体全貌的一个介绍,后期会对每个环节做详细的阐述。本文通过带着在浏览器输入URL回车后发生了什么这个问题,使我们能够大致理解网络整个系统的全貌,以至于在以后的学习中不断扩充。

网络的全貌

整个过程实质上是浏览器和服务器之间的通信和交互,主要分为以下几个部分:

第一步,浏览器内部会根据URL生成消息,并向DNS服务器查询Web服务器的IP地址,最后委托操作系统内部的协议栈(网络控制软件)发送消息。 第二步,网络协议控制软件(协议栈),会接收浏览器的消息并将消息进行打包,然后加上目的地址等信息转交给网卡(负责以太网或无线网络通信的硬件),网卡会将包转换为电信号并通过网线发送出去,此时包才进入到网络中。 第三步,网卡发送的包会经过交换机等设备,到达用来接入互联网的路由器。路由器的后面就是互联网,网络运营商会负责将包送到目的地。 第四步,当数据包进入接入互联网的路由器后,便进入了互联网的内部骨干网,在互联网的内部骨干网中具有很多运营商和大量的路由器,这些路由器相互连接,组成非常庞大的网,我们的网络包在若干路由器之间穿行和接力,才能最终到达目标服务器。 第五步,当数据包到达通过骨干网后,最终到达 Web服务器所在的局域网中。紧接着,数据包首先遇到的是防火墙,防火墙会对进入的包进行检查,检查完之后,网络包接下来可能还会遇到缓存服务器,当然大型网站可能会配备负载均衡器,分布式缓存服务器等,只有经过这些机制后,数据包才会真正到达Web服务器。 第六步,当网络包到达Web服务器后,数据会被操作系统中的协议栈(网络控制软件)解包并还原为原始的请求消息,然后交给Web服务器程序。Web服务器程序分析请求消息的含义,并按照其中的指示将数据装入响应消息中。 第七步,响应消息被Web服务器程序打包,返回给操作系统中的协议栈(网络控制软件),沿刚才的过程原路返回,浏览器接收到响应信息后,经过HTML 解析、CSS解析、渲染树等一系列工作最终才将页面内容显示出来。

浏览器生成消息–浏览器内部

① 用户在浏览器中输入URL后,浏览器会根据URL的含义来生成请求消息。 ② 浏览器向DNS服务器查询Web服务器的IP地址。 ③ 全世界上万台DNS服务器相互接力完成IP地址的查询。 ④ 查询到IP地址后,浏览器将委托操作系统内部的协议栈发送消息。

用电信号传输TCP/IP数据–协议栈和网卡

① 操作系统中的网络控制软件(协议栈)收到浏览器的委托后,协议栈通过 TCP 协议收发数据,具体分为四个阶段:创建套接字、客户端套接字向服务器套接字进行连接、收发消息并确认是否有丢包、收发消息结束后断开服务器连接并删除套接字。 ② 协议栈通过 TCP 协议收发数据后,协议栈会与网卡进行配合,将数据切分成小块并封装成网络包,再将网络包转换成电信号或者光信号发送出去。 ③ 有些应用程序不使用 TCP 协议,而是使用 UDP 协议来收发数据。向 DNS服务器查询 IP 地址的时候我们用的也是 UDP 协议,不需要重发的数据用UDP发送更高效。

从网线到网络设备–探索集线器、交换机和路由器

① 协议栈和网卡配合将网络包转成电信号或者光信号发送出去,电信号从计算机中流出之后,会在网线和集线器中传输,在传输的过程中需要考虑抑制噪声的干扰等。 ② 网络包经过网线和集线器后到达交换机,交换机会对包进行转发操作,交由路由器处理。 ③ 路由器会对网络包进行接收和转发操作。

通过接入网进入互联网内部–探索接入网和网络运营商

① 网络包通过交换机和路由器的转发并通过接入网后,就进入了互联网内部。所谓接入网,就是指连接互联网与家庭、公司网络的通信线路,接入网的种类非常多,一般家用的接入网方式包括非对称数字用户线路( ADSL)、光纤接入网(FTTHC)、CATV、电话线、ISDN 等,公司则还可能使用专线。 ② 互联网的内部有上万台路由器,它们之间通过接收方的IP地址判断转发目标,并将包转发出去,而我们的网络包就在其中经过若干路由器的接力,在这些骨干网中穿行最终找到目标服务器。

到达服务器端的局域网

① 网络包在通过各种接入网的通信线路进入到互联网之后,再通过运营商网络最终到达服务器POP端,网络包通过最近的POP中的路由器、接入网以及服务器端路由器之后,就到达了服务器。 ② 实际上,在到达服务器之前,还可能需要通过服务器前面的防火墙、缓存服务器、负载均衡器等。

请求到达服务器,服务器进行响应

① 服务器接收信号并将信号还原成数字形式的网络包,然后从中提取出 HTTP 消息,协议栈会将接收的消息通过 Socket 库传递给 Web 服务器程序。 ② Web 服务器程序收到消息后,会查询其中的内容,并按照请求进行处理,将结果返回给客户端。假如请求某个CGI程序,就会将相关参数传递给该程序并执行,然后获取程序输出的数据。

浏览器接收响应并显示内容

① 服务器将响应的消息分成多个网络包,网卡将信号还原成数字信息,协议栈将拆分的网络包组装起来并取出响应消息,然后将消息原路返回转交给浏览器。 ② 浏览器接收到响应消息中的数据,根据响应消息中返回的数据类型进行判断后,通过调用相关内容的程序最终将数据正确显示出来。浏览器可以处理的数据类型包括文字、图像、声音、视频、ExcelWord 等多种类型,每种数据的显示方法都不同。比如ExcelWord 等应用程序的数据的主类型为application这一类型,image表示图像类型。

总结

作为总结,我们尝试回答下面这个问题:

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

WEB浏览器 -> 协议栈(TCP/IP-> 网卡驱动 -> 集线器 -> 路由器 -> 接入网 -> 电话局 -> 网络运营商 -> 网络运营商 -> 电话局 -> 防火墙 -> 缓存服务器 -> 网卡驱动 -> 协议栈(TCP/IP-> WEB服务器

① 浏览器分析输入URL信息,生成 HTTP 请求消息,之后向DNS服务器查询 Web 服务器的 IP 地址,最后委托操作系统内部的协议栈向查询到的IP地址发送消息。 ② 操作系统中的网络控制软件(协议栈)接收到浏览器的信息并打包,加上目的信息后交给网卡,最终将网络包转换成电信号通过网线传输出去。 ③ 通过网线传输出去的包经过集线器、交换机和路由器等网络设备,最终进入互联网的内部骨干网。 ④ 互联网的内部骨干网中具有很多运营商和大量的路由器,数据包在这些运营商和路由器之间接力,找到目标服务器。 ⑤ 在进入目标服务器之前,会遇到防火墙、负载均衡器、缓存服务器等。 ⑥ 之后网络包真正到达 Web 服务器,Web服务器对应的应用程序会对请求消息进行解释并作出响应。 ⑦ 响应的消息被Web服务器打包并委托操作系统内部的协议栈进行发送,按照请求的路径返回响应信息给浏览器,浏览器接收响应信息并处理显示对应的内容。

最近

【网络连接】浏览器-生成HTTP消息

摘要:所谓温故而知新,为了更加全面和系统的对网络连接有更深刻的认知,在工作多年以后更需要对相关知识进行归纳和总结。本篇文章是对浏览器生成HTTP消息的简单归纳,首先例举了常见的URL的各种形式,其中包括HTTP URL 、FTP URL 、FILES URL、MAILTO URL和NEWS URL,紧接着对HTTP常见方法进行讲解,重点介绍了GET和POST的区别,GET 用于获取资源,是无副作用的,是幂等的,且可缓存; POST 用于处理资源,有副作用,非幂等,不可缓存。最后对HTTP ...…

NetWorks继续阅读
更早

【MySQL】范式设计和反范式设计

摘要:所谓的范式,是指关系型数据库设计中所需要满足的规范格式(Normal Format),大多数情况下我们需要遵循相应的规则和指导方法,以便我们设计出高效率和优雅的数据库。对应的,任何事物都有两面性,遵循范式设计的数据库在更新操作带来高效率(尤其是在密集的写场景下)和保持数据一致性有一定的优势,但却在查询操作的时候降低了效率。这个时候,适当的反范式设计反而能提高查询效率,(尤其是在读密集的查询场景下)。普遍认为,范式设计中基本满足第一范式(1NF)、第二范式(2NF)、第三范式(3NF)...…

MySQL继续阅读