【图解计算机网络】从浏览器地址输入到网页显示的整个过程

news2024/11/18 9:07:27

从浏览器地址输入到网页显示的整个过程

  • 整体流程
  • DHCP
  • http协议报文组装
  • DNS
  • TCP协议封装与TCP三次握手
  • IP协议封装与路由表
  • MAC地址与ARP协议
  • 交换机
  • 路由器

整体流程

从往浏览器输入一个地址到网页的显示,要经过很长的一个流程,中间涉及到计算机网络的许多知识。

在这里插入图片描述

首先我们的计算机如果是刚接入网络,并且不是手动设置的方式设置IP地址的话,则需要通过DHCP自动获取一个IP地址。

然后我们再浏览器输入一个域名地址,浏览器就会组装http报文。

组装好http报文后,由于我们输入的是域名地址,需要解析成IP地址,这就需要用到DNS域名解析协议进行域名解析。

然后就要通过TCP协议的三次握手建立连接,建立TCP连接之后,就可以通过这个TCP连接发送数据。

然后不管是TCP三次握手的数据包,还是真正发送数据的数据包,都要通过内网的路由器把它发到外网,这就需要把我们数据包发送到路由器。这时候就需要用到IP地址,通过DHCP我们的计算机已经拥有了自己的IP地址,然后通过DNS域名解析协议也获取到了目标服务器的IP地址,这时候通过目标服务器的IP地址在本机的路由表中查询匹配,就可以把我们的数据包发送到路由器。

路由表中匹配到路由器后,还需要通过ARP协议获取路由器的MAC地址,然后经过交换机转发数据包到路由器。

交换机接收到数据包之后,就会根据下一跳的MAC地址,转发数据包到路由器。

路由器接收到数据包后,会解开外层MAC层的包头,拿到网络层的包头的目标IP地址,在自己的路由表中进行匹配,匹配成功后经过指定的接口把数据包发到外网。

在这里插入图片描述

数据包到达了目标服务器所在子网的路由器时,也是经过相同的规则,通过目标IP地址在路由表中进行匹配,然后经过交换机转发到目标服务器,目标服务器接收到数据包之后处理请求,返回响应数据包,也是经过相同的流程到达我们的计算机。

DHCP

一台计算机在刚接入内网时,我们可以给他手动设置一个IP地址,但是如果内网的计算机比较多,都通过手动设置IP地址的方式分配IP地址的话,就会非常的麻烦。于是我么可以通过DHCP方式动态分配IP地址。

使用DHCP动态分配IP,通常需要一个DHCP路由器。我们的计算机刚接入内网时,还不知道DHCP服务器的ip地址,我们的计算机自己本身也没有ip地址,于是就通过广播的方式,广播一个UDP数据包。该UDP数据包的目标ip地址为255.255.255.255,目标端口是67,源IP地址是0.0.0.0,源端口是68。

在这里插入图片描述

DHCP接收到UDP数据包,会分配IP一个地址,并通过UDP数据包广播回去。

在这里插入图片描述

我们的计算机接收到DHCP服务器返回的UDP数据包之后,如果有多个DHCP服务器给他分配IP,它会从中选择一个,然后广播一个UDP确认数据包。

在这里插入图片描述

最后DHCP服务器广播一个返回的ACK报文,这样我们的计算机就获取到了自动分配的IP地址了。

在这里插入图片描述

但是有时候DHCP服务器和我们的计算机不在同一个局域网,此时就要通过DHCP中继代理,把DHCP请求代理到DHCP服务器。DHCP中继代理其实就是一个路由器,会以单播的方式把DHCP请求数据包发送到DHCP服务器所在局域网的另一个DHCP中继代理路由器。

在这里插入图片描述

http协议报文组装

然后我们在浏览器输入一个域名地址,比如我们输入的就是www.baidu.com,此时浏览就就会组装http协议报文,把它发送到目标服务器,目标服务器再返回一个包含www.baidu.com网页信息的http响应报文。

http请求报文格式:
在这里插入图片描述

http响应报文:
在这里插入图片描述

DNS

组装好http请求报文以后,由于我们输入的是域名地址,现在要把域名地址解析成IP地址。此时就通过DNS域名解析协议进行域名解析。

浏览器首先查看自己是否有该域名对应的缓存信息,如果有,则直接从缓存中获取该域名的IP地址。

浏览器缓存不命中,则查询hosts文件是否配置了该域名与IP地址的映射关系,如果有,则会返回hosts文件中该域名对应的IP地址。

如果hosts文件中也不命中,则要访问DNS域名服务器查询该域名对应的IP地址。

在这里插入图片描述

请求DNS域名服务器时,首先会请求的是本地DNS域名服务器,本地DNS域名服务器也是先从缓存中查询,如果缓存命中,则返回缓存中的IP地址。

如果本地域名服务器缓存不命中,则请求根域名服务器,然后根域名服务器会返回顶级域名服务器(.com)的域名服务器地址。

然后本地域名服务器再请求顶级域名服务器,顶级域名服务器返回baidu.com的权威域名服务器。

本地域名服务器请求baidu.com权威域名服务器,baidu.com权威域名服务器返回www.baidu.com域名对应的服务器IP地址。

然后本地域名服务器会把域名与IP地址的映射关系缓存起来。

在这里插入图片描述

TCP协议封装与TCP三次握手

查找到目标服务器的IP地址之后,就要交给传输层进行网络传输了,浏览器请求页面一般是走TCP协议。

TCP协议会把http报文拆分成多个数据包,以流的形式发送。每个数据包会封装一个TCP协议头。TCP协议头包括源端口号、目标端口号、序列号(seq num)、确认序列号(ack num)、以及六个状态位(URG、ACK、PSH、RST、SYN、FIN)等重要信息,其他的信息不太重要就不需要去记忆了。

在这里插入图片描述

然后会经历与服务器的三次握手,建立一个TCP连接,才能基于这个TCP连接发送数据。

在这里插入图片描述

  1. 首先是客户端(也就是我们的浏览器)发送一个SYN标志位为1的请求数据包,表示请求建立连接,此时客户端进入SYN-SENT状态;
  2. 然后服务器接收到之后会返回一个SYN和ACK标志位为1的数据包,表示响应客户端的连接请求,并请求客户端建立连接,此时服务端进入SYN-RCVD状态;
  3. 最后客户但返回一个ACK标志位为1的数据包,于是双方进入ESTABLISHED状态,表示连接建立成功。

IP协议封装与路由表

然后就是网络层协议栈的处理,使用的是IP协议,会在TCP协议包头的外面套一层IP协议包头,IP协议包头包括源IP地址和目标IP地址。

在这里插入图片描述

然后查询路由表,会匹配到掩码为0.0.0.0这一条目,找到路由器网关的地址。

在这里插入图片描述

MAC地址与ARP协议

获取到了路由器的IP地址,还要取得它的MAC地址,才能把它发出去。

在外网使用IP地址进行网间路由,而在局域网,则使用MAC地址就可以。并且IP地址是可以更改的,而MAC地址是设备出厂时设置好的并且不可更改,所以比起IP地址来说,MAC地址更能唯一表示一台服务器。

MAC 地址长 6 个字节 48 位,使用十六进制数表示,比如:30-C9-AB-9F-7E-70。
在这里插入图片描述

要获取MAC地址,需要使用ARP协议。客户端广播ARP请求,当与该IP地址匹配的机器收到该ARP请求时,会以单播的方式发送ARP响应,响应中携带自己的MAC地址。

在这里插入图片描述

获取到MAC地址后,会存储到本地的ARP缓存中。

在这里插入图片描述

然后就会在IP协议包头的外面再包一层MAC头部,里面包含自己的MAC地址和下一跳(路由器)的MAC地址。

在这里插入图片描述

然后就可以把该数据包发给交换机,由交换机转发到路由器。

交换机

交换机接收到一个数据包时,会查看下一跳MAC地址。然后在自己本地的MAC地址表中进行匹配,从匹配到的MAC地址的特定交换机端口发送出去,就可以到达下一跳地址对应的节点。

在这里插入图片描述

如果下一跳MAC地址在交换机的MAC地址中不匹配,则会通过广播的方式把数据包从除源端口以外的所有交换机端口发送出去。

在这里插入图片描述

路由器

经过交换机的转发,我们的数据包就到了我们局域网的路由器。路由器发现下一跳MAC地址与自己的MAC地址匹配,会接收该数据包。

然后路由器会拆掉外层的MAC头部,得到里面的目标IP地址,然后在路由器本地的路由表进行匹配,然后得到匹配到的下一跳IP地址,把数据包发到外网。

发送数据包到外网前,要给数据包包装一个MAC头部。原来的MAC头部已被路由器拆掉,现在要以路由器自己的MAC地址为当前节点MAC地址,路由器的路由表匹配到的下一跳的节点对应的MAC地址为下一跳MAC地址,包装一个MAC头部。如果路由器不知道该IP地址对应的MAC地址,也是通过ARP协议获取。

就这样,数据包在互联网上经过多个路由器节点的网间路由,最终到达目标服务器所在的局域网。

在这里插入图片描述

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

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

相关文章

【ARM 裸机】I.MX 启动方式之启动头文件 1

接上一节:【ARM 裸机】I.MX 启动方式之启动设备的选择; 2、启动头文件 当 BOOT_MODE1 为 1,BOOT_MODE0 为 0 的时候此内部 BOOT 模式,在此模式下,芯片会执 行内部的 BOOT ROM 代码,这段 BOOT ROM 代码会进…

按钮(秒懂CSS按钮的使用)

目录 一、按钮介绍 1.概念 2.特点 3.功能 二、按钮用法 1.按钮的使用 2.按钮的样式 3.按钮颜色 4.按钮大小 5.圆角按钮 6.按钮边框颜色 7.按钮鼠标悬停 8.按钮阴影 9.禁用按钮 10.按钮宽度 三、按钮实例 1.交互式按钮 2.扩展动画按钮 3.播放/暂停按钮 四、应用场景…

【Day 3】Ajax + Vue 项目、路由 + Nginx

1 Ajax Asynchronous JavaScript And XML 异步的 JavaScript 和 XML 作用: 数据交换 通过 Ajax 可以给服务器发送请求,并获取服务器响应的数据 异步交互 可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术&#xf…

【JavaSE】浅谈Java异常

前言 本篇文章是对Java异常体系相关内容及部分注意事项的的讲解。 一. 认识异常 在每个人的生命历程中,或多或少都会遇到生病或受伤的情况,比如:皮肤擦伤、感冒、发烧、患上某些传染病等等。不管“病情”严重与否,这些都可以算…

java学习笔记1

1 初识java 1.1 jdk安装 1.1.1 下载jdk https://www.oracle.com/java/technologies/downloads/#java8-windows1.1.2 安装jdk jdk-8u361-windows-x64.exe安装到D:\Program Files\Java\jdk1.8.0_361安装jre,修改地址到D:\Program Files\Java\jre1.8.0_361jdk安装成功1.1.3 配置…

常见的七种排序

目录 一、插入排序 1、直接插入排序 2、希尔排序(缩小增量排序) 二、选择排序 3、直接选择排序 4、堆排序 三、交换排序 5、冒泡排序 6、快速排序 四、归并排序 7、归并排序 五、总结 一、插入排序 1、直接插入排序 思路: i 用来…

Python革命:如何利用AI数据分析引领人工智能的未来

在人工智能迅速发展的今天,Python语言已经成为了推动AI领域发展的一大利器。作为一种高级编程语言,Python以其简洁的语法和强大的功能,为AI数据分析提供了强有力的支持,帮助开启了人工智能的新时代。 Python的核心优势 Python的最…

NLP_知识图谱_三元组实战

文章目录 三元组含义如何构建知识图谱模型的整体结构基于transformers框架的三元组抽取baselinehow to use预训练模型下载地址训练数据下载地址 结构图代码及数据bertconfig.jsonvocab.txt datadev.jsonschemas.jsontrain.jsonvocab.json 与bert跟data同个目录model.pytrain.py…

Java——继承方式

在现实生活中,事物之间的关系是非常复杂,灵活多样,比如: 但在Java中只支持以下几种继承方式: 注意:Java中不支持多继承。 时刻牢记,我们写的类是现实事物的抽象。而我们真正在公司中所遇到的…

基于SpringBoot+Vue的外卖点餐网站 免费获取源码

项目源码获取方式放在文章末尾处 项目技术 数据库:Mysql5.7/8.0 数据表:12张 开发语言:Java(jdk1.8) 开发工具:idea 前端技术:vue html 后端技术:SpringBoot 功能简介 (有文档) 项目获取关键字&…

MATLAB设置变量

您可以通过简单的方式分配变量。例如, 示例 x 3 %定义x并用值初始化它 MATLAB将执行上述语句并返回以下结果- x 3 它创建一个名为x的1乘1矩阵,并将值3存储在其元素中。再举一个实例, 示例 x sqrt(16) %定义x并用表达式初始化它 MATLAB将…

Arduino UNO驱动MPR121接近电容式触摸传感器控制WS2812彩灯

简介 MPR121芯片功能强大可用作触摸,电容检测,驱动LED等等.在低速扫描下可以将功 耗降低到8μA,可以处理多达12个独立的触摸板。支持I2C,几乎可以用任何微控 制器连接。可以使用ADDR引脚选择4个地址中的一个,一个I2C2线总线上共有48 个电容触摸板。使用该芯片比使用模拟输入进行…

Tcpdump -r 解析pcap文件

当我们使用命令抓包后,想在命令行直接读取筛选怎么办?-r参数就支持了这个 当你使用 tcpdump 的 -r 选项读取一个之前捕获的数据包文件,并想要筛选指定 IP 地址和端口的包时,你可以在命令中直接加入过滤表达式。这些过滤表达式可以…

SpringMVC(三)【REST 风格】

1、REST 风格 1.1、REST 简介 REST(Representational State Transfer),表现形式状态转换 在开发中,它其实指的就是访问网络资源的格式 1.1.1、传统风格资源描述形式 http://localhost/user/getById?id1http://localhost/user…

吴恩达机器学习笔记 三十五 异常检测与监督学习

什么时候选择异常检测? 正样本 ( y 1 ) 的数量非常少 负样本 ( y 0 ) 的数量非常多 有很多不同的异常,现有的算法不能从正样本中得知什么是异常,或未来可能出现完全没见过的异常情况。 例如金融欺诈,隔几个月或几年就有新的…

智慧公厕是如何诞生的?

在城市化进程中,公共卫生设施的建设一直是重要议题之一。而随着科技的不断发展,智慧公厕作为一种创新的解决方案,逐渐成为了现代城市管理的亮点。那么,智慧公厕是如何产生的呢? 一、城市化进程的推动 城市人口的增加和…

vue elmentui 可编辑table 实现

废话不多说上图: 1.可编辑input 2.可编辑下来框 3.点击chechbox 4.可编辑radio 其实后面两种可以直接显示值 需要修改直接改就行 保持风格统一所以就做了点击之后出现修改功能 上代码,不要哔哔 哈哈 粗暴 真得是曲不离口 拳不离手, 几天…

java学习笔记5

9. 类和对象 9.1 类 9.1.1 类的定义 ​ 类是具有相同属性和方法的具体实例的集合,类是对象的抽象,对象是类的具体实例 9.1.2 类语法 public class 类名{// 1. 属性public 变量的类型 变量名称1;public 变量的类型 变量名称2;...// 2. 方法public void 方法1(){}public v…

pandas/python 一个实战小案例

上次写坦克游戏的时候,接触了一点pandas,当时只是简单了解了一下如何遍历行和列并获取值来替换图片,想更多了解pandas。正好有一些数据需要筛选,试试能不能用通过代码实现。虽然总的来说不复杂,但由于原始数据在命名、…

【重要】Perplexity订阅问题看这一篇就够了!Perplexity免费版和订阅版区别?免费使用G|P|T-4!

常见问题 Q:Perplexity是什么?Perplexity有什么用? A:Perplexity是一个AI搜索引擎,可以理解为可以检索网络结果的G|P|T,尤其是选中“Academic”后支持特定学术论文的检索。并且文献是真是可查到的而不是G|P…