数据包在网络中是怎么一步步传输的?

一、从输入网址到页面加载,中间发生了什么?

你在浏览器输入一个网址,按回车,页面加载完成。

这个过程涉及了哪些环节?

本文从数据包的角度,完整拆解一次网络请求的全过程------从发送端的数据封装开始,经过中间设备的转发,到接收端的解封装结束。

二、数据在发送端:自上而下的封装过程

当你在浏览器输入某个网址并按下回车,数据从应用层开始,逐层向下传递,每一层添加对应的控制信息。

2.1 应用层

浏览器构造一个HTTP请求报文,包含请求行、请求头和请求体。例如:

text

复制代码
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Chrome/...

这段文本就是应用层的数据。HTTP协议负责定义客户端与服务器之间通信的格式。

应用层将这段数据交给传输层处理。此时的数据单位称为数据(Data)。

2.2 传输层(TCP/UDP)

传输层收到应用层的数据后,根据应用层的需求选择TCP或UDP协议。

这里以TCP为例。传输层将数据分割成适当大小的数据段,并封装TCP头部。TCP头部包含以下关键字段:

字段 说明
源端口(Source Port) 浏览器随机分配的端口号
目的端口(Destination Port) 80(HTTP)或443(HTTPS)
序列号(Sequence Number) 数据段的编号,用于接收端重组
确认号(Acknowledgment Number) 确认已收到的数据
标志位(Flags) SYN、ACK、FIN等控制标志

封装完成后,数据单元称为数据段(Segment),交给网络层处理。

2.3 网络层(IP)

网络层收到数据段后,进行以下操作:

  1. 在数据段前面封装IP头部

  2. 查询路由表,决定从哪个网卡发出

IP头部包含以下关键字段:

字段 说明
源IP地址(Source IP) 发送设备的IP地址
目的IP地址(Destination IP) 接收设备的IP地址
TTL(Time to Live) 数据包的生存时间(跳数限制)
协议号(Protocol) 标识上层协议(6=TCP,17=UDP)

封装完成后,数据单元称为数据包(Packet),交给数据链路层处理。

2.4 数据链路层(以太网)

数据链路层收到数据包后,进行以下操作:

  1. 在IP包前面封装MAC头部

  2. 在IP包后面添加FCS(帧校验序列)尾部

MAC头部包含以下关键字段:

字段 说明
源MAC地址 发送网卡的MAC地址
目的MAC地址 下一跳设备的MAC地址(网关或目标设备)
类型(Type) 标识上层协议(0x0800=IPv4)

FCS尾部包含CRC校验码,用于接收端检测数据是否在传输过程中出错。

封装完成后,数据单元称为数据帧(Frame),交给物理层处理。

2.5 物理层

物理层将数据帧转换为比特流(0和1的序列),通过物理介质(网线、光纤、WiFi)发送出去。

三、数据在传输路径上的转发过程

数据从发送端发出后,经过多个网络设备的处理,最终到达接收端。

3.1 交换机:二层转发

数据到达交换机时,交换机工作在数据链路层,只查看MAC头部:

  1. 检查目的MAC地址

  2. 查找MAC地址表,确定对应的端口

  3. 从该端口转发数据帧

如果MAC地址表中没有对应的记录,交换机将数据帧从除接收端口外的所有端口广播出去------称为"洪泛"(Flooding)。目标设备收到后回应,交换机据此学习并记录新的MAC地址映射。

交换机的核心功能:在同一网络内,根据MAC地址转发数据帧。

交换机不检查IP头部,不关心数据内容。

3.2 路由器:三层转发

如果数据的目的IP不在当前子网内,数据会被发送到网关(路由器)。路由器工作在网络层:

  1. 剥离MAC头部,查看IP头部

  2. 检查目的IP地址

  3. 查询路由表,确定下一跳地址

  4. 重新封装MAC头部(源MAC变为路由器出口的MAC,目的MAC变为下一跳设备的MAC)

  5. 从对应端口转发数据包

路由器的核心功能:在不同网络之间,根据IP地址转发数据包。

每经过一个路由器,MAC地址会变化,但IP地址保持不变。TTL值减1。

四、数据在接收端:自下而上的解封装过程

数据到达接收端服务器后,过程完全反过来。

4.1 物理层

物理层收到比特流,还原为数据帧,交给数据链路层。

4.2 数据链路层

数据链路层执行以下操作:

  1. 检查FCS校验码,确认数据在传输过程中没有出错

  2. 如果校验通过,剥离MAC头部和FCS尾部

  3. 查看MAC头部中的"类型"字段(0x0800=IPv4),确定上层协议

  4. 将数据包交给网络层

4.3 网络层

网络层执行以下操作:

  1. 检查IP头部,确认目的IP地址是否为本机

  2. 剥离IP头部

  3. 查看IP头部中的"协议"字段(6=TCP),确定上层协议

  4. 将数据段交给传输层

4.4 传输层

传输层执行以下操作:

  1. 检查TCP头部,确认目的端口号

  2. 检查序列号是否连续,确认没有丢包

  3. 剥离TCP头部

  4. 将数据交给应用层

4.5 应用层

应用层收到原始数据,根据协议(HTTP)解析请求,生成响应(HTTP响应报文),通过同样的路径返回给客户端。

五、一个完整的传输路径图解

text

复制代码
发送端                                        接收端
┌─────────────┐                             ┌─────────────┐
│  应用层     │                             │  应用层     │
│  HTTP请求   │                             │  HTTP请求   │
└──────┬──────┘                             └──────▲──────┘
       │ 添加TCP头部                            │ 剥离TCP头部
┌──────▼──────┐                             ┌──────┴──────┐
│  传输层     │                             │  传输层     │
│  TCP头部    │                             │  TCP头部    │
│  + 数据     │                             │  + 数据     │
└──────┬──────┘                             └──────▲──────┘
       │ 添加IP头部                             │ 剥离IP头部
┌──────▼──────┐                             ┌──────┴──────┐
│  网络层     │                             │  网络层     │
│  IP头部     │                             │  IP头部     │
│  + TCP头部  │                             │  + TCP头部  │
│  + 数据     │                             │  + 数据     │
└──────┬──────┘                             └──────▲──────┘
       │ 添加MAC头部+FCS                        │ 剥离MAC头部+FCS
┌──────▼──────┐                             ┌──────┴──────┐
│ 数据链路层   │                             │ 数据链路层   │
│ MAC头部     │                             │ MAC头部     │
│ + IP头部    │                             │ + IP头部    │
│ + TCP头部   │                             │ + TCP头部   │
│ + 数据 + FCS│                             │ + 数据 + FCS│
└──────┬──────┘                             └──────▲──────┘
       │ 转换为比特流                           │ 还原为帧
┌──────▼──────┐   ┌───────┐   ┌──────┐   ┌──────┴──────┐
│  物理层     │───│交换机  │───│路由器│───│  物理层     │
│  比特流     │   │(二层) │   │(三层)│   │  比特流     │
└─────────────┘   └───────┘   └──────┘   └─────────────┘

最后

数据包在网络上传输的过程,可以概括为三个阶段:

  1. 发送端封装:数据自上而下逐层封装,每层添加控制信息

  2. 网络转发:交换机根据MAC地址转发,路由器根据IP地址转发

  3. 接收端解封装:数据自下而上逐层剥离,恢复原始数据

每一层只处理自己负责的信息,对上层数据内容不关心。这种分层设计保证了网络的灵活性和可扩展性。

相关推荐
砚凝霜2 分钟前
【软考信息安全】第十二章 网络安全审计概述与分类
网络·安全·web安全
酣大智2 分钟前
DHCP Option 选项
网络·dhcp
迪康妍妍12 分钟前
终端安全实战:用迪康终端安全管理系统实现U盘四分档管控与全量审计
android·运维·网络·安全·电脑
一只旭宝15 分钟前
【网络精讲1】TCP 三次握手:为什么是三次,第三次丢了怎么办
服务器·网络·tcp/ip
迈威通信1 小时前
迈威 MISCOM8212GP-4XGF-8GTPoE90-DC48 接入层实践:高密度 PoE++ 与万兆上行的整合方案
运维·网络·信息与通信
威联通网络存储1 小时前
TS-h1283XU-RP 在医药批记录与检验场景的部署
网络·python
木子n111 小时前
车载以太网与SOME/IP服务化通信实战-01.从字节到服务:SOME/IP报文解析与四通道开销账
网络·网络协议·tcp/ip·车载以太网·some/ip
Escalating_xu12 小时前
【C 语言】数据在内存中的存储:补码、大小端、整型陷阱与 IEEE 754 全解析
java·c语言·网络
爱跳舞的烤冷面13 小时前
Linux篇——网络编程
网络
Knight_AL14 小时前
基于 Netty 实现的 WebSocket 服务端
网络·websocket·网络协议