网络原理:数据链路层、NAT与网页加载

一、数据链路层:网络通信的"本地邮差"

1.1 数据链路层的基本职责

想象一下,数据链路层就像小区里的本地邮递员,负责在**直接相连的设备之间**传递数据包。它的工作范围很有限,但极其重要。

主要职责包括:

  • 帧封装:将网络层传下来的IP数据包加上"信封"(帧头帧尾)

  • 物理寻址:使用MAC地址识别同一局域网内的设备

  • 差错检测:确保数据在传输过程中没有损坏

  • 流量控制:调节数据传输速度,避免接收方被淹没

1.2 以太网帧结构:数据的"标准信封"

| 目标MAC地址 (6字节) | 源MAC地址 (6字节) | 类型 (2字节) | 数据 (46-1500字节) | 帧校验序列 (4字节) |

举个例子:

当你的电脑( MAC: 11:22:33:44:55:66 )想给同一局域网中的打印机( MAC: AA:BB:CC:DD:EE:FF )发送打印任务时,数据链路层会创建一个帧,目标地址填打印机的MAC,源地址填自己的MAC,然后把数据装进去。

1.3 交换机的工作原理:智能的"邮件分拣员"

交换机是数据链路层的核心设备,它有一个MAC地址表,记录着每个端口连接的设备MAC地址。

工作流程:

  1. 学习:收到设备A的帧时,记录"A的MAC地址 → 端口1"

  2. 转发:当要给A发送数据时,直接发送到端口1

  3. 广播:如果不知道目标在哪里,向所有端口广播(除了来源端口)


二、NAT机制:家庭的"共享电话号码"

2.1 为什么需要NAT?

IPv4地址只有约43亿个,根本不够全球设备分配。NAT(网络地址转换)让多个设备可以共享一个公网IP,就像一家人共享一个电话号码对外联系。

典型场景:

  • 家庭路由器:给所有家庭设备分配私有IP(如192.168.1.x)

  • 对外通信时,全部使用同一个公网IP

#2.2 NAT工作流程详解

假设家庭网络环境:

  • 路由器公网IP:`203.0.113.1`

  • 你的电脑私有IP:`192.168.1.100`

  • 目标网站IP:`93.184.216.34`

当你访问网站时的NAT过程:

  1. 出发:你的电脑发送请求包

```

源IP: 192.168.1.100:54321

目标IP: 93.184.216.34:80

```

  1. NAT转换:路由器修改源地址

```

源IP: 203.0.113.1:12345 (路由器记住这个映射)

目标IP: 93.184.216.34:80

```

  1. 网站响应:网站发回响应

```

源IP: 93.184.216.34:80

目标IP: 203.0.113.1:12345

```

  1. 反向转换:路由器查表还原地址

```

源IP: 93.184.216.34:80

目标IP: 192.168.1.100:54321

```

2.3 NAT转换表:关键的"通讯录"

路由器维护的NAT表示例:

| 内部IP:端口 | 外部端口 | 目标服务器 |

|-------------|----------|------------|

| 192.168.1.100:54321 | 12345 | 93.184.216.34:80 |

| 192.168.1.101:6112 | 12346 | 203.0.113.5:27015 |

这样,即使多台设备同时上网,路由器也能准确地把响应数据"送回家"。


三、从输入URL到页面展示:互联网的"奇幻之旅"

3.1 第一阶段:URL解析和DNS查询

步骤分解:

  1. 输入URL:你在浏览器输入 `https://www.example.com`

  2. 解析URL:浏览器分析出

  1. DNS查询 - 四步曲:

```

浏览器缓存 → 系统缓存 → 路由器缓存 → DNS服务器

```

详细查询过程:

  • 浏览器检查自己的DNS缓存

  • 查询操作系统缓存(如hosts文件)

  • 向配置的DNS服务器(如8.8.8.8)发送查询请求

  • 获得IP地址:`93.184.216.34`

3.2 第二阶段:建立连接和发送请求

  1. TCP三次握手:建立可靠连接

```

你: SYN (我想连接)

服务器: SYN-ACK (我准备好了)

你: ACK (好的,开始通信)

```

  1. TLS握手(HTTPS):建立安全通道
  • 协商加密算法

  • 验证证书真实性

  • 生成会话密钥

  1. 发送HTTP请求:

```http

GET / HTTP/1.1

Host: www.example.com

User-Agent: Mozilla/5.0...

Accept: text/html,application/xhtml+xml

```

3.3 第三阶段:处理请求和获取响应

  1. 服务器处理:
  • Web服务器(如Nginx)接收请求

  • 可能转发给应用服务器(如Tomcat)

  • 执行后端代码,查询数据库

  • 生成HTML响应

  1. 服务器响应:

```http

HTTP/1.1 200 OK

Content-Type: text/html; charset=utf-8

Content-Length: 1256

<!DOCTYPE html>

<html>

<head><title>Example Page</title></head>

<body>...</body>

</html>

相关推荐
qyhua11 小时前
如何成功申请 Let’s Encrypt 证书:解决 HTTP-01 验证 403 错误的完整指南
网络·网络协议·http
此生只爱蛋11 小时前
【Linux】HTTP不打烊
网络·网络协议·http
草莓熊Lotso12 小时前
C++ STL set 系列完全指南:从底层原理、核心接口到实战场景
开发语言·c++·人工智能·经验分享·网络协议·算法·dubbo
zz-zjx13 小时前
LVS NAT/DR 模式 负载均衡Keepalive 高可用+DR
网络协议·tcp/ip·lvs
Kapibalapikapi20 小时前
家用无线网络设置方案
网络
谢尔登21 小时前
通用会话控制方案
前端·网络协议·tcp/ip·react.js·gitlab
老蒋新思维21 小时前
借陈修超之智,搭建 AI 与 IP 的创新增长桥梁|创客匠人
网络·人工智能·网络协议·tcp/ip·ip·知识付费·创客匠人
遇见火星21 小时前
Linux 网络性能测试实战:用 iperf3 精准测出真实带宽与丢包率
linux·网络·php·iperf3
无心水1 天前
【分布式利器:RocketMQ】2、RocketMQ消息重复?3种幂等方案,彻底解决重复消费(附代码实操)
网络·数据库·rocketmq·java面试·消息幂等·重复消费·分布式利器
重启编程之路1 天前
python 基础学习socket -TCP编程
网络·python·学习·tcp/ip