问小白 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 地址
6
接收设备的 MAC 地址。
源 MAC 地址
6
发送设备的 MAC 地址。
以太网类型/长度
2
表示上层协议类型(如 IPv4、IPv6)或数据长度(以太网 II 或 802.3)。
数据负载
46-1500
上层协议封装的数据,长度 46~1500 字节。
帧校验序列(FCS)
4
CRC32 校验,用于检测帧传输中的错误。

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 头部

字段名称
长度(位)
描述
版本号
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 头部

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

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号