先确定你的阵列卡型号是啥。(如果是外加的卡)
这个机型是有板载的S100的阵列卡(哈哈,我也有一台)
重启机器的时候看到提示CTRL_R的时候按提示按CTRL+R这时就会进入到阵列配置界面
看一下是那块硬盘出现故障。首先你做的是RAID1所以你可以将故障硬盘先移除(移除硬盘请关闭电源)移除后。再开机看一下是否能正常进入系统,如可以第一时间备份数据。
随后找一块相同参数的硬盘更换上去。此阵列卡不支持在配置界面下重建数据,需要在系统下面进行阵列恢复。祝你好运~~~~~~1 电脑宕机原因
电脑内灰太多,灰多了会导致电脑内散热困难,许多硬件工作不正常,导致开不了机!
2硬件松动,有的时候由于电脑用的太久了,有些部件就会松下来,一工作就会晃,电脑自然开不了机,尤其是硬盘和电源!只要把螺丝上好,就没问题了。
3插槽老化 ,电脑的时候长了,插槽就会老化,导致硬件之间的金手指接触不良,有的时候有主板的插槽问题,也有的时候是其他硬的金手指老化!!一般出现这种问题,只要换个插槽就好了,也可以拿橡皮把金手指擦擦。我的一个同学就是内存插槽老化,换了个插槽就好了!!同时这种问题也是发生率最高的情况。很多的时候,用电脑的时候有的人硬件丢失也是因为这个原因!!
4电压问题,你的地区电压不稳定,或者电压太低也会出现这种情况!1这种情况我就没办法了,买个稳压器什么的,可以缓解一下!!
以上就是电脑开不了机的常见问题,这些问题都是很常见的,解决起来也不麻烦,至于要更换硬件的这里就不说了,你拿到修电脑的地方,别人会给你修的!!!
2 计算机宕机出现的原因主要是什么呢
(1)计算机的相应的主机由于一些意外故障而导致死机。
由于台湾还有大陆隔离的状态,导致两地的学术交流出现脱节,这样就造成了两地出现各自发展的现象,举个例子来说计算机中术语里面的程序在台湾就是程式,而字节被台湾叫做位元,还有就是汉字码也不同。 (2)对于服务器出现的数据库死锁的情况,这个也是宕机,代表的意思就是服务器的服务被挂掉了。
在香港还有台湾地区的人把这个叫当机,也就是死机的意思。例如MSN当机影响了900万用户登陆,也就是说msn服务器由于维修等这些故障,出现账号不能登录的现象。
3 服务器宕机怎么办
解决方法:
1 对于服务器频繁出现宕机情况就要注意了检查服务器是否存在负载量过大,服务器散热存在问题等等情况。再针对这样的情况一项一项来解决,这样才能保证服务器尽可能长时间正常运行。
2 对于一般服务器宕机,我们可以采用重启服务器的方式来解决。正常重启服务器可以清除内存碎片,重新优化应用软件,中断无用的端口,缓解CPU压力,加快服务器运行速度等等。
3 对于服务器租用用户来说,服务器宕机是非常值得重视的问题,如果租用的服务器经常出现宕机情况的话,一定要及时通知服务商,让服务器查明具体情况,问题过于严重甚至可以要求跟换服务器或者更换服务器供应商。
服务器简介:
1 服务器是一种高性能计算机,作为网络的节点,存储、处理网络上80%的数据、信息,因此也被称为网络的灵魂。
2 服务器指一个管理资源并为用户提供服务的计算机软件,通常分为文件服务器、数据库服务器和应用程序服务器。运行以上软件的计算机或计算机系统也被称为服务器。
3 相对于普通PC来说,服务器在稳定性、安全性、性能等方面都要求更高,因此CPU、芯片组、内存、磁盘系统、网络等硬件和普通计算机有所不同,在质量与处理器数据性能上更出色。
4 服务器出现宕机的原因有哪些
1、由 *** 作员意向 *** 作的重启——用于维护或更新服务器、部署机房或特殊情况等等。
2、非 *** 作员本身意愿造成的重启——如供电(欠压,过载,波动)、震动、硬件质量(热稳定性(热敏度)和抗干扰能力)、资源冲突、DirectX文件的损坏、系统不完善或瓶颈问题、病毒、灰尘、散热不良……等等原因而造成重启。3、由于用户访问量过大,造成资源耗尽,或者你网站的数据超出你的空间限制范围大小也会出现宕机。
重启服务器的好处:一般来说,如果是正常的重启是没有什么坏处,相反,对于 *** 作系统而言反而有好处。重启服务器可以清除内存碎片,重新优化软件调用级别,中断无用的网络端口等。
1、重启服务器对服务器的保养有一定的作用,释放内存,缓解CPU压力。服务器运行时间长,会造成很多冗余的DLL程序,导致系统运行速度较慢。
系统重启会使电脑恢复到默认加载状态,也就是说在还未重启时的很多应用程序进程都驻留在内存中,会使电脑变慢,重启后它们就没了。2、还有就是有的一些对电脑的配置要重新启动后才能生效。
3、重启服务器可以使有些程序可以得到更新。重启服务器的危害:1、正在进行写硬盘 *** 作时,即硬盘灯在不停地闪动时,断电或者强制重启,对硬盘的伤害最大。
2、热启动(CTRL+ALT+DEL),对硬件上不会有损伤(软件上有时会发生程序非法中止导致数据丢失的问题);如果是冷启动(直接开关电源),就会对硬件尤其是硬盘造成伤害。除非无法正常关机可以考虑热启动。
3、重启的突然来电会有大量电流涌入电源,反复进行会使机器寿命大大降低,而且在硬盘正在读写的时候突然地断电也非常容易引起硬盘出现坏道从而损失数据。4非正常重启的危害:首先,这样轻则会使硬盘掉数据,造成逻辑坏道,重则造成物理的坏道,损坏硬盘磁头伺服电路。
还有,这也会造成主板的二度伤害,主板在一通一断当中对电路部分的冲击是比较大的。再则也会对电源造成一定的损害。
5 最近笔记本总是直接宕机不知道为什么
宕机是计算机术语,口语里面我们简单的把停掉机器叫做down机,转换为汉字是“宕机”,但很多人都叫做“当机”/“死机”,虽然不规范但却流行。
down就是up的反义,就是计算机不能正常工作了,包括一切原因而导致出现的死机。(1)一般情况下指的就是计算机主机出现意外故障而死机;(2)一些服务器故障,包括服务器主机,数据库死锁或者DNS故障都可以称为宕机,一切服务器的某些服务挂掉了,都可以这么说。
一般来说,普通的电脑出现故障,称之为“死机”,很少会说宕机;而一些知名网站或者媒体服务器出现故障时,通常会被报道为宕机,比如此前微信就出现很多次服务器宕机现象,导致用户无法登陆,被不少媒体报道过。其实,宕机是一种非常常见的现象,一般是指网站服务器出现故障,导致服务中断。
由于服务器通常都是365天不间断的工作,因此很多网站都会出现宕机故障,比如苹果、百度、京东等知名大网站也出现过。由于这些大网站,通常会配备多台服务器,因此宕机出现的概率极少。
而对一些中小网站来说,其实每天都在上演宕机,只是鲜为人知罢了。媒体从来只会曝光成功的大型网站宕机故障,一些失败的企或小网站,是没有理会或在乎的,因此宕机事件也不是经常有报道,但是很多宕机现象在很多中小网站中,基本天天都在上演。1 什么是服务器虚拟化服务器虚拟化是指在单个物理服务器上运行多个相互独立的 *** 作系统的一种技术。通过虚拟化软件将单个物理服务器划分为多个虚拟机。每个虚拟机都能共享物理主机上的物理资源,包括CPU、内存、磁盘和网络资源等。作为一种主流应用技术,越来越多的组织机构都已经或者正在实施服务器虚拟化,它可以帮助节省投资、增加资源利用率,对现有基础设施无需重大变更就可以提高IT响应速度和灵活性。
2 服务器虚拟化技术的优势
① 提高服务器利用率:大部分服务器的利用率仅为全部性能的三分之一甚至更少,通过将多个工作负荷整合至一台服务器上,可以实现更高的资源利用率。
② 提高业务持续性:业务持续性对系统可靠性提出了更高要求,服务器虚拟化技术强大的容错、灾备、快速恢复特性,可以提高系统可靠性,从而维持业务持续性。
③ 动态资源调配:服务器虚拟化可以实时自动平衡工作负载。通过实时迁移功能,资源调配工具可以将运行中的虚拟机在线迁移至拥有更多资源的其他服务器上,或者灵活调整其他虚拟机,从而匹配工作负载,实现业务和资源最优化。
3 利用服务器虚拟化的几种情况
31 优化已退出业务应用但仍需保持在线的系统
随着业务不断发展,一些系统已不再适用,新系统取而代之,一般的做法是数据迁移至新系统,旧系统下线,但也有一些情况并不迁移数据,旧系统维持在线作为历史查阅之用。对于这样的情况,由于对服务能力要求的大幅降低,继续保持旧系统运行会造成一定的资源浪费,此时便可以将其虚拟化,整合多个业务到一个物理服务器中集中运行,从而降低综合运维成本。
32 迁移运维困难的旧系统
一个应用系统也许会持续使用多年,硬件设备随时间推移逐渐老化,由于厂商服务及备件问题,后期运维成本逐渐增大以致无法维持,而随着硬件技术的发展和 *** 作系统更新,新的服务器却可能因兼容性而无法使用,为解决这一矛盾,利用虚拟化软件的兼容性,将新服务器虚拟化之后,模拟原运行环境,部署旧系统和应用,使之得以延续生命周期。
33 利用计算能力强的新硬件,整合多个旧系统
每个系统对服务器性能都有一定要求,而随着技术的发展,新硬件的计算能力大幅提高,远超出旧系统的需求,如果在更新服务器时,同时利用虚拟化将多个旧系统装入一个物理服务器中,通过合理调配虚拟机资源,可以保证在节省空间、节约电力,节约投资的同时又满足多系统并存对资源的需求。
34 软件开发和测试环境
通过服务器虚拟化,可以以较低的成本,快速创建和复制特定类型的软硬件环境,用于软件开发和测试。同时虚拟机的快照和快速恢复特性也非常适合于此类环境的工作要求。
35 提高服务的安全性
通过服务器虚拟化,将相同类型的一组服务,根据不同的服务对象或业务需要,部署同一物理主机的在不同的虚拟机中,使服务之间相互隔离,互不影响,从而提高服务的可靠性和安全性。
4 服务器虚拟化的常用软件
41 Microsoft Hpyer-V
Hyper-V是微软伴随Windows Server 2008推出的服务器虚拟化解决方案,采用了全新的64位微内核管理程序架构,让Hyper-V在性能和安全性上都有较大提高。利用新的虚拟服务程序/虚拟服务客户端(VSP/VSC)架构使磁盘、网络等核心资源的访问利用得到改善。Hyper-V支持不同类型的(例如Windows、Linux及其他 *** 作系统)32位和64位 *** 作系统,具有非常好的硬件兼容性,但Hyper-V要求处理器必须支持AMD-V或者Intel VT技术。
42 VMware ESX server
ESX server是当前服务器市场上最成熟,最流行的虚拟服务器产品。是适用于任何系统环境的高效灵活的企业级虚拟主机平台,对比其他虚拟软件产品,ESX的最大优点是可以极大减少宿主系统所占用资源,其内核直接运行在硬件之上,系统稳定性和性能都有很大的提高。其大型机级别的架构提供了空前的性能和资源控制特性,适合各种要求严格的应用程序的需要。同样VMware ESX Server需要处理器支持硬件辅助虚拟化技术才可以更加有效地运行。
43 Citrix XenServer
XenServer作为一种开放的、功能强大的服务器虚拟化系统,能够为任何服务器和数据中心虚拟化项目提供所有关键特性,强大的可扩展性支持任何规模的企业,满足Windows和Linux系列的 *** 作系统以及复杂的存储需求。XenServer基于开源的Xen系统管理程序,直接运行在服务器硬件上,作为准虚拟化技术的代表,其响应能力基本接近未经虚拟化处理的物理服务器,可以以较低的部署成本实现最佳的性能和可扩展性。
5 服务器虚拟化之后的常见问题
51 单点故障风险
虚拟化最大的优势就是服务器整合,节省运营成本,但这对用户来说也意味着要将所有的鸡蛋放在一个篮子里,增加了风险。过去在多台物理服务器上运行不同的工作负载,当其中一台服务器宕机时,不至于所有工作负载都停止运行。而在虚拟化环境里,一旦物理服务器故障宕机,就意味着所有该服务器承载的工作负载(虚拟机)都会陷入瘫痪,若不能及时恢复将给企业带来灾难性的后果。因此应设立额外的冗余物理服务器,当某一物理服务器出现故障,通过虚拟化软件的在线迁移工具将其对应的工作负载及时动态迁移到别的物理服务器上,虽然增加了虚拟化成本,但可以有效避免全部虚拟服务器崩溃的风险。
52 潜在安全风险
和很多技术方案一样,服务器虚拟化由于系统架构固有特点决定了在安全方面存在一定的潜在风险。当不同的工作负载在虚拟机上运行的时候,作为宿主的物理主机的安全变得更为重要。如果一个未经授权的用户获取了宿主 *** 作系统的访问权限,便有可能复制敏感数据或破获整个虚拟机系统。同时也可以关闭虚拟机或进行宿主机层面的重新配置,从而造成严重的服务中断。对于访问者而言虚拟服务器和物理服务器没有区别,同样面临被人恶意攻击的风险,一旦一台有漏洞的虚拟机被攻陷,安全威胁就可以透过网络扩散到其它虚拟机,从未威胁整个虚拟机管理系统。物理服务器作为虚拟服务器的根本,保护其稳定安全,是安全防范工作的重中之重。虚拟机环境下,病毒和恶意软件的影响很可能是同一台物理服务器上的所有虚拟工作负载,而不仅仅是一个单独的虚拟机,会给系统资源造成相当大的负荷。另外关于病毒防护,一般做法是将每个独立虚拟机单独安装病毒防护软件,这样将导致总体消耗的系统资源非常巨大,如果能采用专门应用于虚拟化平台的安全防护软件效果可能会更好。
53 I/O瓶颈和数据备份
相对于计算能力,存储性能增长的速度明显要慢得多。对于虚拟化而言,I/O瓶颈和缓慢的存储性能成为一大难题。高密度的虚拟化产生大量I/O流导致物理硬盘的频繁 *** 作,极大增加了磁盘工作负载,并且缓存对性能的提升效果也越来越有限。服务器虚拟化环境下,如果仍然使用传统备份方法来保护数据将是得不偿失的,在一台物理服务器上同时进行多个虚拟机数据备份时,备份任务将对服务器硬件资源进行激烈争夺,同时虚拟机的工作负载迁移工具会使得备份问题变得更加复杂。因此每台虚拟服务器,都必需实施相应的备份策略,对配置文件、虚拟机文件及其中的重要数据都要进行备份。预留一定的服务器资源用于备份任务,安排合理完善的备份计划,合理利用虚拟机快照工具有助于改善这一状况。
6 结语
近几年,服务器虚拟化已被广大用户所接受,它将固定不变的硬件设备转化为可以动态管理的“资源池”,从而提高资源的利用率,简化管理,提高系统可用性,节约投资,降低综合运维成本,增强IT对业务的变化的适应力,所有这些对用户都是真实的利益所在。任何一种技术都会有优势和劣势,但是随着技术的不断进步,相信虚拟化应用过程中出现的各种不足和问题都会得以改进和解决。
参考文献:
[1]郝勇、许秀文、杨铭,浅谈服务器虚拟化[J]中国管理信息化,2011(04)
[2]韩寓,服务器虚拟化技术研究与分析[J]电脑知识与技术,2011(07)做好标记,方便维护\x0d\\x0d\由于企业局域网内部的计算机相对比较多,网线繁多,如果发生故障了也不知道是那条线搭哪条线,所以对于连接计算机与路由器的网线要做好标记,在路由器端要标示连接哪台主机,在计算机端要标示是连接到路由器的哪个端口,以方便维护工作。\x0d\\x0d\2为企业路由器提供一个良好工作环境\x0d\\x0d\在企业路由器的说明书中厂商已经明确了路由器正常运转的环境指标,所以企业在使用的过程中应尽量为企业路由器提供一个符合厂商规定的环境指标的工作环境,不然的话将影响路由器的正常工作,甚至还有可能会损坏路由器。一般需注意的是电源的电压、工作温度、存贮温度、工作的相湿度、存贮的相对湿度等方面。\x0d\\x0d\尤其要注意防潮防发热, 由于企业路由器是由许多紧密的电子元件组成的,这些电子元件会因潮湿而引起电路短路,因此务必要将它放置在干燥的地方。特别是在梅雨时节,更要注意保持企业路由器工作环境的干爽。另外,由于企业路由器在运行过程中设备的芯片会散发出大量的热,如果不及时将其散发,则有可能导致芯片的热度超出指标范围,而导致企业路由器工作异常。因此,最好将路由器放置在通风干爽的位置,千万不要用装饰布之类盖住路由器,也不要在路由器周围堆放书籍、杂物之类的,要让路由好好透透气才行。\x0d\\x0d\3防电磁干扰\x0d\\x0d\数据在传输过程中,会受到多方面因素的影响,电磁干扰就是其中主要的一个方面,例如音箱、无线电收发装置等设备若与企业路由器靠得太近的话,网络信号将可能会受到外界辐射的影响,因而尽量把企业路由器放在一个独立的地方,离那些会产生电磁干扰的设备远一些。\x0d\\x0d\4在企业路由器通电过程中,不要随意插拔\x0d\\x0d\当路由器加电以后,就尽量不要进行带电插拔的 *** 作,因为这样的 *** 作很容易造成电路损坏,尽管有很多企业路由器的生产商已采取了一定的防护措施,但仍需分外注意,以免对企业路由器造成不必要的损坏。\x0d\5做好防雷击措施 \x0d\\x0d\雷区在我国并不少见,以广州市为例,每年平均的雷暴天气可达803次,所以因为雷击而遭受损害的路由器用户数量也为数不少。根据Qno侠诺科技的工程师调查分析得出,30%的网络设备故障都与雷击有直接的关系。虽然很多的时候雷击所造成的感应电压并不能一次就把企业路由器彻底报销,但是即使当时没有造成网络故障,但企业路由器若再经常受到过压冲击,就很容易引起路由器设备零件的老化,大大地缩短了其使用寿命,对于旧的企业路由器来说就更加容易遭受破坏。这样的话,如果没有相应的接地保护措施,企业路由器就很容易遭受雷击等自然灾害的破坏,严重影响网络的稳定运行。所以企业要切实做好防雷击措施,企业用户可以通过做好设备接地装置和安装有效的防雷保护系统这两种方法来防雷击。\x0d\\x0d\6防断电\x0d\\x0d\在如今到处闹“电慌”的形势下,市电对企业实施拉闸限电早已见惯不怪了,而且供电过程中还会因电压不足而出现时断时续,电源忽高忽低(电压过低,如低于150V;或过高,如高于260V)等此类不稳定问题,而电源时常不稳定就很容易会导致企业网络中的路由器设备无法连续正常工作。如果企业路由器经常在这种不正常供电环境下工作的话,不但严重影响了路由器对企业网络提供的服务质量,长期下去的话还会大大缩短企业路由器的使用寿命。\x0d\\x0d\ 所以要保障企业路由器的“稳健长寿”,最好的方法就是为企业路由器配备性能优良稳定的UPS电源系统。UPS电源可以有效解决电网存在的诸如:断电、雷击尖峰、浪涌、频率震荡、电压突变、电压波动、频率漂移、电压跌落、脉冲干扰等等问题,若为企业路由器配备了UPS电源系统后,就不用再担心电压的不稳或者是突然断电会使路由器遭受损坏了。\x0d\\x0d\7尽量避免撞击、震荡\x0d\\x0d\当企业路由器受到撞击和震荡时,有可能造成路由器设备的零部件松动,甚至会直接造成硬件损坏,因此在移动企业路由器后重新安装时,建议最好把路由器固定在特定的机架上,这样做不仅可以避免路由器受到撞击、震荡,还可以使线缆不易脱落,确保企业路由器正常通信。\x0d\\x0d\8有效御防企业路由器遭受静电的入侵\x0d\\x0d\静电放电时很容易对企业路由器造成硬件损坏,随着网络设备芯片工艺的不断进步,芯片的速度和功能都有所提升,但芯片却变得更加很脆弱。一个不太高的静电电压就能将晶体管击穿,一个不太大的静电电流就能将连线熔断,而静电是无处不在的,静电是网络设备的无形杀手,所以要对企业路由器进行有效的维护,必须采取正确的防范静电的措施。具体的做法有以下两点:\x0d\\x0d\1)企业路由器应保持良好的接触,要有可靠的接地装置。\x0d\\x0d\2)对于一些气候干燥的地方的企业(如北方地区的企业)在干燥季节应适当使用加湿器,保持空气的一定湿度,以避免静电在设备、办公设备和企业网络使用人员的身上大量积累。\x0d\\x0d\9让企业路由器远离灰尘的烦嚣 \x0d\\x0d\灰尘之于企业路由器的危害也是不容忽视的,如果设备上的灰尘过多,而又没有得到及时的清理,那么企业网络就可能会出现一些莫名其妙的故障,轻则造成接口的接触不良,重则就有可能烧毁企业路由器里面的芯片。可见,企业路由器的除尘功夫也是相当重要的,不容忽视,也不得有误。\x0d\\x0d\10注意安全防范\x0d\\x0d\企业路由器在实际使用中,除正确安装设置外,还要设置好管理口令,并注意保密,不要让管理员以外的其他人随便接近路由器,更不要让其他人随意对路由器进行配置。\x0d\\x0d\11定期进行企业路由器的数据备份\x0d\\x0d\为了防止网络意外瘫痪而丢失原来的配置,应定期对企业路由器的配置进行备份。进行备份之前首先要建立一台tftp服务器,这比较容易,选择一台PC机,运行CISCO TFTP SERVER软件即可。然后将路由器配置备份到备份服务器中,具体的 *** 作步骤如下:\x0d\\x0d\1)Telnet到要备份的路由器,telnet xxxxxxxxxxxx(服务器IP地址)\x0d\\x0d\2)检查路由器与tftp服务器是否连通,ping xxxxxxxxxxxx (tftp服务器IP 地址)\x0d\\x0d\3)用copy running-config tftp将配置文件备份到tftp服务器\x0d\\x0d\4)按命令的要求输入tftp服务器IP 地址和目的文件名并进行确认\x0d\\x0d\12经常更新企业路由器的系统软件\x0d\\x0d\企业路由器的 *** 作系统就像网络 *** 作系统一样,也需要时常更新,以便纠正一些编程错误、软件瑕疵和缓存溢出等问题。因为路由器的系统软件往往有许多版本,每个版本支持的功能有所不同。当当前的软件版本不支持某个功能时将会导致企业路由器部分功能的丧失,而只要进行相应的软件升级就能是丧失的功能复原了。所以需要经常向路由器厂商查询当前该款企业路由器的更新和 *** 作系统的版本,要是发现有新的版本,应该尽更新。Linux实现ARP缓存老化时间原理问题深入解析
来源:番茄系统家园浏览:184时间:2022-10-13 11:46:28
一问题
众所周知,ARP是一个链路层的地址解析协议,它以IP地址为键值,查询保有该IP地址主机的MAC地址。协议的详情就不详述了,你可以看RFC,也可以看教科书。这里写这么一篇文章,主要是为了做一点记录,同时也为同学们提供一点思路。具体呢,我遇到过两个问题:
1使用keepalived进行热备份的系统需要一个虚拟的IP地址,然而该虚拟IP地址到底属于哪台机器是根据热备群的主备来决定的,因此主机器在获得该虚拟IP的时候,必须要广播一个免费的arp,起初人们认为这没有必要,理由是不这么做,热备群也工作的很好,然而事实证明,这是必须的;
2ARP缓存表项都有一个老化时间,然而在linux系统中却没有给出具体如何来设置这个老化时间。那么到底怎么设置这个老化时间呢?
二解答问题前的说明
ARP协议的规范只是阐述了地址解析的细节,然而并没有规定协议栈的实现如何去维护ARP缓存。ARP缓存需要有一个到期时间,这是必要的,因为ARP缓存并不维护映射的状态,也不进行认证,因此协议本身不能保证这种映射永远都是正确的,它只能保证该映射在得到arp应答之后的一定时间内是有效的。这也给了ARP欺骗以可乘之机,不过本文不讨论这种欺骗。
像Cisco或者基于VRP的华为设备都有明确的配置来配置arp缓存的到期时间,然而Linux系统中却没有这样的配置,起码可以说没有这样的直接配置。Linux用户都知道如果需要配置什么系统行为,那么使用sysctl工具配置procfs下的sys接口是一个方法,然而当我们google了好久,终于发现关于ARP的配置处在/proc/sys/net/ipv4/neigh/ethX的时候,我们最终又迷茫于该目录下的N多文件,即使去查询Linux内核的Documents也不能清晰的明了这些文件的具体含义。对于Linux这样的成熟系统,一定有办法来配置ARP缓存的到期时间,但是具体到 *** 作上,到底怎么配置呢?这还得从Linux实现的ARP状态机说起。
如果你看过《Understading Linux Networking Internals》并且真的做到深入理解的话,那么本文讲的基本就是废话,但是很多人是没有看过那本书的,因此本文的内容还是有一定价值的。
Linux协议栈实现为ARP缓存维护了一个状态机,在理解具体的行为之前,先看一下下面的图(该图基于《Understading Linux Networking Internals》里面的图26-13修改,在第二十六章):
在上图中,我们看到只有arp缓存项的reachable状态对于外发包是可用的,对于stale状态的arp缓存项而言,它实际上是不可用的。如果此时有人要发包,那么需要进行重新解析,对于常规的理解,重新解析意味着要重新发送arp请求,然后事实上却不一定这样,因为Linux为arp增加了一个“事件点”来“不用发送arp请求”而对arp协议生成的缓存维护的优化措施,事实上,这种措施十分有效。这就是arp的“确认”机制,也就是说,如果说从一个邻居主动发来一个数据包到本机,那么就可以确认该包的“上一跳”这个邻居是有效的,然而为何只有到达本机的包才能确认“上一跳”这个邻居的有效性呢?因为Linux并不想为IP层的处理增加负担,也即不想改变IP层的原始语义。
Linux维护一个stale状态其实就是为了保留一个neighbour结构体,在其状态改变时只是个别字段得到修改或者填充。如果按照简单的实现,只保存一个reachable状态即可,其到期则删除arp缓存表项。Linux的做法只是做了很多的优化,但是如果你为这些优化而绞尽脑汁,那就悲剧了
三Linux如何来维护这个stale状态
在Linux实现的ARP状态机中,最复杂的就是stale状态了,在此状态中的arp缓存表项面临着生死抉择,抉择者就是本地发出的包,如果本地发出的包使用了这个stale状态的arp缓存表项,那么就将状态机推进到delay状态,如果在“垃圾收集”定时器到期后还没有人使用该邻居,那么就有可能删除这个表项了,到底删除吗?这样看看有木有其它路径使用它,关键是看路由缓存,路由缓存虽然是一个第三层的概念,然而却保留了该路由的下一条的ARP缓存表项,这个意义上,Linux的路由缓存实则一个转发表而不是一个路由表。
如果有外发包使用了这个表项,那么该表项的ARP状态机将进入delay状态,在delay状态中,只要有“本地”确认的到来(本地接收包的上一跳来自该邻居),linux还是不会发送ARP请求的,但是如果一直都没有本地确认,那么Linux就将发送真正的ARP请求了,进入probe状态。因此可以看到,从stale状态开始,所有的状态只是为一种优化措施而存在的,stale状态的ARP缓存表项就是一个缓存的缓存,如果Linux只是将过期的reachable状态的arp缓存表项删除,语义是一样的,但是实现看起来以及理解起来会简单得多!
再次强调,reachable过期进入stale状态而不是直接删除,是为了保留neighbour结构体,优化内存以及CPU利用,实际上进入stale状态的arp缓存表项时不可用的,要想使其可用,要么在delay状态定时器到期前本地给予了确认,比如tcp收到了一个包,要么delay状态到期进入probe状态后arp请求得到了回应。否则还是会被删除。
四Linux的ARP缓存实现要点
在blog中分析源码是儿时的记忆了,现在不再浪费版面了。只要知道Linux在实现arp时维护的几个定时器的要点即可。
1Reachable状态定时器
每当有arp回应到达或者其它能证明该ARP表项表示的邻居真的可达时,启动该定时器。到期时根据配置的时间将对应的ARP缓存表项转换到下一个状态。
2垃圾回收定时器
定时启动该定时器,具体下一次什么到期,是根据配置的base_reachable_time来决定的,具体见下面的代码:
复制代码代码如下:
static void neigh_periodic_timer(unsigned long arg)
{
if (time_after(now, tbl->last_rand + 300 HZ)) { //内核每5分钟重新进行一次配置
struct neigh_parms p;
tbl->last_rand = now;
for (p = &tbl->parms; p; p = p->next)
p->reachable_time =
neigh_rand_reach_time(p->base_reachable_time);
}
/ Cycle through all hash buckets every base_reachable_time/2 ticks
ARP entry timeouts range from 1/2 base_reachable_time to 3/2
base_reachable_time
/
expire = tbl->parmsbase_reachable_time >> 1;
expire /= (tbl->hash_mask + 1);
if (!expire)
expire = 1;
//下次何时到期完全基于base_reachable_time);
mod_timer(&tbl->gc_timer, now + expire);
}
static void neigh_periodic_timer(unsigned long arg)
{
if (time_after(now, tbl->last_rand + 300 HZ)) { //内核每5分钟重新进行一次配置
struct neigh_parms p;
tbl->last_rand = now;
for (p = &tbl->parms; p; p = p->next)
p->reachable_time =
neigh_rand_reach_time(p->base_reachable_time);
}
/ Cycle through all hash buckets every base_reachable_time/2 ticks
ARP entry timeouts range from 1/2 base_reachable_time to 3/2
base_reachable_time
/
expire = tbl->parmsbase_reachable_time >> 1;
expire /= (tbl->hash_mask + 1);
if (!expire)
expire = 1;
//下次何时到期完全基于base_reachable_time);
mod_timer(&tbl->gc_timer, now + expire);
}
一旦这个定时器到期,将执行neigh_periodic_timer回调函数,里面有以下的逻辑,也即上面的省略的部分:
复制代码代码如下:
if (atomic_read(&n->refcnt) == 1 && //n->used可能会因为“本地确认”机制而向前推进
(state == NUD_FAILED ||time_after(now, n->used + n->parms->gc_staletime))) {
np = n->next;
n->dead = 1;
write_unlock(&n->lock);
neigh_release(n);
continue;
}
if (atomic_read(&n->refcnt) == 1 && //n->used可能会因为“本地确认”机制而向前推进
(state == NUD_FAILED ||time_after(now, n->used + n->parms->gc_staletime))) {
np = n->next;
n->dead = 1;
write_unlock(&n->lock);
neigh_release(n);
continue;
}
如果在实验中,你的处于stale状态的表项没有被及时删除,那么试着执行一下下面的命令:
[plain] view plaincopyprintip route flush cache
ip route flush cache然后再看看ip neigh ls all的结果,注意,不要指望马上会被删除,因为此时垃圾回收定时器还没有到期呢但是我敢保证,不长的时间之后,该缓存表项将被删除。
五第一个问题的解决
在启用keepalived进行基于vrrp热备份的群组上,很多同学认为根本不需要在进入master状态时重新绑定自己的MAC地址和虚拟IP地址,然而这是根本错误的,如果说没有出现什么问题,那也是侥幸,因为各个路由器上默认配置的arp超时时间一般很短,然而我们不能依赖这种配置。请看下面的图示:
如果发生了切换,假设路由器上的arp缓存超时时间为1小时,那么在将近一小时内,单向数据将无法通信(假设群组中的主机不会发送数据通过路由器,排出“本地确认”,毕竟我不知道路由器是不是在运行Linux),路由器上的数据将持续不断的法往原来的master,然而原始的matser已经不再持有虚拟IP地址。
因此,为了使得数据行为不再依赖路由器的配置,必须在vrrp协议下切换到master时手动绑定虚拟IP地址和自己的MAC地址,在Linux上使用方便的arping则是:
[plain] view plaincopyprintarping -i ethX -S 1111 -B -c 1
arping -i ethX -S 1111 -B -c 1这样一来,获得1111这个IP地址的master主机将IP地址为255255255255的ARP请求广播到全网,假设路由器运行Linux,则路由器接收到该ARP请求后将根据来源IP地址更新其本地的ARP缓存表项(如果有的话),然而问题是,该表项更新的结果状态却是stale,这只是ARP的规定,具体在代码中体现是这样的,在arp_process函数的最后:
复制代码代码如下:
if (arp->ar_op != htons(ARPOP_REPLY) || skb->pkt_type != PACKET_HOST)
state = NUD_STALE;
neigh_update(n, sha, state, override NEIGH_UPDATE_F_OVERRIDE : 0);
if (arp->ar_op != htons(ARPOP_REPLY) || skb->pkt_type != PACKET_HOST)
state = NUD_STALE;
neigh_update(n, sha, state, override NEIGH_UPDATE_F_OVERRIDE : 0);
由此可见,只有实际的外发包的下一跳是1111时,才会通过“本地确认”机制或者实际发送ARP请求的方式将对应的MAC地址映射reachable状态。
更正:在看了keepalived的源码之后,发现这个担心是多余的,毕竟keepalived已经很成熟了,不应该犯“如此低级的错误”,keepalived在某主机切换到master之后,会主动发送免费arp,在keepalived中有代码如是:
复制代码代码如下:
vrrp_send_update(vrrp_rt vrrp, ip_address ipaddress, int idx)
{
char msg;
char addr_str[41];
if (!IP_IS6(ipaddress)) {
msg = "gratuitous ARPs";
inet_ntop(AF_INET, &ipaddress->usinsin_addr, addr_str, 41);
send_gratuitous_arp(ipaddress);
} else {
msg = "Unsolicited Neighbour Adverts";
inet_ntop(AF_INET6, &ipaddress->usin6_addr, addr_str, 41);
ndisc_send_unsolicited_na(ipaddress);
}
if (0 == idx && debug & 32) {
log_message(LOG_INFO, "VRRP_Instance(%s) Sending %s on %s for %s",
vrrp->iname, msg, IF_NAME(ipaddress->ifp), addr_str);
}
}
vrrp_send_update(vrrp_rt vrrp, ip_address ipaddress, int idx)
{
char msg;
char addr_str[41];
if (!IP_IS6(ipaddress)) {
msg = "gratuitous ARPs";
inet_ntop(AF_INET, &ipaddress->usinsin_addr, addr_str, 41);
send_gratuitous_arp(ipaddress);
} else {
msg = "Unsolicited Neighbour Adverts";
inet_ntop(AF_INET6, &ipaddress->usin6_addr, addr_str, 41);
ndisc_send_unsolicited_na(ipaddress);
}
if (0 == idx && debug & 32) {
log_message(LOG_INFO, "VRRP_Instance(%s) Sending %s on %s for %s",
vrrp->iname, msg, IF_NAME(ipaddress->ifp), addr_str);
}
}
六第二个问题的解决
扯了这么多,在Linux上到底怎么设置ARP缓存的老化时间呢?
我们看到/proc/sys/net/ipv4/neigh/ethX目录下面有多个文件,到底哪个是ARP缓存的老化时间呢?实际上,直接点说,就是base_reachable_time这个文件。其它的都只是优化行为的措施。比如gc_stale_time这个文件记录的是“ARP缓存表项的缓存”的存活时间,该时间只是一个缓存的缓存的存活时间,在该时间内,如果需要用到该邻居,那么直接使用表项记录的数据作为ARP请求的内容即可,或者得到“本地确认”后直接将其置为reachable状态,而不用再通过路由查找,ARP查找,ARP邻居创建,ARP邻居解析这种慢速的方式。
默认情况下,reachable状态的超时时间是30秒,超过30秒,ARP缓存表项将改为stale状态,此时,你可以认为该表项已经老化到期了,只是Linux的实现中并没有将其删除罢了,再过了gc_stale_time时间,表项才被删除。在ARP缓存表项成为非reachable之后,垃圾回收器负责执行“再过了gc_stale_time时间,表项才被删除”这件事,这个定时器的下次到期时间是根据base_reachable_time计算出来的,具体就是在neigh_periodic_timer中:
复制代码代码如下:
if (time_after(now, tbl->last_rand + 300 HZ)) {
struct neigh_parms p;
tbl->last_rand = now;
for (p = &tbl->parms; p; p = p->next)
//随计化很重要,防止“共振行为”引发的ARP解析风暴
p->reachable_time = neigh_rand_reach_time(p->base_reachable_time);
}
expire = tbl->parmsbase_reachable_time >> 1;
expire /= (tbl->hash_mask + 1);
if (!expire)
expire = 1;
mod_timer(&tbl->gc_timer, now + expire);
if (time_after(now, tbl->last_rand + 300 HZ)) {
struct neigh_parms p;
tbl->last_rand = now;
for (p = &tbl->parms; p; p = p->next)
//随计化很重要,防止“共振行为”引发的ARP解析风暴
p->reachable_time = neigh_rand_reach_time(p->base_reachable_time);
}
expire = tbl->parmsbase_reachable_time >> 1;
expire /= (tbl->hash_mask + 1);
if (!expire)
expire = 1;
mod_timer(&tbl->gc_timer, now + expire);
可见一斑啊!适当地,我们可以通过看代码注释来理解这一点,好心人都会写上注释的。为了实验的条理清晰,我们设计以下两个场景:
1使用iptables禁止一切本地接收,从而屏蔽arp本地确认,使用sysctl将base_reachable_time设置为5秒,将gc_stale_time为5秒。
2关闭iptables的禁止策略,使用TCP下载外部网络一个超大文件或者进行持续短连接,使用sysctl将base_reachable_time设置为5秒,将gc_stale_time为5秒。
在两个场景下都使用ping命令来ping本地局域网的默认网关,然后迅速Ctrl-C掉这个ping,用ip neigh show all可以看到默认网关的arp表项,然而在场景1下,大约5秒之内,arp表项将变为stale之后不再改变,再ping的话,表项先变为delay再变为probe,然后为reachable,5秒之内再次成为stale,而在场景2下,arp表项持续为reachable以及dealy,这说明了Linux中的ARP状态机。那么为何场景1中,当表项成为stale之后很久都不会被删除呢?其实这是因为还有路由缓存项在使用它,此时你删除路由缓存之后,arp表项很快被删除。
七总结
1在Linux上如果你想设置你的ARP缓存老化时间,那么执行sysctl -w netipv4neighethX=Y即可,如果设置别的,只是影响了性能,在Linux中,ARP缓存老化以其变为stale状态为准,而不是以其表项被删除为准,stale状态只是对缓存又进行了缓存;
2永远记住,在将一个IP地址更换到另一台本网段设备时,尽可能快地广播免费ARP,在Linux上可以使用arping来玩小技巧。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)