百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

以太网数据帧结构详解并结合Wireshark工具深入分析

csdh11 2025-03-02 16:52 28 浏览

以太网(Ethernet)是一种常见的计算机组网技术,其技术标准在IEEE 802.3中规定。目前广泛使用的以太网是通过双绞线(俗称网线)进行信息交换。那么这些在以太网链路也就是在网线中传输的数据包被称做以太网数据帧。我们知道,所有在互联网上传送的数据都以分组即IP数据报为传送单位,那么简单地说当网络层的IP数据报传送到数据链路层时会在前后分别添加首部和尾部把它封装成帧,这样的帧就是数据据链路层的数据传送单元。本文详细介绍以太网数据帧的结构,并结合数据包分析工具Wireshark捕获实际网络中传输的数据包,深入理解以太网数据帧。

以太网数据帧的结构

以太网数据帧简称以太帧,起始部分由前同步码和帧开始定界符组成,后面紧跟着一个以太网报头,以 MAC 地址说明目的地址和源地址。以太帧的中部是该帧负载的包含其他协议报头的数据包,最常见的如 IP 协议。另外以太帧由一个 32 位冗余校验码结尾,用于检验数据传输是否出现损坏。以太帧结构如下图所示。

上图中每个字段的含义如下说明:

  • 前同步码:用来使接收端的网络适配器在接收 MAC 帧时能够迅速调整时钟频率,使它和发送端的频率相同。前同步码为7个字节,其值为1和0交替,即10101010...
  • 帧开始定界符:帧的起始符,为1个字节。其值为:10101011,标志着一个帧的开始,告诉接收端适配器:帧要来了,准备接收。
  • 目的地址:接收帧的网络适配器的物理地址(MAC 地址),为 6 个字节(48 比特)。作用是当网卡接收到一个数据帧时,首先会检查该帧的目的地址,是否与当前适配器的物理地址相同,如果相同,就会进一步处理;如果不同,则直接丢弃。
  • 源地址:发送帧的网络适配器的物理地址(MAC 地址),为 6 个字节(48 比特)。
  • 类型:上层协议的类型,占2个字节。由于上层协议众多,所以在处理数据的时候必须设置该字段,标识数据交付哪个协议处理。例如,字段为 0x0800 时,表示将数据交付给 网络层的IP 协议。
  • 数据:也称为效载荷,表示交付给上层的数据。以太网帧数据长度最小为 46 字节,最大为 1500 字节,最大值也叫最大传输单元(MTU)。如果不足 46 字节时,会填充到最小长度。
  • 帧检验序列 FCS:检测该帧是否出现差错,占 4 个字节(32 比特)。发送方计算帧的循环冗余码校验(CRC)值,把这个值写到帧里。接收方计算机重新计算 CRC,与 FCS 字段的值进行比较。如果两个值不相同,则表示传输过程中发生了数据丢失或改变。这时,就需要重新传输这一帧。

因此,以上可知以太网数据帧的整体大小在 64~1518 字节之间(不含前导字段7字节和帧起始符1字节)。

Wireshark分析以太帧

打开Wireshark工具找到自己ip对应的网卡抓取一些数据包,这里以QQ程序传输的数据包为例,截图如下:

说明如下:

Frame 3765: 129 bytes on wire (1032 bits), 129 bytes captured (1032 bits) on interface \Device\, id 0: 这句话的意思就是说数据帧号码3765,捕获了129个字节,也就是1032位(一字节等于八位),在interface 0上面,也就是在网卡0上面(一个机器可能有多个网卡)。

Ethernet II:以太帧的包头, 可以清楚地看到里面包含三个信息:Destination, Source,Type依次对应前面介绍以太帧数据结构的目的地址、源地址、类型,而type类型值为0x0800表示IPv4,也就是说它是一个IP包。

Internet Protocol Version 4:第三个就是IP数据包。关于IP数据包格式我们以后在进行介绍,这里可以看到,这个IP数据包的总长度为115字节。

User Datagram Protocol:UDP数据包。这个IP数据包高层传输层协议为UDP,也就是说QQ这个应用程序选择UDP作为通信协议,而不是TCP。关于传输层协议也以后再进行介绍。

那么,最后我们可以得出捕获到的这个以太帧的总长度为129字节,IP数据包的total length是115字节,加上以太帧的包头(6+6+2=14)14字节,115+14就等于129字节,然而,根据前面介绍以太帧尾部还有四个字节的FCS校验和。后面的FCS四个字节哪里去了呢?是不是我们计算错误了?显然我们的计算是正确的,这是因为数据包经过网络设备,如路由器、交换机等硬件已经把以太帧的校验做过了,它返回给操作系统的只有前面的部分,FCS没有返回给操作系统,所以wireshark也抓不到后面校验的四个字节,当然,校验错误的以太帧也不会被wireshark所捕获,所以,我们看到的以太帧都是通多校验的正确的以太帧。

以上就是以太网数据帧的相关内容并结合wireshark工具加以分析,关于更多网络知识可以加个关注,另外对Wireshark数据包捕获分析感兴趣的同学可以订阅专栏内容~

相关推荐

OKHttp原理解析(okhttp的作用)

Okhttp应该是Android目前非常流行的第三方网络库,尝试讲解他的使用以及原理分析,分成几个部分:...

快速教会你优雅的解决TCP客户端端口耗尽的问题

Hello,我是Henry,相信各位开发老爷在使用大并发网络连接的时候,可能都遇到过TCP客户端端口耗尽的问题,这是一个常见问题,以下是系统性的解决方案及技术细节:1.理解端口限制的本质...

这3个接口基础知识,产品经理需要知道

产品经理在工作中,避免不了要阅读接口文档,希望本文能够帮助大家更好的了解接口。接口,即客户端(浏览器)向服务器提交请求,服务器向客户端返回响应。本质就是数据的传输与接收。本文主要介绍接口相关的基础知识...

Java 11新特性对开发者的影响:让编程更高效、更自由

Java11新特性对开发者的影响:让编程更高效、更自由在这个瞬息万变的编程世界里,每一代Java的更新都承载着无数开发者对性能优化、生产力提升以及代码美感追求的期望。作为继Java8之后的首个长期...

干货-okHttp的优点-收藏了(okhttp的好处)

OkHttp相较于其它的实现有以下的优点.支持SPDY,允许连接同一主机的所有请求分享一个socket。如果SPDY不可用,会使用连接池减少请求延迟。使用GZIP压缩下载内容,且压缩操作对用...

如何在 Java 项目中集成 DeepSeek

一、使用官方SDK基础集成1.添加依赖(Maven)<dependency><groupId>com.deepseek</groupId>...

spring cloud gateway 性能优化思路

SpringCloudGateway是一个高性能的API网关,但在实际的生产环境中,可能会遇到一些性能瓶颈。以下是一些SpringCloudGateway的性能优化方面:调整线程池...

你对Android中的okHttp的使用真的了解吗

框架下载地址:https://github.com/square/okhttp今天给大家讲解下网络框架okhttp的使用,这个框架非常强大,很多框架都用它来加载网络资源,目前很多开发者还在用As...

京东大佬问我,Nginx并发连接如何设置?详细说明

京东大佬问我,Nginx并发连接如何设置?详细说明首先,我需要回忆一下Nginx的并发模型。Nginx是基于事件驱动的异步架构,所以它的并发处理能力和配置参数有很大关系。主要的参数应该包括worker...

如何实现一个连接池?一文带你深入浅出,彻底搞懂

-前言-【2w1h】是技术领域中一种非常有效的思考和学习方式,即What、Why和How;坚持【2w1h】,可以快速提升我们的深度思考能力。...

Golang 网络编程(golang 系统编程)

TCP网络编程存在的问题:拆包:对发送端来说应用程序写入的数据远大于socket缓冲区大小,不能一次性将这些数据发送到server端就会出现拆包的情况。通过网络传输的数据包最大是1500字节,当TCP...

Spring6|Spring Boot3有哪些HTTP客户端可以选择

个人博客:无奈何杨(wnhyang)个人语雀:wnhyang...

10. 常用标准库(标准库有哪些)

本章深入解析Go语言核心标准库的关键功能与生产级应用技巧,结合性能优化与安全实践,提供高效开发指南。10.1fmt/io/os10.1.1fmt高级格式化...

Nginx之连接池(nginx 长连接 连接复用)

我们知道Nginx利用连接池来增加它对资源的利用率。下面我们一起来看看Nginx是如何使用连接池的。从上一节模块开始已经慢慢会接触一些Nginx的源码部分来。每个worker进程都有一个独立的ngx...

开发者必备的Android开发资源之OkHttp

小编在这里给各位Android开发者介绍的资源包括工具、库和网站等。有效地利用它们,将有助于减轻我们的工作量,提高我们的工作效率。为什么需要一个HTTP库Android系统提供了两种HTTP通信类,H...