broadcast address(OSIIO网络知识)

说说IO(一)- IO的分层 IO性能对于一个系统的影响是至关重要的。一个系统经过多项优化以后,瓶颈往往落在数据库;而数据库经过多种优化以后,瓶颈最终会落到IO。而IO性能的**,明显落后于CPU...

说说IO(一)- IO的分层

IO性能对于一个系统的影响是至关重要的。一个系统经过多项优化以后,瓶颈往往落在数据库;而数据库经过多种优化以后,瓶颈最终会落到IO。而IO性能的**,明显落后于CPU的**。Memchached也好,NoSql也好,这些流行技术的背后都在直接或者间接地回避IO瓶颈,从而提高系统性能。

IO系统的分层:

OSI/IO网络知识

1. 三层结构

上图层次比较多,但总的就是三部分。磁盘(存储)、VM(卷管理)和文件系统。专有名词不好理解,打个比方说:磁盘就相当于一块待用的空地;

LVM相当于空地上的围墙(把空地划分成多个部分);文件系统则相当于每块空地上建的楼房(决定了有多少房间、房屋编号如何,能容纳多少人住);

而房子里面住的人,则相当于系统里面存的数据。

· 文件系统—数据如何存放?

对应了上图的File System和Buffer Cache。

File System(文件系统):解决了空间管理的问题,即:数据如何存放、如何读取。

Buffer Cache:解决数据缓冲的问题。对读,进行cache,即:缓存经常要用到的数据;对写,进行buffer,缓冲一定数据以后,一次性进行写入。

· VM—磁盘空间不足了怎么办?

对应上图的Vol Mgmt。

VM其实跟IO没有必然联系。他是处于文件系统和磁盘(存储)中间的一层。VM屏蔽了底层磁盘对上层文件系统的影响。当没有VM的时候,文件系统直接使用存储上的地址空间,因此文件系统直接受限于物理硬盘,这时如果发生磁盘空间不足的情况,对应用而言将是一场噩梦,不得不新增硬盘,然后重新进行数据复制。而VM则可以实现动态扩展,而对文件系统没有影响。另外,VM也可以把多个磁盘合并成一个磁盘,对文件系统呈现统一的地址空间,这个特性的杀伤力不言而喻。

· 存储—数据放在哪儿?如何访问?如何提高IO速度?

对应上图的Device Driver、IO Channel和Disk Device

数据最终会放在这里,因此,效率、数据安全、容灾是这里需要考虑的问题。而提高存储的性能,则可以直接提高物理IO的性能

2. Logical IO vs Physical IO

逻辑IO是操作系统发起的IO,这个数据可能会放在磁盘上,也可能会放在内存(文件系统的Cache)里。

物理IO是设备驱动发起的IO,这个数据最终会落在磁盘上。

逻辑IO和物理IO不是一一对应的。

说IO(二)- IO模型

这部分的东西在网络编程经常能看到,不过在所有IO处理中都是类似的。

IO请求的两个阶段:

等待资源阶段:IO请求一般需要请求特殊的资源(如磁盘、RAM、文件),当资源被上一个使用者使用没有被释放时,IO请求就会被阻塞,直到能够使用这个资源。

使用资源阶段:真正进行数据接收和发生。

举例说就是排队和服务。

在等待数据阶段,IO分为阻塞IO和非阻塞IO。

阻塞IO:资源不可用时,IO请求一直阻塞,直到反馈结果(有数据或超时)。

非阻塞IO:资源不可用时,IO请求离开返回,返回数据标识资源不可用

在使用资源阶段,IO分为同步IO和异步IO。

同步IO:应用阻塞在发送或接收数据的状态,直到数据成功传输或返回失败。

异步IO:应用发送或接收数据后立刻返回,数据写入OS缓存,由OS完成数据发送或接收,并返回成功或失败的信息给应用。

OSI/IO网络知识

按照Unix的5个IO模型划分

· 阻塞IO

· 非阻塞IO

· IO复用

· **驱动的IO

· 异步IO

从性能上看,异步IO的性能无疑是最好的。

各种IO的特点

· 阻塞IO:使用简单,但随之而来的问题就是会形成阻塞,需要独立线程配合,而这些线程在大多数时候都是没有进行运算的。Java的BIO使用这种**,问题带来的问题很明显,一个Socket需要一个独立的线程,因此,会造成线程**。

· 非阻塞IO:采用轮询**,不会形成线程的阻塞。Java的NIO使用这种**,对比BIO的优势很明显,可以使用一个线程进行所有Socket的监听(select)。大大**了线程数。

· 同步IO:同步IO保证一个IO操作结束之后才会返回,因此同步IO效率会低一些,但是对应用来说,编程**会简单。Java的BIO和NIO都是使用这种**进行数据处理。

· 异步IO:由于异步IO请求只是写入了缓存,从缓存到硬盘是否成功不可知,因此异步IO相当于把一个IO拆成了两部分,一是发起请求,二是获取处理结果。因此,对应用来说**了复杂性。但是异步IO的性能是所有很好的,而且异步的思想贯穿了IT系统方方面面。

IO(三)- IO性能的重要指标

最重要的三个指标

IOPS

IOPS,即每秒钟处理的IO请求数量。IOPS是随机访问类型业务(OLTP类)很重要的一个参考指标。

· 一块物理硬盘能提供多少IOPS?

从磁盘上进行数据读取时,比较重要的几个时间是:寻址时间(找到数据块的起始位置),旋转时间(等待磁盘旋转到数据块的起始位置),传输时间(读取数据的时间和返回的时间)。其中寻址时间是固定的(磁头定位到数据的存储的扇区即可),旋转时间受磁盘转速的影响,传输时间受数据量大小的影响和接口类型的影响(不用硬盘接口速度不同),但是在随机访问类业务中,他的时间也很少。因此,在硬盘接口相同的情况下,IOPS主要受限于寻址时间和传输时间。以一个15K的硬盘为例,寻址时间固定为4ms,传输时间为60s/15000*1/2=2ms,忽略传输时间。1000ms/6ms=167个IOPS。

· OS的一次IO请求对应物理硬盘一个IO吗?

在没有文件系统、没有VM(卷管理)、没有RAID、没有存储设备的情况下,这个答案还是成立的。但是当这么多中间层加进去以后,这个答案就不是这样了。物理硬盘提供的IO是有限的,也是整个IO系统存在瓶颈的最大根源。所以,如果一块硬盘不能提供,那么多块在一起并行处理,这不就行了吗?确实是这样的。可以看到,越是高端的存储设备的cache越大,硬盘越多,一方面通过cache异步处理IO,另一方面通过盘数**,尽可能把一个OS的IO分布到不同硬盘上,从而提高性能。文件系统则是在cache上会影响,而VM则可能是一个IO分布到多个不同设备上(Striping)。

所以,一个OS的IO在经过多个中间层以后,发生在物理磁盘上的IO是不确定的。可能是一对一个,也可能一个对应多个。

· IOPS能算出来吗?

对单块磁盘的IOPS的计算没有没问题,但是当系统后面接的是一个存储系统时、考虑不同读写比例,IOPS则很难计算,而需要根据实际情况进行测试。主要的因素有:

·

o 存储系统本身有自己的缓存。缓存大小直接影响IOPS,理论上说,缓存越大能cache的东西越多,在cache命中率**的情况下,IOPS会越高。

o RAID级别。不同的RAID级别影响了物理IO的效率。

o 读写混合比例。对读操作,一般只要cache能足够大,可以大大**物理IO,而都在cache中进行;对写操作,不论cache有多大,最终的写还是会落到磁盘上。因此,100%写的IOPS要越狱小于100%的读的IOPS。同时,100%写的IOPS大致等同于存储设备能提供的物理的IOPS。

o 一次IO请求数据量的多少。一次读写1KB和一次读写1MB,显而易见,结果是完全不同的。

当时上面N多因素混合在一起以后,IOPS的值就**扑朔迷离了。所以,一般需要通过实际应用的测试才能**。

IO Response Time

即IO的响应时间。IO响应时间是从操作系统内核发出一个IO请求到接收到IO响应的时间。因此,IO Response time除了包括磁盘获取数据的时间,还包括了操作系统以及在存储系统内部IO等待的时间。一般看,随着IOPS的**,因为IO出现等待,IO响应时间也会随之**。对一个OLTP系统,10ms以内的响应时间,是比较合理的。下面是一些IO性能示例:

· 一个8K的IO会比一个64K的IO速度快,因为数据读取的少些。

· 一个64K的IO会比8个8K的IO速度快,因为前者只请求了一个IO而后者是8个IO。

· 串行IO会比随机IO快,因为串行IO相对随机IO说,即便没有Cache,串行IO在磁盘处理上也会少些操作。

需要注意,IOPS与IO Response Time有着密切的联系。一般情况下,IOPS**,说明IO请求多了,IO Response Time会相应**。但是会出现IOPS一直**,但是IO Response Time**非常慢,超过20ms甚至几十ms,这时候的IOPS虽然还在提高,但是意义已经不大,因为整个IO系统的服务时间已经不可取。

Throughput

为吞吐量。这个指标衡量标识了最大的数据传输量。如上说明,这个值在顺序访问或者大数据量访问的情况下会比较重要。尤其在大数据量写的时候。

吞吐量不像IOPS影响因素很多,吞吐量一般受限于一些比较固定的因素,如:网络带宽、IO传输接口的带宽、硬盘接口带宽等。一般他的值就等于上面几个地方中某一个的瓶颈。

一些概念

IO Chunk Size

即单个IO操作请求数据的大小。一次IO操作是指从发出IO请求到返回数据的**。IO Chunk Size与应用或业务逻辑有着很密切的关系。比如像Oracle一类数据库,由于其block size一般为8K,读取、写入时都此为单位,因此,8K为这个系统主要的IO Chunk Size。IO Chunk Size

小,考验的是IO系统的IOPS能力;IO Chunk Size大,考验的时候IO系统的IO吞吐量。

Queue Deep

熟悉数据库的人都知道,SQL是可以批量提交的,这样可以大大提高操作效率。IO请求也是一样,IO请求可以积累一定数据,然后一次提交到存储系统,这样一些相邻的数据块操作可以进行合并,**物理IO数。而且Queue Deep如其名,就是设置一起提交的IO请求数量的。一般Queue Deep在IO驱动层面上进行配置。

Queue Deep与IOPS有着密切关系。Queue Deep主要考虑批量提交IO请求,自然只有IOPS是瓶颈的时候才会有意义,如果IO都是大IO,磁盘已经成瓶颈,Queue Deep意义也就不大了。一般来说,IOPS的峰值会随着Queue Deep的**而**(不会非常显著),Queue Deep一般小于256。

随机访问(随机IO)、顺序访问(顺序IO)

随机访问的特点是每次IO请求的数据在磁盘上的位置跨度很大(如:分布在不同的扇区),因此N个非常小的IO请求(如:1K),必须以N次IO请求才能获取到相应的数据。

顺序访问的特点跟随机访问相反,它请求的数据在磁盘的位置是连续的。当系统发起N个非常小的IO请求(如:1K)时,因为一次IO是有代价的,系统会取完整的一块数据(如4K、8K),所以当第一次IO完成时,后续IO请求的数据可能已经有了。这样可以**IO请求的**。这也就是所谓的预取。

随机访问和顺序访问同样是有应用决定的。如数据库、小文件的存储的业务,大多是随机IO。而视频类业务、大文件存取,则大多为顺序IO。

选取合理的观察指标:

以上各指标中,不用的应用场景需要观察不同的指标,因为应用场景不同,有些指标甚至是没有意义的。

随机访问和IOPS: 在随机访问场景下,IOPS往往会到达瓶颈,而这个时候去观察Throughput,则往往远低于理论值。

顺序访问和Throughput:在顺序访问的场景下,Throughput往往会达到瓶颈(磁盘限制或者带宽),而这时候去观察IOPS,往往很小。

说说IO(四)- 文件系统

OSI/IO网络知识

OSI/IO网络知识

文件系统各有不同,其最主要的目标就是解决磁盘空间的管理问题,同时提供高效性、安全性。如果在分布式**下,则有相应的分布式文件系统。Linux上有ext系列,Windows上有Fat和NTFS。如图为一个linux下文件系统的结构。

其中VFS(Virtual File System)是Linux Kernel文件系统的一个模块,简单看就是一个Adapter,对下屏蔽了下层不同文件系统之间的差异,对上为操作系统提供了统一的接口.

中间部分为各个不同文件系统的实现。

再往下是Buffer Cache和Driver。

OSI/IO网络知识

文件系统的结构

各种文件系统实现**不同,因此性能、管理性、可靠性等也有所不同。下面为Linux Ext2(Ext3)的一个大致文件系统的结构。

OSI/IO网络知识

Boot Block存放了引导程序。

Super Block存放了整个文件系统的一些全局参数,如:卷名、状态、块大小、块总数。他在文件系统被mount时读入内存,在umount时被释放。

OSI/IO网络知识

上图描述了Ext2文件系统中很重要的三个数据结构和他们之间的关系。

Inode:Inode是文件系统中最重要的一个结构。如图,他里面记录了文件相关的所有信息,也就是我们常说的meta信息。包括:文件类型、权限、所有者、大小、atime等。Inode里面也保存了指向实际文件内容信息的索引。其中这种索引分几类:

· 直接索引:直接指向实际内容信息,公有12个。因此如果,一个文件系统block size为1k,那么直接索引到的内容最大为12k

· 间接索引

· 两级间接索引

· **间接索引

如图:

OSI/IO网络知识

Directory代表了文件系统中的目录,包括了当前目录中的所有Inode信息。其中每行只有两个信息,一个是文件名,一个是其对应的Inode。需要注意,Directory不是文件系统中的一个特殊结构,他实际上也是一个文件,有自己的Inode,而它的文件内容信息里面,包括了上面看到的那些文件名和Inode的对应关系。如下图:

OSI/IO网络知识

Data Block即存放文件的时间内容块。Data Block大小必须为磁盘的数据块大小的整数倍,磁盘一般为512字节,因此Data Block一般为1K、2K、4K。

Buffer Cache

Buffer & Cache

虽然Buffer和Cache放在一起了,但是在实际**中Buffer和Cache是完全不同了。Buffer一般对于写而言,也叫“缓冲区”,缓冲使得多个小的数据块能够合并成一个大数据块,一次性写入;Cache一般对于读而且,也叫“缓存”,避免**的磁盘读取。如图为Linux的free命令,其中也是把Buffer和Cache进行区分,这两部分都算在了free的内存。

OSI/IO网络知识

Buffer Cache

Buffer Cache中的缓存,本质与所有的缓存都是一样,数据结构也是类似,下图为VxSF的一个Buffer Cache结构。

OSI/IO网络知识

这个数据结构与memcached和Oracle SGA的buffer何等相似。左侧的hash chain完成数据块的寻址,上方的的链表记录了数据块的状态。

Buffer vs Direct I/O

文件系统的Buffer和Cache在某些情况下确实提高了速度,但是反之也会带来一些负面影响。一方面文件系统**了一个中间层,另外一方面,当Cache使用不当、配置不好或者有些业务无法获取cache带来的好处时,cache则成为了一种负担。

适合Cache的业务:串行的大数据量业务,如:NFS、FTP。

不适合Cache的业务:随机IO的业务。如:Oracle,小文件读取。

块设备、字符设备、裸设备

这几个东西看得很晕,找了一些资料也没有找到很准确的说明。

从硬件设备的角度来看,

· 块设备就是以块(比如磁盘扇区)为单位收发数据的设备,它们支持缓冲和随机访问(不必顺序读取块,而是可以在任何时候访问任何块)等特性。块设备包括硬盘、CD-ROM 和 RAM 盘。

· 字符设备则没有可以进行物理寻址的媒体。字符设备包括串行端口和磁带设备,只能逐字符地读取这些设备中的数据。

从操作系统的角度看(对应操作系统的设备文件类型的b和c),

# ls -l /dev/*lv

brw------- 1 root system 22, 2 May 15 2007 lv

crw------- 2 root system 22, 2 May 15 2007 rlv

· 块设备能支持缓冲和随机读写。即读取和写入时,可以是任意长度的数据。最小为1byte。对块设备,你可以成功执行下列命令:dd if=/dev/zero of=/dev/vg01/lv bs=1 count=1。即:在设备中写入一个字节。硬件设备是不支持这样的操作的(最小是512),这个时候,操作系统首先完成一个读取(如1K,操作系统最小的读写单位,为硬件设备支持的数据块的整数倍),再更改这1k上的数据,然后写入设备。

· 字符设备只能支持固定长度数据的读取和写入,这里的长度就是操作系统能支持的最小读写单位,如1K,所以块设备的缓冲功能,这里就没有了,需要使用者自己来完成。由于读写时不经过任何缓冲区,此时执行dd if=/dev/zero of=/dev/vg01/lv bs=1 count=1,这个命令将会出错,因为这里的bs(block size)太小,系统无法支持。如果执行dd if=/dev/zero of=/dev/vg01/lv bs=1024 count=1,则可以成功。这里的block size有OS内核参数决定。

如上,相比之下,字符设备在使用更为直接,而块设备更为灵活。文件系统一般建立在块设备上,而为了追求高性能,使用字符设备则是更好的选择,如Oracle的裸设备使用。

裸设备

裸设备也叫裸分区,就是没有经过格式化、没有文件系统的一块存储空间。可以写入二进制内容,但是内容的格式、其中信息的组织等问题,需要使用它的人来完成。文件系统就是建立在裸设备之上,并完成裸设备空间的管理。

CIO

CIO即并行IO(Concurrent IO)。在文件系统中,当某个文件被多个**同时访问时,就出现了Inode竞争的问题。一般地,读操作使用的共享锁,即:多个读操作可以并发进行,而写操作使用排他锁。当锁被写**占用时,其他所有操作均阻塞。因此,当这样的情况出现时,整个应用的性能将会大大**。如图:

OSI/IO网络知识

CIO就是为了解决这个问题。而且CIO带来的性能提高直逼裸设备。当文件系统支持CIO并开启CIO时,CIO默认会开启文件系统的Direct IO,即:让IO操作不经过Buffer直接进行底层数据操作。由于不经过数据Buffer,在文件系统层面就无需考虑数据一致性的问题,因此,读写操作可以并行执行。

在最终进行数据存储的时候,所有操作都会串行执行,CIO把这个事情交个了底层的driver。

OSI/IO网络知识

说IO(五)- 逻辑卷管理

LVM(逻辑卷管理),位于操作系统和硬盘之间,LVM屏蔽了底层硬盘带来的复杂性。最简单的,LVM使得N块硬盘在OS看来成为一块硬盘,大大提高了系统可用性。

LVM的引入,使得文件系统和底层磁盘之间的关系**更为灵活,而且更方便关系。LVM有以下特点:

· 统一进行磁盘管理。按需分配空间,提供动态扩展。

· 条带化(Striped)

· 镜像(mirrored)

· 快照(snapshot)

LVM可以做动态磁盘扩展,想想看,当系统管理员发现应用空间不足时,敲两个命令就完成空间扩展,估计做梦都要笑醒:)

LVM的磁盘管理**

OSI/IO网络知识

LVM中有几个很重要的概念:

· PV(physical volume):物理卷。在LVM中,一个PV对应就是操作系统能看见的一块物理磁盘,或者由存储设备分配操作系统的lun。一块磁盘唯一对应一个PV,PV创建以后,说明这块空间可以纳入到LVM的管理。创建PV时,可以指定PV大小,即可以把整个磁盘的部分纳入PV,而不是全部磁盘。这点在表面上看没有什么意义,但是如果主机后面接的是存储设备的话就很有意义了,因为存储设备分配的lun是可以动态扩展的,只有当PV可以动态扩展,这种扩展性才能向上延伸。

· VG(volume group):卷组。一个VG是多个PV的**,简单说就是一个VG就是一个磁盘资源池。VG对上屏蔽了多个物理磁盘,上层是使用时只需考虑空间大小的问题,而VG解决的空间的如何在多个PV上连续的问题。

· LV(logical volume):逻辑卷。LV是最终可供使用卷,LV在VG中创建,有了VG,LV创建是只需考虑空间大小等问题,对LV而言,他看到的是一直联系的地址空间,不用考虑多块硬盘的问题。

有了上面三个,LVM把单个的磁盘抽象成了一组连续的、可随意分配的地址空间。除上面三个概念外,还有一些其他概念:

· PE(physical extend): 物理扩展块。LVM在创建PV,不会按字节**去进行空间管理。而是按PE为单位。PE为空间管理的最小单位。即:如果一个1024M的物理盘,LVM的PE为4M,那么LVM管理空间时,会按照256个PE去管理。分配时,也是按照分配了多少PE、剩余多少PE考虑。

· LE(logical extend):逻辑扩展块。类似PV,LE是创建LV考虑,当LV需要动态扩展时,每次最小的扩展单位。

对于上面几个概念,无需刻意去记住,当你需要做这么一个东西时,这些概念是自然而然的。PV把物理硬盘转换成LVM中对于的逻辑(解决如何管理物理硬盘的问题),VG是PV的**(解决如何组合PV的问题),LV是VG上空间的再划分(解决如何给OS使用空间的问题);而PE、LE则是空间分配时的单位。

OSI/IO网络知识

如图,为两块18G的磁盘组成了一个36G的VG。此VG上划分了3个LV。其PE和LE都为4M。其中LV1只用到了sda的空间,而LV2和LV3使用到了两块磁盘。

串联、条带化、镜像

OSI/IO网络知识

串联(Concatenation): 按顺序使用磁盘,一个磁盘使用完以后使用后续的磁盘。

条带化(Striping): 交替使用不同磁盘的空间。条带化使得IO操作可以并行,因此是提高IO性能的关键。另外,Striping也是RAID的基础。如:VG有2个PV,LV做了条带数量为2的条带化,条带大小为8K,那么当OS发起一个16K的写操作时,那么刚好这2个PV对应的磁盘可以对整个写入操作进行并行写入。

OSI/IO网络知识

Striping带来好处有:

· 并发进行数据处理。读写操作可以同时发送在多个磁盘上,大大提高了性能。

Striping带来的问题:

· 数据完整性的风险。Striping导致一份完整的数据被分布到多个磁盘上,任何一个磁盘上的数据都是不完整,也无法进行还原。一个条带的损坏会导致所有数据的失效。因此这个问题只能通过存储设备来弥补。

· 条带大小的设定很大程度决定了Striping带来的好处。如果条带设置过大,一个IO操作最终还是发生在一个磁盘上,无法带来并行的好处;当条带设置国小,本来一次并行IO可以完成的事情会最终导致了多次并行IO。

镜像(mirror)

如同名字。LVM提供LV镜像的功能。即当一个LV进行IO操作时,相同的操作发生在另外一个LV上。这样的功能为数据的安全性提供了支持。如图,一份数据被同时写入两个不同的PV。

OSI/IO网络知识

使用mirror时,可以**一些好处:

· 读取操作可以从两个磁盘上获取,因此读效率会更好些。

· 数据完整复杂了一份,安全性更高。

但是,伴随也存在一些问题:

· 所有的写操作都会同时发送在两个磁盘上,因此实际发送的IO是请求IO的2倍

· 由于写操作在两个磁盘上发生,因此一些完整的写操作需要两边都完成了才算完成,带来了额外负担。

· 在处理串行IO时,有些IO走一个磁盘,另外一些IO走另外的磁盘,一个完整的IO请求会被打乱,LVM需要进行IO数据的合并,才能提供给上层。像一些如预读的功能,由于有了多个数据获取同道,也会存在额外的负担。

快照(Snapshot)

OSI/IO网络知识

快照如其名,他保存了某一时间点磁盘的状态,而后续数据的变化不会影响快照,因此,快照是一种备份很好手段。

但是快照由于保存了某一时间点数据的状态,因此在数据变化时,这部分数据需要写到其他地方,随着而来回带来一些问题。关于这块,后续存储也涉及到类似的问题,后面再说。

说IO(六)- Driver & IO Channel

这部分值得一说的是多路径问题。IO部分的高可用性在整个应用系统中可以说是最关键的,应用层可以坏掉一两台机器没有问题,但是如果IO不通了,整个系统都没法使用。如图为一个典型的SAN网络,从主机到磁盘,所有路径上都提供了冗余,以备发生通路中断的情况。

· OS配置了2块光纤卡,分别连不同交换机

· SAN网络配置了2个交换机

· 存储配置了2个Controller,分别连不同交换机

OSI/IO网络知识

如上图结构,由于存在两条路径,对于存储划分的一个空间,在OS端会看到两个(两块磁盘或者两个lun)。可怕的是,OS并不知道这两个东西对应的其实是一块空间,如果路径再多,则OS会看到更多。还是那句经典的话,“计算机中碰到的问题,往往可以通过**的一个中间层来解决”,于是有了多路径软件。他提供了以下特性:

· 把多个映射到同一块空间的路径合并为一个提供给主机

· 提供fail over的支持。当一条通路出现问题时,及时切换到其他通路

· 提供load balance的支持。即同时使用多条路径进行数据传送,发挥多路径的资源优势,提高系统整体带宽。

Fail over的能力一般OS也可能支持,而load balance则需要与存储配合,所以需要根据存储不同配置安装不同的多通路软件。

多路径除了解决了高可用性,同时,多条路径也可以同时工作,提高系统性能。

说说IO(七)- RAID

Raid很基础,但是在存储系统中占据非常重要的地位,所有涉及存储的书籍都会提到RAID。RAID通过磁盘冗余的**提高了可用性和可高性,一方面**了数据读写速度,另一方面**了数据的安全性。

RAID 0

对数据进行条带化。使用两个磁盘交替存放连续数据。因此可以实现并发读写,但带来的问题是如果一个磁盘损坏,另外一个磁盘的数据将失去意义。RAID 0最少需要2块盘。

OSI/IO网络知识

RAID 1

对数据进行镜像。数据写入时,相同的数据同时写入两块盘。因此两个盘的数据完全一致,如果一块盘损坏,另外一块盘可以顶替使用,RAID 1带来了很好的可靠性。同时读的时候,数据可以从两个盘上进行读取。但是RAID 1带来的问题就是空间的浪费。两块盘只提供了一块盘的空间。RAID 1最少需要2块盘。

OSI/IO网络知识

RAID 5 和 RAID 4

使用多余的一块校验盘。数据写入时,RAID 5需要对数据进行计算,以便得出校验位。因此,在写性能上RAID 5会有损失。但是RAID 5兼顾了性能和安全性。当有一块磁盘损坏时,RAID 5可以通过其他盘上的数据对其进行恢复。

如图可以看出,右下角为p的就是校验数据。可以看到RAID 5的校验数据依次分布在不同的盘上,这样可以避免出现热点盘(因为所有写操作和更新操作都需要修改校验信息,如果校验都在一个盘做,会导致这个盘成为写瓶颈,从而拖累整体性能,RAID 4的问题)。RAID 5最少需要3块盘。

OSI/IO网络知识

RAID 6

RAID 6与RAID 5类似。但是提供了两块校验盘(下图右下角为p和q的)。安全性更高,写性能更差了。RAID 0最少需要4块盘。

OSI/IO网络知识

RAID 10(Striped mirror)

RAID 10是RAID 0 和RAID 1的结合,同时兼顾了二者的特点,提供了高性能,但是同时空间使用也是最大。RAID 10最少需要4块盘。

OSI/IO网络知识

需要注意,使用RAID 10来称呼其实很容易产生混淆,因为RAID 0+1和RAID 10基本上只是两个数字交换了一下位置,但是对RAID来说就是两个不同的组成。因此,更容易理解的**是“Striped mirrors”,即:条带化后的镜像——RAID 10;或者“mirrored stripes”,即:镜像后的条带化。比较RAID 10和RAID 0+1,虽然最终都是用到了4块盘,但是在数据组织上有所不同,从而带来问题。RAID 10在可用性上是要高于RAID 0+1的:

· RAID 0+1 任何一块盘损坏,将失去冗余。如图4块盘中,右侧一组损坏一块盘,左侧一组损坏一块盘,整个盘阵将无法使用。而RAID 10左右各损坏一块盘,盘阵仍然可以工作。

· RAID 0+1 损坏后的恢复**会更慢。因为先经过的mirror,所以左右两组中保存的都是完整的数据,数据恢复时,需要完整恢复所以数据。而RAID 10因为先条带化,因此损坏数据以后,恢复的只是本条带的数据。如图4块盘,数据少了一半。

OSI/IO网络知识

RAID 50

RAID 50 同RAID 10,先做条带化以后,在做RAID 5。兼顾性能,同时又保证空间的利用率。RAID 50最少需要6块盘。

OSI/IO网络知识

总结:

· RAID与LVM中的条带化原理上类似,只是实现层面不同。在存储上实现的RAID一般有专门的芯片来完成,因此速度上远比LVM块。也称硬RAID。

· 如上介绍,RAID的使用是有风险的,如RAID 0,一块盘损坏会导致所有数据丢失。因此,在实际使用中,高性能**会使用RAID 10,兼顾性能和安全;一般情况下使用RAID 5(RAID 50),兼顾空间利用率和性能;

说IO(八)- 三分天下

DAS、SAN和NAS

OSI/IO网络知识

为了**人们不断扩大的需求,存储方案也是在**的。而DAS、SAN、NAS直接反映这种反映了这种趋势。

· 单台主机。在这种情况下,存储作为主机的一个或多个磁盘存在,这样局限性也是很明显的。由于受限于主机空间,一个主机只能装一块到几块硬盘,而硬盘空间时受限的,当磁盘满了以后,你不得不为主机更换更大空间的硬盘。

· 独立存储空间。为了解决空间的问题,于是考虑把磁盘独立出来,于是有了DAS(Direct Attached Storage),即:直连存储。DAS就是一组磁盘的集**,数据读取和写入等也都是由主机来控制。但是,随之而来,DAS又面临了一个他无法解决的问题——存储空间的共享。接某个主机的JBOD(Just a Bunch Of Disks,磁盘组),只能这个主机使用,其他主机无法用。因此,如果DAS解决空间了,那么他无法解决的就是如果让空间能够在多个机器共享。因为DAS可以理解为与磁盘交互,DAS处理问题的层面相对更低。使用协议都是跟磁盘交互的协议

· 独立的存储网络。为了解决共享的问题,借鉴以太网的思想,于是有了SAN(Storage Area Network),即:存储网络。对于SAN网络,你能看到两个非常特点,一个就是光纤网络,另一个是光纤交换机。SAN网络由于不会之间跟磁盘交互,他考虑的更多是数据存取的问题,因此使用的协议相对DAS层面更高一些。

o 光纤网络:对于存储来说,与以太网很大的一个不同就是他对带宽的要求非常高,因此SAN网络下,光纤成为了其连接的基础。而其上的光纤协议相比以太网协议而言,也被设计的更为简洁,性能也更高。

o 光纤交换机:这个类似以太网,如果想要做到真正的“网络”,交换机是基础。

· 网络文件系统。存储空间可以共享,那文件也是可以共享的。NAS(Network attached storage)相对上面两个,看待问题的层面更高,NAS是在文件系统级别看待问题。因此他面的不再是存储空间,而是单个的文件。因此,当NAS和SAN、DAS放在一起时,很容易引起混淆。NAS从文件的层面考虑共享,因此NAS相关协议都是文件控制协议。

o NAS解决的是文件共享的问题;SAN(DAS)解决的是存储空间的问题。

o NAS要处理的对象是文件;SAN(DAS)要处理的是磁盘。

o 为NAS服务的主机必须是一个完整的主机(有OS、有文件系统,而存储则不一定有,因为可以他后面又接了一个SAN网络),他考虑的是如何在各个主机直接高效的共享文件;为SAN提供服务的是存储设备(可以是个完整的主机,也可以是部分),它考虑的是数据怎么分布到不同磁盘。

o NAS使用的协议是控制文件的(即:对文件的读写等);SAN使用的协议是控制存储空间的(即:把多长的一串二进制写到某个地址)

OSI/IO网络知识

如图,对NAS、SAN、DAS的组成协议进行了划分,从这里也能很清晰的看出他们之间的差别。

NAS:涉及SMB协议、NFS协议,都是网络文件系统的协议。

SAN:有FC、iSCSI、AOE,都是网络数据传输协议。

DAS:有PATA、SATA、SAS等,主要是磁盘数据传输协议。

从DAS到SAN,在到NAS,在不同层面对存储方案进行的补充,也可以看到一种从低级到高级的**趋势。而现在我们常看到一些分布式文件系统(如hadoop等)、数据库的sharding等,从存储的角度来说,则是在OS层面(应用)对数据进行存储。从这也能看到一种技术**的趋势。

跑在以太网上的SAN

SAN网络并不是只能使用光纤和光纤协议,当初之所以使用FC,传输效率是一个很大的问题,但是以太网**到今天被不断的完善、加强,带宽的问题也被不断的解决。因此,以太网上的SAN或许会成为一个趋势。

· FCIP

如图两个FC的SAN网络,通过FCIP实现了两个SAN网络数据在IP网络上的传输。这个时候SAN网络还是以FC协议为基础,还是使用光纤。

OSI/IO网络知识

· iFCP

通过iFCP**,SAN网络由FC的SAN网络演变为IP SAN网络,整个SAN网络都基于了IP**。但是主机和存储直接使用的还是FC协议。只是在接入SAN网络的时候通过iFCP进行了转换

OSI/IO网络知识

· iSCSI

iSCSI是比较主流的IP SAN的提供**,而且其效率也**了认可。

OSI/IO网络知识

对于iSCSI,最重要的一点就是SCSI协议。SCSI(Small Computer Systems Interface)协议是计算机内部的一个通用协议。是一组**集,它定义了与大量设备(主要是与存储相关的设备)通信所需的接口和协议。如图,SCSI为block device drivers之下。

OSI/IO网络知识

从SCIS的分层来看,共分三层:

高层:提供了与OS各种设备之间的接口,实现把OS如:Linux的VFS请求转换为SCSI请求

中间层:实现高层和底层之间的转换,类似一个协议**。

底层:完成于具体物理设备之间的交互,实现真正的数据处理。

OSI/IO网络知识

一、OSI七层网络协议

OSI是Open System Interconnect的缩写,意为开放式系统互联。

OSI参考模型各个层次的划分遵循下列原则:

根据不同层次的抽象分层每层应当有一个定义明确的功能每层功能的选择应该有助于制定网络协议的国际**。各层边界的选择应尽量节省跨过接口的通信量。层数应足够多,以避免不同的功能混杂在同一层中,但也不能太多,否则体系结构会过于庞大同一层中的各网络节点都有相同的层次结构,具有同样的功能。同一节点内相邻层之间通过接口(可以是逻辑接口)进行通信。七层结构中的每一层使用下一层提供的服务,并且向其上层提供服务。不同节点的同等层按照协议实现对等层之间的通信。

根据以上**,OSI参考模型分为(从上到下):物理层->数据链路层->网络层->传输层->会话层->表示层->应用层。

物理层涉及在信道上传输的原始比特流。数据链路层的主要任务是加强物理层传输原始比特流的功能,使之对应的网络层显现为一条无错线路。发送包把输入数据封装在数据帧,按顺序传送出去并处理接收方回送的确认帧。网络层关系到子网的运行控制,其中一个关键问题是确认从源端到目的端如何选择路由。传输层的基本功能是从会话层接收数据而且把其分成较小的单元传递给网络层。会话层允许不同机器上的用户建立会话关系。表示层用来完成某些特定的功能。应用层包**大量人们普遍需要的协议。

各层功能见下表:

OSI/IO网络知识

七层模型的每一层都具有清晰的特征。基本来说:

第七至第四层(应用层->表示层->会话层->传输层)处理数据源和数据目的地之间的端到端通信;第三至第一层(网络层->数据链路层->物理层)处理网络设备间的通信。

另外:

OSI模型的七层也可以划分为两组:

上层(层7、层6和层5,即应用层->表示层->会话层)。上层处理应用程序问题,并且通常只应用在软件上。**层,即应用层是与终端用户最接近的。下层(层4、层3、层2和层1,即传输层->网络层->数据链路层->物理层)。下层是处理数据传输的。物理层和数据链路层应用在硬件和软件上。最底层,即物理层是与物理网络媒介(比如说,电线)最接近的,并且负责在媒介上发送

第7层-应用层

定义了用于在网络中进行通信和数据传输的接口 - 用户程式;提供**服务,比如虚拟终端、文件以及任务的传输和处 理;应用层为操作系统或网络应用程序提供访问网络服务的接口。应用层协议的代表包括:Telnet、FTP、HTTP、SNMP等。

第6层-表示层

掩盖不同系统间的数据格式的不同性;指定独立结构的数据传输格式;

数据的编码和解码;加密和解密;压缩和解压缩这一层主要解决拥护信息的语法表示问题。它将欲交换的数据从适合于某一用户的抽象语法,转换为适合于OSI系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩, 加密和解密等工作都由表示层负责。

第5层-会话层

管理用户会话和对话;控制用户间逻辑连接的建立和挂断;报告上一层发生的错误这一层也可以称为会晤层或对话层,在会话层及以上的高层次中,数据传送的单位不再另外命名,而是统称为报文。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。

第4层-处理信息的传输层

管理网络中端到端的信息传送;通过错误纠正和流控制机制提供可靠且有序的数据包传送;提供面向无连 接的数据包的传送;第4层的数据单元也称作数据包(packets)。但是,当你谈论TCP等具体的协议时又有特殊的叫法,TCP的数据单元称为段 (segments)而UDP协议的数据单元称为“数据报(datagrams)”。这个层负责获取全部信息,因此,它必须跟踪数据单元碎片、乱序到达的 数据包和其它在传输**中可能发生的危险。第4层为上层提供端到端(最终用户到最终用户)的透明的、可靠的数据传输服务。所为透明的传输是指在通信**中 传输层对上层屏蔽了通信传输系统的具体细节。传输层协议的代表包括:TCP、UDP、SPX等。

第3层-网络层

定义网络设备间如何传输数据;根据唯一的网络设备地址路由数据包;提供流量和拥塞控制以防止网络资源的损耗在 计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择**的网间路由和交换结点, 确保数据及时传送。网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,其中含有

逻辑地址信息- -源站点和目的站点地址的网络地址。如 果你在谈论一个IP地址,那么你是在处理第3层的问题,这是“数据包”问题,而不是第2层的“帧”。IP是第3层问题的一部分,此外还有一些路由协议和地 址解析协议(ARP)。有关路由的一切事情都在这第3层处理。地址解析和路由是3层的重要目的。网络层还可以实现拥塞控制、网际互连等功能。在这一层,数据的单位称为数据包(packet)。网络层协议的代表包括:IP、IPX、RIP、OSPF等。

第2层-数据链路层

定义操作通信连接的程序;

封装数据包为数据帧;

监测和纠正数据包传输错误

在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)在信道上无差错的传输,并进行各电路上的动作系列。数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。在这一层,数据的单位称为帧(frame)。数据链路层协议的代表包括:SDLC、HDLC、PPP、STP、帧中继等。

第1层-物理层

定义通过网络设备发送数据的物理**;

作为网络媒介和设备间的接口;

定义光学、电气以及机械特性。

规定通信设备的机械的、电气的、功能的和**的特性,用以建立、维护和拆除物理链路连接。具体地讲,机械 特性规定了网络连接时所需接插件的规格尺寸、引脚数量和排列情况等;电气特性规定了在物理连接上传输bit流时线路上**电平的大小、阻抗匹配、传输速率 距离限制等;功能特性是指对各个**先分配确切的**含义,即定义了DTE和DCE之间各个线路的功能;规程特性定义了利用**线进行bit流传输的一组 操作规程,是指在物理连接的建立、维护、交换信息是,DTE和DCE双放在各电路上的动作系列。在这一层,数据的单位称为比特(bit)。属于物理层定义的典型规范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。

二、TCP/IP

TCP/IP(传输控制协议/网间网协议)是目前世界上应用最为广泛的协议,它的流行与Internet的迅猛**密切相关。

TCP/IP最初是为互联网的原型ARPANET所设计的,目的是提供一整套方便实用、能应用于多种网络上的协议,事实证明TCP/IP做到了这一点,它使网络互联**容易起来,并且使越来越多的网络加入其中,成为Internet的事实**。

TCP/IP协议族包含了很多功能各异的子协议。为此我们也利用上文所述的分层的**来剖析它的结构。

TCP/IP层次模型共分为四层:应用层->传输层->网络层->数据链路层。

各层功能见下表

OSI/IO网络知识

TCP(Tran**ission Control Protocol:传输控制协议)和UDP(User Datagram Protocol:用户数据报协议)协议属于传输层协议。其中:

TCP提供IP**下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。

应用层应用层是所有用户所面向的应用程序的统称。ICP/IP协议族在这一层面有着很多协议来支持不同的应用,许多大家所熟悉的基于Internet的应用的实现就离不开这些协议。如我们进行万维网(WWW)访问用到了HTTP协议、文件传输用FTP协议、电子邮件发送用SMTP、域名的解析用DNS协议、远程登录用Telnet协议等等,都是属于TCP/IP应用层的;就用户而言,看到的是由一个个软件所构筑的大多为图形化的操作界面,而实际后台运行的便是上述协议。

传输层

这一层的的功能主要是提供应用程序间的通信,TCP/IP协议族在这一层的协议有TCP和UDP。

网络层

TCP/IP协议族中非常关键的一层,主要定义了IP地址格式,从而能够使得不同应用类型的数据在Internet上通畅地传输,IP协议就是一个网络层协议。

网络接口层

这是TCP/IP软件的最低层,负责接收IP数据包并通过网络发送之,或者从网络上接收物理帧,**IP数据报,交给IP层。

TCP支持的应用协议主要有:Telnet、FTP、SMTP等;

UDP支持的应用层协议主要有:NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。

TCP/IP协议与低层的数据链路层和物理层无关,这也是TCP/IP的重要特点。

TCP连接建立-断开的**说明

TCP连接的端点叫做套接字(socket)或插口,即(IP地址:端口号),每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。

TCP的运输连接有三个阶段,即连接建立、数据传送、连接释放。

TCP连接建立的**要使每一方能够确定对方的存在:主动发起连接建立的应用进行叫做客户(client),被动等待连接建立的应用**叫做服务器(server),连接建立的**叫做三次握手。

假设A为客户,B为服务器,A发送一个报文给B,B发回确认,然后A再加以确认,来回共三次,成为“三次握手”。三次握手建立连接~

所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一**由客户端执行connect来触发,整个流程如下图所示:

OSI/IO网络知识

第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client**SYN_SENT状态,等待Server确认。

第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server**SYN_RCVD状态。

第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server**ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

SYN攻击解释:

三次握手**中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect),此时Server处于SYN_RCVD状态,当收到ACK后,Server转入ESTABLISHED状态。SYN攻击就是Client在短时间内**大量不存在的IP地址,并向Server不断地发送SYN包,Server回复确认包,并等待Client的确认,由于源地址是不存在的,因此,Server需要不断重发直至超时,这些**的SYN包将产时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络堵塞甚至系统瘫痪。SYN攻击时一种典型的DDOS攻击,检测SYN攻击的**非常简单,即当Server上有大量半连接状态且源IP地址是随机的,则可以断定遭到SYN攻击了,使用如下命令可以让之现行:

#netstat -nap | grep SYN_RECV---------------------------------------------------

连接的释放需要发送四个包,因此成为“四次挥手”,四次挥手断开连接。客户端或服务器都可以主动发起挥手动作。

所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一**由客户端或服务端任一方执行close来触发,整个流程如下图所示:

OSI/IO网络知识

由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。

第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client**FIN_WAIT_1状态。

第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server**CLOSE_WAIT状态。

第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server**LAST_ACK状态。

第四次挥手:Client收到FIN后,Client**TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server**CLOSED状态,完成四次挥手。

上面是一方主动关闭,另一方被动关闭的情况(由一方发起挥手),实际中还会出现同时发起主动关闭的情况,具体流程如下图(同时挥手):

OSI/IO网络知识

为什么连接的时候是三次握手,关闭的时候却是四次握手?

这是因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。

但是关闭连接时,当Client端发送FIN报文仅仅表示它不再发送数据了但是还能接收数据,Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

三、OSI七层网络与TCP/IP五层网络的区别与联系

除了层的数量之外,开放式系统互联(OSI)模型与TCP/IP协议有什么区别?

开放式系统互联模型是一个参考**,解释协议相互之间应该如何相互作用。TCP/IP协议是美国国防部发明的,是让互联网成为了目前这个样子的**之一。

开放式系统互联模型中没有清楚地描绘TCP/IP协议,但是在解释TCP/IP协议时很容易想到开放式系统互联模型。

两者的主要区别如下:

1)TCP/IP协议中的应用层处理OSI模型中的第五层、第六层和第七层的功能。2)TCP/IP协议中的传输层并不能总是保证在传输层可靠地传输数据包,而OSI模型可以做到。3) TCP/IP协议还提供一项名为UDP(用户数据报协议)的选择。UDP不能保证可靠的数据包传输。

OSI/IO网络知识

先简单对比下二层网络和三层网络的区别:

1)不同网段的ip通信,需要经过三层网络。相同网段的ip通信,经过二层网络;

2)二层网络仅仅通过MAC寻址即可实现通讯,但仅仅是同一个冲突域内;三层网络需要通过IP路由实现跨网段的通讯,可以跨多个冲突域;

3)二层网络的组网能力非常有限,一般只是小局域网;三层网络则可以组大型的网络。

4)二层网络基本上是一个安全域,也就是说在同一个二层网络内,终端的安全性从网络上讲基本上是一样的,除非有其它特殊的安全措施;

三层网络则可以划分出相对独立的多个安全域。

5)很多技术相对是在二层局域网中用得多,比如DHCP、Windows提供的共享连接等,如需在三层网络上使用,则需要考虑其它设备的支持(比如通过DHCP中继代理等)或通过其它的**来实现。

二层网络与三层网络的详细对比

网络结构的变化**:a)按照物理拓扑结构分类,网络结构经历了总线型、环型、星型、树型、混合型等结构。b)按照逻辑拓扑结构分类,网络结构经历了二层网络架构、三层网络架构以及最近兴起的大二层网络架构。

**的数据交换都是在OSI 参考模型的数据链路层发生的,也就是按照MAC 地址进行寻址并进行数据转发,并建立和维护一个MAC 地址表,用来记录接收到的数据包中的MAC 地址及其所对应的端口。此种类型的网络均为小范围的二层网络。

01二层网络的工作流程:

1)数据包接收:首先交换机接收某端**传输过来的数据包,并对该数据包的源文件进行解析,获取其源MAC 地址,确定发放源数据包主机

2)传输数据包到目的MAC 地址:首先判断目的MAC 地址是否存在,如果交换机所存储的MAC 地址表中有此MAC 地址所对应的端口,那么直接将数据包发送给这个端口;如果在交换机存储列表中找不到对应的目的MAC 地址,交换机则会对数据包进行全端口广播,直至收到目的设备的回应,交换机通过此次广播学习、记忆并建立目的MAC 地址和目的端口的对应关系,以备以后快速建立与该目的设备的联系;

3)如果交换机所存储的MAC 地址表中没有此地址,就会将数据包广播发送到所有端口上,当目的终端给出回应时,交换机又学习到了一个新的MAC 地址与端口的对应关系,并存储在自身的MAC 地址表中。当下次发送数据的时候就可以直接发送到这个端口而非广播发送了。

以上就是交换机将一个MAC 地址添加到列表的流程,该**循环往复,交换机就能够对整个网络中存在的MAC 地址进行记忆并添加到地址列表,这就是二层(OSI 二层)交换机对MAC 地址进行建立、维护的全**。

从上述**不难看出,**的二层网络结构**虽然运行简便但在很大程度上限制了网络规模的扩大,由于**网络结构中采用的是广播的**来实现数据的传输,极易形成广播风暴,进而造成网络的瘫痪。这就是各个计算机研究机构所面临的“二层网络存在的天然瓶颈”,由于该瓶颈的存在,使得大规模的数据传输和资源共享难以实现,基于**的二层网络结构也很难实现局域网络规模化。

为了适应大规模网络的产生于**,基于分层、简化的思想,三层网络**被成功设计推出。三层网络架构的基本思想就是将大规模、较复杂的网络进行分层次分模块处理,为每个模块指定对应的功能,各司其职,互不干扰,大大提高了数据传输的速率。

02三层网络结构的设计

顾名思义,具有三个层次:核心层、汇聚层、接入层。下面将对三个层次的作用分别进行说明。

1)核心层:在互联网中承载着网络服务器与各应用端口间的传输功能,是整个网络的支撑脊梁和数据传输通道,重要性不言而喻。因此,网络对于核心层要求极高,核心层必须具备数据存储的高安全性,数据传输的高效性和可靠性,对数据错误的高容错性,以及数据管理方面的便捷性和高适应性等性能。在核心层搭建中,设备的采购必须严格按需采购,**上述功能需求,这就对交换机的带宽以及数据承载能力提出了更高的要求,因为核心层一旦堵塞将造成大面积网络瘫痪,因此必须配备高性能的数据冗余转接设备和防止负载过剩的均衡过剩负载的设备,以**各核心层交换机所需承载的数据量,以保障网络高速、安全的运转。

2)汇聚层:连接网络的核心层和各个接入的应用层,在两层之间承担“媒介传输”的作用。每个应用接入都经过汇聚层进行数据处理,再与核心层进行有效的连接,通过汇聚层的有效整合对核心层的荷载量进行**。根据汇聚层的作用要求,汇聚层应该具备以下功能:实施安全功能、工作组整体接入功能、虚拟网络过滤功能等。因此,汇聚层中设备的采购必须具备三层网络的接入交换功能,同时支持虚拟网络的创建功能,从而实现不同网络间的数据隔离安全,能够将大型网络进行分段划分,化繁为简。

3)接入层:接入层的面向对象主要是终端客户,为终端客户提供接入功能,区别于核心层和汇聚层提供各种策略的功能。接入层的主要功能是规划同一网段中的工作站个数,提高各接入终端的带宽。在搭建网络架构时,既要考虑网络的综合实用性,也要考虑经济效益,因此在接入层设备采购时可以选择数据链路层中较低端的交换机,而不是越高端越昂贵越好。

随着近年来互联网的应用规模急剧扩张,对数据传输的要求也越来越高,基于数据整合的云计算技术逐渐受到人们的关注。计算机网络作为当今社会各种信息的传输媒介,其组成架构也即将发生重大变革。鉴于**三层网络VLan 隔离以及STP 收敛上的缺陷,**网络结构急需打破。现有研究机构开始致力于新型高效网络架构的研发与探索,结合早期的扁平化架构的原有二层网络与现有三层网络的优缺点提出了大二层网络架构。

大二层网络

01为什么需要大二层网络

**的三层数据中心架构结构的设计是为了应付服务客户端-服务器应用程序的纵贯式大流量,同时使网络管理员能够对流量流进行管理。工程师在这些架构中采用生成树协议(STP)来优化客户端到服务器的路径和支持连接冗余,通常将二层网络的范围限制在网络接入层以下,避免出现大范围的二层广播域;

虚拟化从根本上改变了数据中心网络架构的需求,既虚拟化引入了虚拟机动态迁移技术。从而要求网络支持大范围的二层域。从根本上改变了**三层网络统治数据中心网络的局面。具体的来说,虚拟化技术的一项伴生技术—虚拟机动态迁移(如VMware的VMotion)在数据中心**了广泛的应用,虚拟机迁移要求虚拟机迁移前后的IP和MAC地址不变,这就需要虚拟机迁移前后的网络处于同一个二层域内部

  • 发表于 2022-11-19 19:40:53
  • 阅读 ( 99 )
  • 分类:科技

0 条评论

请先 登录 后评论
王先生
王先生

344 篇文章

你可能感兴趣的文章

相关问题