
5、最小帧长7 K" Y; u* k" P5 @- |! ?( U
由于CSMA/CD算法的限制,以太网帧必须不能小于某个最小长度。以太网中,最小帧长为64字节,这是由最大传输距离和冲突检测机制共同决定的。' y; v4 r. m+ n4 z
规定最小帧长是为了避免这种情况发生:A站点已经将一个数据包的最后一个Bit发送完毕,但这个报文的第一个Bit还没有传送到距离很远的B站点。B站点认为线路空闲继续发送数据,导致冲突。) D$ |) d4 ?& h/ a3 J
点击查看原图
; K: n c' ?2 K; m) Y" V
图1Ethernet_II的帧结构 ' R9 F* N2 h4 i4 L- q: E% C% m
高层协议必须保证Data域至少包含46字节,这样加上以太网帧头的14字节和帧尾的4字节校验码正好满足64字节的最小帧长,如上图1所示。如果实际数据不足46个字节,则高层协议必须填充一些数据单元。
6 h. W' D( ?$ V * K) H8 C7 U7 p! v6 g
6、以太网的双工模式 / t( P4 q9 {! q& w
以太网的物理层存在半双工和全双工两种模式。 4 |/ P! t' U, ^( M9 v
6.1、半双工:
, i2 b y; n) J! ]5 I/ B- ~0 e7 M( @ 半双工的工作模式:任意时刻只能接收数据或者发送数据。采用CSMA/CD机制。有最大传输距离的限制。
$ a+ i1 ]% f: \, C+ q% F HUB工作在半双工模式。
, e, I% [ B O 6.2全双工:
# D+ U3 n* z; m8 P' t* A; ^: m 在有L2交换机取代了HUB组建以太网后,以太网由共享式转变为交换式。而且用全双工代替了半双工,传输数据帧的效率大大提高,最大吞吐量达到双倍速率。
' j$ N7 ?- x+ r) Y 全双工从根本上解决了以太网的冲突问题,以太网从此告别CSMA/CD。 % W# L9 W$ s9 ^7 z2 S* ?
全双工,同一时刻可以接收和发送数据。最大吞吐量达双倍速率。消除了半双工的物理距离限制。当前制造的网卡、二层设备、三层设备都支持全双工模式,HUB除外。 4 i! t" b6 Z8 X) h
实现全双工的硬件保证:支持全双工的网卡芯片;收发线路完全分离的物理介质;点到点的连接。 : t" K( q" R B) D* q/ N, ~' D
" u' h; h; T* M# ]( u' V) h9 @0 ~
7、以太网的自协商 & y( e6 z \" H2 w3 x* X# W) W
7.1、以太网自动协商的目的 ! M4 M. E; i3 Y- x. s6 z
最早的以太网都是10M半双工的,所以需要CSMA/CD等一系列机制保证系统的稳定性。随着技术的发展,出现了全双工,接着又出现了100M,以太网的性能大大改善。但是随之而来的问题是:如何保证原有以太网络和新以太网的兼容? . j [1 R# f% r l8 x. S* K
于是,提出了自动协商技术来解决这种矛盾。自动协商的主要功能就是使物理链路两端的设备通过交互信息自动选择同样的工作参数。自动协商的内容主要包括双工模式、运行速率以及流控等参数。一旦协商通过,链路两端的设备就锁定在同样的双工模式和运行速率。
' }) X6 I( a, Z' n# K8 l0 ~- g7 t 以太网速率双工自协商在如下标准中定义:
3 s9 J q _! t% X1 R2 w! g* q 百兆以太网标准:
q, D* J8 _5 W! z IEEE 802.3u,IEEE 802.3u规范将自协商作为可选功能。 ( T2 V3 g7 L! ]. q
千兆以太网标准:
5 \! |. y! r& y# U( \; i IEEE 802.3z,IEEE 802.3z规范将自协商作为强制功能,所有设备必须遵循并且必须默认启用自协商。
# {, j$ r( {. l3 W- ~6 Y 7.2、以太网自动协商原理
% W* {# h: R7 n- ^% _ 自动协商是网络设备间建立连接的一种方式。它允许一个网络设备将自己所支持的工作模式信息传达给网络上的对端,并接受对端可能传递过来的信息。
. N1 Y8 b3 g0 `% j 设备双方根据彼此工作模式信息的交集,按照双方都支持的最优工作模式建立连接。
* J* Q5 A' W \2 M$ T$ U, P3 ` 对于使用双绞线连接的以太网,如果没有数据传输时,链路并不是一直空闲,而是每隔16ms发送一个高脉冲,用来维护链路层的连接,这种脉冲成为NLP(Normal LinkPulse)码流。
4 { x4 h9 k: V6 P) z$ j 在NLP码流中再插入一些频率更高的脉冲,可用来传递更多的信息,这串脉冲成为FLP(Fast Link Pulse)码流,如下图1所示。自协商功能的基本机制就是将协商信息封装进FLP码流中,以达到自协商的目的。) L/ L1 r; _" `' j) J3 k
点击查看原图
0 f/ p' V- J8 G" e
图1 脉冲插入示意图 ! f k# \8 U7 u- ?! K
对于使用光模块和光纤连接的以太网,与使用双绞线连接的以太网类似,也是靠发送码流来进行自协商的,这种码流称为C码流,也就是配置(Configuration)码流。与电口不同的是,光口一般不协商速率,并且一般工作在双工模式,所以自协商一般只用来协商流控。 3 w7 S( p4 b/ p/ o0 o( J/ V
如果协商通过,网卡就把链路置为激活状态,可以开始传输数据了。如果不能通过,则该链路不能使用。
9 X9 s" t X6 w* S+ \, ~- F 如果有一端不支持自动协商,则支持自动协商的一端选择一种默认的方式工作,一般情况下是10M半双工模式。 - F; m; x5 z) `) P
自协商完全由物理层芯片设计实现,IEEE 802.3规范要求在下列任一情况下启动自协商: 0 x2 W3 m/ N# C+ w4 ^$ t( ]- Z! n# ?! p
链路中断后恢复;设备重新上电;任何一端设备复位;有重新自协商(Renegotiation)请求。
- ^; i$ u+ @/ R9 h! s) }! D 除此之外,连接双方并不会一直发送自协商码流。自协商并不使用专用数据包或带来任何高层协议开销。 ; s: E% F2 {5 E: I# y
接口的自动协商规则:
7 n3 i& l, J6 ? f 当接口对接时,双方能否正常通信和两端接口设置的工作模式是否匹配相关。
; ^) b9 C' ~8 y& Q 当两端接口都工作在相同类型的非自协商模式时,双方可以正常通信。 , m/ B) w" ^* ~) b% t
当两端接口都工作在自协商模式时,双方通过协商可以正常通信,最终的协商结果取决于能力低的一端,通过自协商功能还可以协商流量控制功能。 / F; a- {- x8 t, a K
当两端接口一端的工作模式为自协商,对端为非自协商时,接口最终协商的工作模式和对端设置的工作模式相关。
" x( L2 C# Y& P) `* f1 W! s
' u2 O0 v5 l( r0 ~4 u2 r 8冲突域和广播域 ' [. ~: T' e5 `" F4 C
8.1、冲突域 : ]8 d* |) i# B& \" p+ P. Y; E r
在传统的以粗同轴电缆为传输介质的以太网中,同一介质上的多个节点共享链路的带宽,争用链路的使用权,这样就会发生冲突,CSMA/CD机制中当冲突发生时,网络就要进行回退,这段回退的时间内链路上不传送任何数据。而且这种情况是不可避免的。 & X0 o5 s" i; x9 j- m6 P
同一介质上的节点越多,冲突发生的概率越大。这种连接在同一导线上的所有节点的集合就是一个冲突域。冲突域内所有节点竞争同一带宽,一个节点发出的报文(无论是单播、组播、广播)其余节点都可以收到。
! y. S% k& L! S( p; ]3 n$ t 8.2、广播域
. Y+ D! a2 y+ O; s p 因为网络中使用了广播,会占用带宽,降低设备的处理效率,必须对广播加以限制。比如ARP使用广播报文从IP地址来解析MAC地址。全1MAC地址FFFF-FFFF-FFFF为广播地址,所有节点都会处理目的地址为广播地址的数据帧。这种一个节点发送一个广播报文其余节点都能够收到的节点的集合,就是一个广播域。传统的网桥可以根据MAC表对单播报文进行转发,对于广播报文向所有的接口都转发,所以网桥的所有接口连接的节点属于一个广播域,但是每个接口属于一个单独冲突域。 ' o8 ?4 p; v3 l* J1 V; @
' y6 M" [8 p$ n3 W9 U( K! E9 A4 N) D, |
9、MAC子层
- `, w J$ R6 o2 u! W& m MAC(Media AccessControl)子层负责完成下列任务: , b4 E/ b7 t0 M+ J
9.1、提供物理链路的访问 ; |0 t9 ^6 y+ A3 e; m: P
MAC子层是物理层相关的,也就是说,不同的物理层有不同的MAC子层来进行访问。
" y& ?. l& H3 F/ c# r s0 p 在以太网中,主要存在两种MAC子层: 8 [0 C$ H! c8 F8 N& |
半双工MAC: % H. j' W& I2 M1 i/ m& F
物理层运行模式是半双工时提供访问。 % P3 _* F5 ]$ V- i( }
全双工MAC:
+ h7 H1 c8 F7 Y8 \! i 物理层运行模式是全双工时提供访问。 # {% z l2 e: E+ f9 p
这两种MAC都集成在网卡中,网卡初始化的时候一般进行自动协商,根据自动协商的结果决定运行模式,然后根据运行模式选择相应的访问MAC。
$ l" W7 Q& K) `- ]; ? 9.2、链路级的站点标识
, I4 v b0 Y# s3 o& w% F; N2 e$ j 在数据链路层识别网络上的各个站点。
) @1 r' ?% b* Y+ L4 d3 e: z4 ]( n7 T 也就是说,在该层次保留了一个站点地址,即MAC地址,来标识网络上的唯一一个站点。
{/ d9 O7 F/ G 为了进行站点标识,在MAC子层用MAC地址来唯一标识一个站点。
% _# q4 h1 d9 I9 J MAC地址由IEEE管理,以块为单位进行分配。一个组织(一般是制造商)从IEEE获得唯一的地址块,称为一个组织的OUI(Organizationally Unique Identifier)。获得OUI的组织可用该地址块为16777216个设备分配地址。
4 t. H1 F: d3 B0 S9 i: w MAC地址有48Bit,但通常被表示为12位的点分十六进制数。
; t$ T* c% A8 L/ D& U 例如,48Bit的MAC地址000000001110000011111100001110011000000000110100,表示为12位点分十六进制就是00e0.fc39.8034。
% ?0 S6 A9 s* K7 `' G7 S, y. f 每个MAC地址的前6位(点分十六进制)代表OUI,后6位由厂商自己分配。 & q- b/ C: ~1 H. `+ G" L2 L
例如,地址00e0.fc39.8034,前面的00e0.fc是IEEE分配给华为公司的OUI,后面的39.8034是由华为公司自己分配的地址编号。 & ]) J& e2 [9 ~9 P
MAC地址中的第2bit指示该地址是全局唯一还是局部唯一。以太网一直使用全局唯一地址。 5 }4 j. ]+ Z' \# ~+ U5 G/ E4 f
MAC地址可分为下面几种类别:
& t) S6 `& J9 J L q) A) Y 1、物理MAC地址 ) l1 O5 A& C$ b
这种类型的MAC地址唯一的标识了以太网上的一个终端,这样的地址是固化在硬件(如网卡)里面的。 ) M" X5 S. y, j* D
2、广播MAC地址 : W: P. Q2 ^, C; T% P
这是一个通用的MAC地址,用来表示网络上的所有终端设备。 9 p; c% N# @# r; f
广播MAC地址48Bit全是1,即ffff.ffff.ffff。 $ ]* S l4 X0 X- z' `6 i
3、组播MAC地址 2 l& i' }8 H6 Q9 p1 i
这是一个逻辑的MAC地址,用于代表网络上的一组终端。
+ w- Y! q$ C: T8 N) u6 f 组播MAC地址第8Bit是1,例如000000011011101100111010101110101011111010101000。 3 r: e- A! y) H
9.3、链路级的数据传输 / M( U, u0 m' ^0 f% u
从LLC子层接收数据,附加上MAC地址和控制信息后把数据发送到物理链路上;在这个过程中提供校验等功能。
8 W' Y% y2 b$ H x0 J) c: M; _ 数据的收发过程如下: 5 q% j1 k8 M) _( X
当上层要发送数据的时候,把数据提交给MAC子层。
) c& A4 o. D- d: b, a MAC子层把上层提交来的数据放入缓存区。
1 u( b7 E- Z4 G7 b" \4 X" \ 然后加上目的MAC地址和自己的MAC地址(源MAC地址),计算出数据帧的长度,形成以太网帧。 * F: b! K& B+ Q0 x( y
以太网帧根据目的MAC地址被发送到对端设备。 , s! g4 |9 F8 X; C
对端设备用帧的目的MAC地址,跟MAC地址表中的条目进行比较。
; F+ ?% [" n6 p( v( e5 T! Z 只要有一项匹配,则接收该以太网帧。若无任何匹配的项目,则丢弃该以太网帧。
) R+ F: S; z: ]+ o' D, y 以上描述的是单播的情况。如果上层应用程序加入一个组播组,数据链路层根据应用程序加入的组播组形成一个组播MAC地址,并把该组播MAC地址加入MAC地址表。这样当有针对该组的数据帧的时候,MAC子层就接收该数据帧并向上层发送。
% l& \& J U' n5 r$ D5 @* a' h
5 c7 Q+ T/ U7 [ K% ? 10、LLC子层
- G3 }& E3 s/ k$ v# J$ A! H 在前文的介绍中提到了MAC子层形成的帧结构,包括IEEE802.3的帧和ETHERNET_II帧。在ETHERNET_II帧中,由Type字段区分上层协议,这时候就没有必要实现LLC子层,仅包含一个MAC子层。
! E% L' o3 j) a+ p! y/ q# ^: n; w IEEE802.3帧中的LLC子层除了定义传统的链路层服务之外,还增加了一些其他有用的特性。这些特性都由DSAP、SSAP和Control字段提供。 / S" A9 ?( Q, L
例如以下三种类型的点到点传输服务: 0 Y& Q; ?7 v; r" m! Z
1、无连接的数据包传输服务 & A8 ?8 ~( ^5 K3 f; R0 L
目前的以太网实现就是这种服务。
) O2 j7 U) V2 ]3 Y& z7 E* w 2、面向连接的可靠的数据传输服务
- O- i; o R/ w, m+ I3 F4 T+ p) h 预先建立连接再传输数据,数据在传输过程中可靠性得到保证。
g" L, A& K* M# S 3、无连接的带确认的数据传输服务。
K, N$ B+ u. {7 I" W 该类型的数据传输服务不需要建立连接,但它在数据的传输中增加了确认机制,使可靠性大大增加。 - {3 @" |1 [' g f6 E; |
下面通过一个例子来说明SSAP和DSAP的应用。假设终端系统A和终端系统B要使用面向连接的可靠的数据传输服务,这时候会发生如下过程: 0 O" {, Q1 y; s8 l/ c
A给B发送一个数据帧,请求建立一个面向连接的可靠连接。
! A# u. H4 m5 u6 | B接收到以后,判断自己的资源是否够用(即是否建立了太多的连接),如果够用,则返回一个确认信息,该确认信息中包含了识别该连接的SAP值。 * u, v7 w0 W% M, g
A接收到回应后,知道B已经在本地建立了跟自己的连接。A也创建一个SAP值,来表示该连接,并发一个确认给B,连接建立。
' b& S/ I# k) _0 c A的LLC子层把自己要传送的数据进行封装,其中DSAP字节填写的是B返回的SAP,SSAP字节填写的是自己创建的SAP,然后发给MAC子层。 7 L0 N; i( d P* l( f5 b! L
A的MAC子层加上MAC地址和LENGTH字段之后,发送到数据链路上。 |6 I ~3 d" o" H3 I) }
B的MAC子层接收到该数据帧之后,提交给LLC子层,LLC子层根据DSAP字段判断出该数据帧属于的连接。
/ T. N7 p8 k) B: k5 ^+ ] B根据该连接的类型进行相应的校验和确认,通过这些校验和确认后,才向上层发送。 ; G. @1 @ k. k2 I9 y$ K6 T7 w
数据传输完毕之后,A给B发送一个数据帧来通知B拆除连接,通信结束。
7 H. I! D3 _9 j! H7 I6 h6 C
* `0 }$ O. _1 A, F1 E* V9 Y 11、以太网帧结构
5 q9 ^+ v0 C8 {: c! E 11.1、Ethernet_II的帧结构
; G% f: Q1 O% } ' g/ C: n" u0 x5 p
图1Ethernet_II的帧结构 " A# @1 ^7 T+ S. u* p
Ethernet_II的帧中各字段说明如下表1所示。 ! f6 M9 P% M; o9 h. _
表1 Ethernet_II的帧结构说明 9 h4 S3 u6 M& C* D. y5 T1 p/ {/ H
| 字段
* C4 K3 I# h% |5 Y6 `% i8 ~( _ | 说明 . X3 {1 ~7 N% I! w1 g- i3 \4 S; ~
| DMAC
, D; ]0 Z+ ?7 | | DMAC(Destination MAC)是目的地址。DMAC确定帧的接收者。
7 v# o- ^! [5 E! o1 J1 i | SMAC
' I* D: L+ V% X( | | SMAC(Source MAC)是源地址。SMAC字段标识发送帧的工作站。
' t m. D6 q2 y | Type 2 y) F: V; ^! g: T) q
| 两字节的类型字段用于标识数据字段中包含的高层协议,也就是说,该字段告诉接收设备如何解析数据字段。
% M3 x, i( k. E5 \ 在以太网中,多种协议可以在局域网中同时共存。因此,在Ethernet_II的类型字段中设置相应的十六进制值提供了在局域网中支持多协议传输的机制。
9 t. V0 h E$ }& r/ N2 X 类型字段取值为0800的帧代表IP协议帧。 ( W/ T! {& o5 f1 R' \9 ~" G
类型字段取值为0806的帧代表ARP协议帧。
, m( m, M5 r C0 a; U 类型字段取值为8035的帧代表RARP协议帧。 6 _" X( G* B5 _8 K ^8 _
类型字段取值为8137的帧代表IPX和SPX传输协议帧。
3 _0 W' z: J7 h! X9 } d' t | Data 2 Y+ i" m& @4 `
| 数据字段的最小长度必须为46字节以保证帧长至少为64字节,这意味着传输一字节信息也必须使用46字节的数据字段。 # l& [) X% j' j: w
如果填入该字段的信息少于46字节,该字段的其余部分也必须进行填充。
% O: r4 B2 }" }3 p1 ~) L2 V9 g 数据字段的最大长度为1500字节。
) H1 R0 w! E- { | CRC ; G7 v4 }; Q* F' I# z* B
| CRC(Cyclic Redundancy Check)循环冗余校验字段提供了一种错误检测机制。 * b* s+ W8 g' ]6 B( U1 Q/ D
每一个发送器都计算一个包括了地址字段、类型字段和数据字段的CRC码,然后将计算出的CRC码填入4字节的CRC字段。
5 x9 E( {/ W$ Y9 w | 11.2、IEEE802.3的帧结构
: }2 D. O/ @. s- n$ G9 S" U6 [
点击查看原图
% y5 b+ v9 ~7 p, O0 K# `" H: l
( O3 m# C. b6 {3 f% `6 z# g 图2 IEEE802.3的帧结构
- K& M i$ y+ \ 如下图2所示,IEEE802.3帧格式类似于Ethernet_II帧,只是Ethernet_II帧的Type域被802.3帧的Length域取代,并且占用了Data字段的8个字节作为LLC和SNAP字段。 . B+ d3 T$ X( @( i p& z
表2 IEEE802.3的帧结构说明 9 r; D" O+ V1 ]- k
| 字段 9 Z/ g8 B: p9 R& |: Z8 N
| 说明
# e0 u; q, s! Y- C! t | Length 6 M* k1 f b8 E8 X# }
| Length字段定义了Data字段包含的字节数。 5 V$ k3 y) d$ @* j3 P
| LLC 5 @1 y' x5 Q, H3 t
| LLC(Logical Link Control)由目的服务访问点DSAP(Destination Service Access Point)、源服务访问点SSAP(Source Service Access Point)和Control字段组成。
. A, V* s/ @7 L1 v8 e# G% d( x | SNAP
3 a# h, V, p3 n- \) N$ p; r | SNAP(Sub-network Access Protocol)由机构代码(org code)和类型(Type)字段组成。org code三个字节都为0。Type字段的含义与Ethernet_II帧中的Type字段相同。 4 j' z# ?9 Q) I) M
| 其他字段请参见Ethernet_II的帧的字段说明。
' K9 g$ D% ~ I" i+ ^0 Z IEEE802.3帧根据DSAP和SSAP字段的取值又可分为以下几类:
6 A. r0 H0 Q0 ^ 当DSAP和SSAP都取特定值0xff时,802.3帧就变成了Netware-ETHERNET帧,用来承载NetWare类型的数据。
. ?" a# }; H3 T) S 当DSAP和SSAP都取特定值0xaa时,802.3帧就变成了ETHERNET_SNAP帧。
+ }7 C( G2 l8 j; W3 U ETHERNET_SNAP帧可以用于传输多种协议。因此,SNAP可以被看作一种扩展,它允许厂商创建自己的以太网传输协议。
]) [5 I. s2 [) T2 K ETHERNET_SNAP标准由IEEE802.1委员会制定,以保证IEEE802.3局域网和以太网之间的互操作性。 $ I7 `7 n" J7 K, {, H( o
DSAP和SSAP其他的取值均为纯IEEE802.3帧。 |
-
点击查看原图
|