(018) Linux之网络

十年运维系列之基础篇 - Linux

作者:曾林 

联系:1494445739@qq.com

网站:www.jplatformx.com

版权:文章未经同意请勿转载


一、引言

      在网络连接方面,Linux可以说是万能的。Linux工具可以建立各种网络系统及应用,包括防火墙、路由器、域名服务器(DNS)、NAS(网络附加存储)等。

      由于网络连接涉及的领域很广,所以用于控制、配置网络的命令自然会很多。本章只讲述一些经常使用的命令,涉及网络监测以及文件传输等方面。

      在进一步讲解Linux网络应用之前,首先先补充一点网络方面的背景知识。在当今这个互联网时代,每一个计算机用户都需要对网络这个概念有一个基本的了解。便于更好的了解本章节的内容,首先熟悉以下3个术语:

  • IP(Internet protocol)address: 互联网协议地址。
  • host and domain name: 主机名和域名。
  • URI(uniform resource identifier): 统一资源标识符。

 

二、检查、监测网络

      即使你不是系统管理员,经常检查网络的性能和运行情况也是非常有必要的。 

  1. ping - 向网络主机发送特殊数据包

      最基本的网络连接命令就是ping命令。ping命令会向指定的网络主机发送特殊网络数据包IMCP ECHO_REQUEST。多数网络设备收到该数据包后会做出回应,通过此法即可验证网络连接是否正常。

      例如,想要验证是否可以登录网站http://www.jplatformx.com(jpx框架首页),可以按如下方式使用ping命令。

      shell> ping www.jplatformx.com

      一旦程序启动,ping命令便以既定的时间间隔(默认是1s)传送数据包直到该命令被中断。按ctrl+c键来终止ping程序,ping程序会将反映运行情况的数据显示出来。数据包丢失0%表示网络运行正常,ping连接成功则表示网络各组成成员(接口卡、电缆、路由和网关)总体处于良好的工作状态。

      2. traceroute - 跟踪网络数据包的传输路径

      traceroute程序会显示文件通过网络从本地系统传输到指定主机过程中所有停靠点的列表。下图中展示的是数据在连接到网站http://www.jplatformx.com时所经过的站点。执行命令如下:

      shell> traceroute www.jplatformx.com

      执行结果如下图所示:

      由该列表可知,从测试系统到http://www.jplatformx.com网站的连接需要经过10个路由器。对于那些提供身份信息的路由器,此列表则列出了它们的主机名、IP地址以及运行状态信息,这些信息包含了文件从本地系统到路由器的3次往返时间。而对于那些因为路由器配置、网络堵塞或是防火墙等原因不提供身份信息的路由器,则直接用星号行表示,如上图中的第9行停靠站。

3. 检查网络设置及相关统计数据 

      netstat程序可以用来查看不同的网络设置及数据。通过使用其丰富的参数选项,我们可以查看网络启动过程的许多特性。示例如下:使用-ie选项,我们就可以检查系统中的网络接口信息。选项i表示的是interface(网络接口,也就是网卡),e表示extend(展示其他更多的信息)。执行语句如下:

      shell> netstat -ie

      语句执行结果如下图:

      以上的输出信息显示,测试系统有三个网络接口:第一个称为eth0,是以太网接口;第二个称为eth1,也是以太网接口;第三个是lo,是系统用来自己访问自己的回环虚拟接口。

      对网络进行日常诊断,关键是看能否在每个接口信息第三行的开头找到UP这个词以及能够在第二行的inet addr字段找到有效的ip地址。第三行的UP代表着网络接口已经启用。

      使用-r选项可以查看内核的网络路由表,此表显示了网络之间传送数据包时网络的配置情况。

      此例显示的是运行在防火墙/路由器后面的局域网(LAN)上一客户端的典型路由表。该表的第一行表示接收方的IP地址为121.199.24.0,IP以0为结尾的表示接收方是网络而不是个人主机,也就是说接收方是局域网(LAN)上的任何主机。后面的Gateway参数字段,表示的是建立当前主机与目标网络之间联系的网关(或路由)的名称或IP地址,此参数值是星号表示无需网关。

      最后一行包含默认的接收方,这意味着所有通信都以该网络为目的地。

 

三、通过网络传输文件

      只有掌握了如何通过网络转移文件,才会明白网络的作用之大。有许多命令可以用于传送网络数据,比如ftp等。

1. ftp——采用FTP(文件传输协议)传输文件

      ftp是Linux比较经典的命令之一,由File Transfer Protocol协议缩写而来。ftp作为下载文件工具在因特网上使用很广泛,大多数Web浏览器都支持ftp命令,读者肯定也经常遇到以ftp://协议开头的URl。

      ftp程序比web浏览器出现得早,它用来与FTP服务器进行通信,所谓FTP服务器就是那些包含供网络上传、下载文件的机器。

      FTP(原来的表示形式)并不安全,因为它以明文的方式传送账户名以及密码。这意味着这些信息并没有加密,任何一个接触网络的人都能看到它们。鉴于此,几乎所有使用FTP协议进行的网络文件传输都是由匿名FTP服务器处理的。匿名服务器允许任何人使用anonymous登录名以及无意义的密码登陆。

      下图是一个典型的ftp会话,其功能是从匿名ftp服务器jplatformx上的/pub目录下下载tutorial.txt文件。

      下表中列出这段代码中所输入的每个命令行的含义和解释:

命令 代表的含义
ftp www.jplatformx.com 启动ftp客户端程序,建立与FTP服务器www.jplatformx.com的连接
anonymous 登录名,登陆提示框出现之后就是密码输入提示框。一些服务器可以接受空白密码
cd pub 打开远程系统上含有所需文件的目录。注意,对于多数匿名服务器,供公开下载的文件一般都存放在pub目录下面
ls 列出远程系统上的目录列表
lcd 切换到本地系统的home目录。
get tutorial.txt 告诉远程系统将tutorial.txt文件发送到本地系统。由于本地系统的工作目录已经切换至~(家目录)下,故tutorial.txt文件也会下载在此目录下
bye 注销登录远程服务器并且结束ftp程序。当然也可以使用quit或者exit命令来代替

      2. lftp——更好的ftp(文件传输协议)

      ftp并不是唯一的命令行FTP客户端。事实上有很多这样的命令行。lftp就是这样的一款程序,它与传统的ftp程序功能类似但却有很多额外的便利功能,包括多协议支持(http)、下载失败时自动重新尝试、后台进程支持、Tab键完成文件名输入等许多其他的功能。其具体使用方法跟ftp客户端工具类似。使用命令如下图:

      3. wget——非交互式网络下载工具

      wget是另一个用于文件下载的命令行程序。该命令既可以用于从网站上下载内容也可以用于从ftp服务器上下载内容,单个文件、多个文件甚至整个网站都可以被下载。wget命令的许多参数选项支持递归下载、后台文件下载(允许下线的情况下继续下载)以及继续下载部分被下载的文件等操作。wget命令的使用方法如下图所示:

 

四、与远程主机的安全通信

      多年以前,类UNIX操作系统就可以通过网络进行远程操控。早期,在互联网还没有普及的年代,登录远程主机就有两个很受欢迎的命令——rlogin和telnet。但是这两个命令都跟ftp命令一样有着相同的致命缺点,即所有通信信息(包括用户名和密码)都是以明文的方式传输的,所以它们并不适用于互联网时代。

1. ssh——安全登录远程计算机

      为了解决明文传送的问题,一个叫做SSH(Secure Shell的缩写)的新协议应运而生。SSH协议解决了与远程主机进行安全通信的两个基本问题:第一,该协议能验证远程主机的身份是否真实,从而避免中间人的攻击;第二,该协议将本机和远程主机之间的通信内容全部加密。

      SSH协议包括两个部分:一个是运行在远程主机上的SSH服务端,用来监听端口22上可能过来的连接请求;另一个是本地系统上的SSH客户端,用来与远程服务器进行通信。

      多数Linux发行版都采用BSD项目的openSSH(SSH的免费开源实现)方法来实现SSH。有些发行版如Red Hat会默认包含客户端包和服务器端包,而有的版本如Ubantu则仅仅只提供客户端包。系统想要接收远程连接,就必须安装、配置以及运行OpenSSH-server软件包,并且必须允许tcp端口22上进来的网络连接(当服务器正在运行防火墙或是在防火墙后面时)。

      2. scp和sftp——安全传输文件

      openSSH软件包包含了两个使用SSH加密隧道进行网络间文件复制的程序,scp(secure copy的缩写)便是其中之一。该命令与普通的文件复制命令cp类似,而它们之间最大的区别在于scp命令的源或目的地路径前面多个远程主机名和冒号。下图展示的是将本地文件拷贝到远程主机:

      下图展示的则是从远程主机拷贝文件到本地,命令参数调换了一下位置而已:

      另外一个SSH文件复制程序是sftp。顾名思义,它是ftp程序的安全版本。sftp与我们先前讨论的ftp程序非常类似,只是sftp是用SSH加密隧道传输信息而不是用明文方式传输。sftp相比传统的ftp而言,还有一个重要的优点,就是它并不需要远程主机上运行FTP服务器,仅仅通过SSH服务器即可了。这就意味着任何与SSH客户端连接的远程机都可以当做FTP服务器使用。命令执行截图如下:

 

posted @ 2015-03-05 15:28  jplatformx  阅读(209)  评论(0编辑  收藏  举报