URL 解析与网络通信流程
URL 结构解析
本地开发场景示例:
http://localhost:8080/project/xxx.html
- 协议 :
http - 主机名 :
localhost(解析为127.0.0.1) - 端口 :
8080(Tomcat 默认端口) - 路径 :
/project/xxx.html
公网访问场景示例:
https://www.baidu.com
- 协议 :
https(加密传输) - 域名 :
www.baidu.com(需 DNS 解析为 IP) - 默认端口 :
443(HTTPS)
本地地址类型对比
| 类型 | 作用范围 | 是否跨设备访问 |
|---|---|---|
localhost |
仅本机 | ❌ |
127.0.0.1 |
本机回环 | ❌ |
192.168.x.x |
局域网 | ✔️ |
网络通信核心地址
IP 地址 vs MAC 地址
| 特性 | MAC 地址 | IP 地址 |
|---|---|---|
| 层级 | 数据链路层(L2) | 网络层(L3) |
| 作用范围 | 同一局域网 | 跨网络全局 |
| 可变性 | 硬件固定(除非更换网卡) | 随网络环境变化(如切换WiFi) |
关键区别:
- IP:标识逻辑终点(类似收件人地址),全程不变。
- MAC:标识下一跳设备(类似快递中转站),每经过一个网络设备更新一次。
数据传输路径示例
以设备 A → 设备 A1 跨网段通信为例:
-
局域网内转发
- 设备 A 发现目标 IP 不在本地网段,将数据帧发送至默认网关(路由器 L1)。
- 帧头:目标 MAC = 路由器 L1 的 MAC。
-
路由器转发
- 路由器 L1 查询路由表,确定下一跳为三层交换机 L2。
- 更新帧头:目标 MAC = L2 的 MAC,源 MAC = L1 的 MAC。
-
三层交换机处理
- L2 根据目标 IP 找到 A1 所在网络的路由器,转发数据。
- 更新帧头:目标 MAC = A1 的路由器 MAC。
-
最终交付
- 目标路由器将数据帧直接发送至设备 A1(目标 MAC = A1 的 MAC)。
DNS 解析流程
- 浏览器缓存查询
- 检查是否缓存过
www.baidu.com的 IP。
- 检查是否缓存过
- 本地 hosts 文件查询
- 若未缓存,读取系统 hosts 文件。
- 本地 DNS 服务器查询
- 向 ISP 提供的 DNS 服务器发起请求。
- 递归查询
- 本地 DNS 依次查询根域名服务器 → 顶级域名服务器 → 权威域名服务器。
- 返回 IP
- 最终将解析到的 IP(如
180.101.50.242)返回给浏览器。
- 最终将解析到的 IP(如
TCP 连接管理
三次握手(建立连接)
- 客户端 → 服务器
- 发送
SYN=1, seq=x(同步序列号)。
- 发送
- 服务器 → 客户端
- 回复
SYN=1, ACK=1, seq=y, ack=x+1。
- 回复
- 客户端 → 服务器
- 确认
ACK=1, ack=y+1。
- 确认
四次挥手(关闭连接)
- 主动方 → 被动方
- 发送
FIN=1, seq=u。
- 发送
- 被动方 → 主动方
- 回复
ACK=1, ack=u+1(半关闭状态)。
- 回复
- 被动方 → 主动方
- 发送
FIN=1, seq=v。
- 发送
- 主动方 → 被动方
- 确认
ACK=1, ack=v+1。
- 确认
完整通信链路示例(访问百度)
- URL 解析
- 提取协议、域名、端口。
- DNS 查询
- 将
www.baidu.com解析为 IP。
- 将
- TCP 连接
- 通过三次握手建立可靠连接。
- 数据传输
- HTTP 请求封装为 IP 数据包,经路由器、交换机逐跳转发至服务器。
- 响应返回
- 服务器生成响应数据,原路返回至浏览器渲染页面。
通信模式对比
| 模式 | 特点 | 典型场景 |
|---|---|---|
| 客户端-服务器 | 中心化控制,安全性高 | Web 服务、即时通讯 |
| P2P | 直接传输,速度快但需 NAT 穿透 | 文件共享、视频通话 |