一文了解网络连接的完整流程

根据网络是怎样连接的总结而来

一次网络连接的过程涉及到方方面面。用户在浏览器输入网址开始,浏览器会创建HTTP请求消息,并委托给协议栈打包,然后交给网卡来把包转换为电信号通过网线发送过去。在发送过程中,数据包会经过集线器、交换机、路由器最后到达互联网路由器(可以理解为离你家最近的邮局)。互联网会把数据包进行分发,最终会到达Web服务器所在的局域网,经过网络防火墙检查后到达Web服务器。Web服务器会把数据包解析还原为原始的HTTP请求消息交给对应的Web服务器程序。接下来,Web服务器程序分析请求消息的含义,并按照其中的指示将数据装入响应消息中,然后发回给客户端。响应消息回到客户端的过程和之前我们介绍的过程正好相反。当响应到达客户端之后,浏览器会从中读取出网页的数据并在屏幕上显示出来。到这里,访问Web服务器的一系列操作就全部完成了。

Web 浏览器

一般情况下,网络连接从用户在浏览器输入网址开始,下面将详细介绍,浏览器在这一环节是如何工作的。用户在浏览器中输入网址的时序图如下所示:

URL

在浏览器输入的网址,准确来说是叫 URL (统一资源定位器),用于定位资源。URL有各种样式,不同的样式用来判断应该使用其中哪种功能来访问相应的数据,而各种不同的URL就是用来干这个的,比如访问Web服务器时用http:,而访问FTP服务器时用ftp:。URL的各种格式如下图所示:

浏览器的第一步工作就是对URL进行解析。Web浏览器解析URL的过程如下图所示:

HTTP

解析完URL之后,我们就知道应该要访问的目标在哪里了。浏览器就可以根据这些消息来生成HTTP请求消息。如果不了解HTTP可以看《图解HTTP》核心知识总结一次http请求的完整请求过程

DNS

浏览器能够解析网址并生成HTTP消息,但它本身并不具备将消息发送到网络中的功能,而是需要委托操作系统协议栈来实现。在委托操作系统协议栈发送消息时,必须要提供Web服务器的IP地址。因此我们需要通过DNS服务器来查询网址中服务器域名对应的IP地址。关于 DNS 获取IP地址的流程可以看 一次http请求的完整请求过程

Socket

查询IP地址、以及委托操作系统的协议栈收发消息,我们可以使用Socket 库来实现。Socket库是用于调用网络功能的程序组件集合。

库就是一堆通用程序组件的集合,其他的应用程序都需要使用其中的组件

问题汇总

  • http://www.nikkeibp.co.jp/中的www是否代表World Wide Web协议

    不是,http://www.nikkeibp.co.jp/中的www只是Web服务器上的一种命名。而且,World Wide Web也不是一个协议的名字,而是Web的提出者最早开发的浏览器兼HTML编辑器的名字。

  • 为什么不直接使用域名来确定通信对象,而是使用IP地址?

    使用名称来确定通信对象会影响运行效率。因为IP地址的长度为32比特,也就是4字节,相对地,域名最短也要几十个字节,最长甚至可以达到255字节。这增加了路由器的负担,传送数据也会花费更长的时间。

协议栈、网卡

浏览器准备好数据后,会交给操作系统的协议栈来执行消息的发送。如下图所示,操作系统的协议栈包含TCP、UDP、IP等协议。

TCP

使用 TCP 协议收发数据可以分为四个阶段,分别是创建套接字、连接服务器、收发数据、断开服务器的连接并删除套接字。如下图所示:

IP

TCP模块在执行连接、收发、断开等各阶段操作时,都需要委托IP模块将数据封装成包发送给通信对象。

IP模块主要负责添加如下两个头部:

  1. IP头部:IP用的头部,包含IP地址。
  2. MAC头部:以太网用的头部,包含MAC地址

其中 IP头部是要访问的服务器的IP地址。IP协议可以根据这个地址查找包的传输方向,从而找到下一个路由的位置。接下来,IP协议会委托以太网协议将包传输过去。这时,IP协议会查找下一个路由器的以太网地址(MAC地址),并将这个地址写入MAC头部中。这样一来,以太网协议就知道要将这个包发到哪一个路由器上了

ICMP用于告知网络包传送过程中产生的错误以及各种控制消息,ARP用于根据IP地址查询相应的以太网MAC地址

问题汇总

  • 套接字的实体是什么?

    在协议栈内部有一块用于存放控制信息的内存空间,这里记录了用于控制通信操作的控制信息,例如通信对象的IP地址、端口号、通信操作的进行状态等。本来套接字就只是一个概念而已,并不存在实体,如果一定要赋予它一个实体,我们可以说这些控制信息就是套接字的实体,或者说存放控制信息的内存空间就是套接字的实体。

  • 以太网的网线都是一直连接的状态,我们并不需要来回插拔网线,那么TCP这里的"连接"到底是什么意思呢?

    连接实际上是通信双方交换控制信息,在套接字中记录这些必要信息并准备数据收发的一连串操作。通信操作中使用的控制信息分为两类。一类是头部中记录的信息;另一类是套接字(协议栈中的内存空间)中记录的信息。

  • 有了 IP 协议,为什么还需要 TCP 协议

    网卡、集线器、路由器都没有错误补偿机制,一旦检测到错误就直接丢弃相应的包。应用程序也是一样,因为采用TCP传输,即便发生一些错误对方最终也能够收到正确的数据,所以应用程序只管自顾自地发送这些数据就好了。不过,如果发生网络中断、服务器宕机等问题,那么无论TCP怎样重传都不管用。这种情况下,无论如何尝试都是徒劳,因此TCP会在尝试几次重传无效之后强制结束通信,并向应用程序报错

集线器、交换机、路由器

从计算机发送出来的网络包会通过集线器、交换机、路由器等设备被转发,最终到达目的地。其中

  • 集线器:作用主要是信号放大和中继。集线器会将接收到的信号进行放大后转发给所有连接的设备,确保信号传输距离更远。
  • 交换机:先接收信号并将其还原为数字信息,然后再重新转换成信号并发送出去的过程。
  • 路由器和交换机一样也负责对包进行转发,但它们的工作方式有一些差异。交换机是基于以太网规格工作的设备,而路由器是基于IP工作的

网络包从客户端计算机发出之后,要经过集线器、交换机和路由器最终进入互联网。实际上,我们家里用的路由器已经集成了集线器和交换机的功能.

接入网、网络运营商

网络包通过交换机和路由器的转发一步一步地接近它的目的地,在通过互联网接入路由器之后,就进入了互联网。

互联网是一个遍布世界的巨大而复杂的系统,但其基本工作方式却出奇地简单。和家庭、公司网络一样,互联网也是通过路由器来转发包的,而且路由器的基本结构和工作方式也并没有什么不同,如下图所示。因此,我们可以将互联网理解为家庭、公司网络的一个放大版

互联网的入口线路称为接入网。一般来说,我们可以用电话线、ISDN、ADSL、有线电视、光线、专线等多种通信线路来接入互联网,这些通信线路统称为接入网。接入网连接到签约的网络运营商,并接入被称为接入点(Point of Presence,PoP)的设备。

接入点的实体是一台专为运营商设计的路由器,我们可以把它理解为离你家最近的邮局。

问题汇总

  • 光纤的通信速率之所以更快,是因为光信号的传播速度比电信号要快吗?

    电信号和光信号传播的速度大体上相同,之所以电缆不如光纤通信速率高,是因为电信号在提升通信速率的同时,其衰减率也会提高(信号在传播过程中减弱),导致信号无法传到目的地。相对地,光信号本来的衰减率就很低,提高通信速率也并不会提高衰减率。此外,光纤还不受电磁噪声的影响,因此光纤能够进行高速通信。

Web服务器所在的局域网

网络包在进入互联网之后,将继续朝服务器前进,并通过服务器前面的防火墙、缓存服务器、负载均衡器等。

  • Web服务器部署的地点如下图所示。目前常采用下图b中方式。
  • 防火墙

把防火墙想象成门口的保安,他会检查所有进入的包,看看有没有危险的包混在里面。

  • 负载均衡器

随着访问量的增加,Web服务器的处理能力会不够用,对于访问量很大的大型网站来说,必须要考虑到这一点。一般会通过将请求平均分配给多台服务器来平衡负载。

  • 缓存服务器

另一种减轻Web服务器负担的方法是将访问过的数据保存在缓存服务器中,当再次访问时直接使用缓存的数据。

  • 内容分发服务

内容分发服务是从缓存服务器发展而来的,它在互联网中部署很多缓存服务器,并将用户的访问引导到最近的缓存服务器上。

Web 服务器

收到请求消息之后,Web服务器会进行下面的工作。首先,Web服务器会检查URI指定的文件名,看一看这个文件是不是一个程序。这里的判断方法是在Web服务器中事先设置好的,一般是通过文件的扩展名来进行判断,例如将.cgi、.php等扩展名的文件设置为程序,当遇到这些文件时,Web服务器就会将它们作为程序来对待。也可以设置一个存放程序的目录,将这个目录下的所有文件都作为程序来对待。此外,还可以根据文件的属性来进行判断。

相关推荐
00后程序员张3 小时前
实战解析:如何用克魔(KeyMob)等工具构建iOS应用稳定性与数据可观测体系
websocket·网络协议·tcp/ip·http·网络安全·https·udp
qq_290606273 小时前
监听本地tcp,udp端口,通过socks5转发至远端
网络协议·tcp/ip·udp
q567315234 小时前
Linux搭建爬虫ip与私有IP池教程
linux·爬虫·tcp/ip
西北大程序猿4 小时前
服务器代码知识点补充
服务器·开发语言·网络·c++·网络协议
熙客6 小时前
网络层协议:IP
网络·网络协议·tcp/ip
2501_915921436 小时前
iOS性能调试完整流程实录:工具组合下的问题定位与修复实践(含keymob)
websocket·网络协议·tcp/ip·http·网络安全·https·udp
TE-茶叶蛋6 小时前
WebSocket 前端断连原因与检测方法
前端·websocket·网络协议
从未、淡定11 小时前
HTTP 网络协议演进过程
网络·网络协议·http
allnlei12 小时前
为什么TCP有粘包问题,而UDP没有
网络·tcp/ip·udp
Koma_zhe14 小时前
【微软RDP协议】微软RDP协议技术架构特点与跨地域应用实践
网络协议·架构·信息与通信