CNT-以太网帧和IEEE802.3帧

一、背景(发布方不一样)

        以太网(ETHERNET)规范2.0版是由几个业界公司联合发布的,是目前有线以太网领域事实上的业界标准。即厂商发布的。

        IEEE802.3是美国电气和电子工程师协会IEEE发布的,定义了有线以太网的物理层和数据链路层的介质访问控制(MAC)。即标准化组织发布的。

二、技术(CSMA/CD)

        “ETHERNET2.0”和“IEEE802.3”基础技术都是CSMA/CD载波侦听冲突检测技术,原理:先听后发,边发边听,冲突停发,随机延迟后重发。

(1)开始:如果线路是空闲的,则开始传输数据,否则跳转到步骤4。

发送方先监听总线是否空闲,如果总线忙,则不发送并跳转到步骤4。如果总线空闲,则跳转到步骤2。

(2)发送:如果监测到冲突,则停止发送并发送加强冲突的信号,之后跳转到步骤4。

发送方将数据发送到总线(在总线上的所有主机都可以收到其发送到总线上的数据)上,在发送的过程中发送方边发送边监测总线,是否自己发送的数据有冲突。如果没有冲突则继续发送全部数据并跳转到步骤3,如果发生冲突,则立即停止发送数据,但是要发送一个加强冲突的JAM信号,以便使网络上所有工作站都知道网上发生了冲突,并跳转到步骤4。

(3)成功发送:向更高层的网络协议(网络层)报告发送成功,退出传输模式。

(4)线路忙:等待,直到线路空闲。

因为步骤1和步骤2都是发送方监测到总线上发生了冲突,故步骤4仅表示总线忙。进至步骤5。

(5)线路空闲:等待一个随机时间,跳转到步骤1。当超过最大尝试次数时跳转到步骤6。

因为步骤1和步骤2都是发送方监测到总线上发生了冲突,故等待一个随机时间再跳转到步骤1。

(6)超过最大尝试传输次数:向更高层的网络协议(网络层)报告发送失败,退出传输模式。

2.1 时代在发展,科技在进步

        根据百度,“Ethernet Version 2(EV2)”是于1982年发布的,而世界上第一台以太网交换机是于1989年面世的。那么在以太网交换机面世前的那些年,以太网都是采用hub(整个大网是一个冲突域)或者hub加网桥(几个小网分别是一个冲突域)进行组网的共享式以太网。工作原理如下,则CSMA/CD就非常有必要用在同一个冲突域内起到降低冲突的作用。

        (1)集线器hub工作原理:主要功能是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。集线器有很多RJ45插头,所有接入的计算机共享介质,由于集线器收到报文会向所有端口转发,同时只能传输一个数据帧,通过集线器相连的所有主机处于同一个冲突域中,因此,当有多台主机同时发送数据报文时,大量的冲突将导致性能显著下降,也意味集线器所有端口都要共享同一带宽,以集线器为核心构建的网络是共享式以太网的典型代表。而上文提到的CSMA/CD就是解决此问题。集线器只能工作在半双工模式,在一个时钟周期内,仅能传送一组数据。

                              

         (2)网桥工作原理:网桥首先会对收到的数据帧进行缓存并处理(记住帧的源地址和源端口对应关系),判断入帧的目标节点是否位于发送这个帧的网段中(同一端口中),如果是则网桥就不把数据帧转发到网桥的其他端口。如果帧的目标节点位于另一个网络,则网桥会将帧发送到正确的网段(另一个端口)。如果网桥没有收到的帧的目标的记录,则网桥会将数据发送给与该网桥连接的除发送该数据的网段外的所有网段。

                                    

        随着网桥的端口越来越多,演化成了交换机(交换机也被称为多端口网桥)。此时组网变成计算机可以通过网线直接和交换机相连接进行数据的收发,而且是每个计算机都和交换机的其中一个端口进行直接连接,组成其独立的冲突域,这种就是交换式以太网,交换机在其中起到的就是隔离冲突域的作用。交换式以太网就没必要有CSMA/CD了,因为每个计算机处于自己独立的冲突域中。

                               

        但是在交换式以太网中CSMA/CD在一种情况下还会使用,就是网卡协商半双工。以太网有两种工作模式,一种全双工,一种是半双工。

        (1)全双工:网卡协商/强制全双工会关闭CSMA/CD,因为全双工使用双绞线中的两对线工作,一对发送,一对接收,即全双工模式下网卡可以同时完成数据的发送和接收。所以没必要使用CSMA/CD技术。

        (2)半双工:但是对于半双工模式,我能查到的资料中体现出的似乎是在技术更新、互联网组网改造过程中,为了兼容已有的某些hub组网的网络,所以必须让交换机的端口支持配置成半双工模式。而且既然交换机的半双工模式端口接入的是hub组成的一个大的冲突域,那么交换机的半双工模式端口就必须支持CSMA/CD,来防止收发冲突。这也能解释为什么交换机是有策略表项的,还需要半双工端口网卡支持CSMA/CD机制,因为交换机对hub的组网(hub组网内可能有多个终端)仅提供了一个半双工的端口,根据交换机的工作原理(记住源,转发目的),它监测不到hub组网内的冲突,所以需要交换机的半双工网卡发送CSMA/CD侦听包来探测hub组网中是否存在交换冲突。

        再多说一点关于双绞线的事情,双绞线存在交叉线和直通线,区别如下。实际上现在几乎所有新的网卡都已经支持“收发自动调换”功能了,所以不用在乎究竟用的是交叉线还是直通线,只要插上网线能稳定linkup,双工方式和协商速率也正确,即可。

        (1)交叉线:两端都采用568B做线标准。两端地位对等,如交换机接交换机、电脑接电脑。

        (2)直通线:一端采用568B做线标准,一端采用568A标准。两端地位不对等,如交换机接电脑。

        EIA/TIA 568A的线序定义依次为绿白、绿、橙白、蓝、蓝白、橙、棕白、棕

        EIA/TIA 568B的线序定义依次为橙白、橙、绿白、蓝、蓝白、绿、棕白、棕

三、帧格式区别

3.1 历史上的以太网帧        

        以上是物理层的一些概念,下面说下数据链路层(MAC)的区别。历史上以太网帧格式共有5中,分别如下。

(1)Ethernet Version 1(EV1)

以太网帧格式的最原始版本,由Xerox PARC提出的3Mbps CSMA/CD以太网标准的封装格式,后来在1980年由DEC,Intel和Xerox标准化形成Ethernet V1标准。

(2)Ethernet Version 2(EV2)

Xerox与DEC、Intel在1982年制定的以太网标准帧格式。Cisco名称为:ARPA。是目前以太网的事实标准。也是本文背景中提到的版本。

(3)RAW802.3(NOVELL Ethernet 802.3)

1983年Novell发布的私有以太网帧格式,以当时尚未正式发布的802.3标准为基础。可惜两年后IEEE发布正式的802.3标准时部分帧格式发生了变化。使得RAW 802.3格式和正式的IEEE 802.3标准互不兼容。

(4)802.3/802.2 LLC(802.3SAP)

IEEE正式发布的802.3标准

(5)802.3/802.2 SNAP

IEEE为保证802.2LLC上支持更多的上层协议同时更好的支持IP协议而发布的标准,是802.3/802.2LLC的正式更新版本。也是本文背景中提到的版本。

3.2 帧格式的区别

        目前在网设备都是兼容以上几种以太网类型的,但是对它们要如何进行区分呢?具体步骤如下:

(1)首先判断SMAC后面的2bytes空间的内容,如果其大于1500,则说明这个帧是Ethernet Version 2,因为Ethernet Version 2的帧这2bytes内存放的是上层协议的类型,根据规定表示上层协议类型是大于1500的,具体见下文详述。

(2)首先判断SMAC后面的2bytes空间的内容,如果其小于1500,则说明这2bytes存放的是长度。那么进一步判断这2bytes再后面的2bytes(长度后面2bytes)空间的内容。如果其等于0xFFFF,则说明这个帧是RAW802.3。因为RAW802.3这个位置的2bytes固定存放0xFFFF。

(3)首先判断SMAC后面的2bytes(长度后面2bytes)空间的内容,如果其小于1500,则说明这2bytes存放的是长度。那么进一步判断这2bytes再后面的2bytes空间的内容。如果其等于0xAAAA,则说明这个帧是802.3/802.2 SNAP。因为802.3/802.2 SNAP这个位置的2bytes固定存放0xAAAA。

(4)如果以上均未命中,则说明这个帧是802.3/802.2 LLC。

四、Ethernet Version 2帧长度换算

        根据3.2的图片,我们知道了Ethernet Version 2帧格式,但实际上以太网帧在以太网上传送过程中外层还需要封装一些东西。具体如下。

目的地址DMAC(6bytes):以太网帧的目的MAC地址

源地址SMAC(6bytes):以太网帧的源MAC地址

类型ethernet type(2bytes):以太网帧携带数据域中上层协议的类型

数据域(46-1500bytes):上层数据

校验位CRC(4bytes):对此以太网帧进行自校验,防止传输出错

        根据上图,Ethernet Version 2帧格式中数据域的大小是46-1500bytes,帧开销是6+6+2+4=18bytes。所以对于通常的以太网帧(从DMAC到CRC)有以下结论(ARP系列协议暂不在此讨论)。

        (1)一个以太网帧可以携带的数据域大小是46-1500bytes。

        (2)一个以太网帧的大小为64-1518bytes。即数据域+帧开销

4.1 以太网帧的传送

        以太网帧的发送方式是一个以太网帧,一个以太网帧进行发送的,大体如下图。

 帧间隙(IFG,96bit=12bytes):每个以太网帧之间都需要有帧间隙,即每发完一个帧后需要等待一段时间才能再发送下一个帧。这样做的目的是让刚刚收到数据的接收站点来得及清理缓存,做好接收下一帧的准备。在以太网标准中规定最小帧间隙是12bytes,帧间隙的数据为全1,个别接口(如GE、10GE)可以减少。所以实际应用时,网络上可以容忍帧间隙和规范规定的不一样。

前导码(Preamble,7bytes):以太网标准中规定前导码为二进制的“10101010 10101010 10101010 10101010 10101010 10101010 10101010”,即7bytes的1和0相间的数据,用于通知接收方有数据帧到来,使其与输入的时钟保持同步。同时也指明了传输的速率(10M和100M的时钟频率不一样,所以100M网卡可以兼容10M网卡)。实际应用时,前导码必须和协议规范规定的一致,否则会被当成帧间隙丢弃。

帧开始定界符(SFD,1bytes): 以太网标准中规定帧开始定界符为1bytes的“10101011”,表示一帧开始。实际应用时,帧开始定界符必须和协议规范规定的一致,否则会被当成帧间隙丢弃。

        所以在部分场合,可能看到以下观点:

(1)一个以太网帧的大小为72-1526bytes。(即通常以太网帧大小+帧开始定界符+前导码),但实际上前导码和帧开始定界符都是在物理层添加的,其并不是数据链路层上以太网帧的一部分,所以这块不要混淆。当然如果有人提出了这个观点,也要知道这是怎么回事。

        帧间隙IFG补充:

帧间隙IFG为什么最小是12bytes?其实IFG通常指一段时间,具体表示是在传输媒介中发送96位原始数据(96bit)所需要的时间,所以其在不同介质中速率其实是不一样的。但是不论在10M/100M/1000M的以太网,两帧之间最少要有96bit,故有如下结果。

10M以太网中:96bit/10/1000(从Mbps换算成Kbps)/1000(从K换算成bps)=9600ns
100M以太网中:96bit/100/1000(从Mbps换算成Kbps)/1000(从K换算成bps)=960ns
1000M以太网中:96bit/1000/1000(从Mbps换算成Kbps)/1000(从K换算成bps)=96ns

        下面说下为什么以太网帧间隙最小96bit位时?

未找到明确原因,不过初步看还是因为CSMA/CD机制,当以太网监测到冲突时,除了立即停止发送数据外,还会发送一个强化冲突的jamming signal人为干扰信号,这个jamming signal一般为32bit或者48bit,以便有足够的碰撞信号使得共享以太网内所有主机都能监测到冲突。这么看96/32=3,96/48=2,都是成比例关系的。所以怀疑这其中是有内在联系的,不过不能判断是先有鸡还是先有的蛋。

        帧间隙IFG应用:

IPG减小:设备有效速度增大,可以解决因速度过慢而超时问题。

IPG增大:设备有效速度减小,可以解决因速度过快而丢包问题。

4.2 wireshark抓取以太网帧

        根据以上,以太网帧+物理层开销应该是72-1526bytes,为什么我们用wireshark抓取的报文大小有时会不在这个区间呢?

        原因是当数据帧到达网卡时,在物理层上网卡要先自己去掉前导码(7bytes)和帧开始定界符(1bytes),然后对这个帧开始CRC校验(并去掉帧上的CRC 4bytes),如果校验和错误,则丢弃此帧。如果校验和正确,就判断帧的目的硬件地址(DMAC)是否符合自己的接收条件(DMAC是自己的物理硬件地址即帧的DMAC是自己网卡的MAC地址、DMAC是广播地址、DMAC是可接收的多播MAC地址等等),如果不符合则丢弃,如果符合则将帧交给网卡驱动程序做进一步处理。这时抓包软件(wireshark等)才能抓到数据。因此抓包软件抓到的是一个以太网帧去掉了前导码、帧开始定界符、CRC之外的数据。即wireshark抓以太网帧大小的理论区间如下:60-1514bytes。不同抓包软件和网卡驱动优先级可能会有所不同,不过原理都是一样的。

4.2.1 大于以太网最大帧长

(1)IP报文的首部IP数据包长度有16bit,表示可以传送65535bytes,再加上以太网帧开销,最大应该为65553bytes。由于信道是所有主机共享的,则其在10Mbps以太网上将会占用共享链路长达65553bytes*8bit/10Mbps=50ms,严重影响其他主机通信。而且有的发送数据可能超出接收端的缓冲区大小,造成缓冲溢出。而如果采用的以太网帧较小,则由于每个帧的开销,导致有效载荷较少,传输有效数据的效率过低。为避免单一主机占用信道时间过长,所以人为规定了以太网帧的最大帧长为1518bytes。

(2)vlan:后来在802.1Q中,定义了以太网中可选的vlan tag,位于SMAC和EtherType之间,占4bytes,在这种情况下,如果一个以太网帧有vlan tag,则它的最大长度就变成了1518+4=1522bytes。
(3)QinQ:后来人们觉得一个vlan tag不够用,在802.1ad又定义了QinQ,也就是说一个以太网帧可以有多个vlan tag,每增加一个vlan tag,以太网帧的最大长度就增加4bytes。
(4)Jumbo Frame:再后来出现千兆以太网后,如果以太网的数据域被限制在1500bytes,则传输速率不够高,所以又提出了Jumbo Frame的概念。在一个Jumbo Frame中,数据域的长度是可以超过1500bytes的,通常最高可以到达9000bytes,但是目前并没有统一的标准。

4.2.2 小于以太网最小帧长

        如下图wireshark抓取到的报文长度小于上述所说的理论区间,这是因为这个数据包是从主机向外发送的数据包,还未到达网卡层,仅在网卡驱动层就被抓包软件拦截到了,所以网卡还未对其进行补位。

        以太网规定,一个通常以太网帧最小是64bytes,如果传输时数据域的长度小于46bytes(即64-18),那么MAC子层就需要在数据域后和CRC前的中间补填充位。

        比如下图网卡收到的包就是被补位过的。虽然在wireshark的解码位置看,补位字段位于type后面ipv4前面,但是从最下方的编码区可以明显看到补位字段是位于整个以太网帧的最后方,即数据域的最后方CRC校验的前方,说明补位是在MAC层做的。

以太网最小帧长64bytes的由来?

64bytes=512bit,512位时是主机捕获信道的时间。如果某主机发送一个64bytes的帧仍无冲突,以后也就不会再发生冲突了,称此主机捕获了信道。
(1)越底层的重传,速度要求越快。以太网的重传是微秒级的,它不想采用有连接(tcp重传是毫秒级、应用层重传是秒级)的重传机制。所以以太网重传采用CSMA/CD机制。当没有CSMA/CD机制时,当总线是空闲,各个工作站如果均监听到空闲状态,那么各个工作站会陆续向总线发送消息。此时如果A站发送的消息还未传递到将要发送消息的B站,那么B站仍会认为总线是空闲的,B站也会向总线发送消息。A站和B站的消息就会在某处冲突,导致此次数据传输失败。所以需要CSMA/CD来避免此问题。具体机制为
(2)A检测到总线空闲,A开始向总线发送消息。A发送的数据包未到达B,B也监测到总线空闲,B开始向总线发送数据,此时就产生了冲突。假设B先发现冲突,则B会发送一个碰撞信号(碰撞信号就是连续的01010101或者10101010,十六进制就是55或AA。以太网实现原理是,假设某个工作站检测到冲突发生,那就发送碰撞信号,使冲突更加明显,使得所有工作站均能检测到总线发生了冲突。)。这个碰撞信号会返回到A。假设碰撞信号到达A时,A还没有发完这个数据包,则A就知道发生了冲突,A会重传这个数据包。但是如果碰撞信号到达A时,A已经发送完了这个数据包,则A不会重传这个数据包。
(3)要保证以太网的重传,A和B的距离很关键,即要保证A收到碰撞信号时,数据包还没有传完。也就是说A和B之间的距离很关键,解决方法就是每个想要发送数据的工作站,检测到总线为空状态,在发送数据之前,都先发送一个探测帧。探测帧的长度既要达到最快速度传递到目的地址,又要保证探测帧的传递时间足够长到使得其他工作站都能够监听到。这个探测帧的长度就是以太网规定的最小帧长,就是一个最小最长帧。以太网上的帧还是由bit流组成的,所以CSMA/CD探测帧主要表现为探测帧的第一个bit到达目的地,而此时探测帧的最后一个bit刚好发送出去。

最优冲突时间的计算?
(1)假设A和B是网上相距最远的两个主机,信号在A和B之间传播时延为τ,假定A在t时刻开始发送一帧,则这个帧在t+τ时刻到达B,若B在t+τ-ε时刻开始发送一帧,则B在t+τ时就会检测到冲突,并发出阻塞信号。
(2)阻塞信号将在t+2τ时到达A。所以A必须在t+2τ时仍在发送才可以检测到冲突,所以一帧的最小发送时间必须大于2τ。这里是不考虑中继器的额外时延。 
(3)按照标准,10Mbps以太网采用中继器时,连接最大长度为2500米,最多经过4个中继器(以太网中使用中继器的5-4-3-2-1原则),因此规定对于10Mbps以太网规定一帧的最小发送时间必须为51.2μs。
在极限条件下,一个10Mbps局域网中两个收发主机间(允许接4个中继器)的最大距离为2500米(主机1--中继器1--中继器2--中继器3--中继器4--主机2,则5*500=2500米),往返就是5000米。同轴电缆的时延特性是5us/km,即如果出现冲突,端到端的往返时延是(5us/km)*5km=25us。然而这是理想的情况,考虑到中继器的额外时延,最坏情况下取估计时延45us,再加上强化冲突需要的48bit(因为必须完整收到48bit的强化冲突,才能确认冲突),则需要再加48bit/10Mbps=4.8us。以上共计49.8us,所以通常以太网取51.2us作为争用期的时间长度。则以太网帧的最小长度为51.2us*10Mbps=512bit=64bytes。

为什么10Mbps以太网两个收发主机间最大距离为2500米?
因为两个收发主机间允许接4个中继器,则两个收发主机间共接了5根同轴电缆(注意不是双绞线哦!)。同轴电缆是一种早期使用的传输介质,同轴电缆的标准分为两种,10BASE2和10BASE5。这两种标准都支持10Mbps的传输速率,最长传输距离分别为185米和500米。至于为什么同轴电缆最长为500米,是因为信号的衰减和时延,涉及到了物理电气特性。

以太网最小帧是因为使用CSMA/CD的原因,属于历史遗留了。在后续的百兆和千兆以太网中定义了新的争用期。

10M以太网:512位时,51.2us

100M以太网:512位时,5.12us

1000M以太网:4096位时(512bytes)

为什么1000M以太网的争用期定义成4096位时?

电磁波在真空中传播速度和光在真空中传播速度一致,都是3×10^8m/s。

(1)因为在10M以太网时,定义争用期为512位时,换算成电磁波理论能传送512bit/10Mbps/2*3×10^8m/s=7680米,但是有大佬说实际约2800米(未确定如何计算的)

(2)在100M以太网时,定义争用期为512位时,换算成电磁波理论能传送

512bit/100Mbps/2*3×10^8m/s=768米,但是有大佬说实际约200米(未确定如何计算的)

(3)以上如果1000M以太网仍用512位时做争用期,则换算成电磁波理论能传送

512bit/1000Mbps/2*3×10^8m/s=76.8米

对比有线网络中双绞线长度,约100米来说,就实在不够看了。所以1000M以太网如果仍使用CSMA/CD机制,则争用期就不能设置的过小,故目前定义是512bytes,但是似乎仅是学术定义,暂无协议定稿。

五、带宽和帧长的换算

5.1 带宽和FPS的对比图

5.2 计算带宽

以下以64byte为例,分别计算普通帧长和完整帧长的速率,以此对比带宽。

1G带宽对应的FPS根据上图可知是1488095。注意在通信领域1Mbps=1000Kbps=1000000bps。

完整帧长:(64+1+7+12)*8*1488095/1000/1000=约1000Mbps,通常意义上的带宽。

普通帧长:64bytes*8bit/byte*1488095fps/1000/1000=约761Mbps,以太网有效负载带宽(以太网有效负载带宽是一个重要指标,表示传输1000M的数据,如果采用64bytes传输,则有效内容仅有761M,其他都被以太网自身开销消耗了,传输所用字节越大,有效传输内容会越多)。

比如下图思博伦spirent的testcenter仪表对其就有不同的页面来展示,具体如下。

Tx L1 Rate(Mbps):带宽

Total Tx Rate(Mbps):以太网有效负载带宽

5.3 换算关系

首先明确几个概念

bps:每秒多少bit

Bps:每秒多少字节bytes

1bytes=8bit

1Bps=1bytes/s=8bit/s=8bps

pps:每秒多少个包

fps:每秒多少帧,fps和pps一般情况下可以互换。

六、感谢

本文抄袭了网络上的很多资料,如果有某部分的原作者看到请与我联系,我会加在附录中,谢谢。

https://blog.csdn.net/qq_33162707/article/details/126202352?spm=1001.2014.3001.5502

  • 0
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值