开发者社区> double2li> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

结合Wireshark捕获分组深入理解TCP/IP协议之以太网帧

简介: 摘要:     本文摘抄并整理了以太网相关理论知识,包括CSMA/CD协议机制及工作、LAN互连,详细分析了Ethernet II帧格式,最后给出Ethernet II帧实例。   一、以太网[1] 1.1 概述     以太网(Ethernet)是一种计算机局域网组网技术。
+关注继续查看

摘要:

    本文摘抄并整理了以太网相关理论知识,包括CSMA/CD协议机制及工作、LAN互连,详细分析了Ethernet II帧格式,最后给出Ethernet II帧实例。

 

一、以太网[1]

1.1 概述

    以太网(Ethernet)是一种计算机局域网组网技术。IEEE制定的IEEE 802.3标准给出了以太网的技术标准。它规定了包括物理层的连线、电信号和介质访问层协议的内容。以太网是当前应用最普遍的局域网技术。它很大程度上取代了其他局域网标准,如令牌环网(token ring)、FDDI和ARCNET。 以太网的标准拓扑结构为总线型拓扑,但目前的快速以太网(100BASE-T、1000BASE-T标准)为了最大程度的减少冲突,最大程度的提高网络速度和使用效率,使用交换机(Switch hub)来进行网络连接和组织,这样,以太网的拓扑结构就成了星型,但在逻辑上,以太网仍然使用总线型拓扑和CSMA/CD(Carrier Sense Multiple Access/Collision Detect 即带冲突检测的载波监听多路访问)的总线争用技术[1]。

    以太网基于网络上无线电系统多个节点发送信息的想法实现,每个节点必须取得电缆或者信道的才能传送信息,有时也叫作以太(Ether)。(这个名字来源于19世纪的物理学家假设的电磁辐射媒体-光以太。后来的研究证明光以太不存在。) 每一个节点有全球唯一的48位地址也就是制造商分配给网卡的MAC地址,以保证以太网上所有系统能互相鉴别。由于以太网十分普遍,许多制造商把以太网卡直接集成进计算机主板。

1.2 CSMA/CD

    带冲突检测的载波侦听多路访问 (CSMA/CD)技术规定了多台电脑共享一个信道的方法。这项技术最早出现在1960年代由夏威夷大学开发的ALOHAnet,它使用无线电波为载体。这个方法要比令牌环网或者主控制网要简单。CSMA/CD使用了以下机制:

(1)没有任何使用时隙(适配器可以在任何时刻开始传输)

(2)其他适配器传输时进行载波侦听(侦听到其他适配器在传输,它决不会传输帧)

(3)传输时进行碰撞检测(检测到其他适配器在传输,它中止自己传输)

(4)重传之前,适配器等待一个随机时间

    注:(2)(3)是以太网适配器通过测量传输前和传输过程中的电压等级进行的。

适配器从网络层获得数据报,执行以下步骤(CSMA/CD协议工作):

(1)成帧,并把帧放到适配器缓冲区中

(2)如果适配器侦听到信道空闲(即在96比特时间内,没有信号能量从信道进入适配器),则开始传输该帧,否则等待直到线路空闲

(3)如果适配器在传输过程中没有检测到其他适配器的信号能量,并且传输了整个帧,则成功传输,否则停止传输,并且传输一个48比特的拥塞信号,传完之后,适配器进入一个指数回退阶段。

(4)如果超过最大尝试次数,则退出传输模块,并向网络层协议报告发送失败

    指数回退算法是指一帧连续经历n次碰撞后,适配器随机从0~(2^m -1)随机选择一个值(假设为K),等待K*512比特时间再传输。这里m为10和n较小的一个,即m=min(n, 10)。

1.3 LAN互联

(1)中继器

    因为信号的衰减和延时,以太网段有距离限制(如10BASE5同轴电缆最长距离500米),中继器可以把电缆中的信号放大再传送到下一段。中继器最多连接5个网段,当一段同轴电缆断开,中继器可以保证其他网段正常工作。

(2)集线器

    随着应用的拓展,人们逐渐发现星型的网络拓扑结构最为有效,于是设备厂商们开始研制有多个端口的中继器。多端口中继器即为集线器,集线器可以连接到其他集线器或者同轴网络。集线器是物理层设备,当一比特到达某接口时,集线器增强它的信号能量,传输到所有其他接口

    采用集线器组网的以太网尽管在物理上是星型结构,但在逻辑上仍然是总线型的,半双工的通信方式采用CSMA/CD的冲突检测方法,集线器对于减少包冲突的作用很小。每一个数据包都被发送到集线器的每一个端口,所以带宽和安全问题仍没有解决。

(3)网桥

    桥接工作在数据链路层,只有格式完整的数据包才能从一个网段进入另一个网段,冲突和错误数据包被隔离。通过记录分析网络上设备的MAC地址,网桥可以判断它们都在什么位置,这样它就不会向非目标设备所在的网段传递数据包。

(4)交换机

    早期的网桥需要检测每一个数据包,当同时处理多个端口的时候,数据转发相对Hub来说要慢。以太网交换机把桥接功能用硬件实现,这样就能保证转发数据速率达到线速。

    尽管以太网交换机布线同Hub以太网是一样的,但是交换式以太网比共享介质以太网有很多明显的优势,如更大的带宽和更好地隔离异常设备。交换机端口和所连接的设备必须使用相同的双工设置,即这些设备通过信号来协调要使用的速率和双工设置。

    交换机加电后,首先也像Hub那样工作,转发所有数据到所有端口。接下来,当它学习到每个端口的地址以后,他就只把非广播数据发送给特定的目的端口。这样,线速以太网交换就可以在任何端口对之间实现,所有端口对之间的通讯互不干扰。 因为数据包一般只是发送到他的目的端口,所以交换式以太网上的流量要略微小于共享介质式以太网。尽管如此,交换式以太网依然是不安全的网络技术,因为它还很容易因为ARP欺骗或者MAC满溢而瘫痪,同时网络管理员也可以利用监控功能抓取网络数据包。

二、以太网帧格式

    以太网发展到现在,有很多种类型,不同类型的帧具有不同的格式和MTU值,甚至同种物理媒体上都可同时存在[2]。如Ethernet II(ARPA)、Ethernet 802.3 raw(Novell Ethernet)、Ethernet 802.3 SAP、Ethernet 802.3 SNAP、。本文只介绍最常用的以太网帧Ethernet II,其格式如下:

图1 Ethernet II帧格式

目标MAC地址、源MAC地址

    每个适配器都有唯一的MAC地址,IEEE管理着这些物理空间地址。厂商从IEEE购买一个地址空间块,厂商自己分配设备编号,MAC地址示意图如下:

图2 MAC地址示意图

类型

    指示以太网帧所携带的网络层数据类型,常用的类型与值如下表:

表1 Ethernet II帧格式类型字段

 

类型

Netware

8137

XNS

0600,0807

IP

0800

ARP

0806

RARP

8035

IP(Wines)

0BAD,80C4

DRP

6003

LAT

6004

LAVC

6007

ARP(AppleTalk)

80F3

数据

FCS

    帧校验序列(Frame Check Sequence,FCS)采用32位CRC循环冗余校验,旨在检测帧是否引入了错误(即比特是否发生翻转),差错的原因包括信号强度衰减和电磁能量泄露。传输该帧的适配器构造以太网帧时,计算CRC填入FCS字段,目的适配器接收到帧后,对帧执行同样的映射,比较两者的值。

    其他以太网帧格式,可参见如下博文《四种格式的以太网帧结构》。

 

三、报文实例

我所捕获的分组都是Ethernet II帧,截取百度DNS请求报文的帧,如下:

图3 Ethernet II帧实例

    我有个问题,为什么从Wireshark捕获的帧,没有Ethernet II帧的FCS字段,是本来就没有,还是帧格式本来就没有FCS这个字段?求指点,谢谢:-)

 

参考资料:

[1] 维基百科词条:以太网

{2] 维基百科词条:以太网帧格式

[3] Andrew S.Tanenbaum.计算机网络[M].

[4] 《计算机网络--自顶向下方法与Internet特色》[M].

 Ethernet II帧格式.rar   

from:http://blog.chinaunix.net/uid-9112803-id-3213931.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
在Win2000里快速切换TCP/IP设置
自己的笔记本要在多个地方上网,但家里是自动获取IP的,实验室有自己的子网,宿舍又有另一个子网,每次换地方都得手动换TCP/IP设置,很麻烦。今天在网上看到一篇文章,原来要解决这个问题是非常简单的,不需要安装任何软件,下面是我的做法。
957 0
Linux TCP/IP 协议栈之 Socket的实现分析(Connect客户端发起连接请求)
sys_connect对于客户端来说,当创建了一个套接字后,就可以连接它了。                case SYS_CONNECT:                         err = sys_connect(a0, (struct sockaddr __user ...
659 0
Linux TCP/IP协议栈之Socket的实现分析(socket listen)
sys_listen对面向连接的协议,在调用 bind(2)后,进一步调用 listen(2),让套接字进入监听状态: int listen(int sockfd, int backlog);backlog 表示新建连接请求时,最大的未处理的积压请求数。
1110 0
Linux TCP/IP协议栈之Socket的实现分析(socket bind)
当创建了一个Socket 套接字后,对于服务器来说,接下来的工作,就是调用 bind(2)为服务器指明本地址、协议端口号,常常可以看到这样的代码:strut sockaddr_in sin;  sin.
677 0
Linux TCP/IP 协议栈之 Socket的实现分析(数据包的接收)
   前面了解过 sk 有一个接收队列,用于存储接  收到的 skb,对于 socket 层面上来讲,数据接收,就是要把数据从这个队列中取出来,交给上层用户态。这里涉及到出队操作,但是,要了解如何出队,就  得了解传输层协议如何入队。
835 0
ZT:实时操作系统µC/OS II下TCP/IP协议栈的实现
实时操作系统µC/OS II下TCP/IP协议栈的实现 摘要: 结合ez80和ARM7两种系统上的具体实现,说明了如何在嵌入式实时操作系统µC/OSII上移植实现LwIP这套TCP/IP协议栈,使µC/OS II成为支持网络的RTOS。
849 0
TCP/IP协议栈遭遇攻击?!
 我们的网络游戏采用tcp进行通信,服务端程序绑定8300端口,为游戏客户端提供服务,游戏已经上线稳定运行两年多,从今年9月份开始至今碰到了3次攻击,3次攻击所导致的情况一样,描述如下: (1)从应用层上来看,攻击者每次攻击时,与8300端口都有建立最多两、三百个tcp连接。
760 0
+关注
double2li
一个在IT行业摸爬滚打的老司机
2869
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载