认证目标3.05 网络入门
TCP/IP是一系列按层组织的协议,也称为协议套件。它是专为Unix设计的,但是最终成为Internet的通信标准。IP地址帮助在网络上进行通信。现在有很多TCP/IP工具和配置文件能帮助用户管理网络。
本章前面曾提到,这里的论述过于简单。因此,如果你认为这一节的内容难以理解或不全面,可以阅读第1章介绍的参考书。Linux是专为网络连接设计的。除非比较全面地理解网络的基本概念,否则没有切实可行的办法帮助考生通过Red Hat考试。
虽然当前网络的重点仍然是IPv4寻址模式,但是有些组织已经开始转到IPv6网络。本节重点介绍IPv4,第12章将介绍IPv6。不过,用于IPv4的大部分配置文件和工具也适用于IPv6。
3.5.1 IPv4网络
每个要在网络上进行通信的计算机必须有一个唯一的IP地址。有些地址已经永久地分配给某一个计算机,这些就是静态地址。其他地址是从DHCP服务器那里租用一段时间的,它们就是所谓的动态IP地址。
IPv4地址是32位的二进制数字,通常采用“点分十进制”表示法(如192.168.122.50),其中每个小节代表8位二进制数字。IP地址由两个部分组成:网络地址(或子网)和主机部分。在1993年Interent Engineering Task Force(www.ietf.org)发布RFC 1517之前,IP地址被分成不同的类别,这些类别定义了网络的规模和地址的主机部分。
现在通常使用一种不分类逻辑来分析IP地址。使用子网掩码而不是地址分类来确定IP地址的网络和主机部分。RFC 791引入的分类寻址方法如表3-3所示。RFC 791的一些概念在今天仍然得到采用,例如,IP地址段224.0.0.0-239.255.255.255用于多播地址。
表3-3 IP地址的分类
此外还有很多专用IP地址,它们不可以分配给任何直接连接到Internet上的计算机。RFC 1918定义了最常见的专用网络地址段,它们与10.0.0.0-10.255.255.255、172.168.16.0-172.168.31.255以及192.168.0.0-192.168.255.255等网络地址相关联。另外,网络地址段127.0.0.0到127.255.255.255用于本地主机上的回环通信。
3.5.2 网络和路由
前一节讨论过,IP地址包含两个部分:网络前缀和主机标识符。为确定网络和主机部分,IP地址关联着一个子网掩码(也称为前缀)。这是一个32位数字,由一系列二进制的1后跟0组成。
子网掩码可采用与IPv4地址相同的点分十进制表示法。例如,255.255.255.0是一个子网掩码,由24个二进制的1和8个0组成。还有一种表示法,称为无类别域间路由(Classless Inter-Domain Routing, CIDR),由一个斜杠字符(/)后跟表示子网掩码中1的个数的数字组成。例如,在CIDR表示法中,子网掩码255.255.255.0可写作/24。
给定一个IP地址和一个子网掩码,为确定IP地址的网络部分,只需要在IP地址和子网掩码之间提供一个逻辑AND。例如,给定IP地址192.168.122.50和子网掩码/24,地址的前三个字节(192.168.122)代表了网络部分,而最后一个字节(50)则是主机标识符。
定义一个网络需要三个重要的IP地址:网络地址、广播地址和子网掩码。网络地址就是地址段中的第一个IP地址;广播地址通常是同一个地址段中的最后一个IP地址。子网掩码可以帮助计算机定义IP地址的网络部分和主机部分。可以把网络地址与广播地址之间的任何一个地址(不包括上述地址)分配给网络上的任何一台计算机。
现在用一个例子说明如何为一个专用网络分配地址段。专用网络地址从192.168.122.0开始,子网掩码地址是255.255.255.0。基于上述两个地址,广播地址为192.168.122.255,则分配给特定网络上的IP地址段可以从192.168.122.1到192.168.122.254。子网掩码也可由相应的位数来定义,本例是24。换言之,这个网络可以表示为192.168.122.0/24。
IP地址也可分配给网络接口。如果一个主机有多个网络接口,将流量转发到不同的网络,则称该主机为路由器。通过路由器与其他IP主机组分隔开的IP主机必须位于不同的网络中。
与网络和子网掩码相关的是“网关”概念。这是一个定义了本地网络与外部网络之间的连接的IP地址。虽然网关IP地址也是本地网络的一部分,但是它被分配给一个路由器,且该路由器具有另一个网络(例如公共的Internet)上的IP地址。网关IP地址通常是在本地系统的路由表中配置的,可以用下一节介绍的ip route命令定义路由表。
3.5.3 工具和命令
有很多工具可用来管理Linux计算机上的TCP/IP协议套件。在之前版本的RHEL中,一些比较重要的网络管理命令包括ifconfig、arp、netstat和route。这些命令已被弃用。ip工具支持更高级的功能。为便于过渡到使用ip工具,表3-4提供了已被弃用的命令列表,以及对应的ip命令。
表3-4 ifconfig、arp、netstat命令及对应的ip命令
实际经验
默认情况下,RHEL 7根据物理位置来命名网络接口(例如,enoX和emX表示板载网络接口,enpXsY和pXpY代表PCI插槽)。在RHEL 7中,传统的枚举方法(eth0、eth1……)只是一种备用选择。因此,第一个板载网络接口可能被命名为eno1,而位于PCI总线3、插槽0的接口可能被命名为enp3s0。
其他重要的网络命令包括ping和traceroute,常用于诊断和排除网络问题。
但这些只是工具而已。下一节将分析这样一些Red Hat文件,它们决定了在引导过程中自动配置网络需要调用的命令。
1. ping和traceroute命令
ping命令可以测试网络的连通性。它可以作用于本地系统的一个网络之内,也可以测试Internet上多个网络之间的连通性。本节假设IP地址为192.168.122.50,本地网络上的网关地址是192.168.122.1。如果用户发现网络连接有问题,则可以按顺序执行下面的ping命令。第一步测试计算机的TCP/IP的完整性:
# ping 127.0.0.1
通常在Linux中会不停地执行ping命令,要终止它的执行必须按下CTRL+C。如果要想验证本地局域网的连接是否正常,可以用ping命令测试本地网卡的IP地址:
# ping 192.168.122.50
如果此命令运行正常,再用ping命令测试网络上另一个计算机的地址。然后开始跟踪到Internet的路由过程。用ping命令测试网关的地址,这里是192.168.122.1。如有可能,不妨用ping命令测试网络连接Internet的地址,此地址可能在网关的另一侧。有可能是路由器在Internet上的公共IP地址。最后,用ping命令测试一个在Internet处于活动状态的计算机的IP地址。
也可以用www.google.com这样的主机名代替IP地址。如果用主机名时不能正常工作,则很可能是包含了主机名和IP地址的数据库存在问题,这个数据库也常称为域名服务(Domain Name Service, DNS)。也可能是/etc/hosts配置文件存在问题。
traceroute命令通过跟踪到目的地的路由路径,自动完成上述过程。例如,下面的命令找出IP地址192.168.20.5的路径:
# traceroute -n 192.168.20.5 traceroute to 192.168.20.5(192.168.20.5), 30 hops max, 60 byte packets 1 192.168.122.1 0.204 ms 0.152 ms 0.148 ms 2 192.168.1.1 1.826 ms 2.413 ms 4.050 ms 3 192.168.20.5 2.292 ms 2.630 ms 2.554 ms
注意这条命令中的-n选项,它告诉traceroute显示IP地址而不是主机名。此命令还显示了到达路径上的每一跳所需的往返时间(Round Trip Time, RTT)。默认情况下,为每一跳发送3个不同的探测数据包。
请注意,一些traceroute命令选项需要root管理员权限。另一个可实现相同目的、但是没有此限制的命令是tracepath。
实际经验
默认情况下,traceroute依赖于在IP头部中包含不断增加的生存时间(Time-To-Live, TTL)值的UDP探测数据包,才能找到给定目的地的路由路径。有时候,路径上的防火墙可能阻止UDP数据包。此时,可以尝试在traceroute命令中使用-I或-T选项,以启用ICMP或TCP探测数据包。
2.用ip命令检查当前网络适配器
ip命令可以显示活动网卡的当前状态,它也可以用于分配网络地址及其他功能。运行ip link show命令可以检查本地系统上当前活动网卡的链接状态。如果想要显示有关网络性能的统计数据,可以包含-s开关。
要查看IP地址信息,可使用ip address show命令,其输出与ip link show相同,但是还包含了IP地址及其属性。
下面用ip address show eth0命令显示第一个以太网卡的当前配置:
# ip addr show eth0 2: eth0: <BROADCAST, MULTICAST, UP, LOWER_UP> mtu 1500 qdisc pfifo_fast state ↲ UP qlen 1000 link/ether 52:54:00:40:1e:6a brd ff:ff:ff:ff:ff:ff inet 192.168.122.50/24 brd 192.168.122.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::2e0:4cff:fee3:d106/64 scope link valid_lft forever preferred_lft forever
ip命令十分灵活。例如,ip a s命令在功能上等效于ip addr show或ip address show。
3.用ip命令配置网络适配器
也可以使用ip命令来分配IP地址信息。例如,下面的命令将所标注的IP地址和网络掩码分配给eth0网络适配器:
# ip addr add 192.168.122.150/24 dev eth0
第一个参数192.168.122.150/24指定了新的IP地址和子网掩码,下一个参数dev eth0说明了正在配置的设备。为保证修改有效,需要再次执行ip addr show eth0命令看看当前的设置。
利用合适的选项,ip命令可以为选定的网卡修改很多其他配置。表3-5列出其中部分选项。
表3-5 ip命令选项
当然,无论是在考试中,还是对于想要远程管理的服务器,需要确保所做修改在重启后能够保存下来。这就需要在/etc/sysconfig/network-scripts目录的配置文件中做出合适的修改,稍后就会进行介绍。另外,根据定义,使用ip命令所做的任何修改都是暂时性的。
4.启用和禁用网络适配器
可使用ip命令启用和禁用网络适配器。例如,下面的命令可以禁用和再次启用第一个以太网适配器:
# ip link set dev eth0 down # ip link set dev eth0 up
但是,还有几个直观的脚本是专为控制网卡而设计的:ifup和ifdown。与ip命令不同的是,它们都要调用/etc/sysconfig/network-scripts目录中合适的配置文件和脚本。
例如,ifup eth0命令根据/etc/sysconfig/network-scripts目录中的ifcfg-eth0配置文件和ifup-eth脚本启用以太网卡eth0。
5. ip作为网络诊断工具
地址解析协议(Address Resolution Protocol, ARP)协议在网络接口的硬件地址(MAC)和一个IP地址之间建立对应关系。ip neigh命令输出一个本地计算机的硬件和IP地址表。此命令可以检测类似网络上重复IP地址这样的问题。此问题可能是由于不正确地配置系统或克隆虚拟机而引起的。如果需要,ip neigh命令可以用来手动设置或修改ARP表。由于硬件地址是不可路由的,因此ARP表仅限于本地网络。下面是此命令的一个示例输出,它显示本地数据库中的全部ARP记录:
# ip neigh show 192.168.122.150 dev eth0 lladdr 52:a5:cb:54:52:a2 REACHABLE 192.168.100.100 dev eth0 lladdr 00:a0:c5:e2:49:02 STALE 192.168.122.1 dev eth0 lladdr 00:0e:2e:6d:9e:67 REACHABLE
输出的第一列显示了局域网中的已知IP地址,其后是网上邻居所附加到的接口,以及其链接层地址(MAC地址)。最后一条记录显示了邻居的硬件地址是否可达。STALE记录可能表明,自上次从该主机收到数据包以后,其ARP缓存已超时。如果ARP表为空,则表示当前系统与本地网络上其他系统没有任何连接。
6.用ip route命令显示路由表
ip命令功能很多。这个命令的一个重要形式是ip route,它显示路由表。在功能上它等效于已被弃用的route命令。当使用-r开关选项时(ip -r route),此命令会查看/etc/hosts文件和DNS服务器,以显示主机名,而不是数字IP地址。
本地系统的路由表通常包含了对默认网关地址的引用。例如,下面是ip route命令的输出结果:
default via 192.168.122.1 dev eth0 proto static metric 1024 192.168.122.0/24 dev eth0 proto kernel scope link src 192.168.122.50
已经弃用的netstat -nr命令也会输出相同的路由表。在这个路由表中,网关地址是192.168.122.1。凡不是发送给192.168.122.0网络的任何包都发送到这个网关地址(换句话说,查看此网站的第二层地址,并放到帧中,作为目标MAC地址)。位于网关地址的系统(通常是一个路由器)负责根据自己的路由表把包转发到下一个路由器,直至到达一个与目标直接连接的路由器。
7.用dhclient命令动态配置IP地址
尽管命令的名称经常发生变化,但是其功能还是一样的。dhclient命令与网卡的设备名(如eth0)一起使用时,向DHCP服务器请求一个IP地址和其他功能:
# dhclient eth0
一般而言,由DHCP服务器配置的网络选项包括IP地址、子网掩码、访问外部网络的网关地址以及此网络上任何DNS服务器的IP地址。
换言之,dhclient eth0命令不仅能像ip命令那样分配IP地址,而且还会在路由表中建立默认的路由(用ip route命令可以得到路由表)。此外,它还会把DNS服务器的IP地址添加到/etc/resolv.conf配置文件中。
8.使用ss显示网络连接
ss命令取代了已被弃用的netstat工具来显示网络连接。通过使用正确的命令开关,它可以显示侦听和非侦听TCP和UDP套接字。下面是我们喜欢使用的一个命令:
# ss -tuna4
这里命令使用IPv4(-4)显示所有(-a)网络套接字,并以数字格式(-n)显示TCP(-t)和UDP(-u)协议。如果指定了-p开关,ss还会显示使用每个套接字的进程的PID。图3-9演示了基准服务器上的输出。
图3-9 ss -tuna4命令的输出
在输出的末尾,注意对等地址192.168.122.1:43910。43910端口是远程服务器上的源端口。对应的本地地址192.168.122.50:22为来自192.168.122.1的连接指定了端口22(本地SSH服务)。还可能看到另一个具有相同端口号的条目,它表示相关的侦听连接的SSH守护进程。输出中的其他行表示其他侦听服务。