结合五层网络结构讲一下用户在浏览器输入一个网址并按下回车后到底发生了什么?

文章目录

  • 实际应用
    • 第一步:用户在浏览器输入 `www.baidu.com` 并按下回车
      • 1. 浏览器触发域名解析(DNS查询)
    • 第二步:DNS请求的逐层封装与传输
      • 1. 应用层(DNS协议)
      • 2. 传输层(UDP协议)
      • 3. 网络层(IP协议)
      • 4. 数据链路层(以太网/Wi-Fi协议)
      • 5. 物理层(比特流传输)
    • 第三步:数据包如何找到DNS服务器?
      • 1. 局域网内传输(数据链路层)
      • 2. 跨网络传输(网络层)
      • 3. 最终抵达DNS服务器
    • 第四步:浏览器发起HTTP请求
      • 1. 建立TCP连接(传输层)
      • 2. 封装HTTP请求(应用层)
      • 3. 逐层封装
    • 第五步:数据包穿越互联网到达百度服务器
      • 1. 路由器的逐跳转发(网络层)
      • 2. 服务器接收请求
    • 第六步:响应数据返回客户端
      • 1. 反向封装与传输
      • 2. 浏览器渲染页面
    • 关键协作点总结
    • 补充技术细节

上一篇文章对计算机网络的五层结构做了简单的介绍,需要的可以看这里

计算机网络的五层结构(物理层、数据链路层、网络层、传输层、应用层)到底是什么?

实际应用

看到这里的时候我相信大家会有和我一样的疑惑,这五层结构到底是干嘛用的,到底有什么用,我平时有用到这东西的机会吗?

那么下面我给大家准备了一个实际的例子来让大家对这五层机构可以更好的了解。
我下面的例子是用访问浏览器中的某一个网址来举例,在我访问一个网址,比如www.baidu.com的时候,让我们看看这五层结构都是怎么发挥作用的?

第一步:用户在浏览器输入 www.baidu.com 并按下回车

1. 浏览器触发域名解析(DNS查询)

  • 为什么需要DNS?
    计算机无法直接通过域名 www.baidu.com 通信,必须将其转换为 IP 地址(如 14.215.177.38)。这一过程称为 DNS解析

  • 具体流程

    • Step 1:检查本地缓存
      浏览器缓存 → 系统缓存(如Windows的hosts文件) → 路由器缓存 → 若命中,直接使用缓存的IP地址。
    • Step 2:未命中缓存 → 发起递归查询
      若本地无缓存,浏览器调用操作系统的 DNS解析器(应用层组件),生成一个 DNS请求报文,内容为:
      查询域名:www.baidu.com
      查询类型:A记录(IPv4地址)
      

第二步:DNS请求的逐层封装与传输

1. 应用层(DNS协议)

  • DNS协议使用 UDP(传输层协议),目标端口为 53,源端口随机(如 50001)。
  • 封装后的 DNS报文 交给传输层处理。

2. 传输层(UDP协议)

  • 添加 UDP头部:包含源端口(50001)、目标端口(53)、长度和校验和。
  • 此时数据变为:
    [UDP头部 | DNS请求报文]
    

3. 网络层(IP协议)

  • 添加 IP头部:包含源IP(你的设备私有IP,如 192.168.1.100)、目标IP(默认DNS服务器IP,如 8.8.8.8)。
  • 此时数据变为:
    [IP头部 | UDP头部 | DNS请求报文]
    

4. 数据链路层(以太网/Wi-Fi协议)

  • 添加 帧头部:包含源MAC地址(你的网卡MAC,如 AA:BB:CC:DD:EE:FF)和目标MAC地址(默认网关的MAC地址,如路由器的 11:22:33:44:55:66)。
  • 此时数据变为:
    [帧头 | IP头部 | UDP头部 | DNS请求报文 | 帧尾]
    

5. 物理层(比特流传输)

  • 将帧转换为 电信号(网线)无线电波(Wi-Fi),通过物理媒介发送到路由器(默认网关)。

第三步:数据包如何找到DNS服务器?

1. 局域网内传输(数据链路层)

  • 目标MAC地址是路由器:你的设备通过ARP协议(地址解析协议)提前获取了默认网关(路由器)的MAC地址。
  • 交换机的作用:如果设备通过网线连接到交换机,交换机会根据MAC地址表将帧转发到路由器对应的端口。

2. 跨网络传输(网络层)

  • 路由器收到数据包后,剥离帧头部,检查IP头部:
    • 目标IP是 8.8.8.8(DNS服务器),不属于本地局域网。
    • 路由器通过 NAT(网络地址转换) 将源IP(192.168.1.100)替换为路由器的公网IP(如 120.230.10.20)。
    • 路由器根据 路由表 选择下一跳(如ISP的核心路由器),重新封装帧头部(目标MAC变为下一跳设备的MAC),转发数据包。

3. 最终抵达DNS服务器

  • 数据包经过多个路由器的接力转发(每经过一个路由器,源/目标MAC地址会变化,但IP地址不变),最终到达DNS服务器 8.8.8.8
  • DNS服务器解析请求,查询 www.baidu.com 的IP地址,生成 DNS响应报文(包含 14.215.177.38),按原路返回给你的设备。

第四步:浏览器发起HTTP请求

1. 建立TCP连接(传输层)

  • 获取到百度服务器的IP地址后,浏览器通过 TCP协议 与目标IP(14.215.177.38)的 80 端口(HTTP)或 443 端口(HTTPS)建立连接。
  • TCP三次握手
    • 客户端发送 SYN 报文(序列号x)。
    • 服务器回复 SYN-ACK 报文(序列号y,确认号x+1)。
    • 客户端发送 ACK 报文(确认号y+1)。
  • 此时TCP连接建立完成,双方确认通信能力。

2. 封装HTTP请求(应用层)

  • 浏览器生成 HTTP请求报文,例如:
    GET / HTTP/1.1
    Host: www.baidu.com
    User-Agent: Chrome/120.0
    
  • 如果是HTTPS,还需进行 TLS握手(交换密钥、验证证书等)。

3. 逐层封装

  • 传输层:将HTTP报文拆分为多个 TCP段,添加TCP头部(源端口、目标端口、序列号、确认号)。
  • 网络层:添加IP头部(源IP为公网IP 120.230.10.20,目标IP 14.215.177.38)。
  • 数据链路层:添加帧头部(源MAC为路由器出口MAC,目标MAC为下一跳设备MAC)。
  • 物理层:转换为比特流传输。

第五步:数据包穿越互联网到达百度服务器

1. 路由器的逐跳转发(网络层)

  • 每个路由器根据目标IP 14.215.177.38 查询路由表,选择最优路径(如通过BGP协议判断)。
  • 数据包可能经过:
    • 家庭路由器 → ISP骨干网路由器 → 百度数据中心边缘路由器 → 百度内部核心路由器。

2. 服务器接收请求

  • 百度服务器接收到数据包后,反向解封装:
    • 物理层 → 数据链路层(剥离帧头) → 网络层(检查IP地址) → 传输层(重组TCP段) → 应用层(处理HTTP请求)。
  • 服务器生成 HTTP响应报文(状态码200,包含HTML、CSS、JS等资源)。

第六步:响应数据返回客户端

1. 反向封装与传输

  • 服务器将HTTP响应按相同流程封装(IP头部源/目标地址调换,TCP端口调换),通过互联网返回。
  • 客户端路由器接收后,通过NAT将目标IP从公网IP 120.230.10.20 转换为内网IP 192.168.1.100,再转发给你的设备。

2. 浏览器渲染页面

  • 浏览器接收HTTP响应后,解析HTML/CSS/JS,加载图片等资源(可能触发多次HTTP请求)。
  • 最终渲染出完整的百度首页。

关键协作点总结

  1. DNS解析
    • 应用层协议(DNS) → 传输层(UDP) → 网络层(IP路由) → 数据链路层(MAC寻址) → 物理层传输。
  2. HTTP请求
    • 应用层(HTTP) → 传输层(TCP连接) → 网络层(IP跨网) → 数据链路层(帧转发) → 物理层传输。
  3. 数据封装与解封装
    • 每经过一层设备(如路由器、交换机),数据包的外层封装会被修改(如MAC地址、IP NAT),但核心内容(如HTTP报文)保持不变。

补充技术细节

  • NAT(网络地址转换)
    家庭路由器将内网设备的私有IP(如 192.168.1.100)转换为公网IP(如 120.230.10.20),解决IPv4地址不足问题。
  • MTU与分片
    若数据包超过链路层最大传输单元(如1500字节),网络层会将其分片,目标端重组。
  • ARP协议
    设备通过ARP广播查询IP地址对应的MAC地址(如“谁是 192.168.1.1?请告诉我你的MAC!”)。

通过以上流程,你可以清晰看到:五层模型并非独立运作,而是像流水线一样协同工作,最终实现“输入网址 → 看到网页”的复杂过程。

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

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

相关文章

深入理解N皇后问题:从DFS到对角线优化

N皇后问题是一个经典的算法问题,要求在NN的棋盘上放置N个皇后,使得它们互不攻击。本文将全面解析该问题的解法,特别聚焦于DFS算法和对角线优化的数学原理。 问题描述 在NN的国际象棋棋盘上放置N个皇后,要求: 任意两个…

Java面试场景篇:分布式锁的实现与组件详解

互联网大厂Java求职者面试:分布式锁的实现与组件 在一场紧张而又充满挑战的面试中,Java架构师马架构正面对着一位经验丰富的面试官。以下是他们之间关于分布式锁实现方式及相关问题的对话。 第一轮提问 面试官:请介绍一下分布式锁的概念。…

关于使用 读光-文字检测-DBNet行检测模型-中英-通用领域,版本问题

关于使用 读光-文字检测-DBNet行检测模型-中英-通用领域,版本问题 pip install modelscopeSuccessfully installed certifi-2025.4.26 charset-normalizer-3.4.1 colorama-0.4.6 idna-3.10 modelscope-1.25.0 requests-2.32.3 tqdm-4.67.1 urllib3-2.4.0 pip insta…

刷刷刷刷刷RCE

云曦历年考核 25年春开学考 RCCCE 开启题目进行代码审计 GET传参传入一个参数cmd&#xff0c;但对参数内容给了黑名单进行过滤 $blacklist /bash|nc|wget|ping|ls|cat|more|less|phpinfo|base64|echo|php|python|mv|cp|la|\-|\*|"|\>|\<|\%|\$/i; ls、cat等都…

2024江西ICPC部分题解

题目列表 A - Maliang Learning PaintingC - LiarG - Multiples of 5H - ConvolutionJ - Magic MahjongK - Magic Tree A - Maliang Learning Painting 题目来源&#xff1a;A - Maliang Learning Painting 思路分析 这是个签到题&#xff0c;直接输出abc即可 #include<b…

Pytorch图像数据转为Tensor张量

PyTorch的所有模型&#xff08;nn.Module&#xff09;都只接受Tensor格式的输入&#xff0c;所以我们在使用图像数据集时&#xff0c;必须将图像转换为Tensor格式。PyTorch提供了torchvision.transforms模块来处理图像数据集。torchvision.transforms模块提供了一些常用的图像预…

为什么vllm能够加快大模型推理速度?

vLLM加速大模型推理的核心技术原理可分解为以下关键创新点&#xff1a; 一、‌内存管理革命&#xff1a;PagedAttention‌ KV Cache分页机制‌ 将传统连续存储的KV Cache拆分为非连续内存页&#xff0c;类似操作系统内存分页管理&#xff0c;消除内存碎片并实现动态分配。13B…

第十一章 多态

多态是面向对象开发过程中一个非常重要的概念。 11.1 多态概述 11.1.1 什么是多态 多态&#xff08;polymorphism&#xff09;&#xff0c;从字面理解是“多种形态&#xff0c;多种形式”&#xff0c;是一种将不同的特殊行为泛化为当个特殊记号的机制。 多态从实现的角度可划…

RNN——循环神经网络

一.基本结构 1.目标&#xff1a;处理序列数据&#xff08;时间序列&#xff0c;文本&#xff0c;语音等&#xff09;&#xff0c;捕捉时间维度上的依赖关系 核心机制&#xff1a;通过隐藏状态&#xff08;hidden State&#xff09;传递历史信息&#xff0c;每个时间步的输入包…

性能提升手段--池化技术

看到hadoop代码里有ByteBufferPool,使用池子来避免频繁创建、销毁ByteBuffer,减轻GC压力,提高性能。 顺便总结一下池化技术 一、什么是池化技术?​​ ​​池化(Pooling)​​ 是一种资源管理策略,通过​​预先创建并复用资源​​(如数据库连接、线程、内存对象等)来提…

数据安全和合规性市场分析

一、什么是数据安全和合规性 在数据安全和合规性方面&#xff0c;存在着一系列重要的法律、法规和行业标准&#xff0c;这些规定了组织如何收集、存储、处理和保护个人数据及其他敏感信息。企业之所以要遵守这些规定&#xff0c;是出于多方面的考量&#xff0c;既有法律责任&a…

【每日八股】复习计算机网络 Day4:TCP 协议的其他相关问题

文章目录 昨日内容复习已经建立了 TCP 连接&#xff0c;客户端突然出现故障怎么办&#xff1f;什么时候用长连接&#xff1f;短连接&#xff1f;TCP 的半连接队列与全连接队列&#xff1f;什么是 SYN 攻击&#xff1f;如何避免&#xff1f;TIME_WAIT 的作用&#xff1f;过多如何…

React:<></>的存在是为了什么

1. <></> 是什么&#xff1f; <></> 是 React 的Fragment&#xff08;片段&#xff09;语法糖&#xff0c;等价于 <React.Fragment></React.Fragment>。 2. 它的作用 主要作用&#xff1a; 允许你在组件里返回多个元素&#xff0c;而不需…

cron定时任务

cron定时任务 一、Cron表达式的定义 基础结构 Cron表达式是由空格分隔的6或7个字段组成的字符串&#xff0c;格式为&#xff1a; 秒 分 时 日 月 星期 [年]其中&#xff0c;年通常可以被省略 字段说明&#xff1a; 秒&#xff08;0-59&#xff09; 秒字段表示每分钟的哪一…

分布式之易混淆概念

昨天写UE写的破防了&#xff0c;忘了写文章&#xff0c;今天补一下分布式的一些概念。&#x1f61a; 在软件架构领域&#xff0c;微服务、领域驱动设计&#xff08;DDD&#xff09;和分布式系统是三个高频且容易被混淆的概念。许多开发者误以为它们是“同一件事的不同说法”&a…

量子跃迁:Vue组件安全工程的基因重组与生态免疫(完全体终局篇)

开篇数字免疫系统的范式革命 在2025年某国际金融峰会期间&#xff0c;黑客组织利用量子计算技术对全球37个交易系统发起协同攻击。传统安全组件在2.7秒内集体失效&#xff0c;造成每秒超18亿美元的交易漏洞。这场数字"切尔诺贝利"事件促使我们重新定义前端安全——组…

Operating System 实验七 Linux文件系统实验

实验目标: 使用dd命令创建磁盘镜像文件ext2.img并格式化为ext2文件系统,然后通过mount命令挂载到Linux主机文件系统。查看ext2文件系统的超级块的信息,以及数据块的数量、数据块的大小、inode个数、空闲数据块的数量等信息 在文件系统中创建文件xxxxx.txt(其中xxxxx为你的学…

模型识别能力锤炼及清单

大脑将注意力分配给需要消耗脑力的活动&#xff0c;通过学习技能&#xff0c;大脑也能更轻松的工作。这个时候&#xff0c;大脑负责管理注意力控制和努力控制的区域活动会大幅减少。沉浸式学习是学习一门新的语言的最佳方式&#xff0c;也是深入洞察错综复杂商业环境的绝佳途径…

Android 混合开发实战:统一 View 与 Compose 的浅色/深色主题方案

整个应用&#xff08;包括 View 和 Compose 部分&#xff09;的浅色/深色模式保持一致。以下是完整的解决方案&#xff1a; 全局配置方案 1. 基础主题设置 在 res/values/themes.xml 和 res/values-night/themes.xml 中定义统一的主题&#xff1a; <!-- values/themes.x…

QT开发技术【QT实现桌面右下角消息】

一、效果 ![ 二、弹窗主体部分 noticewidget /* ** File name: NoticeWidget.h ** Author: ** Date: 2025-04-25 ** Brief: 通知栏控件 ** Copyright (C) 1392019713qq.com All rights reserved. */#include "../Include/NoticeWidget.h"…