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

浏览一个网站时的整个过程

一、前言

       当你在浏览器地址栏输入想访问网站的URL(统一资源定位符),敲回车后,便可显示出网页内容,这个过程只是简单的显示出网页吗?不是的,接下来就来讨论浏览一个网站时的整个过程。

二、浏览的整个过程

       大致可以分为下面几个过程:

  1. 域名解析成IP地址;
  2. 浏览器与服务器进行TCP连接(三次握手);
  3. 发送与收取数据(浏览器与服务器开始HTTP访问过程);
  4. 浏览器与服务器断开TCP连接(四次挥手);

       下面详细介绍整个过程:

       第一步,域名解析服务器DNS负责把域名解析成对应的IP,客户端再根据IP地址访问服务器。

       第二步,浏览器与服务器通过TCP协议三次握手建立TCP连接。

  • 第一次握手,客户端先向服务器发送一个请求连接的同步数据包,同步SYN=1,确认ACK=0;
  • 第二次握手,服务器收到客户端发送的第一个数据包,若服务器同意连接,则服务器发送一个数据包进行回应,同步SYN=1,确认ACK=1;
  • 第三次握手,客户端收到服务器的确认,再给服务器发送一个数据包,同步SYN=0,确认ACK=1,这样TCP连接就建立好了。

       第三步,发送与收取数据,此时浏览器与服务器开始HTTP访问过程。

  • 用户在浏览器发起请求,浏览器会向服务器发起TCP连接请求;
  • 如果服务器接收请求并建立连接,浏览器会将生成的HTTP格式数据包发送至服务器;
  • 服务器便会解析HTTP格式的数据包并执行请求,然后服务器将生成HTTP格式的数据包发送至浏览器;
  • 浏览器解析HTTP格式的数据包,最后呈现HTML响应给用户,完成发送与收取数据。

        第四步,浏览器与服务器通过TCP协议四次挥手断开TCP连接。

  • 第一次挥手,客户端向服务器发送连接释放的请求报文,并停止发送数据,终止FIN=1,确认ACK=0;
  • 第二次挥手,服务器收到连接释放的报文,给客户端发送确认报文,从客户端到服务器这个方向上的连接就释放了,TCP连接处于半关闭状态,此时客户端没有数据要发给服务器了,但是服务器还有数据要发送给客户端,客户端仍可以接收,终止FIN=0,确认ACK=1;
  • 第三次挥手,如果服务器已经没有向客户端发送数据了,其应用进程就通知TCP释放连接,并向客户端发送确认报文,终止FIN=1,确认ACK=1;
  • 第四次挥手,客户端收到服务器的连接释放报文段后,向服务器发出确认报文,终止FIN=0,确认ACK=1。

三、小结

       URL访问网站时的网络传输全过程,可以归纳为:
  首先通过域名找到IP,如果缓存里没有就要请求DNS服务器;得到IP后开始与服务器进行三次握手来建立TCP连接;连接建立后进行HTTP访问,传输并获取网页内容;传输完后与服务器四次挥手来断开TCP连接。

相关文章:

  • 一条 sql 了解 MYSQL 的架构设计
  • 秋招还没offer,正常吗?
  • 什么是悬空 Docker 镜像?
  • 深度学习05——线性回归模型
  • 前端element-ui组件库el-card卡片【hover效果与点击事件(点击无效用@click.native=““)解决】
  • 基于JSP+java的酒店预订系统
  • 塑料检测项目和标准
  • SSM+网上书城系统 毕业设计-附源码180919
  • 6课题研究心得4
  • 【Java】Apache HttpClient调用微信支付API v3报错:找不到证书序列号对应的证书
  • 数据中心如何实现跨SD-WAN融合组网?
  • 栈(C语言)
  • 【微电网优化】基于粒子群算法实现电力分配及电网建设多目标优化求解附matlab代码
  • Vue过渡与动画
  • 基于Python实现染色算法的评估
  • 【刷算法】求1+2+3+...+n
  • Android单元测试 - 几个重要问题
  • gops —— Go 程序诊断分析工具
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Invalidate和postInvalidate的区别
  • Java 多线程编程之:notify 和 wait 用法
  • JavaWeb(学习笔记二)
  • node 版本过低
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Redis的resp协议
  • swift基础之_对象 实例方法 对象方法。
  • 诡异!React stopPropagation失灵
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 前端相关框架总和
  • 前端学习笔记之观察者模式
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 如何合理的规划jvm性能调优
  • 入手阿里云新服务器的部署NODE
  • 使用 Node.js 的 nodemailer 模块发送邮件(支持 QQ、163 等、支持附件)
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 网络应用优化——时延与带宽
  • 学习Vue.js的五个小例子
  • 智能合约开发环境搭建及Hello World合约
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (04)odoo视图操作
  • (二)换源+apt-get基础配置+搜狗拼音
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (算法)N皇后问题
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .form文件_一篇文章学会文件上传
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NET6实现破解Modbus poll点表配置文件
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .NET下ASPX编程的几个小问题