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

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

  • 整体流程
  • 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.mzph.cn/diannao/1200.shtml

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

相关文章

*Linux系统的进程和计划任务管理

目录 一、查看进程 1、程序和进程的关系 *2、ps查看静态进程信息 1)ps aux 2)ps -elf *3、top查看动态进程信息 4、pgrep查看进程信息 5、pstree查看进程树 二、控制进程 1、进程启动方式 2、进程的前后台调度 3、终止进程的运行 三、计划任…

React【Day4】

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

Git TortoiseGit 安装使用详细教程

前言 Git 是一个免费的开源分布式版本控制系统,是用来保存工程源代码历史状态的命令行工具,旨在处理从小型到非常大型的项目,速度快、效率高。《请查阅Git详细说明》。TortoiseGit 是 Git 的 Windows Shell 界面工具,基于 Tortoi…

第 2 章:FFmpeg简介

2.1 历史 历史 一些相关术语介绍: 容器(Container)格式:一种文件封装格式,里边主要包含了流,一般会使用一个特定的后缀名标识,例如.mov、.avi、.wav等。流 (Stream)&am…

政安晨:【Keras机器学习示例演绎】(五)—— 利用视觉变换器进行物体检测

目录 导言 导入和设置 准备数据集 实施多层感知器(MLP) 实施补丁创建层 显示输入图像的补丁 实施补丁编码层 构建 ViT 模型 运行实验 评估模型 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与…

第二届 Oceanbase 开发者大会 实录

第二届 Oceanbase 开发者大会 实录 今天很有幸参加了Oceanbase 开发者大会,我是真的我一开始还不知道什么是Oceanbase ,直到我开了会才知道。看来真的需要多参加一些这样活动。 会议议程 我们科普一下什么是Oceanbase OceanBase 是阿里巴巴集团推出…

如何进行数据库的迁移与同步——【DBA 从入门到实践】第四期

在日常的数据库运维工作中,我们时常会面临数据库替换、机房搬迁、业务测试以及数据库升级等任务,这些任务都需要对数据进行迁移和同步操作。【DBA 从入门到实践】第4期,将引导大家深入了解数据库迁移的流程,并探讨在迁移过程中可用…

AJAX——图书管理案例

1.渲染列表 自己的图书数据:给自己起个外号,并告诉服务器,默认会有三本书,基于这三本书做数据的增删改查。 // 目标1:渲染图书列表 // 1.1 获取数据 // 1.2 渲染数据const creator 哈哈 // 封装-获取并渲染图书列表函…

《QT实用小工具·二十八》基于qt开发的各种曲线

1、概述 源码放在文章末尾 该项目实现了各种曲线的绘制,下面是项目的demo演示: 项目部分代码如下: #include "frmsmoothcurve.h" #include "ui_frmsmoothcurve.h" #include "smoothcurve.h" #include "…

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

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

【小程序】IOS wx小程序解压获取源文件

根据自己手机的系统,获取wx小程序的缓存目录 一、微信小程序文件存放路径 安卓: /data/data/com.tencent.mm/MicroMsg/{{user哈希值}}/appbrand/pkg/iOS越狱: /User/Containers/Data/Application/{{系统UUID}}/Library/WechatPrivate/{{user…

1.为什么选择Vue框架

参考:百战程序员 为什么选择Vue框架 Vue是什么? 渐进式 JavaScript 框架,易学易用,性能出色,适用场景丰富的 Web 前端框架 为什么要学习Vue Vue是目前前端最火的框架之一Vue是目前企业技术栈中要求的知识点Vue可以…

HarmonyOS 状态管理

在声明式 UI 框架中,数据的改变触发 UI 的重新渲染。在 ArkUI 中不是所有数据的变化都会触发 UI 重新渲染,只有 状态变量 才会引起 UI 重新渲染。 状态变量 状态变量: 指被状态装饰器装饰的变量,只有这种变量的改变才会引起 UI …

【leetcode面试经典150题】63. 删除链表的倒数第 N 个结点(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…

软考141-上午题-【软件工程】-杂题+小结

一、杂题 真题1: 真题2: 真题3: 真题4: 真题5: 真题6: 真题7: 真题8: 真题9: 真题10: 真题11: 真题12: 真题13: 真题14&a…

paddlepaddle-gpu安装

背景 之前安装paddlepaddle-gpu遇到各种问题,安装不成功,之前使用了wsldocker的方式,可查看我之前博客:记录paddlepaddle-gpu安装,这要会导致我整个开发流程比较割裂 cuda版本 强烈推荐cuda11.8,paddlep…

SpringBoot项目错误:找不到主类(解决办法)

清理和重新编译项目即可,在项目中点击右键Maven-Reload project,之后再重新运行就行了

蓝桥杯第十五界软件测试线下省赛题目分析及解决

PS 需要第十五界蓝桥杯被测系统或者功能测试模板、单元测试被测代码、自动化测试被测代码请加🐧:1940787338 备注:15界蓝桥杯省赛软件测试 题目1:功能测试 题目描述 ​ 某物流公司的货运收费标准根据重量、距离和节假日三个因素来确定。如…

聊聊应用商城评分4.9的Apipost IDEA插件

Apipost Helper,作为IDEA插件,可以快速生成和查询API文档,直观友好地在IDE中调试接口。它简化了开发流程并提升效率,即使新手也能够迅速掌握。Apipost Helper提供了诸多便捷功能,如通过代码查找接口或者通过接口查找代…

UE5、CesiumForUnreal实现建筑白模生成及白模美化功能

1.实现目标 在专栏上篇文章基于GeoJson文件生成城市级白模(本文建筑白模数量12w+)的基础上修改,计算法线和纹理坐标,并基于特定材质进行美化,美化后的白模GIF动图如下所示: 文章目录 1.实现目标2.实现过程2.1 基于Cesium材质美化2.1.1实现原理2.1.2 C++代码2.1.3 蓝图应…