计算机网络-网络场景

输入URL到页面展示过程

可以从网络结构五层模型一步步进行解析,便于理解:

简单梳理一下过程:

详细过程

  1. 解析URL
    • 浏览器分析URL所需要使用的传输协议和请求的资源路径。如果请求的协议或者主机名非法,浏览器会将输入的内容交由搜索引擎来进行下一步的搜索操作;如果没有问题,则进行下一个过程。
  2. 缓存判断
    • 浏览器默认是开启了网页缓存的。若请求的资源在缓存中未失效则直接使用,否则向服务器发起新的请求。
  3. DNS解析
    • 如果资源不在本地缓存中,都先要进行DNS解析。浏览器会向本地DNS服务器发送域名解析请求,本地DNS服务器会逐级查询,最终找到对应的IP地址。
  4. 获取MAC地址
    • 当浏览器获得目标IP后,数据传输还不知道具体的主机MAC地址。应用层下发数据到传输层,TCP协议会指定源端口号和目的端口号,然后再下发给网络层。
    • 网络层会将本地地址作为源地址,获取目的IP地址作为目的地址,然后下发给数据链路层。
    • 数据链路层的发送需要知道通信双方的MAC地址,本机的MAC地址作为源MAC地址,目的MAC地址需要分情况处理。
    • 通过IP地址与本机的子网掩码相结合,可以判断是否与请求的主机IP在同一个子网内。若在同一个子网内,可以使用ARP协议获取到目的主机的MAC地址;若不在同一个子网内,那么请求应该转发给网关,由它代为转发,此时同样采用ARP协议获取网关的MAC地址,目的主机MAC地址为网关的MAC地址。
  5. 建立TCP连接
    • 接下来要进行TCP的三次握手。主机将使用目标IP和目标MAC地址发送一个TCP SYN包,请求建立一个TCP连接,然后交给路由器转发。
    • 等路由器转到目标服务器后,目标服务器回复一个SYN-ACK包,确认连接请求。
    • 然后主机继续发送一个ACK包,确认收到了服务器的确认,然后TCP连接建立完成。
  6. HTTPS和TLS四次握手
    • 如果使用的是HTTPS协议,在通信前还需要进行TLS四次握手。
    • 客户端发送Client Hello消息,包含支持的TLS版本、加密套件列表和随机数。
    • 服务器发送Server Hello消息,选择TLS版本和加密套件,并发送服务器证书和随机数。
    • 客户端验证服务器证书,生成预主密钥,并使用服务器公钥加密后发送给服务器。
    • 服务器解密预主密钥,双方生成会话密钥,完成握手。
  7. 发送HTTP请求
    • 建立完TCP连接之后,可以正式开始请求资源了。浏览器向服务器发送HTTP请求,请求中包含了用户所需要的资源信息,如网页的结构样式、JS和文件等等。
    • 如果是第一次发起请求,通常要获取的内容是网页的URL,再根据渲染后的网页请求所需的内容。
  8. 服务器处理请求并返回响应
    • 服务器收到请求之后,会根据请求的内容进行相应的处理,生成HTTP响应并返回结果。
    • 响应包括状态行、响应头和响应体。状态行包含HTTP版本、状态码和状态描述。响应头发送关于响应的附加信息,如内容类型、缓存控制等。响应体包含实际的资源内容,如HTML页面、图片等。

网络层

最开始的起点:打开浏览器输入URL,点击确认。

问题来了,啥是URL?URL有啥用?

URL

URL(Union Resource locators),即统一资源定位器。网络上的所有资源都通过URL来定位,每一个文件对应着一个URL。理论上URL和文件一一对应,实际上也有一些URL会重定向到另一个位置,所以也可以是多对一的关系。

URL的结构

URL结构

  1. 协议:URL 的前缀通常表示了该网址采用了何种应用层协议,通常有两种——HTTP 和 HTTPS。当然也有一些不太常见的前缀头,比如文件传输时用到的ftp:

  2. 域名:域名便是访问网址的通用名,这里也有可能是网址的 IP 地址,域名可以理解为 IP 地址的可读版本,毕竟绝大部分人都不会选择记住一个网址的 IP 地址。

  3. 端口:如果指明了访问网址的端口的话,端口会紧跟在域名后面,并用一个冒号隔开。

  4. 资源路径:域名(端口)后紧跟的就是资源路径,从第一个/开始,表示从服务器上根目录开始进行索引到的文件路径,上图中要访问的文件就是服务器根目录下/path/to/myfile.html。早先的设计是该文件通常物理存储于服务器主机上,但现在随着网络技术的进步,该文件不一定会物理存储在服务器主机上,有可能存放在云上,而文件路径也有可能是虚拟的(遵循某种规则)

  5. 参数:参数是浏览器在向服务器提交请求时,在 URL 中附带的参数。服务器解析请求时,会提取这些参数。参数采用键值对的形式key=value,每一个键值对使用&隔开。

  6. 锚点:锚点是URL中的一部分,用于指定页面中的特定位置。锚点通常以#开头,紧跟在URL的末尾。例如,#section1表示页面加载后,浏览器应该滚动到页面中ID为section1的元素位置。

DNS

键入了 URL 之后,第一个重头戏登场——DNS 服务器解析。DNS(Domain Name System)域名系统,要解决的是 域名和 IP 地址的映射问题 。毕竟,域名只是一个网址便于记住的名字,而网址真正存在的地址其实是 IP 地址。

HTTP/HTTPS

利用DNS拿到目标主机的IP之后,浏览器便可以向目标IP发送HTTP请求报文,获取所需要的资源。根据请求的网站不同,可能采用的HTTP协议或安全性增强的HTTPS协议。

传输层

由于HTTP协议是基于TCP协议的,在应用层的数据封装好之后,交给传输层,经TCP协议继续封装。TCP协议保证了数据的可靠性,是数据包传输的主力协议。

网络层

在网络层,不再是端到端之间的通信,而是来到了主机与中间系统的交互。

网络层的最核心功能是路由与转发

  • 路由:将分组从路由器的输入端口转移到合适的输出端口
  • 转发:确定分组从源到目的端所经过的路径。