Linux大棚命令百篇(下):网络和系统篇(txt+pdf+epub+mobi电子书下载)

作者:吴鹏冲

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Linux大棚命令百篇(下):网络和系统篇

Linux大棚命令百篇(下):网络和系统篇试读:

内容简介

本书打破了市面上主流Linux命令书籍的写作风格,创新性地以专题文章或系列文章的形式来组织全书,文风轻松通顺、循序渐进,既适合作为系统学习的案头书,也适合在床头边、地铁上、院落中阅读。

本书是这套系列丛书的第二本,内容侧重在网络和系统方面。为了体现知识的结构化、系统化,本书共分为三篇。

第一篇 网络篇

这一部分是本书的重中之重,囊括了Linux工程师最常用的网络相关命令,通过对本篇的学习,读者将全面掌握Linux系统网络层面的各类知识和技能,包括用于网络测速的ping命令、用于域名解析的nslookup命令和dig命令、用于网络配置的iproute2套装、用于流量分析的tcpdump工具、用于建立系统信任关系的ssh-copy-id命令、用于数据网络同步的rsync工具,以及用于网络数据下载的wget命令,等等。

第二篇 进程和性能篇

这一部分专注于系统进程、服务器资源和性能方面。作为一名Linux工程师,总是希望能够全面了解服务器资源使用情况,快速定位系统性能瓶颈,那么,阅读和学习这一篇将是最好的选择。本篇将告诉大家free命令的很多不为人知的学问、SWAP的进阶知识、多核CPU的查看方法、top命令的使用技巧、vmstat输出内容中的指标含义、kill命令如何精准地杀死进程,等等。

第三篇 系统管理篇

这一部分专注在系统管理方面,主要介绍了和Linux操作系统原理相关的知识,包括查看系统基本信息的uname命令、查看用户账户的who命令、控制服务等级的chkconfig命令、查看机器硬件配置的dmidecode命令,等等。

学习完本书后,相信读者朋友们可以轻松而愉快地掌握Linux的网络、系统性能、系统管理等知识和技能,并达到一线互联网公司Linux工程师的水平。

推荐序1

日月如梭,自1991年10月Linus Torvalds发布第一版Linux操作系统以来,经过25年的历程,这个基于自由和开放源代码模式的操作系统已经日益发展壮大。从嵌入式系统、智能手机和平板电脑、个人计算机、网络服务器、云计算到高性能超级计算系统,到处可以看到它的身影。据Gartner等国际机构的统计,作为操作系统的重要成员,Linux在各类操作系统中所占的比重越来越大。

人们说Linux是个类似UNIX的多用户、多任务操作系统,是说Linux继承了很多UNIX的优秀特性,具备了模块化的设计,其进程控制、文件系统、外部设备、网络功能、安全管理以及各种功能齐全和强大的工具软件,可以方便地控制计算机系统完成各种操作,具备了免费和开源特性的Linux操作系统随着互联网在各个领域的发展,得到了更加快速的普及应用。从1996年起就支持IPv6协议的Linux对推进下一代互联网的部署发挥了重要作用。

Linux操作系统得到迅猛的发展,这与Linux具有的良好特性是分不开的,包括免费和开放特性、多用户多任务处理能力、方便灵活且功能强大的的Shell命令、丰富灵活的多种网络通信命令、可靠的系统安全措施、对多种多样外部设备的支持,以及良好的可移植性。

要想使用好Linux操作系统,充分发挥它的能力,就要学习好Linux的使用方法。现有关于Linux的书籍已经出版了很多,但这本书是非常有特色的一本。作者运用十分幽默风趣的语言,从Shell命令开始,介绍了文件编辑与内容处理,文件的查找、压缩与硬盘管理,网络相关命令,进程与性能调优,Linux系统管理等各种命令的使用方法和技巧。

无论是初学者学习使用Linux,还是开发者或系统管理员作为常用工具手册,这本书都是十分值得拥有的。一本好的入门教材会让初学者快速领悟到Linux系统的基本使用方法,掌握常用的Linux操作命令。如果仅仅依靠系统自带的man命令,往往会令初学者感到云遮雾罩,不明所以。而对Linux系统管理员来讲,本书对网络命令、系统调优等命令的介绍,可以使你对这些命令及其显示结果有更深入的理解。书中还列举了很多Linux发展历史中的趣味小故事,使读者在掌握Linux使用方法的同时,也调节了心情,增加了乐趣。

正像篇首所说,日月如梭,Linux已经面世二十五年啦。本书的作者从进入我们研究室学习到毕业工作,也已经十年了。应作者的邀请,作为本书的首批读者,我怀着兴奋的心情一边浏览着各个篇章,一边回忆着这些年来互联网的发展,以及他们的成长历程。他们有多年的工程实践经验,在大型网络公司掌管着上千台Linux集群服务器的运行与维护工作,积累了丰富的Linux使用经验和技巧。我诚挚推荐读者来阅读本书,也期待着他们能为读者带来更多的新作。马严北京邮电大学网络技术研究院教授、博士生导师

推荐序2

技术,一直是驱动社会不断进步和发展的主要动力。从蒸汽时代、电力时代到今天的信息时代,技术始终是推进社会发展的第一生产力。放眼未来,互联网+正推动互联网与社会各行业深度融合,人工智能、云计算、物联网、自动驾驶技术蓬勃发展,人类正在经历着第四次全球性科技革命。而我们有幸身处其中,掌握新时代核心技术的人才已经成为这轮洪洪巨流的推动者。

Linux,自从1991年发布至今,对计算机技术,互联网行业产生了巨大的推动作用。互联网时代,Linux无处不在,占据了全球绝大部分的服务器份额。这与Linux操作系统本身的高度开放性、高可定制性、高可用性等是密不可分的。百度等众多中国互联网企业的技术体系都是基于Linux操作系统构建的,熟练掌握并精通Linux技术,是互联网技术从业者的必备技能和核心竞争力之一。

无论是在校学生还是已入职场的工程师,学习并掌握Linux系统技术,需要一个边学习边实践的过程,并在解决实际问题中融会贯通。在国内互联网技术发展的早期,Linux优质资料稀缺、应用场景匮乏,国内工程师只能借鉴国外资料,学习梯度极高,全行业严重缺少高水平的系统管理人才,与国外同业差距明显。时至今日,中国互联网的蓬勃发展领先全球,国内也逐渐培养出一批具备先进实战经验的Linux系统人才,他们或掌管着中国互联网的基础设施,或运营着大规模集群,或构建出复杂的系统架构,或已经成为行业级系统架构师等领军人物。国内完全有条件诞生一部既有Linux基础又有经典实践经验的优秀著作,帮助读者快速地汲取经验,成为专家。

鹏冲曾在百度运维部磨练七年,先后担任垂直搜索运维团队技术负责人,全百度统一监控平台产品负责人等重要岗位,在Linux系统和集群管理方面拥有着深厚的技术积累和实践经验。这套关于Linux命令进阶的丛书是他多年积累的经验输出。

我有幸比广大读者更早阅读了本书,整个阅读体验顺畅,对于Linux常用命令的讲解力求深入浅出,并将实际应用中需要掌握的技术点讲解得相当透彻。对于从事或有志于从事互联网技术工作的读者,这本书将帮助大家从实用的角度学习和积累。

我推荐各位Linux技术从业者阅读和学习,相信这会是一个正确的选择。李硕百度运维部总监

自序

北邮七年学习,百度七年工作,让我经历了很多,思考了很多,也收获了很多。

知乎是我很喜欢的一个问答社区,“×××是一种怎样的体验?”“如何评价×××?”早已成为时下最流行的提问姿势。

所以呢,我会尝试着模仿知乎的提问风格,和大家分享我的五点思考和体会:

1.这本书为什么值得读?

2.为什么建议大家写博客?

3.如何进行知识管理?

4.如何学好Linux?

5.在百度运维部工作是一种怎样的体验?【这本书为什么值得读?】

虽然有种老王卖瓜的感觉,但我还是鼓起勇气,希望能用三个足够客观的理由吸引到你。(1)聚焦专题:以专题和系列文章的形式来讲解知识,是本书的一大特点。读者可以在一段较短的时间内,聚焦在一个命令的学习上,集中精力实现进阶。(2)贴近实战:书中内容全部来自于作者长期从事大规模Linux集群运维的经验总结,确保了本书的实用性。通过阅读本书,读者的Linux命令掌握水平可以更快地达到一线互联网公司Linux工程师的水平。(3)易于阅读:作者长期在“Linux大棚”从事技术博文的写作,善于用简单的语言、清晰的文章结构来解释复杂晦涩的概念和知识,让用户可以非常顺畅地阅读和理解。【为什么建议大家写博客?】

我在2008年9月创立了Linux大棚博客,一直坚持写作至今。我和大家分享写作的四点好处:

第一,觉得懂未必懂。写作是自我反省、自我提升的一个过程。不把知识落成文字,你就不会发现你掌握着许多模棱两可和模糊不清的知识。

第二,让别人懂才是真的懂。写作正是在强迫你给别人讲懂知识。在写作过程中,你需要思考应该先讲哪些知识,后讲哪些知识,需要思考应该通过哪些场景引出哪些知识,需要思考应该如何做知识的类比。这些技巧看似容易,实则并不容易。

第三,看似浪费时间,实则节省时间。知识总会被遗忘,但有实验证明阅读自己写过的知识,可以更快地重新掌握。所以,为了节省时间,请多写作。

第四,交到朋友还能出书。通过博客写作,可以吸引到不少志同道合的朋友,可以和他们一起交流一起进步。如果文章内容还不错,说不准会有出版社的编辑联系你出书哦。【如何进行知识管理?】

每个人都有自己的一套知识管理的方法,而我只是抛砖引玉。

按照知识的规模分,我将知识分成三种类型:(1)小型知识:往往是一句话或一个段落就能说清的知识,如一个技术名词的解释、一个命令的使用技巧等。(2)中型知识:需要一篇文章,甚至一个系列的文章才能介绍清楚的知识,如一个命令的完整用法、几种数据库技术的比对和选型等。(3)大型知识:需要一本书或多本书才能讲解清楚的知识,如Linux系统、MySQL数据库技术等。

按照知识的公开度分,我把知识分成两类:(1)愿意公开的:比如一些公共知识,不含个人信息,也不含保密信息的。(2)不愿意公开的:比如一些含有保密信息的知识,一些自己的随笔等。

而基于这两种分类方法,我一般会采用不同的手段,管理不同的知识:(1)小型知识、愿意公开:微博(比如“Linux大棚”官方微博);(2)中型知识、愿意公开:博客(比如“Linux大棚”技术博客);(3)大型知识、愿意公开:书籍(比如这本书);(4)小型知识、不愿公开:云笔记;(5)中大型知识、不愿公开:本地World文档、自建私有Wiki。

你会发现大部分的知识,都可以对应到上面的分类中。

当然,知识管理和减肥是一个道理,知易行难,一定要坚持养成知识管理的习惯,长此以往,才能受益。【如何学好Linux?】

从我的个人学习经历来看,“系统学习+实践+写作+交流分享”是学习Linux技术的一套有效的组合拳。

系统学习,即通过优秀的书籍、培训视频、培训课程等方式来系统地学习Linux系统。

实践,即真正到Linux环境中去学习,去工作,去主动解决问题。我在学习Linux之初,就在笔记本中完整安装了Fedora系统、Ubuntu系统、Debian系统和FreeBSD系统,来强迫自己在Linux环境中办公和娱乐。

写作,就是要养成写文章的习惯,把自己觉得模糊的知识点写成可发表的文章,这时候,你会发现,很多细节知识,你都要反复思考和查证,这个过程,就是进阶的过程。

交流分享,建议去结识一些Linux技术的高手和专家,他们的一些经验和体会,或许能让你事半功倍。【在百度运维部工作是一种怎样的体验?】

据我所掌握的信息来看,百度运维部应该是国内承担着超大规模Linux服务器运维任务的少数团队之一,Linux服务器规模达数十万。

由于规模效应的影响,在这里工作,即便是发生概率为0.1%%的BUG,都可能会每天发生。所以,在这里工作的运维工程师要面临的问题和挑战,将是国内同行很少碰到的,当然,据此而积累的经验和锻炼的解决问题的能力,也是国内顶尖的。

在百度的技术体系中,运维部处于研发部和系统部之间,研发部负责百度产品的开发工作,系统部负责操作系统、服务器、网络、机房等设施,而运维部则负责操作系统及上面运行的服务,确保服务的高可用性,同时不断地提升效率,降低成本。

就拿我曾负责的百度视频产品运维来说,运维工程师首先要确保的是服务的可用性,也就是要确保全国网民都可以访问到百度视频服务;其次,要通过CDN、缓存等多种技术手段不断提升网民访问网站的速度,提升网站访问体验;再者,需要更准确地监控到线上故障,更快速地实现模块升级、更可靠地实现故障自动化处理;最后,就是要追求更少的机器成本、更低的带宽成本、更少的人力投入来实现同样质量的运维服务。

有人会说做运维工作很辛苦,其实我想说,作为七年运维人,我一直相信,运维是架构师的必备技能之一,不具备运维经验和视野的人,是很难设计出优秀的架构的。不经一番寒彻骨,怎得梅花扑鼻香。

这篇自序,包含了几个方面的信息,都是我希望和大家分享的,也相信是大家所希望了解的。好了,如果大家对其中的哪些内容感兴趣,欢迎与我联系,我们深入沟通。下面的时间,就交给大家,来好好阅读这本书吧!

网络篇

在网络篇中,我们将为大家带来29篇文章,所有内容都是围绕着网络技术和工具展开的,具体如下:

●ping遍大江南北

●DNS探秘之一——nslookup初体验

●DNS探秘之二——DNS知识温故知新

●DNS探秘之三——nslookup输出解析

●DNS探秘之四——DNS协议中的五元组

●DNS探秘之五——nslookup交互模式

●DNS探秘之六——dig初体验

●DNS探秘之七——dig选项走马观花

●iproute2系列之一——和netstat说再见

●iproute2系列之二——篡权的ss

●iproute2系列之三——iproute2后浪推前浪

●iproute2系列之四——ip不只是地址

●iproute2系列之五——除了四还有六

●神探tcpdump第一招——神探出场

●神探tcpdump第二招——两个选项

●神探tcpdump第三招——选项进阶

●神探tcpdump第四招——保存与回放

●神探tcpdump第五招——过滤流量

●神探tcpdump第六招——过滤实战

●神探tcpdump第七招——过滤高手

●神探tcpdump第八招——输出解读

●神探tcpdump终结招——七个秘籍

●nc,一只可爱的网猫

●ssh-copy-id,帮你建立信任

●rsync同步的艺术

●其实你不懂wget的心之一——下载文件

●其实你不懂wget的心之二——躲避封禁

●其实你不懂wget的心之三——下载目录

●其实你不懂wget的心之四——体贴的选项

在这里,你不仅可以用nslookup和dig工具玩转DNS,还可以与神探tcpdump一起去网络流量中探险,还可以了解到netstat被ss篡权的幕后故事,想想都激动!

让我们现在就开始网络篇的学习之旅吧。1 ping遍大江南北ping不止是ping

接触过计算机网络的同学一定都知道ping命令吧,当计算机联网出现问题时,第一个进入脑海的解决方法就是“ping一下网络呗”。ping是如此的常用,它绝对是你使用频率最高的一条网络命令了。

在Windows系统中,我们更多的是简单地ping一下网站,来测试网络连通性,就像这样:ping roclinux.cn

但作为更专业的Linuxer,知道这些还远远不够,今天我们就为大家更全面地介绍一下这位最熟悉的陌生人——ping命令。指定ping的次数

受Windows使用习惯的影响,在Linux系统中需要ping的时候,你也许会这样:[roc@roclinux ~]$ ping roclinux.cnPING roclinux.cn (116.255.245.206) 56(84) bytes of data.64 bytes from 116.255.245.206: icmp_seq=1 ttl=49 time=16.3 ms64 bytes from 116.255.245.206: icmp_seq=2 ttl=49 time=16.7 ms64 bytes from 116.255.245.206: icmp_seq=3 ttl=49 time=15.9 ms64 bytes from 116.255.245.206: icmp_seq=4 ttl=49 time=19.1 ms64 bytes from 116.255.245.206: icmp_seq=5 ttl=49 time=18.1 ms

当你满怀期待的等着命令自己结束,可等到花儿都谢了,命令还是在执行。这是怎么回事呢?原来,Windows下的ping命令和Linux下的是有所不同的,Linux下的ping必须指定次数,不然它会无限次地执行下去。

如何指定执行次数呢?很简单,只需使用-c选项来设定次数即可。比如,ping三次roclinux.cn网站的正确执行方法是:[roc@roclinux ~]$ ping -c 3 roclinux.cnPING roclinux.cn (116.255.245.206) 56(84) bytes of data.64 bytes from 116.255.245.206: icmp_seq=1 ttl=49 time=15.9 ms64 bytes from 116.255.245.206: icmp_seq=2 ttl=49 time=16.4 ms64 bytes from 116.255.245.206: icmp_seq=3 ttl=49 time=15.7 ms --- roclinux.cn ping statistics ---3 packets transmitted,3 received,0% packet loss,time 15673msrtt min/avg/max/mdev = 15.785/16.084/16.496/0.301 ms只重结果不重过程

不想看到ping命令那啰唆的过程,只想看到结果统计,因为只有结果才是最关键的。那有没有办法满足大家这个小小的愿望呢?好消息!强大的ping命令说so easy!只需简单地增加-q选项就行了。不信的话,试试下面的命令:[roc@roclinux ~]$ ping -q -c 3 roclinux.cnPING roclinux.cn (116.255.245.206) 56(84) bytes of data. --- roclinux.cn ping statistics ---3 packets transmitted,3 received,0% packet loss,time 16794msrtt min/avg/max/mdev = 15.869/15.994/16.161/0.160 ms

这样的ping绝对是模范员工,工作时埋头苦干,出报告时清晰准确。

这时,我突然发现了一个陌生的指标mdev,就在ping命令输出内容的最后一行,这个指标是用来干什么的呢?

原来mdev是Mean Deviation的缩写,表示ICMP包的RTT偏离平均值的程度,主要用来衡量网速的稳定性。mdev的值越大说明网速越不稳定。

另外,不同的操作系统的mdev的名字也有所不同,在mac下它叫作stddev,而在Windows下则根本没有这个统计指标。指定ping的数据包的大小

默认情况下,ping命令是以64字节大小的数据包来测试网络联通性的,如需要改变默认数据包的大小,则可以使用参数-s选项。比如你想使用65500字节的数据包来测试网络,命令可以这样来写:[roc@roclinux ~]$ ping -s 65500 -c 3 roclinux.cnPING roclinux.cn (116.255.245.206) 65500(65528) bytes of data. --- roclinux.cn ping statistics ---3 packets transmitted,0 received,100% packet loss,time 11999m

在实际工作中,我们通常使用-s选项来发现网络环境中有关MTU的问题。指定ping的TTL

TTL,即生存时间,是指数据包被路由器丢弃之前允许通过的路由器跳数。

TTL是由发送主机来设置的,为了防止数据包在网络中无限循环,每个路由器在转发网络数据包时,都要求将TTL的值减少1,直到TTL减为0的那一刻,也就是这个数据包生命终结的时刻。

对于ping命令发出的数据包,我们可以通过选项,来设定它在网络上的生命时长:ping -t 255 roclinux.cn

如果我们不使用-t选项来设置TTL,那么ping命令会采用TTL默认值。而不同的操作系统TTL默认值也是不相同的。

下面给大家列举一些常用操作系统的默认值。● Linux系统的TTL值为64或255● Windows NT/2000/XP系统的TTL值为128● UNIX系统的TTL值为255指定ping的时间间隔

ping命令的核心功能就是查看网络的联通性和网络的延迟。默认情况下,发送两个数据包之间的间隔是1秒,如果我们嫌默认1秒发送一个ping包太慢,则可以使用-i选项来指定发送两个ping包之间的时间间隔。不过需要注意的是,只有root用户才能设置低于0.2秒的时间间隔。下面我们就以root用户实现0.1秒时间间隔的ping命令:[root@roclinux ~]# ping -i 0.1 -c 3 roclinux.cnPING roclinux.cn (116.255.245.206) 56(84) bytes of data.64 bytes from 116.255.245.206: icmp_seq=1 ttl=49 time=16.1 ms64 bytes from 116.255.245.206: icmp_seq=2 ttl=49 time=16.6 ms64 bytes from 116.255.245.206: icmp_seq=3 ttl=49 time=16.1 ms --- roclinux.cn ping statistics ---3 packets transmitted,3 received,0% packet loss,time 2119msrtt min/avg/max/mdev = 16.134/16.331/16.699/0.260 ms爱如潮水般的ping

上文我们看到,ping命令在默认情况下使用1秒作为发送间隔,而使用-i选项可以显式地指定发送间隔。如果我们希望ping命令以尽可能快的速度来发送数据包,则可以使用-f选项来实现爱如潮水般的ping: [root@roclinux ~]# ping -f -c 100 roclinux.cnPING roclinux.cn (116.255.245.206) 56(84) bytes of data. --- roclinux.cn ping statistics ---100 packets transmitted,100 received,0% packet loss,time 1473msrtt min/avg/max/mdev = 15.444/16.269/21.434/1.082 ms,pipe 2,ipg/ewma14.888/15.739 ms

-f选项,即flood ping,潮水模式的ping,听起来就无比威武,大有天降雄师的阵势。

这里有一个知识点要注意,flood ping会采用无间隔的方式尽全力发送探测数据包,确保每秒钟至少发送100个。我们把这种模式形象地称为“疯狂模式”,注意,这种方式只有root用户才可以使用。

下面我们就使用flood ping来测试一下网卡的丢包率:[root@roclinux ~]# ping -f -c 10000 192.168.0.29PING 192.168.0.29 (192.168.0.29) 56(84) bytes of data. --- 192.168.0.29 ping statistics ---10000 packets transmitted,10000 received,0% packet loss,time 144msrtt min/avg/max/mdev = 0.003/0.004/0.043/0.003 ms,ipg/ewma 0.014/0.005ms“0%packet loss”表示丢包率为0,说明网卡工作非常正常,也没有任何网络拥塞发生。如果你想查看一下你们公司内部的网络状况的话,只需将上述IP改成你们公司机器的IP地址就可以了。篇尾小福利

最后,我们给出在网络实际使用过程中的一些RTT参考值,希望对你排查网络问题有一定的帮助,如表1所示。表1 RTT参考值场景RTT参考值ping本机0.01msping同机房机器0.1msping同城机器1msping不同城机器20ms北(南)方ping南(北)方机器50ms从国内ping国外机器200ms

提醒大家:网络很复杂,情况很多变,上述数据仅供参考。

好了,相信大家又重新认识了一下老朋友——ping,也学习了一些新玩法,希望能对大家的网络问题排查有所帮助。2 DNS探秘之一——nslookup初体验DNS和nslookup的关系

DNS,即Domain Name System,中文称之为“域名系统”,是计算机网络世界中非常重要的一个角色,负责着整个互联网中“域名—IP地址”的管理和解析工作。自从有了DNS,互联网就变得友好了许多,人们访问网站时不必再去记忆那些晦涩的IP地址,通过一些非常易懂的字串就可以方便地指定目的网站。

我们平时都是通过www.baidu.com来访问百度的,很少有人会记住它的IP地址吧!如果你对大型网站的域名管理有所了解的话,你会知道IP地址解析还存在着就近解析和经常更换的问题,所以,记忆IP地址并不切实际。

简单介绍了DNS之后,我们抓紧时间来为大家介绍一下今天的主角——nslookup。通过man nslookup,我们可以看到nslookup的官方解释是“query Internet name servers interactively”。

而nslookup是name server lookup的缩写,顾名思义,nslookup就是“用来查询DNS的”。假如你想知道www.baidu.com对应的IP地址的话,那么用nslookup应该是最正确的方法了。系统没有nslookup命令怎么办

如果你的Linux系统中没有nslookup命令,那么八成是你的系统中没有安装bind-utils软件包。

bind-utils软件包中包括了我们操作和管理DNS的一系列工具,比如host命令、dig命令、nslookup命令等等。

安装bind-utils软件包,并非难事,在RHCE、CentOS或Fedora上,通过一条命令就可以搞定了:yum install bind-utilsnslookup的两种模式

前面我们提到nslookup的官方解释是“query Internet name servers interactively”,这里的interactively说明nslookup是具有交互功能的。

的确,nslookup共有两种工作模式,一种是“交互模式”,另一种则是“非交互模式”。● 在“交互模式”下,用户只需执行一次nslookup,就可以向域名

服务器连续发起查询请求。● 在“非交互模式”下,用户发起的查询请求是一次性的,下次再

想查询,就需要再执行一次nslookup。如何进入交互模式

nslookup的交互模式使我们可以连续发起DNS查询请求,而不必每次都运行nslookup命令。

进入交互模式的方法也很简单,只需输入nslookup命令,无须加任何参数,就可以直接进入交互模式啦!#进入到了nslookup的交互模式[roc@roclinux ~]$ nslookup>

看到最后的右尖括号“>”了吧,这就是nslookup进入交互模式的重要标志。

需要注意的是,此时nslookup会连接到默认的域名服务器,也就是/etc/resolv.conf中所配置的第一个DNS服务器地址。

如果我们想自己来指定一个DNS服务器地址,也是完全可以的,只需设置nslookup的第一个参数为“-”,而第二个参数是要连接的DNS服务器IP地址即可。

假如我们想连接到谷歌的开放DNS,则可以这样来做:#我们要连接到Google的开放DNS服务器[roc@roclinux ~]$ nslookup - 8.8.8.8>

下面就在交互模式下实战一次,来查询www.baidu.com域名的IP信息:[roc@roclinux ~]$ nslookup - www.baidu.com> www.baidu.comServer: 8.8.8.8Address: 8.8.8.8#53 Non-authoritative answer:www.baidu.com canonical name = www.a.shifen.com.Name: www.a.shifen.comAddress: 61.135.169.125Name: www.a.shifen.comAddress: 61.135.169.121>

可以看到,Google的开放DNS服务器给我们返回了两个可用的IP地址,即61.135.169.125和61.135.169.121。而且在这次查询请求之后,提示符仍然停留在“>”处,我们可以继续输入网站名称进行下一次查询,这就是交互模式的特点。如何进入非交互模式

非交互模式,其实并不需要进入,使用“进入”这个词,或许会有些误导之嫌。如果你直接在nslookup命令后加上所要查询的域名,那么这就是非交互模式了。比如,我们希望在非交互模式下查询www.baidu.com域名对应的IP地址:#查询www.baidu.com域名对应的IP地址[roc@roclinux ~]$ nslookup www.baidu.comServer: 223.5.5.5Address: 223.5.5.5#53 Non-authoritative answer:www.baidu.com canonical name = www.a.shifen.com.Name: www.a.shifen.comAddress: 61.135.169.125Name: www.a.shifen.comAddress: 61.135.169.121 [roc@roclinux ~]$

可以看到,在非交互模式下,我们进行完一次查询后,提示符会回到Shell提示符状态,下一次再想查询DNS信息的话还需要执行nslookup命令,这就是非交互模式的特点。

好了,本文为大家介绍了nslookup的两种工作模式,并且演示了域名查询的方法,以及指定域名服务器的方法。要想深入掌握nslookup,那就一定要对DNS协议有比较深入的理解,所以,在接下来的一篇文章中,我们来学习DNS协议,对于大部分同学来说,可能算温故而知新啦。3 DNS探秘之二——DNS知识温故知新

在介绍完nslookup的模式之后,我们就要深入到其命令输出部分了。这些内容是和DNS协议的知识紧密相关的,所以在讲解之前,我们需要把DNS的各类知识提前讲解温习一下,确保大家可以更好更顺畅地理解nslookup输出内容。

说到DNS协议,相信大家都知道它是一个应用层的协议,大部分场景下是用来管理域名和IP地址的映射关系的。

DNS这套系统,采用了一种多级、分层次的组织方案,来实现对域名信息的管理。它的工作过程,可以简述如下:● 为了解析一个域名(如www.baidu.com),应用程序会调用域名解

析库函数,并将域名作为参数传入其中。● 然后,此解析库函数会提取本机所设置的上连DNS服务器地址,

并向此地址发送一个域名解析请求。● 上连DNS服务器接到域名解析请求后,在本机查找此域名,找到

后将其对应的IP地址返回给解析库函数。● 解析库函数接收到上连DNS服务器返回的信息后,将此信息返回

给应用程序。

通过上面的4个步骤,应用程序就可以拿到一个域名对应的IP地址信息了。

而理想很丰满,现实很骨感,域名的解析过程并非总是那么顺利,有时候,我们会遇到“上连DNS服务器”在它的本机并没有搜索到你要查询的域名信息的情况,这又如何是好呢?DNS的递归查询是怎样的

为了更清楚地为大家介绍DNS查询的过程,也为了解答上一小节的那个遗留问题,我们来做一个情景假设。

北邮(北京邮电大学)计算机学院的官方网站是scs.bupt.edu.cn,其中:● cn:是国家域名。● edu:是教育行业专属域名。● bupt:是北京邮电大学的英文缩写,即Beijing University of Post

and Telecommunication。● scs:是计算机学院的缩写,即School of Computer Science。

假如小吴在家中希望访问北邮计算机学院的官方网站scs.bupt.edu.cn,于是浏览器会首先发起对这个域名的DNS解析,我们来一起看看域名解析的过程,如图1所示。图中连线处的数字,与下面的步骤编号对应。图1 递归查询过程

第1步:为了解析这个域名(scs.bupt.edu.cn),浏览器会调用域名解析库函数,并将域名作为参数传入其中。

第2步:然后,此解析库函数会提取本机所设置的上连DNS服务器地址,并向此地址发送一域名解析请求。

第3步:上连DNS服务器接到域名解析请求后,在本机查找此域名,但是,遗憾的是,它并没有找到对应的信息。

第4步:于是上连DNS服务器就会求助于根DNS服务器(root-servers.net)。

第5步:此后,请求会逐级转发,顺序是cn的DNS服务器→edu.cn的DNS服务器→bupt.edu.cn的DNS服务器。

第6步:由于bupt.edu.cn一定是管理scs.bupt.edu.cn的资源记录的DNS服务器,于是,bupt.edu.cn的DNS服务器会将所查询域名对应的IP地址返回给上一级。

第7步:这个IP地址会按照逆序依次回传,顺序是edu.cn的DNS服务器→cn的DNS服务器→根DNS服务器。

第8步:最后根DNS服务器将这个信息返回给上连DNS服务器。

第9步:上连DNS服务器收到结果后,首先会将这个结果缓存到本机,同时,将其回传给小吴家中的浏览器。

这是一个典型的DNS递归查询(Recursive Query)过程,也确实比上一段落中描述的顺利过程复杂了不少。

这里要注意一个细节,那就是上连DNS服务器在收到结果后,不仅会把结果返回给调用者,还会自己缓存起来哦。

至于缓存起来之后的用处和可能带来的问题,我们先卖个关子,在深入讲解nslookup命令时会揭晓答案。除了递归还有什么

聪明的小伙伴们,或许已经隐隐感觉到了,既然我们明确指出了DNS递归查询过程,那就一定还存在另一种查询过程。是的,你没猜错,DNS还为我们提供另一种可选方案,那就是迭代查询。迭代查询的过程是这样的,我们再次回到小吴的浏览器面前,如图2所示。图2 迭代查询过程

第1步:为了解析这个域名(scs.bupt.edu.cn),浏览器仍然会调用域名解析库函数,并将域名作为参数传入其中。

第2步:然后,此解析库函数会提取本机所设置的上连DNS服务器地址,并向此地址发送一个域名解析请求。

第3步:上连DNS服务器接到域名解析请求后,在本机查找此域名,但是,遗憾的是,它并没有找到对应的信息。

第4步:于是上连DNS服务器就会求助于根DNS服务器,注意迭代查询要开始啦。

第5步:根DNS服务器会将cn的DNS服务器的地址返回给上连DNS服务器,潜台词就是“虽然我是根DNS服务器,但我也不是万能的,我其实也没法直接告诉你答案,但是呢,我可以给你引荐一位高人,它一定可以告诉你进一步的线索,它就是cn的DNS服务器,你去问问它吧,回见!”

第6步:就这样,上连DNS服务器又依次去拜访了cn的DNS服务器→edu.cn的DNS服务器→bupt.edu.cn的DNS服务器。

第7步:由于bupt.edu.cn一定是知道scs.bupt.edu.cn的资源记录的,所以bupt.edu.cn的DNS服务器终于把最终答案告诉了上连DNS服务器。

第8步:上连DNS服务器收到结果后,首先会将这个结果缓存到本机,同时,将其回传给小吴家中的浏览器。

这就是一个完整的DNS迭代查询过程,它和递归查询的最大区别在于:● 递归查询:好事办到底,每个环节都承担起了寻找答案的责任,

都会负责去询问它的下一级DNS服务器。● 迭代查询:给你指路,每个环节都是告诉你下一步怎么走,路还

是要自己去走。除了递归和迭代还有什么

那么,问题来了,除了递归查询、迭代查询,DNS查询还有什么新花样呢?真的还有,那就是“递归与迭代相结合”的查询方法。

这种查询方法产生的背景是,根DNS服务器在全球仅有13台,每天都承载着全球数以亿计的查询请求。为了尽量降低它们的工作负载,它们在收到查询请求后,会采用迭代查询的方法,将下一级DNS服务器地址返回给请求方,而请求方再次去请求下一级DNS服务器时,则开始采用递归查询的方法。这样,可以有效地降低根DNS服务器的负荷,提高全球的DNS查询效率,如图3所示。相信大家可以自己看懂下图。图3 递归与迭代结合的查询过程域名解析的缓存

还记得刚才我们在讲解递归查询时卖了一个关子么,有关“缓存”的关子,现在我们就来揭晓答案咯。

如果你仔细看了nslookup的输出内容的话,就会发现里面有“Non-authoritative answer”的字样,就像这样:[roc@roclinux ~]$ nslookup www.baidu.comServer: 223.5.5.5Address: 223.5.5.5#53 Non-authoritative answer:www.baidu.com canonical name = www.a.shifen.com.Name: www.a.shifen.comAddress: 61.135.169.121Name: www.a.shifen.comAddress: 61.135.169.125

看到了吧,这个“Non-authoritative answer”就是和缓存知识密切相关的,大家只有了解了缓存的原理和知识后,才能更好地理解“Non-authoritative answer”的含义。现在我们就来说说有关DNS服务器的缓存的话题,这里面的学问还真的不少呢。

每一个DNS服务器都有一个高速缓存区,这里面存放着这台DNS服务器最近经手过的“域名—IP地址”映射关系,以及获得这些映射关系的查询出处。正如我们上例中所描述的,上连DNS服务器在获得了scs.bupt.edu.cn的IP地址后,就会把这个映射关系缓存在自己机器上,这样做的好处就在于,下次再有人询问scs.bupt.edu.cn的IP信息的话,这台上连DNS服务器就不需要再发起递归查询或迭代查询了,直接就可以从缓存中找到答案,并快速返回给询问者了。

理想很丰满,现实又是很骨感。我又要给大家泼冷水了。你有没有想过,事情其实并没有那么顺利,因为机器经常会发生故障,网站也会偶尔迁移,所以域名对应的IP地址是会变化的。所以呢,DNS服务器不能把这个信息缓存一辈子,需要给它设定一个期限,当然不可能是一万年,一般会是小时级别的期限。一旦超过这个期限,DNS服务器就会不再信任自己缓存中的信息,而是重新发起迭代查询或递归查询,去寻求最新的答案。

有了这样的机制,是不是我们的DNS查询就完美了呢,答案是NO!虽然我们将期限设置为了小时级,但是仍然会存在不走运的“时间差”。假如一台DNS服务器在14:00刚刚缓存了scs.bupt.edu.cn的解析数据,很不幸在14:05分,scs.bupt.edu.cn因为网站迁移修改了其对应的IP地址,假如正好有一个用户通过这台DNS服务器来查询scs.bupt.edu.cn时,就会拿到过时的IP地址了,是不是很坑人呢?

正是由于存在这种隐患和时间差,所以,如果DNS服务器是从自己缓存中提取解析数据返回给用户的,那么就会很谨慎的在返回内容中给出“Non-authoritative answer”的字样,潜台词就是提示用户:“朋友,我把答案告诉你了,但是,我可不保证它是最新的哦,因为这也是我前一阵听说的,不是我现去查的。”

终于,我们揭开了“Non-authoritative answer”的神秘面纱。

不过,又会有好奇的同学提问了:“Non-authoritative在英文中是非权威的意思,这个词用得怪怪的,有什么讲究么?”授权和非授权

还真的是有讲究的。还记得刚才的迭代查询的例子么,例子中的DNS服务器会为你指一条明路,即“虽然我不知道XXX的信息,但是,我可以给你引荐一位高人,他应该可以给你进一步的线索。”是的!这位高人,就是我们下面要讲的“被授权的人”。

在DNS的世界里,没有人知道全部答案,但人们总能告诉你离正确答案更近的下一位高人。

我们来举个例子:

虽然edu.cn的DNS服务器(我们称为A机)自己并不知道scs.bupt.edu.cn的IP地址,但是,edu.cn的DNS服务器知道负责bupt.edu.cn域名解析的DNS服务器(我们称为B机)的地址,B机就是那个离正确答案更近的高人。

所以,edu.cn的DNS服务器(A机)就将bupt.edu.cn的域名解析授权给了这台DNS服务器(B机)。只有这台DNS服务器(B)所返回的有关scs.bupt.edu.cn的域名解析,才是授权的;否则,就称为非授权的。

一般情况下,一台DNS服务器从自身缓存中提取结果并返回给询问者,这个结果就是非权威(Non-authoritative)的。

好了,通过这样一篇文章我们把DNS的几个重要概念都复习了一遍,这为我们阅读后面的文章奠定了良好的基础,相信大家阅读接下来的文章时会更加顺畅。接下来,我们就开始为大家解读nslookap的输出内容。4 DNS探秘之三——nslookup输出解析

我们仍然以www.baidu.com的域名解析来作为样例,为大家详细解释nslookup的输出中都包含了哪些重要内容:[roc@roclinux ~]$ nslookup www.baidu.comServer: 223.5.5.5Address: 223.5.5.5#53 Non-authoritative answer:www.baidu.com canonical name = www.a.shifen.com.Name: www.a.shifen.comAddress: 61.135.169.121Name: www.a.shifen.comAddress: 61.135.169.125

可以看出,nslookup的输出包含了上下两部分。● 上半部分:DNS服务器信息。● 下半部分:域名解析信息。

DNS服务器信息中包含了两行内容,就是下面两行:Server: 223.5.5.5Address: 223.5.5.5#53

第一行的Server,表示我们本次DNS解析所使用的DNS服务器名称,默认会采用系统里/etc/resolv.conf文件中所配置的第一个DNS服务器。

第二行的Address,表示我们连接到的DNS服务器的具体IP地址和端口。这里#53就表示我们访问的是DNS服务器的53号端口。53号端口也是DNS Server的默认服务端口。在亚马逊云AWS中就有一个独立的产品叫作Route53,它是一个强调高可用和灵活伸缩的域名系统(DNS)服务,名字中就直接使用了53这个数字。

介绍完了nslookup输出中的上半部分,我们再来看看重头戏,nslookup输出中的下半部分,也就是“域名解析信息”:Non-authoritative answer:www.baidu.com canonical name = www.a.shifen.com.Name: www.a.shifen.comAddress: 61.135.169.121Name: www.a.shifen.comAddress: 61.135.169.125

首先,映入眼帘的便是“Non-authoritative answer”,通过前面的学习我们知道,这表示返回的结果是非权威的,可能会因为时间差的原因而不是最新的。

而下一行的信息,是我们之前没见过的,即:www.baidu.com canonical name = www.a.shifen.com.

canonical name,就是我们常说的CNAME,也就是别名。所以我们可以看到,www.baidu.com背后的别名是www.a.shifen.com。

再下面的内容,则表示真正的答案,也就是www.baidu.com所对应的两个IP地址:Name: www.a.shifen.comAddress: 61.135.169.121Name: www.a.shifen.comAddress: 61.135.169.125

本文内容,相对来说比较紧凑精炼,和大家一起解读了nslookup的输出内容,将来你也可以为别人讲解这些知识,享受别人投来的羡慕目光。是不是想想就觉得很美好,哈哈!5 DNS探秘之四——DNS协议中的五元组传说中的五元组

一提到DNS,相信大家都会直观地认为DNS就是用来做域名和IP地址转换的,但其实并非如此,准确地说,DNS是用来做域名和资源转换的,而IP地址只是资源中的一种而已。

当我们把一个域名查询的请求传递给DNS服务器后,DNS服务器所返回的是与该域名相关的资源记录。那么资源是个什么东西呢?

在DNS的世界里,资源是一个五元组,即:{ DomainName、TimeToLive、Class、Type、Value }

翻译成中文便是:{ 域名、生存期限、类别、类型、值 }

它们的含义如下。● DomainName(域名):指我们要查询的那个域名。● TimeToLive(生存期限):表示此域名在各DNS服务器缓存中应保

存的时长。● Class(类别):通常为IN,即Internet。另外还有CH(Chaos)和

HS(Hesiod)两类,但目前几乎已经被淘汰了。● Type(类型):指出这条记录的类型,包括8种,即SOA、A、

MX、NS、CNAME、PTR、HINFO和TXT。● Value(值):针对不同类型,会有不同的值。

为了让大家有一个直观的认识,我们截取了dig命令(后面的文章会讲到)的一小段输出作为例子:scs.bupt.edu.cn. 7200 IN CNAME revp.bupt.edu.cn.revp.bupt.edu.cn. 7200 IN A 124.127.207.100

因为我们已经介绍了五元组,所以这两行内容,相信大家已经大概看懂了:● 第1行:表示scs.bupt.edu.cn是revp.bupt.edu.cn的别名,其超时

时限是7200秒。● 第2行:表示revp.bupt.edu.cn对应的IP地址是124.127.207.100,

其超时时限同样为7200秒。DNS的八种类型

学习DNS五元组中的type知识,对于理解和使用nslookup命令是很重要的,在上一段落中,我们知道type包含了8个可选类型,即:● SOA:Start of Authority,授权起始。● A:IP地址。● MX:邮件交换。● NS:域名服务器。● CNAME:别名,也叫规范名。● PTR:指针,用于反向解析。● HINFO:主机描述信息,包括CPU和OS等信息。● TXT:其他一些文本信息。

为了让后面的内容学习起来更加顺畅,有必要为大家提前介绍一下这8种类型。类型SOA

SOA,即Start Of Authority,表示授权起始。在这里,我们可以获得针对一个域名的最基本的设置信息,包括但不限于:● Mail:管理员邮箱地址。● Serial:版本序号,格式一般为年月日次,如2016031903则表示

2016年03月19日的第03个版本。● Refresh Slave:表示Slave的DNS服务器多久向Master的DNS服

务器要一次更新数据。● Retry:在发起Refresh时,如果Slave连接不到Master,那么间隔

多久进行一次连接尝试。● Expire:在发起Refresh时,如果Slave始终无法连接到Master,

那么多久后放弃尝试。● Minimum:即TTL,表示外部DNS服务器如果要缓存本DNS服务

器的授权数据,那么保存时限是多久。[roc@roclinux ~]$ nslookup -type=soa bupt.edu.cnServer: 223.5.5.5Address: 223.5.5.5#53 Non-authoritative answer:bupt.edu.cn origin = ns.buptnet.edu.cn mail addr = admin.bupt.edu.cn serial = 2016031675 refresh = 10800 retry = 900 expire = 604800 minimum = 86400 Authoritative answers can be found from:

试读结束[说明:试读内容隐藏了图片]

下载完整电子书

若在网站上没有找合适的书籍,可联系网站客服获取,各类电子版图书资料皆有。

客服微信:xzh432

登入/注册
卧槽~你还有脸回来
没有账号? 忘记密码?