用 netstat 查看路由表
当使用 -r 标志时,netstat 显示内核中的路由表,这类似于输入 /sbin/route :
[tom@phoenix tom]$ netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
-n 选项强制 netstat 以点分四组 IP 数字的形式,而不是主机和网络名称的形式输出地址。当您不想通过网络(例如,用 DNS 或 NIS 服务器)进行地址查询时,这个选项特别有用。
第二列显示路由项中所指向的网关。如果没有使用网关,就会显示星号。第三列是路由的网络掩码。内核在将信息包的 IP 地址与路由的目的地 IP 地址进行比较之前,将 Genmask 值与信息包的 IP 地址逐位进行“与”操作,从而使路由“通用化”。
第四列显示路由的标志:U 表示处于活动状态,H 表示主机,G 表示网关,D 表示动态路由,而 M 表示已经修改过。
用 netstat 查看路由表,续
[tom@phoenix tom]$ netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
接下来的三列显示 MSS、Window 和 irtt,它们将被应用于通过该路由建立的 TCP 连接。MSS(Maximum Segment Size)表示“最大分段尺寸”,也是内核所构建以通过该路由发送的数据报的最大尺寸。Window 表示系统一次从远程主机接收突发的最大量数据。
首字母缩写词 irtt 代表“初始往返时间(initial round trip tim)”。TCP 协议确保主机间可靠地发送数据,如果数据已经丢失,则重新发送。TCP 协议一直对发送给远程端点的数据报和接收到的确认所花费的时间进行记数,以便知道假定要重发数据报前需要等待的时间;这个过程称为往返时间。TCP 协议将使用第一次建立连接时所用时间作为初始往返时间的值。对于大多数类型的网络,用缺省值就够了,但对某些速度较慢的网络(特别是某些业余的分组无线网络),这个时间太短了,会造成不必要的重发。可以使用 route 命令设置 irtt 值。在上面这个路由表中,这些字段均为零值,这表明正在使用缺省值。
最后,最后这个字段表示的是所显示的路由使用的网络接口。
用 netstat 显示一些网络接口使用的统计信息
用 -i 选项调用 netstat 可以显示所有已配置接口的一些有用的统计信息 — 这是一个用于排除网络故障的非常有用的工具。有了该命令,很容易检查连接的状态以及连接是否“正常”。
[tom@phoenix tom]$ netstat -i
Kernel Interface table
eth0 Link encap:Ethernet HWaddr 00:10:5A:00:87:22
inet addr:192.168.1.20 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10554374 errors:0 dropped:0 overruns:0 frame:0
TX packets:8528339 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:19 Base address:0xc800
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:5612 errors:0 dropped:0 overruns:0 frame:0
TX packets:5612 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX packets 和 TX packets 行分别显示了已经接收到的信息包或已经发送了的信息包数目以及出错的信息包、丢失的信息包以及溢出的 RX/TX 统计信息。最常见的接口错误都是源于不正确的配置,所以,如果遇到了某些困难,最好再三检查所有的设置来进行诊断。
假使接口已经启动,则应该没有信息包排队等候发送(txqueuelen)— 如果有,则可能是由于网络电缆或网卡有问题。首先换一根备用电缆,然后重新检查连接。RX/TX 错误应该近乎为零。如果 TX 错误过多,则表示网络已经饱和或物理连接有问题;如果 RX 错误过多,则表示网络已经饱和、物理连接有问题或主机过载。如果遇到过高的冲突率(冲突率是输出信息包(output packet)的百分比,而不是从发送/接收信息包的总数中计算得出),它可能也表示网络已经饱和;通过从同一子网上的另一台主机执行 netstat -i 命令并比较结果来证实这一点。
要解决网络中错误,一定要仔细地以及系统地分析接口的所有方面(硬件和软件),这是必要的。不要匆忙行事,……啊……我们提到了总是要先检查网络电缆。在这一点,相信我。
结束语
在本教程中,我们已经讨论了 TCP/IP 的历史、OSI 模型和它与 TCP/IP 设计的关系、IP 寻址、子网划分和路由 — 所有这些都是从理论角度来阐述的。然后我们着手研究了如何在 Red Hat 7.0 下初始化 TCP/IP 网络,以及讲述了 Red Hat 下的一些文件是做什么用的。接下来,我们探讨了如何配置网络接口以及如何指定本地局域网和“外部世界”间的路由。最后,本教程探讨了 netstat 程序以及如何使用该程序来检查网络是否正常。
确实,需要汲取许多知识,但是 TCP/IP 是一个很大的主题,有数百条的分支,一个人不可能在两三天内完全掌握它。事实仍然是:TCP/IP 是因特网的主干,路由是将所有主机和网络“粘”在一起的“粘合剂”,而 IP 地址代表我们在这个世界里“冲浪”时所要访问的地方。当您想到这一点,并考虑到过去三、四年人们对计算机领域,特别是因特网的需求飞速增长时,您会觉得这些基础设施确实在非常好地支撑这些。
责任编辑:小草