从输入 URL 到页面加载完成的过程中都发生了什么

根据 URL 请求页面过程

过程概述

  1. 浏览器查找域名对应的 IP 地址;

  2. 浏览器根据 IP 地址与服务器建立 socket 连接;

  3. 浏览器与服务器通信: 浏览器请求,服务器处理请求;

  4. 浏览器与服务器断开连接。

天啦撸,结束了?也太简单了吧。。。各位看官,不急,都说了是概述,且向下看。

根据域名查找 IP 地址

概念解释

  • IP 地址:IP 协议为互联网上的每一个网络和每一台主机分配的一个逻辑地址。IP 地址如同门牌号码,通过 IP 地址才能确定一台主机位置。服务器本质也是一台主机,想要访问某个服务器,必须先知道它的 IP 地址;

  • 域名( DN ):IP 地址由四个数字组成,中间用点号连接,在使用过程中难记忆且易输入错误,所以用我们熟悉的字母和数字组合来代替纯数字的 IP 地址,比如我们只会记住 www.baidu.com(百度域名) 而不是 220.181.112.244(百度的其中一个 IP 地址);

  • DNS: 每个域名都对应一个或多个提供相同服务服务器的 IP 地址,只有知道服务器 IP 地址才能建立连接,所以需要通过 DNS 把域名解析成一个 IP 地址。

知道了上面的概念,大概就知道了想要获得服务器的门牌号码,需要先将域名转换成 IP 地址。转换过程如下(以查询 www.baidu.com 的 IP 地址为例,其中2、3、4步均在上一步未查询成功的情况下进行):

查找过程

  1. 浏览器搜索自己的 DNS 缓存(维护一张域名与 IP 地址的对应表);

  2. 搜索操作系统中的 DNS 缓存(维护一张域名与 IP 地址的对应表);

  3. 搜索操作系统的 hosts 文件( Windows 环境下,维护一张域名与 IP 地址的对应表);

  4. 操作系统将域名发送至 LDNS(本地区域名服务器,如果你在学校接入互联网,则 LDNS 服务器就在学校,如果通过电信接入互联网,则 LDNS 服务器就在你当地的电信那里。)LDNS 查询 自己的 DNS 缓存(一般查找成功率在 80% 左右),查找成功则返回结果,失败则发起一个迭代 DNS 解析请求;

    1. LDNS 向 Root Name Server (根域名服务器,其虽然没有每个域名的的具体信息,但存储了负责每个域,如 com、net、org等的解析的顶级域名服务器的地址)发起请求,此处,Root Name Server 返回 com 域的顶级域名服务器的地址;

    2. LDNS 向 com 域的顶级域名服务器发起请求,返回 baidu.com 域名服务器地址;

    3. LDNS 向 baidu.com 域名服务器发起请求,得到 www.baidu.com 的 IP 地址;

  5. LDNS 将得到的 IP 地址返回给操作系统,同时自己也将 IP 地址缓存起来;

  6. 操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起来;

  7. 至此,浏览器已经得到了域名对应的 IP 地址。

补充说明

  • 域名与 URL 是两个概念:域名是一台或一组服务器的名称,用来确定服务器在 Internet 上的位置;URL 是统一资源定位符,用来确定某一个文件的具体位置,例如,segmentfault.com 是 SF 的域名,根据这个域名可以找到 SF 的服务器, segmentfault.com/a/1190000003829539 是 URL ,可以根据这个 URL 定位我写的第一篇博客;

  • IP 地址与域名不是一一对应的关系:可以把多个提供相同服务的服务器 IP 设置为同一个域名,但在同一时刻一个域名只能解析出一个 IP地址;同时,一个 IP 地址可以绑定多个域名,数量不限;

建立连接--三次握手

知道了服务器的 IP 地址,下面便开始与服务器建立连接了。

通俗地讲,通信连接的建立需要经历以下三个过程:

  1. 主机向服务器发送一个建立连接的请求( 您好,我想认识您 );

  2. 服务器接到请求后发送同意连接的信号( 好的,很高兴认识您 );

  3. 主机接到同意连接的信号后,再次向服务器发送了确认信号( 我也很高兴认识您 ),自此,主机与服务器两者建立了连接。

补充说明

  • TCP 协议:三次握手的过程采用 TCP 协议,其可以保证信息传输的可靠性,三次握手过程中,若一方收不到确认信号,协议会要求重新发送信号。

网页请求与显示

当服务器与主机建立了连接之后,下面主机便与服务器进行通信。网页请求是一个单向请求的过程,即是一个主机向服务器请求数据,服务器返回相应的数据的过程。

  1. 浏览器根据 URL 内容生成 HTTP 请求,请求中包含请求文件的位置、请求文件的方式等等;

  2. 服务器接到请求后,会根据 HTTP 请求中的内容来决定如何获取相应的 HTML 文件;

  3. 服务器将得到的 HTML 文件发送给浏览器;

  4. 在浏览器还没有完全接收 HTML 文件时便开始渲染、显示网页;

  5. 在执行 HTML 中代码时,根据需要,浏览器会继续请求图片、CSS、JavsScript等文件,过程同请求 HTML ;

断开连接--四次挥手

  1. 主机向服务器发送一个断开连接的请求( 不早了,我该走了 );

  2. 服务器接到请求后发送确认收到请求的信号( 知道了 );

  3. 服务器向主机发送断开通知( 我也该走了 );

  4. 主机接到断开通知后断开连接并反馈一个确认信号( 嗯,好的 ),服务器收到确认信号后断开连接;

补充说明

  • 为什么服务器在接到断开请求时不立即同意断开:当服务器收到断开连接的请求时,可能仍然有数据未发送完毕,所有服务器先发送确认信号,等所有数据发送完毕后再同意断开。

  • 第四次握手后,主机发送确认信号后并没有立即断开连接,而是等待了 2 个报文传送周期,原因是:如果第四次握手的确认信息丢失,服务器将会重新发送第三次握手的断开连接的信号,而服务器发觉丢包与重新发送的断开连接到达主机的时间正好为 2 个报文传输周期。

转载于:https://www.cnblogs.com/NatChen/p/6518246.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Pytorch神经网络实战案例】29 【代码汇总】GitSet模型进行步态与身份识别(CASIA-B数据集)

1 GaitSet_DataLoader.py import numpy as np # 引入基础库 import os import torch.utils.data as tordata from PIL import Image from tqdm import tqdm import random# 1.1定义函数,加载文件夹的文件名称# load_data函数, 分为3个步骤:…

linq from 多个sum_快手重拳打击劣质电商 7月以来封禁700多个团伙账号

何为劣质电商?炒作演戏?PK售卖劣质商品?私下交易?夸大其词?……在快手电商的定义里,有上述不良行为的,都可以定义为劣质电商。快手电商站内官方号“快手卖货助手”日前发布第 11 期“自售或PK销…

RuntimeError: Can‘t call numpy() on Variable that requires grad. Use var.detach().numpy()

1. 问题描述 如题,将PyTorch Tensor类型的变量转换成numpy时报错: RuntimeError: Cant call numpy() on Variable that requires grad. Use var.detach().numpy() instead. 2. 解决办法 出现这个现象的原因是:待转换类型的PyTorch Tensor变…

nrf51822添加UUID

问题 :添加一个自己的uuid I’m new to use nordic and I would like to add a new custom service (2320EE58-8654-4132-95F7-0A872AC0958F) with a custom characteristic(23200000-8654-4132-95F7-0A872AC0958F) I’m using nRF51 and mBed compiler. Thank’s …

表格下载

//数组组完后生成excelvendor(Excel.PHPExcel);$objExcel new PHPExcel();$objActSheet $objExcel->getSheet(0);//设置打印纸张A4$objActSheet->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);//设置参数 $objActSheet->getColumn…

win10怎么更改账户名称_Win10邮件功能如何查看邮件

win10的用户当中,一方面有说系统臃肿的,另外一方面有说功能多了不少,好用。不管是出于前者还是后者,win10功能确实多了不少,尤其是一些比较常用的功能,比如说邮箱功能,一般用户可能会选择登录网…

AttributeError: ‘set‘ object has no attribute ‘items‘

AttributeError: ‘set’ object has no attribute ‘items’ 出现这个问题,原因可能是定义的header有问题 正确如下: header{“key”:“value”} 如果是直接在请求数据中复制,很有可能会忽略键和值的冒号。

Error: file not found: arch/arm/boot/compressed/piggy.lzo

问题:在编译Android 系统kernel源码的时候出现错误 I am trying to build android projectGetting below error even after setting correct path for toolchains/bin/sh: lzop: not foundAS arch/arm/boot/compressed/piggy.lzo.o arch/arm/boot/compressed/p…

使用eclipse以及Juint进行测试

打开eclipse后,点击左上角的File,新建一个project,命名为testJunit,然后在src目录下新建两个包,分别命名为TestScore和Test(这是文件夹里没有文件所以是白色)。 在TestScore中新建一个class,命名为Score.ja…

9轴传感器学习

1、几个角度的解释 欧拉角:http://baike.baidu.com/link?urlvajuHz-lUawV7ZUa-67DiBb0jjwyyQqNwnQEeJdRComWDt1XRtjgQ2AnYojNgfRKfoo3T_1gCWPebbGp3npFZq有了欧拉角,才能确定下面的,横滚角,俯仰角和航向角一般定义载体的右、前、…

excel单元格下拉选项怎么设置_单元格下拉效果怎么实现?

单元格右边的下拉菜单怎么做的?感觉逼格略有提升啊上视频单元格下来效果https://www.zhihu.com/video/1249633577441800192

代码实现:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。...

import java.util.Scanner; //给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 public class Test {public static void main(String[] args) {Scanner sc new Scanner(System.in);int num 0 ;String s "0&…

C语言 程序代码编写规范

前言 一个好的程序编写规范是编写高质量程序的保证。清晰、规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性。 说明 l 本文档主要适用于刚刚开始接触编程的初学者。 l 对于具有一…

The size of tensor a (4) must match the size of tensor b (3) at non-singletonThe size of

报错: RuntimeError: The size of tensor a (4) must match the size of tensor b (3) at non-singleton 解决: img Image.open(image_path) 改为 img Image.open(image_path).convert(RGB)。 完成~

excel高级筛选怎么用_python中实现excel的高级筛选

一Excel里的高级筛选功能,着实令人惊叹,VBA里实现起来也相对简单,就是手动操作的代码化,设置好三项参数,便可以随取随用,效果稳准快。二在python 中实现同样的目的,更为直白爽快,不信…

mysql添加字段语句

1.添加 varchar类型的字段: alter table b_warehouse_message add column entity_warehouse_no_test varchar(48) CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT 实体仓库代码; alter table b_warehouse_message change entity_warehouse_no_test entity_war…

linux usb学习笔记

USB 设备基础知识 usb端点 usb端点用一个结构体来描述   USB 端点在内核中使用结构 struct usb_host_endpoint 来描述. 这个结构包含真实的端点信息在另一个结构中, 称为 struct usb_endpoint_descriptor. 后者包含所有的 USB-特定 数据, 以设备自身特定的准确格式. 驱动关…

cv2.error: OpenCV(4.5.2) : -1 : error: (-5:Bad argument) in function ‘rectangle‘

在使用opencv画矩形框的时候下面的这行出现了错误: cv2.rectangle(img, (22.0, 3.0),(33.0, 45.0), translate_color(classes[k]), 3, 1) cv2.error: OpenCV(4.5.2) : -1 : error: (-5:Bad argument) in function ‘rectangle’ Overload resolution failed: Can’t…

电脑如何测网速_物联网卡的网速到底怎么样呢

最近不少朋友发私信问我,物联网卡网速到底怎么样,和手机卡的网速有没有什么区别?其实关于网速这个问题,我已经重复解释了很多遍。只要是走公网的流量卡,在不限速的情况下,基本是和你手机卡网速是一致的&…