协议介绍
以太网是当今现有局域网(Local Area Network, LAN)采用的最通用的通信协议标准,该标准定义了在局域网中采用的电缆类型和信号处理方法。以太网是建立在CSMA/CD(Carrier Sense Multiple Access/Collision Detection,载波监听多路访问/冲突检测)机制上的广播型网络。
冲突的产生是限制以太网性能的重要因素,早期的以太网设备如HUB是物理层设备,不能隔绝冲突扩散,限制了网络性能的提高。而交换机做为一种能隔绝冲突的二层网络设备,极大的提高了以太网的性能,并替代HUB成为主流的以太网设备。然而交换机对网络中的广播数据流量不做任何限制,这也影响了网络的性能。
通过在交换机上划分VLAN和采用L3交换机可解决这一问题。
注意:划分VLan的目的是隔离广播域,不是为了隔离通信,所以才会用单臂路由和vlanif实现不同间vlan互访
冲突域
在共享网络,以太网络使用CSMA/CD技术,避免冲突问题。CSMA/CD的基本工作过程如下:
1.终端设备不停的检测共享线路的状态。
如果线路空闲则发送数据。
如果线路不空闲则一直等待。
2.如果有另外一个设备同时发送数据,两个设备发送的数据必然产生冲突,导致线路上的信号不稳定。
3.终端设备检测到这种不稳定之后,马上停止发送自己的数据。
4.终端设备发送一连串干扰脉冲,然后等待一段时间之后再进行发送数据。发送干扰脉冲的目的是为了通知其他设备,特别是跟自己在同一个时刻发送数据的设备,线路上已经产生了冲突。
5.检测到冲突后等待的时间是随机的。
CSMA/CD的工作原理可简单总结为:先听后发,边发边听,冲突停发,随机延迟后重发。
广播域
因为网络中使用了广播,会占用带宽,降低设备的处理效率,必须对广播加以限制。比如ARP使用广播报文从IP地址来解析MAC地址。全1MAC地址FFFF-FFFF-FFFF为广播地址,所有节点都会处理目的地址为广播地址的数据帧。这种一个节点发送一个广播报文其余节点都能够收到的节点的集合,就是一个广播域。传统的网桥可以根据MAC表对单播报文进行转发,对于广播报文向所有的接口都转发,所以网桥的所有接口连接的节点属于一个广播域,但是每个接口属于一个单独冲突域。
最小帧长
由于CSMA/CD算法的限制,以太网帧必须不能小于某个最小长度。以太网中,最小帧长为64字节,这是由最大传输距离和冲突检测机制共同决定的。
规定最小帧长是为了避免这种情况发生:A站点已经将一个数据包的最后一个Bit发送完毕,但这个报文的第一个Bit还没有传送到距离很远的B站点。B站点认为线路空闲继续发送数据,导致冲突。
图1 Ethernet_II的帧结构
高层协议必须保证Data域至少包含46字节,这样加上以太网帧头的14字节和帧尾的4字节校验码正好满足64字节的最小帧长,如图1所示。如果实际数据不足46个字节,则高层协议必须填充一些数据单元。
以太网的双工模式
以太网的物理层存在半双工和全双工两种模式。
半双工
数据可以双向传输,但不能·同时传输。采用CSMA/CD机制,有最大传输距离的限制,HUB工作在半双工模式。单双工数据只能单向传输
全双工
全双工从根本上解决了以太网的冲突问题,以太网从此告别CSMA/CD。
同一时刻可以接收和发送数据,最大吞吐量达双倍速率,消除了半双工的物理距离限制。当前制造的网卡、二层设备、三层设备都支持全双工模式,HUB除外。
实现全双工的硬件保证:支持全双工的网卡芯片,收发线路完全分离的物理介质,点到点的连接。
以太网的网络层次
一些组织和厂家提出把数据链路层再进行分层,分为媒体接入控制子层(MAC)和逻辑链路控制子层(LLC)。这样不同的物理层对应不同的MAC子层,LLC子层则可以完全独立。如图1所示。
图1 以太网链路层的分层结构
MAC子层
MAC子层的功能简介
MAC(Media Access Control)子层负责完成下列任务:
提供物理链路的访问。
MAC子层是物理层相关的,也就是说,不同的物理层有不同的MAC子层来进行访问。
链路级的站点标识:在数据链路层识别网络上的各个站点。
数据的收发过程如下:
1.当上层要发送数据的时候,把数据提交给MAC子层。
2.MAC子层把上层提交来的数据放入缓存区。
3.然后加上目的MAC地址和自己的MAC地址(源MAC地址),计算出数据帧的长度,形成以太网帧。
4.以太网帧根据目的MAC地址被发送到对端设备。
5.对端设备用帧的目的MAC地址,跟MAC地址表中的条目进行比较。只要有一项匹配,则接收该以太网帧。若无任何匹配的项目,则丢弃该以太网帧。(这里对端设备是指主机,而不是交换机,交换机可以泛洪未知单播帧)
以太网帧结构
Ethernet_II的帧结构
图1 Ethernet_II的帧结构
Ethernet_II的帧中各字段说明如表1所示。
字段 | 说明 |
DMAC | DMAC(Destination MAC)是目的地址。DMAC确定帧的接收者。 |
SMAC | SMAC(Source MAC)是源地址。SMAC字段标识发送帧的工作站。 |
Type |
|
Data | 数据字段的最小长度必须为46字节以保证帧长至少为64字节,这意味着传输一字节信息也必须使用46字节的数据字段。 如果填入该字段的信息少于46字节,该字段的其余部分也必须进行填充。 数据字段最小长度为46字节,以太网帧最短长度64字节。数据字段的最大长度为1500字节,使得以太网帧的最大长度为1518字节。 |
FCS | FCS:Frame Check Sequence(帧校验序列),俗称帧尾,即计算机网络数据链路层的协议数据单元(帧)的尾部字段,是一段4个字节的循环冗余校验码。
源节点发送数据帧时,由帧的帧头和数据部分通过循环冗余校验计算,将结果放入FCS,目的节点接收到后,用同样的方式再计算一遍,如果与接收到的FCS不同,则认为帧在传输过程中发生了错误,从而选择丢弃这个帧。 FCS提供了一种错误检测机制,用来验证帧在传输过程中的完整性。 |
IEEE802.3帧
如图所示,IEEE802.3帧格式类似于Ethernet_II帧,只是Ethernet_II帧的Type域被802.3帧的Length域取代,并且占用了Data字段的8个字节作为LLC和SNAP字段。
字段 | 说明 |
Length | Length字段定义了Data字段包含的字节数。 |
LLC | LLC(Logical Link Control)由目的服务访问点DSAP(Destination Service Access Point)、源服务访问点SSAP(Source Service Access Point)和Control字段组成。 |
SNAP | SNAP(Sub-network Access Protocol)由机构代码(org code)和类型(Type)字段组成。org code三个字节都为0。Type字段的含义与Ethernet_II帧中的Type字段相同。 |
当Type或者Length字段值小于等于1500(或者十六进制的0x05DC)时,帧使用的是IEEE802.3格式。当Type或Length字段值大于等于1536(或者十六进制的0x0600)时,帧使用的是EthernetII格式。以太网中大多数的数据帧使用的是EthernetII格式。
LLC子层
在前文的介绍中提到了MAC子层形成的帧结构,包括IEEE802.3的帧和ETHERNET_II帧。在ETHERNET_II帧中,由Type字段区分上层协议,这时候就没有必要实现LLC子层,仅包含一个MAC子层。
IEEE802.3帧中的LLC子层除了定义传统的链路层服务之外,还增加了一些其他有用的特性。这些特性都由DSAP、SSAP和Control字段提供。
例如以下三种类型的点到点传输服务:
下面通过一个例子来说明SSAP和DSAP的应用。假设终端系统A和终端系统B要使用面向连接的可靠的数据传输服务,这时候会发生如下过程:
1.A给B发送一个数据帧,请求建立一个面向连接的可靠连接。
2.B接收到以后,判断自己的资源是否够用(即是否建立了太多的连接),如果够用,则返回一个确认信息,该确认信息中包含了识别该连接的SAP值。
3.A接收到回应后,知道B已经在本地建立了跟自己的连接。A也创建一个SAP值,来表示该连接,并发一个确认给B,连接建立。
4.A的LLC子层把自己要传送的数据进行封装,其中DSAP字节填写的是B返回的SAP,SSAP字节填写的是自己创建的SAP,然后发给MAC子层。
5.A的MAC子层加上MAC地址和LENGTH字段之后,发送到数据链路上。
6.B的MAC子层接收到该数据帧之后,提交给LLC子层,LLC子层根据DSAP字段判断出该数据帧属于的连接。
7.B根据该连接的类型进行相应的校验和确认,通过这些校验和确认后,才向上层发送。
8.数据传输完毕之后,A给B发送一个数据帧来通知B拆除连接,通信结束。
交换机的工作原理
二层交换机工作在数据链路层,它对数据帧的转发是建立在MAC地址基础之上的。交换机不同的接口发送和接收数据是独立的,各接口属于不同的冲突域,因此有效地隔离了网络中的冲突域。
二层交换设备通过学习以太网数据帧的源MAC地址来维护MAC地址与接口的对应关系(保存MAC与接口对应关系的表称为MAC地址表),通过其目的MAC地址来查找MAC地址表决定向哪个接口转发。
MAC地址表
MAC地址表记录了交换机学习到的其他设备的MAC地址与接口的对应关系。交换机在转发数据帧时,根据数据帧的目的MAC地址查询MAC地址表。如果MAC地址表中包含与该帧目的MAC地址对应的表项,则直接通过该表项中的出接口转发该报文;如果MAC地址表中没有包含该帧目的MAC地址对应的表项时,交换机将采取泛洪方式在除接收接口外的所有接口发送该报文。
交换机的3种数据帧处理行为
泛洪
如果从传输介质进入交换机的某个端口的帧是一个单播帧,交换机会去MAC表查这个帧的目的MAC地址。如果查不到这个MAC地址,则交换机将对该单播帧执行泛洪操作。(泛洪出去的还是单播帧)
如果从传输介质进入交换机的某个端口的帧是一个广播帧,交换机不会去查MAC地址表,而是直接对该广播帧执行泛洪操作。
转发
如果从传输介质进入交换机的某个端口的帧是一个单播帧,则交换机会去MAC表查这个帧的目的MAC地址。如果查到了这个MAC地址表,则比较这个MAC地址在MAC地址表中对应的端口编号是不是这个帧从传输介质进入交换机的那个端口的端口编号。如果不是,则交换机执行转发操作(将该帧送至该帧目的MAC地址在MAC地址表中对应的那个端口,并从那个端口发送出去)。
丢弃
如果从传输介质进入交换机的某个端口的帧是一个单播帧,则交换机会去MAC表查这个帧的目的MAC地址。如果查到了这个MAC地址表,则比较这个MAC地址在MAC地址表中对应的端口编号是不是这个帧从传输介质进入交换机的那个端口的端口编号。如果是,则交换机将对该帧执行丢弃操作。(接收到的数据帧的目的MAC出接口和接收数据帧接口编号一样,就丢弃)
交换机的MAC地址学习 (主机已知对端的IP地址和MAC地址)
1.
初始状态下,交换机并不知道所连接主机的MAC地址,所以MAC地址表为空。
2.
主机1想要发送数据给主机2(假设已知对端的IP地址和MAC地址),会封装数据帧,包含自己的源IP地址和源MAC地址。交换机收到后会查自己的MAC地址表,发现没有对应表项,则收到的数据帧是“未知单播帧” 。
3.
由于收到的数据帧是“未知单播帧”,因此交换机会泛洪该数据帧。
同时,交换机将收到的数据帧的源MAC地址和对应端口编号记录到MAC地址表中。
注意:MAC地址表中动态学习的表项并非永远有效,每一条表项都有一个生存周期,到达生存周期仍得不到更新的表项将被删除,这个生存周期被称作老化时间。例如华为S系列交换机的老化时间缺省值是300秒。
4.
广播网络中的所有主机均会收到该数据帧,但是只有主机2会处理(因为目的MAC地址是主机2)。
主机2会回复数据帧给主机1,也是单播数据帧。
5.
交换机收到该单播数据帧后,会查看自己的MAC地址表,发现有对应的表项,则将数据从对应的端口转发出去。
同时,交换机将收到的数据帧的源MAC地址和对应端口编号记录到MAC地址表中。
交换机MAC地址学习(主机未知对端的MAC地址)
数据封装过程
主机1在发送数据报文前,需要先进行报文封装,包括源目IP地址、源目MAC地址等。
初始状态
主机1为了进行报文封装,会查本地的ARP缓存表。初始状态下,主机1的ARP缓存是空的。
而刚上电的交换机,初始状态下,交换机的MAC地址表也是空的。
泛洪数据帧
主机1发送ARP请求报文,请求目的MAC地址。
交换机收到的数据帧后查MAC地址表,发现没有对应表项,则向所有非接收端口,泛洪该数据帧。
学习MAC地址
交换机将收到的数据帧的源MAC地址和对应端口记录到MAC地址表中。
目标主机回复
主机2收到ARP请求报文后,会进行相应的处理,并发送ARP响应报文,回复主机1。
交换机收到的数据帧后查MAC地址表,发现有对应表项,则向对应端口转发该数据帧;并且交换机将收到的数据帧的源MAC地址和对应端口记录到MAC地址表中。
最终,主机1收到主机2的ARP响应报文后,就会将对应的IP地址和MAC地址记录到自己的ARP缓存中,并封装自己的报文,访问主机2。
补充
注:这里的不能通信是指不能使用ip协议通信,A和B都有互相的mac地址,可以通过二层协议相互通信。