Author:onceday date:2022年7月20日
局域网是一种使用广播信道的数据链路层网络,以太网是其最典型的代表。
具有以下特点:
以太网是一种共享介质的局域网技术,多个站点链接到同一个共享介质上,同一时间只能有一个站点发送数据,这种链路连接着多个终端,就是多路访问。
冲突域是连接到同一个导线的所有节点的集合:所有的节点都共享带宽,就会发生冲突,且一个节点发出的报文(无论是单播、组播、广播)其余节点都可以收到。
广播域:网络中能接收任一设备发出的广播帧的所有设备的集合。简单的说如果站点发出一个广播信号,所有能接收收到这个信号的设备范围称为一个广播域。传统的二层交换机所有端口都属于一个广播域。
以太网包含以下三种帧:
以太网适配器借助集线器进行组网,有以下三种形式:
集线器工作在物理层,只是简单的转发比特,不进行碰撞检测。
以太网需要考虑如何共享信道,有以下两种大类:
随机接入包含MA、CSMA、CSMA/CD、CSMA/CA。
受控接入包含预约、轮询、令牌传递。
信道划分协议代价高昂,不适合局域网使用。
轮询协议中要求其中一个结点为主节点,然后以循环的方式遍历整个网络,优点是提高了效率,缺点是引入了轮询时延,且主节点一旦故障,网络将失去瘫痪。
令牌传递协议,协议中没有主节点,一个令牌的特殊帧在节点之间以某种固定的次序进行交换。
随机接入协议,每个节点能以信道的全部速率进行发送,当碰撞时 ,每个节点反复的重发它的帧,直到改帧通过为止。最常用的有ALOHA协议(检测到冲突不会停止发送)和载波监听多点接入(CSMA)协议。
以太网使用的是CSMA/CD协议,但新的以太网由于引入了以太网交换机,已经不共享信道了,也就不要碰撞检测了。
1982年的DIX Ethernet V2是第一个正式以太网标准。第一个是1983年IEEE 802委员会定义的IEEE 802.3标准。两者的帧有些许不同,但大致算兼容。
IEEE 802委员会曾把局域网的数据链路层拆分成逻辑链路控制LLC子层和媒体接入控制MAC子层。
但LLC子层逐渐已经被废弃了。对于这种结构,物理层的内容都放在MAC子层了,即MAC子层以下对LLC子层是完全透明的。
最早的以太网把所有的站点连到一根总线上:
以太网使用曼彻斯特编码,因而无需提供长度信息。
协议全称:载波监听多点接入/碰撞检测。
电磁波在总线上以有限的速率传播,在1km电缆的传播时延约为5us。
将总线上单程端到端传播时延即为e。
那么A站点至少需要2e的时间知道自己数据与B站点发送的数据有无冲突。即A数据到达B站点时,B站点也发出了数据,然后到达A站点。
实际情况时,要按最坏的情况考虑 ,即最远的两个端点。
CSMA/CD协议不支持同时发送和接收,所以工作在双向交替通信(半双工通信)。
在A站点发送数据的到B站点前,即0-e时间内:
因此,0-2e这段时间也叫争用期(碰撞窗口)。
当检测到碰撞时,使用截断二进制指数退避算法确定重发时机:
如果帧很短,发送时间小于2e,那么很有可能在发送完成后,发生碰撞,但又无法检测到,那么该帧就丢失了。
因此,以太网规定了一个最短帧长64字节。
对于10 Mbit/s以太网,发送512 bit需要51.2us,所以争用期可以固定为51.2us:
因此,实用的以太网都能在争用期51.2us内检测到可能发生的碰撞。
此外还有强化碰撞信号,让其他用户能知道现在已经发生了碰撞。
一般发送32比特或48比特的人为干扰信号。
接收成功之后,还需等待一个帧间最小间隔9.6us(96bit),使刚接收到数据帧的站点的接收缓存来得及清理。
当总线式以太网的利用率达到30%时,就已经处于重载情况了,此时很多网络容量被碰撞消耗掉了。
CSMA/CD发送数据帧流程图:
OUI: Organizationally unique identifier,代表网络硬件制造商编号,他由IEEE统一分配
24位address:代表该制造商所制造的某个网络产品(如网卡)的系列号,它由网络制造商分别并保证每个序列号唯一。
在OUI中,其中第一字节的最低位(I/G)表示此地址是单播地址还是组播地址,如果第一字节的最低位(LSB)=0,表示此地址为单播地址,如果为1,表示此地址为组播地址。第一字节的第二位(U/G)表示此地址由IEEE维护的全局地址还是局域性地址,U/G=0,表示IEEE全局维护地址,U/G=1,表示局域性维护地址。
几种MAC地址类型:
广播地址:FFFF:FFFF:FFFF
组播地址:0100:5E01:0101
单播地址:00D0:0011:2233
在数据帧帧中,目的MAC地址可以为上面三种类型的任意一种,但是源MAC地址只能为单播地址,并且IEEE规定,设备接收到源MAC地址不为单播的地址需要丢弃。
冲突域:
【定义】在同一个冲突域中的每一个节点都能收到所有被发送的帧。简单的说就是同一时间内只能有一台设备发送信息的范围。
【分层】基于OSI的第一层(数据链路层)物理层
【设备】第二层设备能隔离冲突域,比如Switch。交换机能缩小冲突域的范围,交换接的每一个端口就是一个冲突域。
广播域:
【定义】网络中能接收任一设备发出的广播帧的所有设备的集合。简单的说如果站点发出一个广播信号,所有能接收收到这个信号的设备范围称为一个广播域。
【分层】基于OSI的第二层(物理层) 数据链路层
【设备】第三层设备才能隔离广播域,比如Router。路由器能隔离广播域,其每一个端口就是一个广播域。
每个以太网帧发送时都是以8个字节的前导码开始,Preamble是1和0交替(1 0 1 0 1 0…….)的7个字节数据,该部分的作用是通知接收方有数据帧到来,使其与输入的时钟保持同步,56bit 模式容许站点在帧的开始可以丢弃一些bit。SFD是一个字10101011,最后使用11,来通知接收方下一字段就是目的主机的地址了。实际上前导码都是在物理层加进去的,并不是帧的一部分。
Type/Length:2字节,根据数值的不同代表2种不同的封装格式,如果字段值在0x0000-0x05DC范围内,则表示该字段为Length,该帧为802.3 raw封装。如果字段值0x0600-0xFFFF范围内,则表示该字段为Type字段,该帧为Ethernet II封装,0x05DD-0x05FF保留没有使用。
PayLoad:上层协议有效载荷,最小为46字节,最大为1500字节,对于Type封装格式,上层协议必须保证该字段的值大于46字节,对于Length封装,对于有效载荷不够46字节的报文链路层必须进行填充。因为CSMA/CD协议要求最小比特为512,即64字节。
FCS:4字节的校验和。
为什么Ethernet II 帧不需要长度?
那么Ethernet II为什么不需要Length呢?因为当时DIX联盟只跑了三种协议 –0x0600 XNS(施乐),0x0800 IP(Internet协议), 0x6003 DECNET。而这些协议都有自己的长度字段。所以不用在以太网头里面再指定Length,只需表明Type即可。
为什么IEEE接收Type后一切都这么顺利?
因为之前DIX公司分配的以太网Type的值,最小的是0x0600 = 1536. 这个值大于1500. 所以这个值≤1500,代表的是长度,≥1536代表的是类型。
为什么最大帧是1518字节?
这个是链路层的MTU决定的,早期由于设备缓存及CPU处理能力的限制,无法处理巨型帧,所以规定IP MTU为1500. 其实目前的交换机等都可以传送巨型帧(9000字节以上)。
自协商功能允许一个网络设备能够将自己所支持的工作模式信息传达给网络上的对端,并接收对方可能传递过来的相应信息。
对于两端处于自协商工作方式的设备,最终协商的结果是采用二者技术能力域中优先级低的网口提供的工作方式工作。协商级别一般为1000Mfull,1000Mhalf,100Mfull ,100Mhalf,10Mfull,10Mhalf。
支持自协商(Autonegotiation)的以太网接口则在链路UP之前发送FLP(Fast Link Pulse),FLP实际上是一组LTP和数据脉冲的组合,它们表明一种含义:例如我支持100M全双工。
千兆设备几乎没有半双工的情况(虽然可以协商),所以很多双工的问题都不存在了。
自动协商允许设备用一种方式“讨论”可能的传输速率,然后选择双方可接受的最佳速率。它们使用叫做快速链路脉冲的FLP交换各自传输能力的通告。FLP可以让对端知道源端的传输能力是怎样的。当交换FLP时,两个站点根据以下从高到低的优先级侦测双方共有的最佳方式。
1000BASE-T全双工、1000BASE-T、100BASE-T2 全双工、100BASE-TX 全双工、100BASE-T2、100BASE-T4、100BASE-TX、10BASE-T 全双工、10BASE-T。
例如,A和B正在自动协商,并且A具有10/100/1000全半双工的能力,但是B只有10/100全半双工的能力,这样双方共有的最高链路能力为100,全双工。一旦双方进行自动协商,链路就会运行在双方能够支持的最佳能力下。
由于自动协商功能是IEEE后续制定的标准,存在的问题是部分站点不支持协商,为了支持这种情况,须要支持协商的站点具有BYPASS功能,即主动认为自己为半双工。这是为了避免双工不匹配。
在网络中,可能发送端具有较高的处理能力,而接收端处理能力较低,为了避免数据在以太网中传输的过程中由于拥塞导致的数据丢失,引入flow control概念
半双工模式下,以太网利用CSMA/CD机制处理冲突和链路使用问题。根据CSMA/CD机制,半双工的模式下,采取的流控方式为Backpressure,即背压。该种方法有两种实现,一个是数据接收者有意制造一次冲突,数据发送者检测到冲突采取Backoff,这样就延缓了数据的发送;另外一个方法是制造载波信号,使数据发送者感觉到接收者要发送数据,从而通过检测到载波而进行延时传输。
在全双工模式下,接收者通过发送一种特殊的数据帧来通知发送者,停止发送报文,这种特殊的数据帧称为PAUSE帧。
以太网Pause帧格式:
PAUSE帧的长度固定为64字节(包括CRC)
PAUSE帧的目的MAC为组播MAC :0180-c200-0001
源MAC为发送PAUSE帧的节点的MAC
LENTH/TYPE字段固定为0x8808
MAC 控制参数域字段表示要求发送者暂停发送流量的时间,数值有效范围为0-65535, 单位为512bit time(bit time指链路上传输1bit需要的时间,如100M链路bit time为10ns)。如果数据报文的接收者在发送PAUSE帧后,在PAUSE帧发送的等待时间超时之前可以处理数据报文,则再发送一个等待时间为0的PAUSE帧通知数据发送者开始发送数据。
PAUSE的接收者(也是数据报文的发送者),收到PAUSE帧后会根据PAUSE帧中的等待时间停止发送报文,等待时间超时后继续发送报文。
共享式以太网具有的弊端:
冲突严重
广播泛滥
无任何安全性
网桥(Bridge) :用于桥接LAN网络中的各种不同的网络设备。
主要构成:
主要功能:
网桥的基本操作:
转发、过滤帧
维持转发、过滤过程中所应用的到信息
我们所说的交换机可以认为是多端口网桥。
**网桥和交换机主要不同 **
多端口网桥:交换机工作时,实际上允许许多组端口间的通道同时工作。所以,交换机的功能体现出不仅仅是一个网桥的功能,而是多个网桥功能的集合。即网桥一般分有两个端口,而交换机通常具有高密度的端口。
传输速率的区别:交换机与网桥数据信息的传输速率相比,交换机要快于网桥。
数据帧转发方式的区别:网桥在发送数据帧前,通常要接收到完整的数据帧并执行帧检测序列fcs后,才开始转发该数据帧。交换机具有存储转发和直接转发两种帧转发方式。直接转发方式在发送数据以前,不需要在接收完整个数据帧和经过32bit循环冗余校验码crc的计算检查后的等待时间。
VLAN(Virtual Local Area Network)又称虚拟局域网,是一种将局域网设备从逻辑上划分成一个个网段,从而实现虚拟工作组的新兴数据交换技术。
一个VLAN组成一个逻辑子网,即一个逻辑广播域,它可以覆盖多个网络设备,允许处于不同地理位置的网络用户加入到一个逻辑子网中。
VLAN工作在OSI参考模型的第2层和第3层,IEEE标准为 802.1Q,VLAN之间的通信是通过第3层的路由来完成的。
Tag帧格式:
基于端口划分:
基于MAC地址划分:
基于子网划分:
基于用户划分:
输入规则检查即交换机接收到一个数据报文时,需要判定端口是否在接收到的报文所划分的VLAN中,如果端口不在接收报文所划分的VLAN,则此报文需要被丢弃。
输出规则检查用于在报文输出时,判定端口是否在输出报文VID所对应的VLAN中。
PVID:Port VLAN ID,指端口的缺省VLAN ID。Hybrid端口和Trunk端口属于多个VLAN,所以需要设置缺省VLAN ID。Hybrid端口和Trunk端口的缺省VLAN为VLAN 1。
PVID主要有两个作用:第一对于接收到的Untag包则添加本端口的PVID再进行转发;第二是接收过滤作用,比如只接收等于PVID的VLAN TAG包。
VLAN ID:VLAN TAG包的VLAN ID号,有效范围是1-4094,0和4095都为协议保留值。
Tag、untag:tag是指以太网数据帧中携带有4字节802.1Q信息的VLAN标签,其中vlan id,用于指名数据包属于那个vlan,untag指数据包不属于任何vlan,没有vlan标签。
**Access的端口类型:**Access口只能属于1个VLAN,一般用于连接计算机的端口。
Trunk端口: Trunk口上可以同时传送多个VLAN的包,一般用于交换机之间的链接。
接口类型 | 接收不带Tag的报文 | 接收带Tag的报文 | 发送帧处理过程 |
---|---|---|---|
Access接口 | 接收该报文,并打上缺省的VLAN ID。 | 对比VLAN ID与缺省VLAN ID相同时,接收该报文。 不同时,丢弃该报文。 | 先剥离帧的PVID Tag,然后再发送。 |
Trunk接口 | 打上缺省的VLAN ID。当缺省VLAN ID在允许通过的VLAN ID列表里时,接收该报文。当缺省VLAN ID不在允许通过的VLAN ID列表里时,丢弃该报文。 | 当VLAN ID在接口允许通过的VLAN ID列表里时,接收该报文。 当VLAN ID不在接口允许通过的VLAN ID列表里时,丢弃该报文。 | 当VLAN ID与缺省VLAN ID相同,且是该接口允许通过的VLAN ID时,去掉Tag,发送该报文。 当VLAN ID与缺省VLAN ID不同,且是该接口允许通过的VLAN ID时,保持原有Tag,发送该报文。 |
Access端口只属于1个VLAN,所以它的缺省VLAN就是它所在的VLAN,不用设置;
Trunk端口属于多个VLAN,所以需要设置缺省VLAN ID。缺省情况下,Trunk端口的缺省VLAN为VLAN 1 如果设置了端口的缺省VLAN ID,当端口接收到不带VLAN Tag的报文后,则将报文转发到属于缺省VLAN的端口;当端口发送带有VLAN Tag的报文时,如果该报文的VLAN ID与端口缺省的VLAN ID相同,则系统将去掉报文的VLAN Tag,然后再发送该报文。
Tag table表示是否输出Tag帧。
成员table表示是否属于该VLAN。
总结:
MAC FDB查找KEY为VID+MAC。
MAC FDB中除开包括查找KEY外,还包括端口MAP,是否为静态,是否老化,是否为过滤地址等属性。
交换机依据报文携带的的目的MAC和分配给报文的VID作为查找KEY找到地址表:
IF 查找成功并且行为为Forward
则FDB的端口MAP为报文的潜在转发端口MAP
ELSE IF查找成功并且行为为Filter
则过滤掉报文
ELSE
将报文在VLAN内部泛洪
FDB查找结果仅仅作为报文的潜在转发端口列表,是否需要转发到这个端口还要依赖其他决策,例如STP。
上面提到的是一个转发端口MAP,这个MAP可以包括多个端口成员。
FDB添加指用户可以手动的添加一个MAC,添加信息包括:
用户可以手工的删除FDB的中的MAC,其删除方法可以是删除指定的MAC,也可以是FDB中条目的某个子集,其指定方案包括:
上面所有方案中,只有VID+MAC方案才能删除静态地址,其他方案仅仅是删除动态地址
除开用户可以手工的添加地址外,交换机可以依据报文信息自动学习MAC地址。
当满足如下条件时,MAC地址可以被学习:
当满足如上学习条件时,交换机使用报文的源MAC+VID查找MAC地址表:
生成树协议(spanning-tree protocol)由IEEE 802.1d标准定义。其作用是为了提供冗余链路,解决网络环路问题。
生成树协议通过SPA(生成树算法)生成一个没有环路的网络,当主要链路出现故障时,能够自动切换到备份链路,保证网络的正常通信。
新的有RSTP快速生成树和MSTP多生成树协议(支持VLAN,每个vlan一颗生成树)
一个STP网络有一个根桥:
STP将整个网络裁剪成为一颗树,称之为为Spanning Tree,避免环路。裁剪步骤如下(选举过程,拓扑计算,端口行为确定):
STP通过控制端口的STP状态,切断环路,STP包括的端口状态:
状态 | Forward | Learning |
---|---|---|
Disabled | Y | N |
Blocking | N(接收BPDU) | N |
Listening | N(接收BPDU) | N |
Learning | N(接收BPDU) | Y |
Forwarding | Y | Y |
关于以太网的简介就到这里,后面更详细的有机会以专题形式总结。
学无止境,苦中作乐!