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

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

  • 整体流程
  • 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协议获取。

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣-LCP 02.分式化简

题解: class Solution:def fraction(self, cont: List[int]) -> List[int]:# 初始化分子和分母为 0 和 1n, m 0, 1# 从最后一个元素开始遍历 cont 列表for a in cont[::-1]:# 更新分子和分母,分别为 m 和 (m * a n)n, m m, (m * a n)# 返回最终的…

VOJ 等边三角形 题解 DFS

等边三角形 代码 #include <bits/stdc.h> using namespace std; typedef long long ll; int n, flag 0, sum 0, tag; int length[20]; // 木棍长度 int group[3] {0}; // 三条边的当前边长 void dfs(int i, int index) {group[index] length[i];if (group[1] &g…

2024蓝桥杯嵌入式模板代码详解

文章目录 一、STM32CubeMx配置二、LED模板代码三、LCD模板代码 一、STM32CubeMx配置 打开STM32CubeMx&#xff0c;选择【File】->【New Project】&#xff0c;进入芯片选择界面&#xff0c;搜索到蓝桥杯官方的芯片型号&#xff0c;并点击收藏&#xff0c;下次直接点击收藏就…

React【Day4】

路由快速上手 1. 什么是前端路由 一个路径 path 对应一个组件 component 当我们在浏览器中访问一个 path 的时候&#xff0c;path 对应的组件会在页面中进行渲染 2. 创建路由开发环境 # 使用CRA创建项目 npm create-react-app react-router-pro# 安装最新的ReactRouter包 …

第64天:服务攻防-框架安全CVE复现Apache ShiroApache Solr

目录 思维导图 案例一&#xff1a;Apache Shiro-组件框架安全 shiro反序列化 cve_2016_4437 CVE-2020-17523 CVE-2020-1957 案例二&#xff1a;Apache Solr-组件框架安全 远程命令执行 RCE&#xff08;CVE-2017-12629&#xff09; 任意文件读取 AND 命令执行&#xff08…

建筑楼宇VR火灾扑灭救援虚拟仿真软件厂家

在传统消防安全教育方式中&#xff0c;往往存在内容枯燥、参与度低和风险大等问题&#xff0c;使得消防安全知识难以深入人心。然而&#xff0c;借助VR消防安全逃生教育系统&#xff0c;我们可以打破这一困境&#xff0c;为公众带来前所未有的学习体验。 VR消防安全逃生教育系统…

Java多线程-API

常见API一览 Thread t1 new Thread(() -> {System.out.println("我是线程t1");System.out.println("Hello, World!"); }); t1.start(); // 获取线程名称 getName() // 线程名称默认是Thread-0, Thread-1, ... System.out.println(t1.getName());// 通过…

AI 语音机器人系统怎么搭建

搭建AI语音机器人系统通常包括以下几个关键步骤&#xff1a; 确定需求和技术选型&#xff1a;首先要明确AI语音机器人需要实现的功能&#xff0c;选择合适的技术框架和工具&#xff0c;如自然语言处理工具、语音识别工具等。 搜集和准备数据&#xff1a;收集和整理与业务相关…

12.事件参数

事件参数 事件参数可以获取event对象和通过事件传递数据 获取event对象 <template><button click"addCount">Add</button><p>Count is: {{ count }}</p> </template> <script> export default {data() {return {count:0…

Three.js--》探秘虚拟现实VR展厅的视觉盛宴

今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能灵活将所学知识运用起来&#xff0c;话不多说直接开始。 目录 项目搭建 初始化three代码 camera-controls控制器使用 添加画框 画框处理事件 添加机器人模型 …

大数据学习的第三天

文章目录 学习大数据命令的方式查看文件拷贝文件的方式添加数据的方式 出现了问题移动文件 hadoop工作流程和工作机制的方式namenodedatanodesecondarynamenode(主节点) 学习大数据命令的方式 查看文件 hadoop fs -cat /test/2.txt下载文件 hadoop fs -get -f /test/2.txt-f …

机器学习运用-信用卡交易诈骗预测

简介 本项目应用XGBoost算法对数据进行分析并建模预测信用卡交易是否具有欺骗性&#xff0c;属于机器学习相关的二分类任务。 XGboost XGBoost是一个优化的分布式梯度提升库&#xff0c;旨在实现高效、灵活和便携。XGBoost 不仅提供了一个强大的机器学习算法&#xff0c;也提…

笔试强训未触及题目(个人向)

NC398 腐烂的苹果 1.题目 2.解析 这是一个广度优先搜索问题&#xff0c;我们可以先找到所有的烂苹果&#xff0c;把它加入到队列中&#xff0c;然后再同时让这几个苹果向外面腐蚀&#xff0c;我们可以用一个boolean数组来表示是否被腐蚀&#xff0c;也可以直接在原数组中将这…

李宏毅2022机器学习/深度学习 个人笔记(2)

本系列用于推导、记录该系列视频中本人不熟悉、或认为有价值的知识点 本篇记录第一讲&#xff08;选修&#xff09;&#xff1a;神奇宝贝分类&#xff08;续&#xff09; 如图&#xff0c;boundary变为直线&#xff0c;结果也有上升 我们不一定采用高斯几率模型&#xff0c;…

npm 重要知识

1. npm config ls -l 此命令可以查看npm当前所有配置信息 2. .npmrc是npm重要的配置文件 位置在&#xff1a;C:\Users\{用户名} , 如下图 参考下文链接&#xff1a; https://www.cnblogs.com/zhuoss/p/17830408.html

cocos creator 3.6 发布web手机端 加载进度条添加

cocos creator 升级到3.x之后加载进度条取消了&#xff0c;测试了多个3.x版本最终以creator 3.6.3版本&#xff0c;构建了简单的进度加载 参考链接&#xff1a; https://forum.cocos.org/t/topic/137113 打包web-mobile后&#xff0c;没有进度条。加载的时候只显示一个黑屏。…

MYSQL之增删改查(下)

前言&#xff1a; 以下是MySQL最基本的增删改查语句&#xff0c;很多IT工作者都必须要会的命令&#xff0c;也 是IT行业面试最常考的知识点&#xff0c;由于是入门级基础命令&#xff0c;所有所有操作都建立在单表 上&#xff0c;未涉及多表操作。 4.3 高级查询 4.3.1 聚合函…

【Unity学习笔记】第十三 · tag与layer(运行时创建tag和layer)

参考&#xff1a; Unity手册 标签Unity手册 LayersIs it possible to create a tag programmatically?脚本自动添加tag和Layer 注&#xff1a;本文使用Unity版本是2022.3.23f1 转载引用请注明出处&#xff1a;&#x1f517;https://blog.csdn.net/weixin_44013533/article/de…

利用OpenCV4.9制作自己的线性滤波器!

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV4.9使用 inRange 的阈值操作 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 f…