问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

MAC、IPv4、IPv6、TCP和UDP头部结构详解及网页浏览过程解析

创作时间:
作者:
@小白创作中心

MAC、IPv4、IPv6、TCP和UDP头部结构详解及网页浏览过程解析

引用
CSDN
1.
https://m.blog.csdn.net/A_New_World/article/details/144426707

在现代计算机网络中,数据的传输需要经过多个层次的封装和解封装过程。本文将详细介绍MAC、IPv4、IPv6、TCP和UDP头部的结构,并通过一个用户浏览网页的场景,详细描述数据在网络中的传输过程。

MAC 头部

MAC头部是数据链路层的头部,主要包含以下字段:

字段名称
长度(字节)
描述
目标 MAC 地址
6
接收设备的 MAC 地址。
源 MAC 地址
6
发送设备的 MAC 地址。
以太网类型/长度
2
表示上层协议类型(如 IPv4、IPv6)或数据长度(以太网 II 或 802.3)。
数据负载
46-1500
上层协议封装的数据,长度 46~1500 字节。
帧校验序列(FCS)
4
CRC32 校验,用于检测帧传输中的错误。

IPv4 头部

IPv4头部是网络层的头部,主要包含以下字段:

字段名称
长度(位)
描述
版本号
4
指定 IP 协议版本,IPv4 的值为 4。
首部长度
4
指定 IP 首部的长度(以 4 字节为单位)。
服务类型(TOS)
8
指示服务质量(如低延迟、高吞吐量)。
总长度
16
表示整个数据包的长度,包括头和数据。
标识
16
用于区分不同的分片。
标志
3
控制分片行为,如“更多分片”标志(MF)。
片偏移
13
分片数据在原数据包中的偏移量。
生存时间(TTL)
8
表示数据包在网络中生存的最大跳数。
协议
8
指示上层协议类型(如 6 表示 TCP,17 表示 UDP)。
头校验和
16
对 IP 头进行校验,确保数据完整性。
源 IP 地址
32
表示发送方的 IP 地址。
目的 IP 地址
32
表示接收方的 IP 地址。
选项(可选部分)
可变
用于扩展功能,如安全性和时间戳。
数据部分
可变
上层协议的数据。

IPv6 头部

IPv6头部是网络层的头部,主要包含以下字段:

字段名称
长度(位)
描述
版本号
4
指定 IP 协议版本,IPv6 的值为 6。
流量类别
8
指示数据包的服务类型和优先级。
流标识
20
用于标识数据流,支持 QoS(服务质量)。
有效载荷长度
16
数据部分的长度(不包括头部)。
下一个头部
8
指示上层协议(如 TCP:6,UDP:17,ICMPv6:58)。
跳限制(Hop Limit)
8
数据包可经过的最大路由跳数,类似 IPv4 的 TTL。
源地址
128
发送方的 IPv6 地址。
目的地址
128
接收方的 IPv6 地址。
扩展头部(可选)
可变
包括路由头、分片头、认证头等。
数据部分
可变
封装的传输层协议数据。

TCP 头部

TCP头部是传输层的头部,主要包含以下字段:

字段名称
长度(位)
描述
源端口号
16
发送方的端口号。
目的端口号
16
接收方的端口号。
序列号
32
数据流中第一个字节的编号。
确认号
32
表示期望接收的下一个字节序号。
数据偏移
4
TCP 头的长度(以 4 字节为单位)。
保留位
6
保留字段,目前未使用。
控制位
6
标志位,用于连接和数据流控制(如 SYN、ACK、FIN 等)。
窗口大小
16
用于流量控制,表示接收方可接收的数据量。
校验和
16
检测头部和数据部分是否完整。
紧急指针
16
紧急数据的位置,仅在 URG 标志位置位时有效。
选项
可变
包括 MSS(最大报文段大小)等扩展功能。
数据部分
可变
封装的应用层数据。

UDP 头部

UDP头部是传输层的头部,主要包含以下字段:

字段名称
长度(位)
描述
源端口号
16
发送方的端口号。
目的端口号
16
接收方的端口号。
长度
16
整个 UDP 数据报的长度,包括头部和数据部分。
校验和
16
用于检测数据报是否完整。
数据部分
可变
封装的应用层数据。

场景:用户浏览网页的详细过程

1. 用户输入 URL

用户在浏览器中输入 URL(例如 http://www.example.com),并按下回车键。

  • 应用层协议:HTTP
  • 浏览器生成一个 HTTP 请求:
  • 方法:GET
  • URL:http://www.example.com
  • HTTP 版本:HTTP/1.1
  • 其他头部字段(如 User-Agent、Host)。
  • 目标是从服务器获取网页内容。

2. DNS 查询

为了知道 www.example.com 对应的服务器 IP 地址,浏览器首先发起 DNS 查询。

  • 应用层:DNS 请求

  • 浏览器检查本地 DNS 缓存。如果没有找到 IP 地址,则构造一个 DNS 查询报文。

  • 查询目标为 www.example.com 的 IP 地址。

  • 传输层:UDP 协议

  • DNS 查询被封装在 UDP 数据段中。

  • UDP 头部包含:

  • 源端口号:随机分配(例如 51000)。

  • 目标端口号:53(DNS 服务器的标准端口)。

  • 网络层:IPv4/IPv6

  • UDP 数据段被封装在 IP 数据包中。

  • IP 头部包含:

  • 源 IP 地址:用户设备的 IP 地址(如 192.168.1.100)。

  • 目标 IP 地址:DNS 服务器的 IP 地址。

  • 链路层:以太网帧

  • IP 数据包被封装在以太网帧中。

  • MAC 头部包含:

  • 源 MAC 地址:用户设备的 MAC 地址。

  • 目标 MAC 地址:路由器的 MAC 地址(下一跳)。

  • DNS 响应

  • DNS 服务器返回 www.example.com 的 IP 地址(如 93.184.216.34),使用类似的封装方式。

3. 建立 TCP 连接

得到服务器的 IP 地址后,浏览器与 93.184.216.34 建立 TCP 连接。

(1) 三次握手过程

  • 第一次握手:SYN

  • 客户端生成一个 TCP SYN 包,请求建立连接。

  • TCP 头部:

  • 标志位:SYN=1,ACK=0。

  • 序列号:随机生成(如 1000)。

  • IP 头部:

  • 源 IP 地址:192.168.1.100。

  • 目标 IP 地址:93.184.216.34。

  • MAC 头部:

  • 源 MAC 地址:用户设备的 MAC 地址。

  • 目标 MAC 地址:路由器的 MAC 地址(或下一跳设备)。

  • 第二次握手:SYN-ACK

  • 服务器响应 TCP SYN 包,返回 SYN-ACK。

  • TCP 头部:

  • 标志位:SYN=1,ACK=1。

  • 序列号:随机生成(如 3000)。

  • 确认号:客户端序列号 + 1(即 1001)。

  • 第三次握手:ACK

  • 客户端发送 ACK 包,确认连接已建立。

  • TCP 头部:

  • 标志位:ACK=1。

  • 确认号:服务器序列号 + 1(即 3001)。

4. 发送 HTTP 请求

TCP 连接建立后,浏览器通过 HTTP 协议向服务器发送网页请求。

  • HTTP 请求内容

  • GET /index.html HTTP/1.1。

  • Host: www.example.com。

  • 封装过程

  • 传输层:TCP

  • HTTP 数据被封装在 TCP 数据段中。

  • TCP 头部:

  • 源端口号:随机分配(如 51001)。

  • 目标端口号:80(HTTP 的标准端口)。

  • 网络层:IP

  • TCP 数据段被封装在 IP 数据包中。

  • IP 头部:

  • 源 IP 地址:用户设备的 IP 地址。

  • 目标 IP 地址:服务器的 IP 地址。

  • 链路层:以太网

  • IP 数据包被封装在以太网帧中。

  • MAC 头部:

  • 源 MAC 地址:用户设备的 MAC 地址。

  • 目标 MAC 地址:路由器的 MAC 地址。

5. 服务器响应

服务器接收到 HTTP 请求后,处理并返回网页内容。

  • HTTP 响应内容

  • HTTP/1.1 200 OK

  • Content-Type: text/html

  • 网页的 HTML 数据。

  • 封装过程

  • 传输层:TCP

  • HTTP 响应数据被封装在 TCP 数据段中。

  • TCP 头部:

  • 源端口号:80。

  • 目标端口号:51001(客户端的端口)。

  • 网络层:IP

  • TCP 数据段被封装在 IP 数据包中。

  • IP 头部:

  • 源 IP 地址:服务器的 IP 地址。

  • 目标 IP 地址:客户端的 IP 地址。

  • 链路层:以太网

  • IP 数据包被封装在以太网帧中。

  • MAC 头部:

  • 源 MAC 地址:服务器的 MAC 地址。

  • 目标 MAC 地址:下一跳路由器的 MAC 地址。

6. 浏览器解析网页

浏览器收到服务器返回的 HTTP 响应后,解封装数据:

  • 链路层:检查 MAC 地址,确认帧是给自己的,移除 MAC 头。
  • 网络层:检查 IP 地址,确认包是给自己的,移除 IP 头。
  • 传输层:检查 TCP 序列号和确认号,按序重组数据,移除 TCP 头。
  • 应用层:提取 HTTP 数据(网页内容)。

浏览器根据 HTML 内容渲染网页,并显示给用户。

7. 释放连接

当网页加载完成,浏览器和服务器通过 TCP 四次挥手释放连接。

四次挥手过程

  1. 客户端发送 FIN 包:
  • 表示客户端关闭数据发送。
  • TCP 头部:FIN=1,ACK=1。
  1. 服务器回复 ACK 包:
  • 表示已接收关闭请求。
  • TCP 头部:ACK=1。
  1. 服务器发送 FIN 包:
  • 表示服务器关闭数据发送。
  • TCP 头部:FIN=1,ACK=1。
  1. 客户端回复 ACK 包:
  • 表示已接收服务器的关闭请求。
  • TCP 头部:ACK=1。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号