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

计算机网络-从输入网址到访问网站的全过程

当我们在浏览器中输入一个网址并按下回车键时,会发生一系列复杂的过程,最终使我们能够看到网页的内容。以下是这个过程的详细步骤:

  1. 客户端:首先,用户在浏览器中键入网址,然后浏览器会根据这个网址生成一个HTTP请求。

  2. 解析URL:URL由几部分组成,包括访问数据的协议(如http或https)、Web服务器的名称(如www.baidu.com)、端口号以及目录(默认为index文件)。

  3. 域名解析:如果URL包含域名,浏览器就需要进行域名解析。这个过程是通过DNS服务器来完成的,DNS服务器有树形的层级关系,包括根DNS、顶级域DNS和权威DNS。浏览器会逐层向上级DNS请求,如果上级DNS的缓存中没有需要的信息,就会继续向上级请求,直到找到对应的IP地址。

  4. 协议栈:得到IP地址后,浏览器就可以把HTTP的传输工作交给操作系统中的协议栈。应用程序(浏览器)通过调用Socket库,来委托协议栈工作。协议栈的组成包括TCP、UDP、IP、ICMP和ARP等协议。

  5. TCP:TCP协议负责在网络中传输数据。它的头部记录了源端口号和目标端口、包的序号(用于解决乱序问题)、确认号(用于确认是否收到数据)、状态位(用于连接时需要的信息)以及窗口大小等信息。TCP协议的工作流程包括三次握手(建立连接)、SSL/TLS(加密报文传输,保障数据安全)、分割数据、报文生成(包括TCP头部和数据部分,数据部分又包括HTTP头部和数据)以及四次挥手(断开连接)。

  6. IP:IP协议负责在网络中传输数据包。它的头部记录了源地址IP和目标地址IP以及上层协议类型(如TCP或UDP)。

  7. MAC:MAC地址是网络设备的物理地址。MAC头部记录了发送方MAC地址和接收方目标MAC地址以及上层协议类型(如IP或ARP)。

  8. 网卡:网卡驱动程序控制网卡的工作,包括添加帧头(起始标记)和帧尾(校验),将内容复制到网卡的缓存区,转化为电信号并发送。

  9. 交换机:在局域网内,交换机根据MAC地址表查找目标MAC地址,然后将信号发送到相应的端口。如果没有目标MAC地址,就会向所有端口广播。

  10. 路由器:在广域网中,路由器接收到数据包后,会进行校验,查看MAC地址是否是发给自己的(或者说需要经过自己转发的)。然后,路由器会根据路由表查询下一步转发的路径,这可能是静态路由,也可能是动态路由(实时交换路由信息)。

  11. 服务器:服务器开始解包,检查MAC地址、IP地址和TCP序列号是否符合要求,然后根据TCP头部中的端口号将数据转发给主机的进程。最后,服务器会生成一个响应,回应客户端。

  12. 浏览器:最终浏览器得到数据,解析 HTML 文件,创建 DOM 树,在 DOM 树创建完成后,浏览器会使用它来渲染页面。这个过程包括了解析 CSS,执行 JavaScript 代码,加载图片等步骤。

相关文章:

  • 金融数据_PySpark-3.0.3随机森林(RandomForestClassifier)实例
  • AI大模型与网球运动结合的应用场景及案例分析
  • 精品PPT-2023年无人驾驶汽车车联网网络安全方案
  • Unity开发者3D模型基础
  • Java中的try catch finally结构
  • MongoDB聚合运算符:$maxN
  • 前视声呐目标识别定位(二)-目标识别定位模块
  • Rust egui(4) 增加自己的tab页面
  • 将打印jar包直接打包成windows的插件,然后通过调用插件的接口地址将流传到接口实现解析并无需预览直接打印PDF
  • android studio中添加module依赖
  • Spirngboot JWT快速配置和使用
  • 前端html+css+js常用总结快速入门
  • Kali Linux介绍
  • AJAX —— 学习(二)
  • 施耐德 Unity Pro PLC 编程软件介绍
  • [译]CSS 居中(Center)方法大合集
  • 【前端学习】-粗谈选择器
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Angular 4.x 动态创建组件
  • codis proxy处理流程
  • gitlab-ci配置详解(一)
  • Gradle 5.0 正式版发布
  • HTML-表单
  • java多线程
  • jquery cookie
  • KMP算法及优化
  • leetcode388. Longest Absolute File Path
  • orm2 中文文档 3.1 模型属性
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 前端自动化解决方案
  • 如何设计一个微型分布式架构?
  • 思维导图—你不知道的JavaScript中卷
  • 在Docker Swarm上部署Apache Storm:第1部分
  • nb
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • #13 yum、编译安装与sed命令的使用
  • #QT(智能家居界面-界面切换)
  • $(function(){})与(function($){....})(jQuery)的区别
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (初研) Sentence-embedding fine-tune notebook
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二十三)Flask之高频面试点
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • (转)项目管理杂谈-我所期望的新人
  • .dwp和.webpart的区别
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET命令行(CLI)常用命令
  • .NET微信公众号开发-2.0创建自定义菜单
  • .NET运行机制