TCP快速重传与快速恢复原理分析

超时重传是TCP协议保证数据可靠性的一个重要机制,其原理是在发送一个数据以后就开启一个计时器,在一定时间内如果没有得到发送数据报的ACK报文,那么就重新发送数据,知道发送成功为止。这是数据丢包的情况下给出的一种修补机制。一般来说,重传发生在超时之后,但是如果发送端接收到3个以上的重复ACK,就应该意识到,数据丢了,需要重新传递。这个机制不需要等到重传定时器溢出,所以叫做快速重传,而快速重传以后,因为走的不是慢启动而是拥塞避免算法,所以这又叫做快速恢复算法。

  快速重传和快速恢复旨在:快速恢复丢失的数据包。

  没有快速重传和快速恢复,TCP将会使用定时器来要求传输暂停。在暂停这段时间内,没有新的数据包被发送。

  快速重传和快速恢复算法是在4.3BSD中提出的,并在RFC2001和RFC2581中描述。

  快速重传与快速恢复经历了几个阶段。

  1. Tahoe

  Tahoe算法是TCP的早期版本。它的核心思想是:让cwnd以指数增长方式迅速逼近可用信道容量,然后慢慢接近均衡。Tahoe包括3个基本的拥塞控制算法:慢启动、拥塞避免、快速重传。

  我们可以看到,Tahoe不存在快速恢复算法。这也是它的不足之处。

  在收到3个重复ACK或者在超时的情况下,Tahoe置cwnd为1,然后进入慢启动阶段。这一方面会引起网络的激烈震荡,另一方面大大降低了网络的利用率。

  也就是说,一旦发现掉包,那么cwnd就被打回原形。

  没有快速恢复算法,在恢复丢失数据包期间,不能发送新的数据包,这段时间的吞吐量为0.而实际上如果利用这段时间来发送适量的新数据包,可以大大的提高丢包时的传输效率。这就是快速恢复名称的由来。

  2. Reno

  Reno与Tahoe相比,增加了快速恢复阶段,也就是说,完成快速重传后,进入了拥塞避免阶段而不是慢启动阶段。

  Reno prevents the communication path from going empty after Fast Retransmit. Reno sender uses additional incoming dup ACKs to clock subsequent outgoing packets.算法描述:

  [java] view plaincopy step1:if ( dupacks >= 3 ) { ssthresh = max( 2 , cwnd / 2 ) ;cwnd = ssthresh + 3 * SMSS ;}

  step2:重传丢失的分组

  step3:此后每收到一个重复的ACK确认时,cwnd++

  step4:当收到对新发送数据的ACK确认时,cwnd = ssthresh,这个ACK能够对那些在丢失的分组之后,第一个重复ACK之前发送的所有包进行确认。

  在快速恢复阶段,每收到重复的ACK,则cwnd加1;收到非重复ACK时,置cwnd = ssthresh,转入拥塞避免阶段;如果发生超时重传,则置ssthresh为当前cwnd的一半,cwnd = 1,重新进入慢启动阶段。

  Reno快速恢复阶段退出条件:收到非重复ACK.

  3. NewReno

  Reno不能有效的处理多个分组从同一数据窗口丢失,于是有了NewReno. NewReno修改了Reno的快速恢复算法,处理一个窗口中的多个报文段同时丢失时出现的“部分确认”

  (Partial ACKs,它在快速恢复阶段到达并且确认新数据,但它只确认进入快速重传之前发送的一部分数据)。

  在这种情况下,Reno会退出快速恢复状态,等待定时器溢出或者重复的确认ACK到达,但是NewReno并不退出快速恢复状态,而是:

  [java] view plaincopy step1:重传紧接着那个部分ACK之后的报文段,拥塞窗口等于其减去partial ACK的部分。

  step2:对于得到确认的新数据,cwnd++

  step3:对于第一个或每一个Partial ACK,重传定时器复位。且每次都重置cwnd = 原cwnd / 2.

  NewReno算法中有变量recover,其值为检测到丢包时的最大发送序列号。只有当recover之前的数据报都确认完后,才能推出快速恢复,进入拥塞避免阶段。

  当超时时,将发送的最大序列号保存在recover变量中,结束快速恢复过程。

  NewReno不支持SACK.

  4. SACK

  During Fast Recovery, SACK maintains a variable calledpipe that represents the estimated number of packets outstanding in the path. The sender only sends new or retransmitted data when the estimated number of packets in the path is less than the congestion window. The variable pipe is incremented by one when the sender either sends a new packet or retransmits an old packet. It is decremented by one when the sender receives a dup ACK packet with a SACK option reporting the new data has been received at the receiver.

  Use of the pipe variable decouples the decision of when to send a packet from the decision of which packet to send.

  The sender maintains a data structure, thescoreboard, that remenbers acknowledgements from previous SACK option. When the sender is allowed to send a packet, it retransmits the next packet from the list of packets inferred to be missing at the receiver. If there are no such packets and the receiver's advertised window is sufficiently large, the sender sends a new packet.

  When a retransmitted packet is itself dropped, the SACK implementation detects the drop with a retransmit timeout, retransmitting the dropped packet and then slow-starting. The sender exits Fast Recovery when a recovery acknowledgement is received acknowledging all data that was outstanding when Fast Recovery was entered.

  [java] view plaincopy step 1:Fast Recovery is initiated,pipe -1 ( for the packet assumed to have been dropped)。

  pipe +1 ( for the packet retransmitted)

  cwnd = cwnd / 2 step 2 :If pipe <= cwnd,sender retransmits packets inferred to be missing. If there are no such packets, sender sends new packets. step 3:when sender receives a dup ACK, pipe = pipe - 1 when sender sends a new / retransmit an old packet, pipe = pipe +1 step 4:For partial ACKs :pipe = pipe - 2(one for original dropped packet,one for retransmitted packet)

  step 5:all packets outstanding before Fast Recovery were ACKed,exit Fast Recovery.当退出Fast Recovery时,cwnd同样恢复成ssthresh,进入拥塞避免。

  与Reno不同的是:

  (1)when to send packet:由计算pipe变化决定,不再是计算cwnd变化。

  (2)which packet to send:由SACK携带信息决定,反应更迅速。

  问题1:在一个窗口内重复丢包会造成影响吗?

  答案:会。如果只丢一个包,那么收到非重复ACK时,就能确认完本窗口内所有的包。然后进入拥塞避免阶段。这就是Reno想达到的。

  而如果丢失多个包,那么收到非重复ACK时,不能确认完本窗口内所有的包。但是,也会退出快速恢复,进入拥塞避免阶段。

  这个时候可能会发生两种情况:(1)多次进行快速重传和快速恢复。又发现丢包,再次进入快速重传和快速恢复。注意,每次进入快速重传和快速恢复时,ssthresh和cwnd都要减半。多次丢包最终会导致ssthresh指数减小。

  通过画cwnd(t)图可以发现,不仅这段时间吞吐量非常低,而且导致恢复完后拥塞避免的起点非常低,从而导致之后的吞吐量也很低。

  (2)经过多次快速重传和快速恢复,接着发生传输超时。

  那么,发生传输超时需要什么样的条件呢?

  1) when two packets are dropped from a window of data, the Reno sender is forced to wait for a retransmit timeout whenever the congestion window is less than 10 packets when Fast Recovery is initiated, and whenever the congestion window is within two packets of the receiver's advertised window when Fast Recovery is initiated.

  2) when three packets are dropped from a window of data, the Reno sender is forced to wait for a retransmit timeout whenever the number of packets between the first and the second dropped packets is less than 2 + 3W/4, for W the congestion window just before the Fast Retransmit.

  这种情况出现的概率极大,也就是说一个窗口出现3个丢包,有大概率出现超时。当丢包时窗口大小为15,有三个丢包,那么无论丢包的顺序如何,2次FR/FR之后,总会出现超时。

  超时一般是因为未确认的数据包 > 可以使用的cwnd,不能发送新的数据,而网络中有没有足够的重复ACK来触发FR/FR.

  问题2:为什么发生拥塞时,还增加cwnd?

  答案:在检测到丢包时,窗口为cwnd.这时候网络中最多有cwnd个包(in_flight < cwnd )。每当收到一个重复的ACK,则说明有数据包离开网络,达到接收端了。那么,此时网络中还可以再容纳1个包。由于发送端滑动窗口不能移动了,所以如果想保持in_flight,可以使cwnd++.这样一来,可以提高吞吐量。而实际上,在fast recovery期间发送的新数据包比起发生丢包的cwnd来说,已经是大大减少了。

  性能分析

  Tahoe没有快速恢复机制,在丢包后,它不仅重发了一些已经成功传输的数据,而且在恢复期间吞吐量也不高。

  利用SACK option携带的信息,我们能够提前知道哪些数据包丢失了。NewReno每个RTT内只能恢复一个丢失的数据包,所以如果丢失了N个数据包,那么Fast Recovery就要持续N*RTT的时间,当N比较大时,这是一段相当长的时间。而SACK则没有这个限制,依靠SACK option的信息,它能够同时恢复多个数据包,更加快速和平稳的恢复。

  当发生同一窗口多个丢包时,SACK和NewReno最终都能够较为快速和平稳的恢复过来。而Reno则经常出现超时,然后再用慢启动来恢复,这个时候Reno的表现就如同Tahoe,会造成已接受数据的重复传送。Reno恢复期间会出现吞吐量低、恢复时间长、不必要重发数据、恢复结束后阈值过低等一些问题,严重的影响性能。

  结论

  经过上述分析我们可以看出:

  It is a fundamental consequence of the absence of SACK that the sender has to choose between the following strategies to recover from lost data:

  (1)retransmitting at most one dropped packet per round-trip time

  (2)retransmitting packets that might have already been successfully delivered.

  Reno and New-Reno use the first strategy, and Tahoe uses the second. With SACK, a sender can avoid unnecessary delays and retransmissions, resulting in improved throughput.

  SACK的不足

  上面说了很多SACK的好话,现在来谈谈它的不足之处。

  For a large BDP network where the number of packets are in flight, the procesing overhead of SACK information at the end points can be quite overhelming because each SACK block invokes a research into the large packet buffers of the sender for acked packets in the block, and every recovery of a loss packet causes the same search at the receiver.

  在BDP网络,这个问题尤其明显,会严重的消耗CPU而导致一系列问题。在一定程度上来说,此时的SACK就像DOS攻击一样,每次遍历都要消耗大量CPU,时间复杂度为O(n^2),n为packets in flight的数量。

  The system overload can cause serious problem : it can cause multiple timeouts (as even packet retransmission and receptions are delayed) and a long period of zero throughput.

  当然,这是中等规模的BDP(100~1000)或大规模的BDP网络才需考虑的问题,对于一般的BDP而言不会出现太大的问题。


想请问一个基础的问题:TCP快速重传时,为什么要发三个相同的包,为什么是三,也就是问,接收端为什么在受到顺序混乱的数据后,要发三个ACK,发送方就重传?

理论和实际的结合吧。拥塞后重新发送数据的标准要么根据连续三个ACK,要么根据超时时间RTO(retransmission timeout),一般这个时间设置为1秒。试想一下,如果就传3个包包,第1个到了,第2个丢了,第三个到了,这样最多就只能发2个ACK。快速重传规定的3个不能达到,只能等待RTO超时。据某文献测试统计,大概56%的网络重传靠超时,剩下的靠快速重传。因此,快速重传只是在某些情况下有用,因为不必大家都统一的等待超时,有三个就可以快速判断包丢失,能局部提高效率。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分成两个分卷进行压缩 《Ubuntu权威指南》目录 目  录 第1章 系统概述与安装 1 1.1 Linux的兴起与发展 2 1.2 充分利用网上资源 3 1.2.1 Ubuntu官方网站 3 1.2.2 GNU网站 4 1.2.3 Linux文档项目网站 4 1.2.4 网上求助 5 1.3 随时查询随机文档 6 1.3.1 使用“--help”选项查询 命令的简单说明 6 1.3.2 使用man命令联机查询 系统参考手册 6 1.3.3 使用info命令查询命令的相关信息 8 1.4 安装Ubuntu Linux系统 9 1.4.1 安装前的准备 10 1.4.2 安装Ubuntu Linux系统 11 1.4.3 安装后的软件维护与更新 16 第2章 GNOME桌面环境 18 2.1 GNOME桌面环境概述 19 2.1.1 GNOME注册界面 19 2.1.2 GNOME桌面环境 20 2.2 GNOME桌面环境浏览 21 2.2.1 GNOME菜单面板 21 2.2.2 GNOME桌面区 24 2.2.3 GNOME窗口面板 26 2.3 应用程序菜单 27 2.3.1 办公 28 2.3.2 附件 29 2.3.3 互联网 31 2.3.4 图形 33 2.3.5 影音 34 2.3.6 游戏 36 2.3.7 添加/删除软件 36 2.4 位置菜单 36 2.4.1 主文件夹 38 2.4.2 桌面、文档等 39 2.4.3 计算机 39 2.4.4 CD/DVD刻录机 39 2.4.5 磁盘分区 40 2.4.6 网络 40 2.4.7 连接到服务器 41 2.4.8 搜索文件 41 2.4.9 最近的文档 42 2.5 系统菜单 42 2.5.1 首选项 42 2.5.2 系统管理 45 2.5.3 锁住屏幕 51 2.5.4 注销 51 2.5.5 关机 51 2.6 使用移动存储设备 51 2.6.1 浏览移动存储介质 52 2.6.2 写入移动存储介质 53 2.7 定制GNOME桌面环境 54 2.7.1 定制面板 54 2.7.2 定制桌面背景 54 2.7.3 定制菜单面板 55 第3章 命令行基础知识 56 3.1 命令行结构 57 3.2 后台进程 60 3.3 标准输入/标准输出与标准错误 ?输出 61 3.4 输入/输出重定向 61 3.5 管道 65 3.6 元字符与文件名生成 67 3.7 转义与引用 69 3.8 命令历史 72 3.8.1 fc命令 72 3.8.2 history命令 74 3.8.3 重复执行先前的命令 75 3.8.4 编辑并执行校正后的命令 76 3.8.5 命令行补充 77 3.9 命令别名 79 3.10 作业控制 81 3.11 会话记录与命令确认 83 3.11.1 保存会话记录 83 3.11.2 确保使用的命令是 ??正确的 84 第4章 文件系统基础知识 86 4.1 文件系统的层次结构 87 4.1.1 树形层次结构 87 4.1.2 路径名 88 4.2 文件系统的组织结构 88 4.3 文件的类型 92 4.3.1 普通文件 92 4.3.2 目录文件 94 4.3.3 特殊文件 95 4.3.4 链接文件 98 4.3.5 符号链接文件 99 4.3.6 管道文件 101 4.4 文件的安全保护机制 101 4.4.1 显示文件的访问权限 102 4.4.2 修改文件的访问权限 103 4.4.3 设置文件的访问权限 104 4.4.4 其他访问权限设置 106 第5章 文件和目录操作 107 5.1 创建文件 108 5.2 显示文件列表 108 5.2.1 使用ls命令显示文件 列表 108 5.2.2 利用通配符显示文件 110 5.2.3 显示隐藏文件 111 5.2.4
网络安全防护 当今社会,对企业敏感的员工、客户和业务数据加以保护的需求正在不断上升,无论此类数据位于何处均是如此。到目前为止,大部分数据盗窃案起源于个体黑客对生产数据库的恶意侵入。鉴于一系列众所周知且代价惨重的盗窃案为受害企业造成的重大法律责任及负面报道针对此类袭击的防护措施和手段正在快速地变得成熟先进,但攻击者同样也在步步紧逼 部门:XXX 讲师:XXX 网络安全防护个人隐私保护带内容、网络安全项目计划书全文共45页,当前为第1页。 目录 PART1 网络安全的内涵 PART2 网络安全技术原理 PART3 网络安全预防措施 PART4 问题与发展现状 网络安全防护个人隐私保护带内容、网络安全项目计划书全文共45页,当前为第2页。 PRAT 1 网络安全内涵 The Connotation of Network Security 网络安全防护个人隐私保护带内容、网络安全项目计划书全文共45页,当前为第3页。 保密性 信息不泄露给非授权用户、实体或过程,或供其利用的特性 可用性 可被授权实体访问并按需求使用的特性。即当需要时能否存取所需的信息。 可审查性 网络安全的可审查性是出现安全问题时提供依据与手段 完整性 数据未经授权不能进行改变,即存储或传输过程中保持不被修改、破坏和丢失 可控性 网络安全的可控性是对信息的传播及内容具有控制能力。 01 网络安全主要特性 4 网络安全防护个人隐私保护带内容、网络安全项目计划书全文共45页,当前为第4页。 加密通讯 主动的加密通讯,可使攻击者不能了解、修改敏感信息。 认证 良好的认证体系可防止攻击者假冒合法用户。 备份和恢复 良好的备份和恢复、,可在攻击造成损失时,尽快地恢复数据和系统服务。 访问控制 通过对特定网段、服务建立的访问控制体系,将绝大多数攻击阻止在到达攻击目标之前。 检查安全漏洞 通过对安全漏洞的周期检查,即使攻击可到达攻击目标,也可使绝大多数攻击无效。 攻击监控 通过对特定网段、服务建立的攻击监控体系,可实时检测出绝大多数攻击,采取相应的行动 1 4 3 2 5 6 01 网络信息安全体系 5 网络安全防护个人隐私保护带内容、网络安全项目计划书全文共45页,当前为第5页。 01 网络信息安全分析 6 网络分析一个让网络管理者,能够在各种网络安全问题中,对症下药的网络管理方案,它对网络中所有传输的数据进行检测、分析、诊断,帮助用户排除网络事故,规避安全风险,提高网络性能,增大网络可用性价值。 网络的物理安全是整个网络系统安全的前提。 网络拓扑结构设计也直接影响到网络系统的安全性。 所谓系统的安全是指整个网络操作系统和网络硬件平台是否可靠且值得信任。 应用系统的安全跟具体的应用有关,它涉及面广。 管理是网络中安全最最重要的部分。 网络安全防护个人隐私保护带内容、网络安全项目计划书全文共45页,当前为第6页。 运行系统安全即保证信息处理和传输系统的安全。它侧重于保证系统正常运行。 网络上系统信息的安全。括用户口令鉴别,用户存取权限控制,数据存取权限、方式控制,安全审计。 网络上信息传播安全,即信息传播后果的安全,括信息过滤等。 网络上信息内容的安全。它侧重于保护信息的保密性、真实性和完整性。 01 网络安全主要类型 7 网络安全防护个人隐私保护带内容、网络安全项目计划书全文共45页,当前为第7页。 PRAT 2 技术原理分析 Technical principle of Network Security 网络安全防护个人隐私保护带内容、网络安全项目计划书全文共45页,当前为第8页。 网络安全影响因素 自然灾害、意外事故;计算机犯罪; 人为行为,比如使用不当,安全意识差等;黑客" 行为:由于黑客的入侵或侵扰,比如非法访问、拒绝服务计算机病毒、非法连接等;内部泄密;外部泄密;信息丢失;电子谍报,比如信息流量分析、信息窃取等;网络协议中的缺陷,例如TCP/IP协议的安全问题等等。 网络安全防护个人隐私保护带内容、网络安全项目计划书全文共45页,当前为第9页。 02 网络安全影响因素 10 渗入威胁主要有:假冒、旁路控制、授权侵犯; 渗入威胁 植入威胁主要有:特洛伊木马、陷门。 植入威胁 01 OPTION 02 OPTION 陷门:将某一"特征"设立于某个系统或系统部件之中,使得在提供特定的输入数据时,允许安全策略被违反。 人为行为,比如使用不当,安全意识差等;黑客" 行为:由于黑客的入侵或侵扰 网络安全防护个人隐私保护带内容、网络安全项目计划书全文共45页,当前为第10页。 02 我国网络安全隐患 11 用户因素 企业建造自己的内部网是为了加快信息交流,更好地适应市场需求。 地域因素 由于内部网Intranet可以是LAN也可能是WAN往往跨越城际,甚至国际。 网络协议因素
分成两个分卷进行压缩 《Ubuntu权威指南》目录 目  录 第1章 系统概述与安装 1 1.1 Linux的兴起与发展 2 1.2 充分利用网上资源 3 1.2.1 Ubuntu官方网站 3 1.2.2 GNU网站 4 1.2.3 Linux文档项目网站 4 1.2.4 网上求助 5 1.3 随时查询随机文档 6 1.3.1 使用“--help”选项查询 命令的简单说明 6 1.3.2 使用man命令联机查询 系统参考手册 6 1.3.3 使用info命令查询命令的相关信息 8 1.4 安装Ubuntu Linux系统 9 1.4.1 安装前的准备 10 1.4.2 安装Ubuntu Linux系统 11 1.4.3 安装后的软件维护与更新 16 第2章 GNOME桌面环境 18 2.1 GNOME桌面环境概述 19 2.1.1 GNOME注册界面 19 2.1.2 GNOME桌面环境 20 2.2 GNOME桌面环境浏览 21 2.2.1 GNOME菜单面板 21 2.2.2 GNOME桌面区 24 2.2.3 GNOME窗口面板 26 2.3 应用程序菜单 27 2.3.1 办公 28 2.3.2 附件 29 2.3.3 互联网 31 2.3.4 图形 33 2.3.5 影音 34 2.3.6 游戏 36 2.3.7 添加/删除软件 36 2.4 位置菜单 36 2.4.1 主文件夹 38 2.4.2 桌面、文档等 39 2.4.3 计算机 39 2.4.4 CD/DVD刻录机 39 2.4.5 磁盘分区 40 2.4.6 网络 40 2.4.7 连接到服务器 41 2.4.8 搜索文件 41 2.4.9 最近的文档 42 2.5 系统菜单 42 2.5.1 首选项 42 2.5.2 系统管理 45 2.5.3 锁住屏幕 51 2.5.4 注销 51 2.5.5 关机 51 2.6 使用移动存储设备 51 2.6.1 浏览移动存储介质 52 2.6.2 写入移动存储介质 53 2.7 定制GNOME桌面环境 54 2.7.1 定制面板 54 2.7.2 定制桌面背景 54 2.7.3 定制菜单面板 55 第3章 命令行基础知识 56 3.1 命令行结构 57 3.2 后台进程 60 3.3 标准输入/标准输出与标准错误 ?输出 61 3.4 输入/输出重定向 61 3.5 管道 65 3.6 元字符与文件名生成 67 3.7 转义与引用 69 3.8 命令历史 72 3.8.1 fc命令 72 3.8.2 history命令 74 3.8.3 重复执行先前的命令 75 3.8.4 编辑并执行校正后的命令 76 3.8.5 命令行补充 77 3.9 命令别名 79 3.10 作业控制 81 3.11 会话记录与命令确认 83 3.11.1 保存会话记录 83 3.11.2 确保使用的命令是 ??正确的 84 第4章 文件系统基础知识 86 4.1 文件系统的层次结构 87 4.1.1 树形层次结构 87 4.1.2 路径名 88 4.2 文件系统的组织结构 88 4.3 文件的类型 92 4.3.1 普通文件 92 4.3.2 目录文件 94 4.3.3 特殊文件 95 4.3.4 链接文件 98 4.3.5 符号链接文件 99 4.3.6 管道文件 101 4.4 文件的安全保护机制 101 4.4.1 显示文件的访问权限 102 4.4.2 修改文件的访问权限 103 4.4.3 设置文件的访问权限 104 4.4.4 其他访问权限设置 106 第5章 文件和目录操作 107 5.1 创建文件 108 5.2 显示文件列表 108 5.2.1 使用ls命令显示文件 列表 108 5.2.2 利用通配符显示文件 110 5.2.3 显示隐藏文件 111 5.2.4 递归地列出文件 112 5.3 显示文件内容 113 5.3.1 使用cat命令显示文件 113 5.3.2 使用more命令分页显示 文件 113 5.3.3 使用less命令分页显示 文件 114 5.3.4 使用head命令显示文件 前几行内容 115 5.3.5 使用tail命令显示文件 最后几行内容 116 5.4 复制文件 116 5.5 移动文件 117 5.6 删除文件 118 5.7 显示当前工作目录 119 5.8 改换目录 119 5.9 创建目录 121 5.10 移动目录 121 5.11 复制目录 121 5.12 删除目录 122 5.13 比较文件之间的差别 123 5.13.1 使用diff命令比较两个 ??文件 123 5.13.2 使用diff3命令比较3个 ??文件 123 5.14 从系统中检索文件 124 5.14.1 简单检索 126 5.14.2 使用逻辑运算符 126 5.14.3 利用find命令本身实现 ??其他处理功能 126 5.14.4 利用管道实现其他 ??处理功能 127 5.15 检索文件内容 127 5.15.1 利用grep检索文件 ??内容 127 5.15.2 过滤其他命令的输出 ??数据 128 5.15.3 使用grep检索多个文件 128 5.15.4 检索不含特定字符 ??串的文本行 129 5.15.5 在grep中使用正则 ??表达式 129 5.15.6 检索元字符本身 131 5.15.7 在命令行中使用引号 131 5.16 排序 132 第6章 编辑文件 133 6.1 启动vim编辑器 134 6.1.1 创建文件 134 6.1.2 状态行 135 6.2 vim编辑器的两种工作模式 135 6.2.1 输入模式 135 6.2.2 命令模式 135 6.3 保存编辑的文件并退出vim 136 6.4 vim编辑器的基本命令 137 6.4.1 移动光标位置 137 6.4.2 输入文本 138 6.4.3 修改与替换文本 138 6.4.4 撤销先前的修改 139 6.4.5 删除文本 139 6.4.6 复制、删除与粘贴文本 140 6.4.7 按指定的数量重复执行 命令 141 6.5 使用ex命令 141 6.5.1 显示行号 141 6.5.2 多行复制 142 6.5.3 移动文本行 142 6.5.4 删除文本行 142 6.6 检索与替换 142 6.6.1 检索字符串 142 6.6.2 模式检索 143 6.6.3 替换字符串 144 6.7 编辑多个文件 145 6.7.1 编辑多个文件 145 6.7.2 合并文件与合并文本行 145 6.8 定制vim编辑器的运行环境 145 6.8.1 临时设定vim的运行 环境 145 6.8.2 永久性地定制vim的 运行环境 148 6.9 其他特殊说明 148 6.9.1 删除或替换特殊字符 148 6.9.2 在编辑期间运行Linux 命令 149 6.10 vim编辑器命令总结 149 第7章 Shell基础知识 153 7.1 引言 154 7.1.1 为什么需要Shell编程 154 7.1.2 什么是Shell脚本 155 7.1.3 运行Shell脚本 155 7.1.4 退出与出口状态 156 7.1.5 调用适当的Shell解释 程序 158 7.1.6 位置参数 159 7.2 变量与变量替换 161 7.2.1 变量分类 162 7.2.2 变量的赋值 162 7.2.3 内部变量 163 7.2.4 变量的引用与替换 165 7.2.5 变量的间接引用 167 7.2.6 特殊的变量替换 167 7.2.7 变量声明与类型定义 170 7.3 命令与命令替换 171 7.3.1 Shell内部命令 171 7.3.2 部分命令介绍 174 7.3.3 命令替换 183 7.4 test语句 185 7.4.1 文件测试运算符 186 7.4.2 字符串测试运算符 187 7.4.3 整数值测试运算符 188 7.4.4 逻辑运算符 189 7.5 命令行的解释执行过程 190 7.5.1 读取命令行 191 7.5.2 命令历史替换 191 7.5.3 别名替换 192 7.5.4 花括号扩展 192 7.5.5 波浪号替换 192 7.5.6 I/O重定向 193 7.5.7 变量替换 194 7.5.8 算术运算结果替换 195 7.5.9 命令替换 195 7.5.10 单词解析 195 7.5.11 文件名生成 196 7.5.12 引用字符处理 197 7.5.13 进程替换 197 7.5.14 环境处理 198 7.5.15 执行命令 198 7.5.16 跟踪执行过程 199 第8章 Shell高级编程 200 8.1 if条件语句 201 8.1.1 if语句的表现形式 201 8.1.2 嵌套的if-then 条件测试 202 8.1.3 if-then结构参考 204 8.2 case分支语句 205 8.3 for循环语句 207 8.4 while循环语句 210 8.5 until循环语句 212 8.6 select循环语句 213 8.7 嵌套的循环 214 8.8 循环控制与辅助编程命令 215 8.8.1 break和continue命令 215 8.8.2 true命令 217 8.8.3 sleep命令 217 8.8.4 shift命令 217 8.8.5 getopt命令 218 8.8.6 getopts命令 219 8.9 循环语句的I/O重定向 221 8.9.1 while循环的I/O重定向 221 8.9.2 until循环的I/O重定向 222 8.9.3 for循环的I/O重定向 222 8.10 Here文档 223 8.11 Shell函数 227 8.12 逻辑与和逻辑或并列结构 232 8.12.1 逻辑与命令并列结构 232 8.12.2 逻辑或命令并列结构 233 8.13 Shell数组 233 8.14 信号的捕捉与处理 238 8.15 其他Shell课题 241 8.15.1 子Shell 241 8.15.2 Shell脚本的调试 242 8.15.3 系统性能考虑 246 第9章 进程管理 248 9.1 ps命令概述 249 9.2 查询进程及其状态信息 251 9.2.1 查询当前活动的进程 251 9.2.2 查询系统中的所有进程 251 9.2.3 显示进程的重要状态 信息 252 9.2.4 显示进程的详细状态 信息 253 9.2.5 显示进程间的调用关系 253 9.2.6 pstree命令 254 9.3 监控进程及系统资源 255 9.4 终止进程的运行 259 9.5 调整分时进程的优先级 261 9.5.1 nice命令 261 9.5.2 renice命令 263 9.5.3 调整进程优先级的作用 263 第10章 proc文件系统 265 10.1 进程内存映像文件 266 10.2 系统配置信息 270 10.3 系统运行状态信息 273 10.4 系统可调参数 276 10.4.1 文件系统可调参数 277 10.4.2 系统内核可调参数 277 10.4.3 sysctl命令 281 10.5 其他重要的子目录 282 第11章 磁盘空间管理 285 11.1 查询磁盘空间信息 286 11.1.1 常用的磁盘空间 ??管理工具 286 11.1.2 使用df命令检查磁盘 ??空间的使用情况 286 11.1.3 使用du命令检查目录 ??占用的存储空间 289 11.1.4 使用find命令找出超过 ??一定容量限制的文件 290 11.1.5 使用find命令找出并删除 ??长期闲置不用的文件 290 11.1.6 使用find命令找出并删除 ??core文件 292 11.1.7 使用ls命令检测文件的 ??大小 292 11.2 采用标准工具备份与恢复数据 292 11.2.1 利用cpio实现备份和 ??恢复 294 11.2.2 利用tar实现备份和 ??恢复 298 11.2.3 利用dd实现文件系统的 ??原样复制 304 11.3 采用专用工具备份与恢复数据 305 11.3.1 利用dump命令实现数据的 ??备份 306 11.3.2 利用restore命令实现 ??数据的恢复 308 11.4 文件系统限额管理 310 11.4.1 限额概述 310 11.4.2 设置限额 312 11.4.3 限额的维护 315 第12章 软件管理 318 12.1 软件管理概述 319 12.1.1 软件维护工具 319 12.1.2 软件管理基本概念 319 12.2 利用apt-get管理软件 321 12.2.1 安装软件 323 12.2.2 系统的更新与升级 324 12.2.3 删除软件 325 12.2.4 安装本地存储介质中的 ??软件 325 12.2.5 sources.list配置文件 325 12.3 利用aptitude管理软件 327 12.3.1 安装软件 329 12.3.2 系统的升级 330 12.3.3 查询软件 330 12.3.4 检索软件 330 12.3.5 删除软件 332 12.3.6 图形界面 333 12.4 synaptic图形界面软件管理 工具 333 12.4.1 浏览软件 335 12.4.2 安装软件 335 12.4.3 删除软件 336 12.4.4 软件升级 337 12.5 GNOME软件增删工具 338 12.6 软件的自动更新 339 第13章 用户管理 341 13.1 增加与删除用户 342 13.1.1 /etc/passwd文件 342 13.1.2 /etc/shadow文件 343 13.1.3 用户管理实例 344 13.2 定制用户的工作环境 349 13.2.1 选择命令解释程序 349 13.2.2 设置用户初始化文件 351 12.2.3 定制Shell工作环境 353 13.3 增加与删除用户组 359 13.4 监控用户 360 13.4.1 利用who命令查询 ??系统中的用户 361 13.4.2 利用finger命令查询 ??系统中的用户 362 13.4.3 利用w命令查询系统 ??中的用户活动 362 13.4.4 向注册用户发送消息 362 13.5 插件式认证模块 363 13.5.1 配置文件、模块类型与 ??控制标志 363 13.5.2 修改PAM配置文件 366 13.6 超级用户与sudo命令 366 13.6.1 超级用户的访问控制 367 13.6.2 利用sudo运行特权 ??命令 368 13.6.3 sudoers配置文件 369 13.6.4 admin用户组成员的 ??访问权限 373 13.6.5 直接使用root注册 373 13.6.6 以不同的用户身份 ??访问系统 373 第14章 系统启动与关机 375 14.1 磁盘分区与GRUB 376 14.1.1 磁盘分区 376 14.1.2 GRUB 378 14.1.3 GRUB配置文件 379 14.1.4 安装或修复GRUB 381 14.2 初始引导过程 383 14.2.1 GRUB引导过程概述 384 14.2.2 补充说明 386 14.3 系统生成过程 386 14.3.1 基本概念 388 14.3.2 init进程与/etc/event.d ??目录 391 14.3.3 启动用户定义的应用 ??程序 394 14.4 Login进程 395 14.4.1 login进程与passwd ??文件 395 14.4.2 Shell进程与profile ??文件 395 14.5 系统关机过程 396 14.5.1 使用shutdown命令 ??关闭系统 396 14.5.2 使用init命令关闭系统 397 14.5.3 使用其他命令关机 397 第15章 作业调度与系统日志 398 15.1 定时运行后台作业 399 15.1.1 cron守护进程的 ??调度过程 399 15.1.2 at作业与atd守护进程 400 15.1.3 调度错失执行时间 ??的任务 401 15.2 调度重复执行的任务 402 15.2.1 crontab文件的工作原理 402 15.2.2 创建和编辑crontab ??文件 404 15.2.3 显示crontab文件 405 15.2.4 删除crontab文件 405 15.2.5 crontab命令的访问控制 405 15.2.6 应用实例—数据库 ??定时备份 406 15.3 调度一次性执行的作业 407 15.3.1 提交at作业 408 15.3.2 显示at作业及作业队列 409 15.3.3 删除at作业 409 15.3.4 at命令的访问控制 409 15.3.5 应用实例—系统 ??定时关机 410 15.4 系统日志 411 15.4.1 系统日志文件 412 15.4.2 应用程序日志文件 413 15.4.3 无法直接查阅的日志 413 15.4.4 系统日志守护进程 414 第16章 文件系统内部组织 417 16.1 文件系统的组织结构 418 16.1.1 引导块 419 16.1.2 数据块组 419 16.2 超级块 422 16.3 信息节点 424 16.3.1 文件的类型与访问权限 426 16.3.2 数据块地址数组 426 16.3.3 符号链接文件 427 16.3.4 特权标志位 427 16.4 信息节点与目录及文件的关系 428 16.4.1 目录文件 428 16.4.2 目录、文件和信息节点 ???三者之间的关系 429 第17章 文件系统管理 431 17.1 划分磁盘分区 432 17.2 创建文件系统 434 17.2.1 mkfs或mke2fs命令 ??介绍 434 17.2.2 创建Ext2/Ext3文件 ??系统 436 17.3 调整文件系统 437 17.4 安装与卸载文件系统 439 17.4.1 安装文件系统概述 439 17.4.2 mount命令 440 17.4.3 /etc/fstab文件 441 17.4.4 安装文件系统 442 17.4.5 卸载文件系统 444 17.5 检测与修复文件系统 446 17.5.1 何时需要检测文件系统 447 17.5.2 文件系统检测的内容 448 17.5.3 交互地检测与修复 ??文件系统 452 17.5.4 自动检测与修复文件 ??系统 453 17.5.5 恢复严重受损的超级块 454 17.5.6 解决fsck命令无法修复 ??的文件系统问题 454 17.5.7 fsck的阶段处理方式 455 17.6 调试文件系统 458 17.6.1 概述 458 17.6.2 交互式调试子命令 459 17.6.3 应用举例1—恢复 ??误删的文件 464 17.6.4 应用举例2—恢复 ??误删的文件 465 17.7 其他文件系统维护工具 467 17.7.1 dumpe2fs命令 467 17.7.2 e2image命令 468 第18章 TCP/IP网络管理 470 18.1 TCP/IP简介 471 18.1.1 TCP/IP的层次结构 471 18.1.2 TCP/IP如何处理数据 ??通信 473 18.2 网络接口设置 475 18.2.1 以太网络设置 475 18.2.2 ADSL网络连接 480 18.3 主机名字解析 483 18.4 网络路由设置 484 18.5 配置网络服务 485 18.6 网络管理与维护 487 18.6.1 使用ifconfig命令维护 ??网络接口 487 18.6.2 使用netstat命令监控 ??网络状态 489 18.6.3 使用ping命令测试远程 ??主机的连通性 494 18.6.4 使用ping命令检测网络 ??主机的性能 495 18.6.5 使用ftp命令检测网络 ??主机的传输性能 496 18.6.6 使用traceroute命令跟踪 ??路由信息 496 18.6.7 利用tcpdump捕捉、分析 ??网络分组数据 497 第19章 TCP/IP网络应用 501 19.1 OpenSSH 502 19.1.1 安装OpenSSH服务器 502 19.1.2 /etc/ssh/sshd_config ??配置文件 502 19.1.3 使用SSH注册到 ??远程系统 505 19.1.4 使用ssh执行远程系统 ??中的命令 506 19.1.5 使用SCP替代FTP 506 19.1.6 使用SFTP替代FTP 507 19.1.7 SSH与SCP的无 ??密码注册 508 19.1.8 OpenSSH的安全考虑 510 19.2 Telnet远程注册 510 19.2.1 设置Telnet服务器 511 19.2.2 Telnet服务器的安全 ??考虑 512 19.3 FTP文件传输 513 19.3.1 设置vsftpd 513 19.3.2 vsftpd.conf配置文件 513 19.3.3 FTP安全考虑 517 19.3.4 FTP应用 518 19.3.5 FTP自动注册 519 第20章 DNS域名服务器 521 20.1 DNS基本概念 522 20.1.1 域与区 522 20.1.2 DNS域名服务器 523 20.1.3 DNS域名与地址解析 524 20.2 DNS配置文件 526 20.2.1 resolv.conf文件 527 20.2.2 named.conf配置文件 528 20.2.3 区配置文件 532 20.2.4 DNS资源记录 533 20.3 DNS服务器配置过程 537 20.3.1 设置resolv.conf配置 ??文件 537 20.3.2 设置named.conf配置 ??文件 537 20.3.3 设置正向区配置文件 538 20.3.4 设置反向区配置文件 539 20.3.5 DNS视图 540 20.3.6 检测配置文件 543 20.4 测试DNS服务器 544 20.4.1 验证DNS服务器 544 20.4.2 dig命令 545 第21章 NFS网络文件系统 548 21.1 NFS简述 549 21.2 配置NFS服务器 550 21.2.1 安装NFS服务器 ??软件 550 21.2.2 /etc/exports文件 551 21.2.3 采用图形界面配置NFS ??共享资源 553 21.2.4 验证NFS共享资源的 ??配置 555 21.3 配置NFS客户系统 557 21.3.1 安装远程文件系统 557 21.3.2 设置/etc/fstab文件 558 21.4 NFS自动安装 559 21.4.1 主映射文件 559 21.4.2 直接映射文件 560 21.4.3 间接映射文件 560 21.5 NFS故障修复 561 21.5.1 基本工具 561 21.5.2 其他注意事项 564 第22章 amba资源共享 565 22.1 安装Samba服务器 566 22.2 smb.conf配置文件 567 22.2.1 smb.conf配置文件概述 568 22.2.2 Global节 569 22.2.3 homes节 572 22.2.4 printers节 574 22.3 快速设置Samba服务器 575 22.3.1 设定Samba服务器的 ??工作组或域 575 22.3.2 设置Samba用户认证 ??信息 576 22.3.3 共享用户主目录 577 22.3.4 共享其他目录 577 22.3.5 共享打印机 578 22.3.6 验证Samba配置文件 579 22.4 Samba运行环境测试 580 22.4.1 在Linux系统中测试 ??Samba服务器 580 22.4.2 从Windows系统中 ??连接Samba服务器 583 22.5 访问共享资源 584 22.5.1 从Windows系统中访问 ??Samba服务器 584 22.5.2 从Linux系统中访问 Windows服务器 585 第23章 Apache服务器 588 23.1 Apache服务器概述 589 23.2 启动Apache服务器 589 23.2.1 Apache软件的目录 ??结构 589 23.2.2 apache2守护进程 590 23.2.3 设置Apache启动脚本 591 23.2.4 Apache模块 592 23.3 配置Apache服务器 592 23.3.1 Apache配置文件 593 23.3.2 .htaccess文件 594 23.3.3 配置指令 594 23.4 用户目录 599 23.4.1 利用UserDir设定 ??目录路径 600 23.4.2 限定用户目录的使用 600 23.4.3 开放用户CGI目录 600 23.5 虚拟主机 601 23.5.1 配置基于主机名的虚拟 主机 602 23.5.2 配置基于IP地址的 ??虚拟主机 603 23.5.3 利用不同的IP地址提供 ??相同的网站服务 604 23.5.4 利用不同的端口提供 ??不同的网站服务 604 23.6 利用CGI提供动态内容服务 605 23.6.1 启用CGI程序 605 23.6.2 编写CGI程序 606 23.6.3 CGI的安全考虑与 ??suexec 608 23.6.4 Apache与LAMP 609 23.7 用户认证 610 23.7.1 用户认证的实现 610 23.7.2 用户认证方法的补充 ??说明 612 23.8 日志文件 613 23.8.1 错误日志文件 614 23.8.2 访问日志文件 615 23.8.3 虚拟主机日志 617 第24章 MySQL数据库 618 24.1 安装与配置MySQL数据库 619 24.1.1 安装MySQL数据库 619 24.1.2 my.cnf配置文件 619 24.1.3 MySQL数据库命令行 界面 621 24.1.4 MySQL数据库图形界面 622 24.1.5 设置数据库用户及其 ??访问权限 624 24.2 访问MySQL数据库 624 24.2.1 创建、查询、使用与删除 数据库 624 24.2.2 创建、查询与删除数 据库表 625 24.2.3 录入数据 626 24.3 查询MySQL数据库 627 24.3.1 查询数据库表 627 24.3.2 查询数据库表结构 628 24.3.3 查询数据库表中的数据 内容 628 24.4 SQL脚本与批处理 628 24.5 MySQL数据库 630 24.5.1 数据库备份方法 630 24.5.2 MySQL数据库备份 631 24.5.3 MySQL数据库恢复 632 24.5.4 MySQL数据库表的 备份与恢复 633 24.5.5 增量备份与恢复 633 24.6 密码维护与网络安全 635 24.6.1 维护数据库管理员密码 635 24.6.2 恢复数据库管理员密码 636 24.6.3 基本网络安全考虑 637 参考文献 638

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值