网络系统

摘要:这一章相当有用,我刚买了一台云服务器,相信本章内容将让我学到不少东西。Linux被用来创建各种各样的网络系统和装置,包括防火墙、路由器、服务器等等。

网络系统

本章要研究的命令包括用来监测网络和传输文件的命令,还有用来远程登录的ssh程序。本章会介绍:

  • ping - 发送 ICMP ECHO_REQUEST 数据包到网络主机
  • tracepath - 打印到一台网络主机的路由数据包
  • netstat - 打印网络连接,路由表,接口统计数据,伪装连接,和多路广播成员
  • ftp - 因特网文件传输程序
  • wget - 非交互式网络下载器
  • ssh - OpenSSH SSH 客户端(远程登录程序)

为了充分学习本章内容,假定读者已具备一定网络系统背景知识,熟悉IP地址、主机和域名、URI等术语。

检查和监测网络

即使不是root用户,检查网络性能和运作情况也是必要的。

ping

ping命令发送一个叫做ICMP ECHO_REQUEST的特殊的网络数据包到一台指定的主机。大多数接受这个包的网络设备会回复它,来允许网络连接验证。

出于网络安全原因,大多数网络设备可以配置为忽略这种数据包。

比如,我们ping一下网站linuxcommand.org

xuxg@xuxg-ubuntu:~$ ping linuxcommand.org
PING linuxcommand.org (216.105.38.10) 56(84) bytes of data.
64 bytes from vhost.sourceforge.net (216.105.38.10): icmp_seq=1 ttl=48 time=241 ms
64 bytes from vhost.sourceforge.net (216.105.38.10): icmp_seq=2 ttl=48 time=249 ms
64 bytes from vhost.sourceforge.net (216.105.38.10): icmp_seq=3 ttl=48 time=245 ms
64 bytes from vhost.sourceforge.net (216.105.38.10): icmp_seq=4 ttl=48 time=245 ms
...(省略)

一旦启动,ping 命令会持续在特定的时间间隔内(默认是一秒)发送数据包,直到它被中断,按下组合键Ctrl-c,中断这个命令之后,ping 打印出运行统计信息。一个正常工作的网络会报告零个数据包丢失。一个成功执行的ping命令会意味着网络的各个部件(网卡,电缆,路由,网关)都处于正常的工作状态。

^C
--- linuxcommand.org ping statistics ---
7 packets transmitted, 7 received, 0% packet loss, time 6009ms
rtt min/avg/max/mdev = 245.887/247.532/250.393/1.602 ms

tracepath

tracepath程序显示从本地到指定主机要经过的所有“跳数”的网络流量列表。例如,看一下到达slashdot.org需要经过的路由:

xuxg@xuxg-ubuntu:~$ tracepath slashdot.org
 1?: [LOCALHOST]                      pmtu 1500
 1:  _gateway                                              1.604ms 
 1:  _gateway                                              2.241ms 
 2:  _gateway                                              2.954ms pmtu 1480
...(省略)

netstat

netstat 程序被用来检查各种各样的网络设置和统计数据。使用-ie选项,我们能够查看系统中的网络接口:

[root@alicloud ~]# netstat -ie
Kernel Interface table
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.31.187.31  netmask 255.255.240.0  broadcast 172.31.191.255
        ether 00:16:3e:06:90:67  txqueuelen 1000  (Ethernet)
        RX packets 209627  bytes 204941483 (195.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 112174  bytes 33673832 (32.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

这个例子我是在我的阿里云CentOS服务器上运行的,Ubuntu下没有安装这个命令。

在上述实例中,我们看到我们的测试系统有两个网络接口。第一个,叫做 eth0,是以太网接口,和第二个,叫做 lo,是内部回环网络接口,它是一个虚拟接口,系统用它来“自言自语”。

使用-r选项会显示内核的网络路由表。这展示了系统是如何配置网络之间发送数据包的。

[root@alicloud ~]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         gateway         0.0.0.0         UG        0 0          0 eth0
link-local      0.0.0.0         255.255.0.0     U         0 0          0 eth0
172.31.176.0    0.0.0.0         255.255.240.0   U         0 0          0 eth0

网络中传输文件

ftp

ftp命令属于真正的“经典”程序之一,它的名字来源于其所使用的协议,就是文件传输协议。

FTP 被广泛地用来从因特网上下载文件。大多数,并不是所有的,网络浏览器都支持 FTP,你经常可以看到它们的 URI 以协议 ftp://开头。在出现网络浏览器之前,ftp 程序已经存在了。ftp 程序可用来与 FTP 服务器进行通信,FTP 服务器就是存储文件的计算机,这些文件能够通过网络下载和上传。

FTP(它的原始形式)并不是安全的,因为它会以明码形式发送帐号的姓名和密码。这就意味着这些数据没有加密,任何嗅探网络的人都能看到。由于此种原因,几乎因特网中所有 FTP服务器都是匿名的。一个匿名服务器能允许任何人使用注册名“anonymous”和无意义的密码登录系统。

ftp>提示符下,输入help,会显示所支持命令的列表。使用 ftp 登录到一台授予了用户足够权限的服务器中,则可以执行很多普通的文件管理任务。虽然很笨拙,但它真能工作。

lftp - 更好的 ftp

ftp 并不是唯一的命令行形式的 FTP 客户端。实际上,还有很多。其中比较好(也更流行的)是 lftp 程序,由 Alexander Lukyanov 编写完成。虽然 lftp 工作起来与传统的 ftp 程序很相似,但是它带有额外的便捷特性,包括多协议支持(包括 HTTP),若下载失败会自动地重新下载,后台处理,用 tab 按键来补全路径名,还有很多。

wget

另一个流行的用来下载文件的命令行程序是 wget。若想从网络和 FTP 网站两者上都能下载数据,wget 是很有用处的。不只能下载单个文件,多个文件,甚至整个网站都能下载。

与远程主机安全通信

通过网络来远程操控类 Unix 的操作系统已经有很多年了。早些年,在因特网普遍推广之前,有一些受欢迎的程序被用来登录远程主机。它们是 rlogin 和 telnet 程序。然而这些程序,拥有和 ftp 程序一样的致命缺点;它们以明码形式来传输所有的交流信息(包括登录命令和密码)。这使它们完全不适合使用在因特网时代。

ssh

为了解决这个问题,开发了一款新的协议,叫做 SSH(Secure Shell)。SSH 解决了这两个基本的和远端主机安全交流的问题。首先,它要认证远端主机是否为它所知道的那台主机(这样就阻止了所谓的“中间人”的攻击),其次,它加密了本地与远程主机之间所有的通讯信息。

SSH 由两部分组成。SSH 服务端运行在远端主机上,在端口 22 上监听收到的外部连接,而SSH 客户端用在本地系统中,用来和远端服务器通信。

大多数 Linux 发行版自带一个提供 SSH 功能的软件包,叫做 OpenSSH,来自于 BSD 项目。一些发行版默认包含客户端和服务端两个软件包(例如 Red Hat),而另一些(比方说Ubuntu)则只提供客户端。为了能让系统接受远端的连接,它必须安装 OpenSSH-server 软件包,配置,运行它,并且(如果系统正在运行,或者系统在防火墙之后)它必须允许在 TCP 端口 22 上接收网络连接。

用来与远端 SSH 服务器相连接的 SSH 客户端程序,顺理成章,叫做 ssh。想要连接到名叫root@xxx.xxx.xx.xxx的远端主机,我们可以这样使用 ssh 客户端程序:

xuxg@xuxg-ubuntu:~$ ssh root@xxx.xxx.xx.xxx

第一次尝试连接,提示信息表明远端主机的真实性不能确立。这是因为客户端程序以前从没有看到过这个远端主机。为了接受远端主机的身份验证凭据,输入“yes”。一旦建立了连接,会提示用户输入他或她的密码:

root@xxx.xxx.xx.xxx's password: 

成功地输入密码之后,我们会接收到远端系统的 shell 提示符:

Welcome to Alibaba Cloud Elastic Compute Service !

[root@alicloud ~]# 

远端 shell 会话一直存在,直到用户输入 exit 命令后,则关闭了远程连接。这时候,本地的shell 会话恢复,本地 shell 提示符重新出现。

我们在远端系统中执行ls 命令,并把命令输出重定向到本地系统中的一个文件里面。

xuxg@xuxg-ubuntu:~$ ssh root@xxx.xxx.xx.xxx 'ls' > dirlist.txt
root@xxx.xxx.xx.xxx's password: 

注意,上面的例子中使用了单引号。这样做是因为我们不想路径名展开操作在本地执行,而希望它在远端系统中被执行。同样地,如果我们想要把输出结果重定向到远端主机的文件中,我们可以把重定向操作符和文件名都放到单引号里面。

xuxg@xuxg-ubuntu:~$ ssh root@xxx.xxx.xx.xxx 'ls > dirlist.txt'

scp 和 sftp

OpenSSH 软件包也包含两个程序,它们可以利用 SSH 加密通道在网络间复制文件。第一个,scp(安全复制)被用来复制文件,与熟悉的 cp 程序非常相似。最显著的区别就是源或者目标路径名要以远端主机的名字,后跟一个冒号字符开头。

例如,如果我们想要从远端系统的家目录下复制文档 document.txt,到我们本地系统的当前工作目录下,可以这样操作:

xuxg@xuxg-ubuntu:~$ scp root@xxx.xxx.xx.xxx:document.txt .
root@xxx.xxx.xx.xxx's password: 
document.txt                                  100%    0     0.0KB/s   00:00    

第二个 SSH 文件复制程序是 sftp,顾名思义,它是 ftp 程序的安全替代品。sftp 工作起来与我们之前使用的 ftp 程序很相似;然而,它不用明码形式来传递数据,它使用加密的 SSH 通道。sftp 有一个重要特性强于传统的 ftp 命令,就是 sftp 不需要远端系统中运行 FTP 服务端。它仅仅需要 SSH 服务端。这意味着任何一台能用 SSH 客户端连接的远端机器,也可当作类似于 FTP 的服务器来使用。这里是一个样本会话:

xuxg@xuxg-ubuntu:~$ sftp root@xxx.xxx.xx.xxx
root@xxx.xxx.xx.xxx's password: 
Connected to 118.190.25.204.
sftp> ls
GeekPandaBlog   document.txt 
sftp> lcd Desktop
sftp> lpwd
Local working directory: /home/xuxg/Desktop
sftp> get document.txt
Fetching /root/document.txt to document.txt
sftp> ls
GeekPandaBlog   document.txt    
sftp> lls
document.txt  wps-office-prometheus.desktop
sftp> bye

个人觉得sftp非常好用,它可以在本地和远端间随时切换。比如运行ls就是显示远端当前目录下的内容,lls就是本地当前目录下的内容;pwd是远端当前工作目录,lpwd是本地当前工作目录。真是哇塞啊!

全部评论

相关推荐

02-05 08:49
已编辑
武汉大学 Web前端
野猪不是猪🐗:36k和36k之间亦有差距,ms的36k和pdd的36k不是一个概念
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务