键入网址到网页显示,期间发生了什么?(计算机网络)

一、浏览器首先会对URL进行解析

下面以http://www.server.com/dir1/file1.html为例

525e3631e977456abc28d9dd4035bbe1.png当没有路径名时,就代表访问根目录下事先设置的默认文件,也就是 /index.html 或者 /default.html

对URL进行解析之后,浏览器确定了 Web 服务器和文件名,就会根据这些信息来生成 HTTP 请求消息。

但是光有web服务器名www.server.com是不够的,只知道一个人的名字肯定是找不到人的,我们还需要服务器的IP地址。

而DNS服务器就可以通过服务器名提供它的IP地址(相当于一个电话本,通过人名查询电话号码),

DNS域名是分层级的,越靠右层级越高。

例如www.server.com实际上是www.server.com.(多了后面的.)

  • 根 DNS 服务器(.)
  • 顶级域 DNS 服务器(.com)
  • 权威 DNS 服务器(server.com)

edb5c7e9a37f43c89051eb3939682f0d.png

在寻找IP地址时,会先在浏览器缓存中寻找是否有和目标服务器名对应的IP地址,如果没有,则会到操作系统缓存中寻找,如果没有再问hosts文件中寻找,还是没有,才会到本地DNS服务器中去寻找,如果还是没有,那么本地DNS服务器会到根DNS服务器中进行询问,根服务器发现是.com后缀,就说你去问.com顶级域名服务器吧,而.com顶级域名服务器会让你去问负责www.server.com的权威域名服务器,权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS服务器。

本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。

通过 DNS 获取到 IP 后,就可以把 HTTP 的传输工作交给操作系统中的协议栈

53ef4f00c5644469bb230a23e6c76b0b.png

协议栈包括上下两部分,上半部分是负责收发数据的 TCP 和 UDP 协议,这两个传输协议会接受应用层的委托执行收发数据的操作。下半部分用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。

 

IP 中还包括 ICMP 协议和 ARP 协议。

  • ICMP 用于告知网络包传送过程中产生的错误以及各种控制信息。
  • ARP 用于根据 IP 地址查询相应的以太网 MAC 地址。

 

随后HTTP报文需要依次组装TCP头部,IP头部和MAC头部来形成网络包,组装完成后如图所示:

f5b9485955744be1bdbb602f75484222.png

下面对组装过程进行讲解。

二、组装TCP头部

534ed1fa355a4104a4a6009f2c5c8844.png

源端口号目标端口号:确认数据应该发给哪个应用。

序号:解决包乱序的问题。

确认号:确认发出去对方是否有收到。如果没有收到就应该重新发送,直到送达,这个是为了解决丢包的问题。

状态位SYN 是发起一个连接,ACK 是回复,RST 是重新连接,FIN 是结束连接等。TCP 是面向连接的,因而双方要维护连接的状态,这些带状态位的包的发送,会引起双方的状态变更。

窗口大小:TCP 要做流量控制,通信双方各声明一个窗口(缓存大小),标识自己当前能够的处理能力,别发送的太快或太慢。

除了做流量控制以外,TCP还会做拥塞控制,对于真正的通路堵车不堵车,它会控制发送的速度。

在 HTTP 传输数据之前,首先需要 TCP 建立连接,TCP 连接的建立,通常称为三次握手,目的是保证双方都有发送和接收的能力

TCP 的连接状态查看,在 Linux 可以通过 netstat -napt 命令查看。

如果 HTTP 请求消息比较长,超过了 MSS 的长度,这时 TCP 就需要把 HTTP 的数据拆解成一块块的数据发送。

19e943a58eb946788d753df370e5864a.png

  • MTU:一个网络包的最大长度,以太网中一般为 1500 字节。
  • MSS:除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大长度。
  • 数据会被以 MSS 的长度为单位进行拆分,并对每个被拆分的数据加上 TCP 头信息,然后交给 IP 模块来发送数据。

2092d1ae67544ec7873a0e7a3a439a23.png

 

三、组装IP头部

b66e2e6b403e43f5b3f485e93f522f96.png

假设客户端有多个网卡,就会有多个 IP 地址,那 IP 头部的源地址应该选择哪个 IP 呢?

这个时候就需要根据路由表规则,来判断哪一个网卡作为源地址 IP。

在 Linux 操作系统,我们可以使用 route -n 命令查看当前系统的路由表。

7ad60385be404a3285f39926b3ed04d0.png

我们的目标IP地址和每一条目的子网掩码(Genmask)进行 与运算,得到结果如果与该条目的 Destination 相同,代表两者相匹配,即使用该网卡。

如果其他所有条目都无法匹配,就会自动匹配默认网关,它目标地址和子网掩码都是 0.0.0.0,并且后续就把包发给路由器,Gateway 即是路由器的 IP 地址。

 

四、组装MAC头部

770f7617927d49b1bb68e1f8711907ad.png

一般在 TCP/IP 通信里,MAC 包头的协议类型只使用:

  • 0800 : IP 协议
  • 0806 : ARP 协议

发送方和接收方的MAC地址如何确认?

发送方:MAC 地址是在网卡生产时写入到 ROM 里的,读取出来写入到 MAC 头部就可以了。

接收方:需要 ARP 协议帮我们找到路由器的 MAC 地址。

ARP 协议会在以太网中以广播的形式,对以太网所有的设备喊出:“这个 IP 地址是谁的?请把你的 MAC 地址告诉我”。

然后就会有人回答:“这个 IP 地址是我的,我的 MAC 地址是 XXXX”。

如果对方和自己处于同一个子网中,那么通过上面的操作就可以得到对方的 MAC 地址。然后将这个 MAC 地址写入 MAC 头部,MAC 头部就完成了。

(发包时先查询 ARP 缓存,当 ARP 缓存中不存在对方 MAC 地址时,则发送 ARP 广播查询。)

在 Linux 系统中,我们可以使用 arp -a 命令来查看 ARP 缓存的内容。

 

到这里就成功的形成了一个网络包,接下来需要进行网络包传输。

网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此需要将数字信息转换为电信号,才能在网线上传输。

负责执行这一操作的是网卡,要控制网卡还需要靠网卡驱动程序

网卡驱动获取网络包之后,会将其复制到网卡内的缓存区中,接着会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列

db412e8785bb477b9c280c1b47825166.png

  • 起始帧分界符是一个用来表示包起始位置的标记
  • 末尾的 FCS(帧校验序列)用来检查包传输过程是否有损坏

最后网卡会将包转为电信号,通过网线发送出去。

 

五、交换机

电信号到达网线接口,交换机里的模块进行接收,接下来交换机里的模块将电信号转换为数字信号。

然后通过包末尾的 FCS 校验错误,如果没问题则放到缓冲区。这部分操作基本和计算机的网卡相同,但交换机的工作方式和网卡不同。

计算机的网卡本身具有 MAC 地址,并通过核对收到的包的接收方 MAC 地址判断是不是发给自己的,如果不是发给自己的则丢弃;相对地,交换机的端口不核对接收方 MAC 地址,而是直接接收所有的包并存放到缓冲区中。因此,和网卡不同,交换机的端口不具有 MAC 地址

将包存入缓冲区后,接下来需要查询一下这个包的接收方 MAC 地址是否已经在 MAC 地址表中有记录了。

交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口

当 MAC 地址表找不到指定的 MAC 地址会怎么样?

找不到有两种情况:具有该地址的设备还没有向交换机发送过包。或者这个设备一段时间没有工作导致地址被从地址表中删除了。

交换机就会将包转发到除了源端口之外的所有端口上,无论该设备连接在哪个端口上都能收到这个包。

如果接收方 MAC 地址是一个广播地址,那么交换机会将包发送到除源端口之外的所有端口。

以下两个属于广播地址:

  • MAC 地址中的 FF:FF:FF:FF:FF:FF
  • IP 地址中的 255.255.255.255

 

六、路由器

路由器和交换机是有区别的。

路由器是基于 IP 设计的,俗称三层网络设备,各个端口都具有 MAC 地址和 IP 地址;

交换机是基于以太网设计的,俗称二层网络设备,端口不具有 MAC 地址。

首先,电信号到达网线接口部分,路由器中的模块会将电信号转成数字信号,然后通过包末尾的 FCS 进行错误校验。

如果没问题则检查 MAC 头部中的接收方 MAC 地址,看看是不是发给自己的包,如果是就放到接收缓冲区中,否则就丢弃这个包。

MAC 头部的作用就是将包送达路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址。因此,当包到达路由器之后,MAC 头部的任务就完成了,于是 MAC 头部就会被丢弃

接下来,路由器会根据 MAC 头部后方的 IP 头部中的内容进行包的转发操作。转发会查询路由表,同上文的与运算匹配。

7aeac85333ee4e709431863ecb98edf7.png

我们需要根据路由表的网关列判断对方的地址。

  • 如果网关是一个 IP 地址,则这个IP 地址就是我们要转发到的目标地址,还未抵达终点,还需继续需要路由器转发。
  • 如果网关为空,则 IP 头部中的接收方 IP 地址就是要转发到的目标地址,也是就终于找到 IP 包头里的目标地址了,说明已抵达终点

发送后会经过一些交换机和路由器最后到达终点。在此过程中,源 IP 和目标 IP 始终是不会变的,一直变化的是 MAC 地址,因为需要 MAC 地址在以太网内进行两个设备之间的包传输。

 

数据包抵达了服务器后,服务器开始拆快递

9a247d8e7f60460f951b75f9e74146cf.png

然后把客户端需要的页面封装在 HTTP 响应报文里。

HTTP 响应报文也需要 TCP、IP、MAC 头部,然后由服务端发给客户端。

客户端收到的数据包后同样开始拆包,得到 HTTP 响应报文后,交给浏览器去渲染页面,网页就可以正常显示了。

最后,客户端向服务器发起了 TCP 四次挥手,双方的连接断开。

 

总结

1.域名解析获得IP地址。

2.HTTP报文通过依次组装TCP头部,IP头部和MAC头部形成网络包。

3.网卡在网络包开头添加报头和起始帧分界符,在网络包末尾添加 FCS(帧校验序列)。

4.交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口。路由器查询路由表进行转发。(网络包需要经过多个交换机和路由器的转发才能到达目的地)

5.服务器拆包后发送HTTP 响应报文,响应报文组装 TCP、IP、MAC 头部后发给客户端。

6.客户端拆包后渲染页面。

 

 

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

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

相关文章

算法——动态规划

动态规划:有很多重叠子问题,每一个状态一定是由上一个状态推导出来的 贪心:没有状态推导,而是从局部直接选最优的 动规五步曲: 确定dp数组(dp table)以及下标的含义 确定递推公式(容…

分享89个清新唯美PPT,总有一款适合您

分享89个清新唯美PPT,总有一款适合您 89个清新唯美PPT下载链接:https://pan.baidu.com/s/14DAA9jvVmlQZ_FJ4DNy9Rw?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整…

Java Class文件结构细节最全解读

官方文档位置:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html Class 类的本质 任何一个Class文件都对应着唯一一个类或接口的定义信息,但反过来说,Class文件实际上它并不一定以磁盘文件的形式存在。Class 文件是一组以8位字…

解决电脑蓝屏问题:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED,回到系统还原点

解决电脑蓝屏问题:SYSTEM_THREAD_EXCEPTION_NOT_HANDLED,回到系统还原点 1,蓝屏显示问题1.1,蓝屏1,清楚显示1.2,蓝屏2,模糊显示 2,排除故障问题3,解决蓝屏的有效方法 1&a…

Mac电脑音乐标签管理 Yate 激活最新 for Mac

Yate是一款非常实用的音频编辑和标记软件,它提供了丰富的功能和工具来帮助用户编辑、整理和管理音频文件。无论是在音乐收藏管理、DJ和音乐制作方面,还是在其他需要处理大量音频文件的领域,Yate都是非常值得推荐的工具。 Yate for Mac功能特…

(2)(2.2) Lightware SF45/B(350度)

文章目录 前言 1 安装SF45/B 2 连接自动驾驶仪 3 通过地面站进行配置 4 参数说明 前言 Lightware SF45/B 激光雷达(Lightware SF45/B lidar)是一种小型扫描激光雷达(重约 50g),扫描度可达 350 度,扫描范围 50m。 1 安装SF45…

安全风险综合监测预警平台建设指南(2023 版)》正式发布,汉威科技方案领跑行业

11月24日,国务院安委会办公室印发《城市安全风险综合监测预警平台建设指南(2023版)》(以下简称“指南”),引发行业密切关注。 据悉,“指南”在总结前期18 个试点城市(区)…

一文回顾 Polkadot 跨链技术演进,了解 Polkadot 2.0 的未来

Polkadot 的起源、完善和上线过程经历了怎样的技术迭新与路线升级?深入把握 Polkadot 技术模型与生态合约才能让我们更好地深耕 Polkadot 生态。 11 月 25 日晚上,Substrate Saturday 第 19 期活动如期举行,Parity 工程师 Suvi Dong、Kaicha…

MJPG-streamer方案实现物联网视频监控

目录 前言 一、JPEG,MJPG格式简介 JPEG MJPG MJPG的优点 MJPG的缺点 二、软硬件准备 三、编译MJPG-streamer 四、运行MJPG-streamer 五、其它常见用法 六、MJPG-streamer 程序框架 七、源码下载 前言 最近想做一个安防相关的项目,所以跟着韦…

RubyMine 2023 年下载、安装、使用教程,详细图解

大家好,今天为大家带来的是RubyMine 2023 年下载、安装、使用教程,详细图解。 文章目录 1 RubyMine 简介2 RubyMine 下载、安装教程RubyMine 下载RubyMine 安装 3 RubyMine 汉化4. 常用快捷键一级必会二级进阶 1 RubyMine 简介 RubyMine 是一个为 Ruby …

什么是企业资金

我从两个方面来诠释企业资金管理: 1、企业资金管理是什么? 2、企业资金管理包括什么? 一、企业资金管理是什么? 众所周知,每个企业都有对应的财务部门,专门负责管理企业的“钱”,和企业的“帐…

决策树(Classification and Regression Tree)

学了数据结构的树后,一直没发现树有哪些应用。学而时习(实践)之,不亦说乎?故特地上网查了查树的应用,在下阐释: 1.文件系统:文件和目录的组织通常以树的形式表示,允许高效…

前端项目中获取浏览器版本的方法

在我们的前端项目中,navigator.userAgent属性含有当前浏览器相关信息(比如版本号)。 所以当我们想要获取用户当前访问的浏览器的版本时直接去解析navigator.userAgent字段就中。 废话不多说,下面看封装的获取浏览器版本的函数&am…

亚马逊云与生成式 AI 的融合——生成式AI的应用领域

文章目录 前言亚马逊云科技增强客户体验聊天机器人和虚拟助手亚马逊云科技 鸿翼:提供精准检索和问答,显著提升全球化售后服务体验AI 赋能的联络中心智能导购&个性化推荐智慧数字人 提升员工生成力和创造力对话式搜索亚马逊云科技 西门子&#xff1…

论文精读 Co-DETR(Co-DINO、Co-Deformable-DETR)

DETRs with Collaborative Hybrid Assignments Training 基于协作混合分配训练的DETRs 论文链接:2211.12860.pdf (arxiv.org) 源码链接:https://github.com/Sense-X/Co-DETR 总结: Co-DETR基于DAB-DETR、Deformable-DETR和DINO网络进行了实…

观测云产品更新 | 监控、数据脱敏、快照分享等优化

观测云更新 监控 1、监控器 - 事件内容插入链接的联动优化:根据检测指标自动生成跳转链接,支持在插入链接后调整过滤条件和时间范围,您也可以自定义跳转链接。其中,若需要插入跳转到仪表板的链接,基于以上逻辑&#…

UniGUI官方Demo打开慢的问题

C:\Program Files (x86)\FMSoft\Framework\uniGUI\Demos\Desktop\AllFeaturesDemo\mdemo.dproj 运行时浏览器加载慢由于Demo中访问了Google服务器,导致了浏览器加载慢,将Demo中Google服务器地址删除即可https://maps.googleapis.com/maps/api/js?sensor…

【渗透】记录阿里云CentOS被渗透攻击

文章目录 发现排查安装Nethogs查询情况 最终方案 发现 流量异常,出现大流量,网络贷带宽占满情况 排查 安装Nethogs 1.1 Nethogs介绍 NetHogs是一个开源的命令行工具(类似于Linux的top命令),用来按进程或程序实时统…

智能优化算法应用:基于乌鸦算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于乌鸦算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于乌鸦算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.乌鸦算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

ruoyi+Hadoop+hbase实现大数据存储查询

前言 有个现实的需求,数据量可能在100亿条左右。现有的数据库是SQL Server,随着采集的数据不断的填充,查询的效率越来越慢(现有的SQL Server查询已经需要数十秒钟的时间),看看有没有优化的方案。 考虑过S…