当前位置: 首页 > article >正文

全面解析:HTML页面的加载全过程(一)--输入URL地址,与服务器建立连接

用户输入URL地址,与服务器建立连接

用户在浏览器地址栏输入一个URL

浏览器开始执行以下三步操作操作:url解析、DNS查询、TCP连接

第一步:URL解析

什么是URL?
URL(Uniform Resource Locator,统一资源定位符)是互联网上标准资源的地址,互联网上每个文件(即资源)都有一个唯一的URL,它包含了文件的位置以及浏览器处理方式等信息。

URL 标准格式

scheme://host[:port#]/path/.../[;url-params][?query-string][#anchor]

如:https://www.baidu.com/s?wd=url&rsv_spt=1

scheme:协议名称,http、https、ftp等。
host:HTTP服务器的IP地址或者域名,如www.baidu.com
port:HTTP服务器的默认端口是80,此端口可以省略。如vscode启动vue,用 http://localhost:5173/端口path:访问资源的路径
url-params:参数
query-string:发送给http服务器的数据
anchor:锚点定位

浏览器解析URL,确定协议(如HTTP或HTTPS)、主机名、端口(默认为80或443)以及路径(如/path/to/page.html)

第二步:DNS查询

域名就是起一个方便记忆的名字,否则直接使用服务器的外网IP访问服务器不好记忆,操作不方便

1、 DNS
DNS是域名系统的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,用于TCP/IP网络。

2、域名DNS作用
域名系统是将IP地址与域名相互映射的一个分布式数据库

在浏览器输入某个Web服务器的域名时

(1) 用户主机首先会在自己的DNS高速缓存中查找该域名所对应的IP地址。

(2)如没有,向网络中的某台DNS服务器查询,DNS服务器中有域名和IP地址映射关系的数据库
(3) 之后将查询结果发送给用户主机。

(4)用户主机中的浏览器可以通过Web服务器的IP地址对其进行访问了。

3、域名的种类

  • 顶级域名 baidu.com
  • 一级域名 www.baidu.com
  • 二级域名 sports.baidu.com
  • 三级域名 kbs.sports.baidu.com
  • .com 国际域名
  • .cn 中文域名
  • .com.cn
  • .edu 教育网
  • .gov 国家政府单位
  • .io 博客
  • .org 官方组织
  • .net 系统类

第三步:TCP连接

TCP(Transmission Control Protocol,传输控制协议)是互联网协议套件中一种核心协议。它提供面向连接的、可靠的字节流传输服务,确保数据从一端正确无误地传输到另一端。

四层协议将 数据链路层和物理层合并为 “网络接口层”

1、TCP 连接建立:三次握手

在这里插入图片描述

常见面试题:

为什么TCP需要三次握手,为什么不设计成两次握手:

  1. 确保双方都准备好接收连接‌:通过三次握手,客户端和服务器可以确认彼此都准备好接收连接请求,从而建立起可靠的连接。如果只进行两次握手,可能会出现客户端发送的SYN包在网络中丢失,导致服务器无法接收到连接请求,连接无法建立‌
  2. 防止已失效的连接请求报文再次传送到服务器‌:如果采用两次握手,可能会出现网络延迟或拥堵导致旧的连接请求报文在网络中滞留。当客户端重新发送连接请求时,服务器可能会误以为这是新的请求并建立连接,导致资源浪费‌。
  3. 同步初始序列号‌:TCP通过序列号来标识发送的数据包,确保数据的顺序性和完整性。在三次握手过程中,双方会交换初始序列号,以便后续的数据传输能够正确进行‌。

为什么不设计成次五次握手:

三次握手就可以符合实际情况,所以就没必要设计成四次握手、五次握手等情况,浪费资源

**结论:**三次握手能够确保连接的可靠性、同步初始序列号,并防止已失效的连接请求报文再次传送到服务器,而两次握手无法满足这些需求,因此TCP选择了三次握手而不是两次握手,超过三次握手,浪费资源。

##2、 TCP 连接断开:四次挥手

就是客户端与服务器断开连接时,需要一共发送四个报文段来完成断开TCP连接

在这里插入图片描述

浏览器根据协议与服务器建立连接,通常涉及三次握手过程以确保可靠的数据传输通道。


http://www.kler.cn/a/403587.html

相关文章:

  • WPF如何全局应用黑白主题效果
  • React基础知识一
  • 图的存储、遍历以及Dijkstra/Floyd/Kruskal/Prim/拓扑排序/关键路径(实验8--作业)
  • 数据库、数据仓库、数据湖、数据中台、湖仓一体的概念和区别
  • 【Node.js】Node.js 和浏览器之间的差异
  • cesium for unity的使用
  • MATLAB图注意力网络GAT多标签图分类预测可视化
  • 如何运行python脚本
  • 基于java+ssm+Vue的校园美食交流系统设计与实现
  • MyBatis——#{} 和 ${} 的区别和动态 SQL
  • 【Golang】手搓DES加密
  • 5G与4G互通的桥梁:N26接口
  • [js] 0.1+0.2
  • CentOS操作系统下安装Nacos
  • C语言 | Leetcode C语言题解之第564题寻找最近的回文数
  • 《Python网络安全项目实战》项目6 编写密码工具程序
  • C#拼接小文件合成一个大文件
  • Go context.Context
  • Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案(二)
  • 机器翻译基础与模型 之二: 基于CNN的模型
  • 蓝桥杯每日真题 - 第18天
  • git修改安装位置后处理
  • labview中的调用链
  • 【Redis】GEO数据结构
  • Python实战 | 使用 Python 的日志库(logging)和 pandas 库对日志数据进行分析
  • PlncRNA-HDeep:使用基于两种编码风格的混合深度学习进行植物长非编码 RNA 预测