[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 下一页 ]
作者 = Duncan C Thomson duncan@sciuro.demon.co.uk
主题 = IP 协议, TCP 协议, IP 地址, IP 接口, 路由
TCP/IP,正如其名称所示,是一对协议,也是大多数互联网构建的基础。尽管互联网的物理构成是由各种各样的网络技术组成的,从慢速调制解调器链路到以太网,再到高速基于 ATM 的交换网络,并且在其上运行着各种不同的应用程序 - 仅举两个例子,万维网和电子邮件,但将所有东西联系在一起的协议是互联网协议 (IP),以及,也许几乎同样重要的,传输控制协议。另一种协议,UDP,在某些应用程序中代替 TCP 使用,尤其是在 LAN 环境中,但在互联网上,TCP/IP 伙伴关系占据主导地位。
图表:各种物理网络,IP,TCP 和 UDP,应用程序
本章首先描述 IP 网络的基本知识,然后描述 Debian 用户可用的 TCP/IP 的一些更高级的功能。
每台直接连接到互联网(或任何基于 IP 的网络)的计算机都由一个 IP 地址标识。IP 地址是四个字节长,通常写成由点分隔的四个十进制数字,如下例所示。
10.34.92.111
127.0.0.1
172.19.220.2
192.168.50.109
IP 地址通常标识两件事。首先,它们标识特定计算机所在的网络。其次,它们标识该网络上的特定计算机。这两个信息都存在于 IP 地址中,它们可以被称为网络部分和主机部分。这里应该提到主机部分的两个特殊值 - 如果主机部分全部为零,则地址指的是网络(即它是网络地址而不是主机地址)。或者,如果主机部分全部为一,则地址指的是网络上的所有主机(即它是广播地址)。
为了识别 IP 地址的哪一部分是主机部分,哪一部分是网络部分,我们可以使用两种方法。第一种(也是最初的)方法更容易理解,所以让我们先来看看它是如何工作的。IP 地址被分成许多类,正是这个类告诉我们如何将 IP 地址分成网络部分和主机部分。
A 类 IP 地址的第一个字节是一个介于 1 和 126 之间的数字。A 类 IP 地址的第一个字节标识网络,其余三个字节标识主机。
B 类 IP 地址的第一个字节是一个介于 128 和 191 之间的数字。它的前两个字节是网络标识符,其余两个字节是该网络上的主机标识符。
C 类 IP 地址的第一个字节是一个介于 192 和 223 之间的数字。它的前三个字节标识网络,其余字节标识该网络上的单个主机。
从上面的列表中,您可能会注意到以 224 及以上的字节开头的 IP 地址缺失了。这些属于其他类别的 IP 地址,不用于正常的 IP 主机,并且超出了本节的讨论范围。
您可能还会注意到以 127 开头的 IP 地址缺失了。以 127 开头的 IP 地址被称为环回地址,可以用于在没有实际网络连接的情况下测试 TCP/IP。
这一切都很好,但是如果我们已经被分配了一个 C 类地址范围,但想要将其拆分到多个网络中怎么办?这就是可以使用第二种指定网络和主机部分的方法的地方。这种方法与 IP 地址一起指定一个子网掩码,它在网络部分将其位设置为一,并在主机部分将其位设置为零。因此,例如,各种网络类别的默认子网掩码如下
255.0.0.0
255.255.0.0
255.255.255.0
这些并没有给我们提供超出原始地址类别告诉我们的任何新信息。然而,使用子网掩码的强大之处在于,我们可以选择网络部分和主机部分之间的任意分割 - 例如,子网掩码 255.255.255.192 将允许我们将一个 C 类网络分成四个部分,每个部分有 62 个主机地址。困惑了吗?让我们更详细地看看这个例子。
假设我们已经被分配了一个以 192.168.50 开头的 C 类网络。如果我们将子网掩码 255.255.255.192 转换为二进制,我们可以看到在最后一个字节中,前两位是一(即,它们包含在地址的网络部分中),最后六位是零(即,它们构成主机部分)。因此,通过使用我们被赋予的 IP 地址,以及这个子网掩码,我们将我们的网络分成了四个,网络地址通过将这两位设置为它们的四种可能的组合 (00, 01, 10, 11) 同时保持主机部分设置为零(以标识网络)来给出
192.168.50.0
192.168.50.64
192.168.50.128
192.168.50.192
现在我们知道我们的四个网络地址来自哪里了。那么我们的主机地址呢?它们来自将每个子网中的主机部分设置为从 000001 到 111110 的所有值(记住 - 全为一是一个广播地址)。这为我们提供了每个网络总共 62 个主机,地址为
192.168.50.1 - 192.168.50.62
192.168.50.65 - 192.168.50.126
192.168.50.129 - 192.168.50.190
192.168.50.193 - 192.168.50.254
在 Linux 中,如果我们没有提及我们正在使用的子网掩码,软件通常会假定我们想要使用该特定类别的 IP 地址的默认子网掩码。只有当您使用非特定类别的 IP 地址的标准方案的子网掩码时,您才需要指定子网掩码。不过,指定它永远不会有任何坏处。
每个 IP 地址在互联网或您连接的任何 IP 网络上都应该是唯一的。这意味着您不能随机地将 IP 地址分配给您的机器,因为大多数 IP 地址已经在互联网上使用。为了为您的机器获得一组合法的 IP 地址,您通常会通过互联网服务提供商 (ISP)。如果您没有被分配这样的地址范围,您应该使用一组为互联网或测试使用而预留的私有 IP 地址。请注意,您将无法直接从这样的网络连接到互联网;您需要使用某种形式的网络地址转换 (NAT) 来做到这一点。为私有使用而预留的 IP 地址范围是
10.0.0.0:单个 A 类网络
172.16.0.0 - 172.31.0.0:16 个 B 类网络
192.168.0.0 - 192.168.255.0:256 个 C 类网络
一旦我们知道我们希望为我们的机器使用哪个 IP 地址,我们将不得不启动我们的一个网络接口,并将该 IP 地址(可能连同子网掩码)分配给它。在大多数 Debian 系统上,这是在安装系统时完成的,并且在简单的系统上您很少需要更改它。
ifconfig
命令用于配置接口以便将 IP 与它们一起使用。Linux 内核提供了许多不同的网络接口,其中一些总结如下
环回接口 (lo),通常配置为 IP 地址 127.0.0.1
以太网接口(名称如 eth0、eth1、eth2)用于访问以太网卡
PPP 代表点对点协议,用于在任何类型的串行线路(空调制解调器、调制解调器、ISDN)上运行各种网络协议,包括 IP。它们的名称如 ppp0、ppp1
令牌环设备使用设备名称如 tr0、tr1 访问
虚拟网络驱动程序用于具有并非总是使用的接口的系统,以便为相关地址提供永久 IP 接口。设备名称是 dummy,或 dummy0、dummy1 等
还有各种各样的其他网络设备可用,包括 SLIP、PLIP(串行和并行线路 IP)、用于控制某些接口上的流量的“shaper”设备、在单个设备上拥有多个 IP 地址的能力,以及帧中继、AX.25、X.25、ARCnet、LocalTalk 等。但是,在这里,我们将专注于最常见的接口之一 - 以太网接口。
在许多情况下,如果您希望您的内核自动加载某些设备驱动程序的模块,您可能需要更改您的 /etc/conf.modules
或 /etc/modules
文件。例如,要自动加载 NE2000 驱动程序,您可以有以下行
alias eth0 ne
在您的 /etc/conf.modules
文件中。
调用 ifconfig
的最简单方法是简单地键入其名称
# /sbin/ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0 UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1 RX packets:18584 errors:0 dropped:0 overruns:0 frame:0 TX packets:18584 errors:0 dropped:0 overruns:0 carrier:0 Collisions:0
这只是返回有关当前配置的接口的信息。如果我们现在希望启动一个地址为 192.168.50.23 的以太网接口,我们将在 ifconfig
的命令行上指定接口名称和 IP 地址
# /sbin/ifconfig eth0 192.168.50.23 # /sbin/ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0 UP BROADCAST LOOPBACK RUNNING MTU:3584 Metric:1 RX packets:18584 errors:0 dropped:0 overruns:0 frame:0 TX packets:18584 errors:0 dropped:0 overruns:0 carrier:0 Collisions:0 eth0 Link encap:Ethernet HWaddr 00:00:E8:C5:64:2A inet addr:192.168.50.23 Bcast:192.168.50.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:55 errors:0 dropped:0 overruns:0 frame:0 TX packets:5 errors:0 dropped:0 overruns:0 carrier:0 Collisions:7 Interrupt:10 Base address:0x300
从示例中可以看出,ifconfig
现在提供了有关新接口的信息,包括子网掩码、网络统计信息以及有关网络驱动程序本身的信息。ifconfig
还允许在配置接口时指定子网掩码,例如
# /sbin/ifconfig eth0 192.168.50.23 netmask 255.255.255.192
最后,要关闭接口,请使用以下 ifconfig
调用
# /sbin/ifconfig eth0 down
有关 ifconfig
可用选项的完整信息,请参阅手册页 - ifconfig(8)
。
如果您在安装 Debian GNU/Linux 时设置了机器上的 IP 寻址,您应该会发现 ifconfig
命令在启动时自动运行。这是从文件 /etc/init.d/network
完成的。查看此文件应该会显示许多类似于以下行的行
IPADDR=192.168.50.23 NETMASK=255.255.255.0 BROADCAST=192.168.50.255 ifconfig eth0 ${IPADDR} netmask ${NETMASK} broadcast ${BROADCAST}
这是以太网接口设置发生的地方。在这些行之上,您应该看到一行设置环回接口,并且您应该看到许多行似乎运行一个名为 route
的命令。这个程序及其功能是下一节的主题。
一旦 IP 接口被设置好,就有必要告诉 Linux 内核将 IP 信息发送到 IP 网络上各种机器的位置。内核保存一个表,称为路由表,其中列出了许多主机或网络地址,以及有关如何将 IP 数据包发送到这些目的地的信息。
route
命令用于检查或更新此表。如果只配置了您的环回接口,则单独使用此命令通常会给出看起来类似于以下内容的输出
# /sbin/route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 127.0.0.0 * 255.0.0.0 U 0 0 2 lo
这表示任何针对标识为“127”的网络的流量都应该通过环回接口 (lo) 路由。“genmask”列以类似于子网掩码的方式指定,此特定路由表条目应该用于匹配任何以数字 127 开头的 IP 地址,无论其余部分是什么。
如果我们的机器连接到以太网网络,那么通常我们会希望确保内核路由表知道如何将信息发送到此网络。假设我们将我们的机器设置为 192.168.50.23,并使用默认的 C 类子网掩码,以下命令将为我们的本地网络添加路由表条目
# /sbin/route add -net 192.168.50.0 # /sbin/route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 127.0.0.0 * 255.0.0.0 U 0 0 2 lo 192.168.50.0 * 255.255.255.0 U 0 0 137 eth0
这告诉内核,任何以 192.168.50 开头的 IP 地址都在我们的本地以太网网络上,并且它们应该通过“eth0”接口路由。如果您使用非标准子网掩码,则可以将其指定为 route
命令的命令行选项
/sbin/route add -net 192.158.50.0 netmask 255.255.255.192
如果我们的 TCP/IP 网络仅由单个网络组成,并且未连接到其他任何地方,则像上面这样的命令就足够了。然而,TCP/IP 的优势在于其互联网工作能力,并且通常基于 IP 的网络由多个网络组成。为了将 IP 数据包从您的机器路由到这些其他网络,您需要指定网关主机(通常称为路由器),它们负责将信息发送到这些其他网络。总的来说,有两种可能性。
第一种可能性是我们想要将 IP 数据包路由到特定网络,并且我们知道处理该网络信息的网关主机或路由器的地址。例如,假设我们的网络上有一台机器 192.168.50.1,它是网络 172.20.0.0(一个 B 类网络)的路由器。route
命令的以下选项指定了这一点
# route add -net 172.20.0.0 gw 192.168.50.1
由于我们的路由表已经包含一个条目,告诉我们如何将信息发送到 192.168.50.1(它在我们的本地网络上),因此任何针对远程网络 172.20.0.0 的流量现在都会发送到该机器,该机器会适当地处理它。
另一种可能性是我们使用某个网关作为默认路由 - 用于所有与我们的路由表中的其他规则不匹配的 IP 数据包的路由。例如,如果 IP 地址为 192.168.50.254 的机器是我们的通往世界其他地方(例如互联网)的路由器,我们使用 route
命令如下
# /sbin/route add default gw 192.168.23.254
在这个阶段,让我们再次看一下我们的路由表
# /sbin/route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 127.0.0.0 * 255.0.0.0 U 0 0 2 lo 192.168.50.0 * 255.255.255.0 U 0 0 137 eth0 172.20.0.0 192.168.50.1 255.255.0.0 UG 1 0 7 eth0 default 192.168.50.254 0.0.0.0 UG 1 0 36 eth0
逐行浏览上面的表格
我们首先为所有 127.*.*.* 地址指定一个环回地址
接下来,我们指定如何到达我们本地网络上的所有机器,标识为 192.168.50.*
接下来,我们给出通往连接到机器 192.168.50.1 的网络 (172.20.*.*) 上所有机器的路由,192.168.50.1 是该网络的路由器(或网关)
最后,我们指定机器 192.168.50.254 将处理所有其他 IP 流量
现在,我们不会查看各种“flags”、“metric”和“ref”条目的含义。
让我们再次看看典型的 /etc/init.d/network
文件,它是在典型的以太网连接机器上由 Debian 的安装程序设置的
#! /bin/sh ifconfig lo 127.0.0.1 route add -net 127.0.0.0 IPADDR=192.168.50.23 NETMASK=255.255.255.0 NETWORK=192.168.50.0 BROADCAST=192.168.50.255 GATEWAY=192.168.50.254 ifconfig eth0 ${IPADDR} netmask ${NETMASK} broadcast ${BROADCAST} route add -net ${NETWORK} [ "${GATEWAY}" ] && route add default gw ${GATEWAY} metric 1
这个 shell 脚本的前两行设置环回接口,并为其添加一个路由表条目。随后的变量设置我们机器的 IP 地址、子网掩码、本地网络的地址、广播地址和默认路由器的 IP 地址。最后,我们的本地以太网接口通过 ifconfig
设置,并且两次调用 route
命令首先为本地网络添加路由表条目,其次为我们的默认网关添加路由表条目。
您很可能会发现来自 route
命令的输出中的地址(网络地址和机器地址)不是以 IP 地址形式出现,而是以名称形式出现。网络名称可以在 /etc/networks
文件中设置(该文件通常在安装时由 Debian 的网络设置例程设置),并且主机名称可以来自各种机器,包括 /etc/hosts
文件和域名服务 (DNS)。现在让我们看看 DNS 是什么以及它做什么。
每台连接到互联网或任何使用 IP 作为其网络协议的网络的计算机都有一个 IP 地址,以便信息能够正确地路由到它和从它路由。然而,IP 地址对于人类来说有点难以记住,因此,每台机器通常也会被赋予一个名称。当您安装 Debian 时,这是您将被问到的问题之一 - 您的计算机的名称是什么。
您的计算机的名称将存储在几个位置。您可以通过键入 hostname
命令来查找您的计算机的名称,该命令返回文件 /etc/hostname
中的值。如果您连接到互联网,此名称通常会有几个部分,彼此之间用点分隔,例如
debian.anon.com
只有其中的第一部分是您自己的计算机的名称 - 其余部分被称为域名 - 这是 anon.com 部分。由于互联网上可能有几台具有相同名称的计算机,因此每台计算机都通过将其放在自己的域中来使其唯一。在一个域内,通常有一个人负责给出计算机名称,并管理一个数据库,该数据库保存该域中所有计算机的名称和地址。此系统称为 DNS,就像电话簿一样 - 您可以按名称查找计算机,并找出其 IP 地址。
在 DNS 之前,人们必须记住 IP 地址才能使用互联网,并且名称仅对一小部分机器已知 - 通常是本地网络中的机器,以及可能一两台永久连接到我们站点的机器。这些名称存储在一个文件中 - /etc/hosts
- 您通常会发现当安装 Debian 时,您自己的机器名称和 IP 地址已被添加到该文件中。
DNS 是一个相当复杂的系统,我们稍后将更详细地研究它,以及允许您管理自己的 DNS 域的软件 (bind
)。
但是,在这里,我们将从客户端的角度 - 即,从只需要在 DNS 中查找机器而不是必须提供 DNS 服务的机器的角度 - 来看看 DNS 是如何工作的。
当 Debian 机器需要查找另一台计算机的名称以找出其 IP 地址时,它会使用 C 库中的一组例程,称为解析器。反过来,解析器例程首先查阅文件 /etc/nsswitch.conf
,该文件针对 hosts 的条目将列出解析器应检查以找出 IP 地址的位置。这里有三个可能的条目,如果其中存在多个条目,则解析器将按顺序检查每个条目。这些条目是
检查文件 /etc/hosts
中是否有特定主机名的条目
检查 NIS 数据库(我们稍后将研究)中是否有主机名
检查域名服务
/etc/nsswitch
中的典型条目可能是
hosts: files dns
这告诉解析器首先检查文件 /etc/hosts
,然后查询 DNS。
DNS 由文件 /etc/resolv.conf
配置。此文件通常指定两件事 - 首先,我们的机器所在的域,其次,一些要询问信息的名称服务器。一个例子是
domain anon.org nameserver 172.19.0.1 nameserver 172.19.5.1
第一行告诉解析器库,如果我们请求一台机器并且没有指定域名,它应该附加 anon.org - 即解析器,假设机器在我们自己的域中,应该搜索它。以 nameserver 开头的两行指定我们应该使用 DNS 查询的机器的 IP 地址。由于显而易见的原因,这些应该始终是 IP 地址 - 而不是名称。
大多数网络实用程序会在您指定名称时自动查找机器的 IP 地址,但是如果您想直接查询 DNS,dnsutils 软件包包含一个名为 nslookup
的程序。nslookup
可以一次性使用,方法是给出您正在搜索的机器的名称,可能还带有命令行参数,也可以交互式使用,只需单独键入 nslookup
即可。交互式模式允许进行多次搜索,并提供一些有限的帮助。
nslookup
,以及其他查询 DNS 的程序以及提供 DNS 服务的软件,都将在稍后更详细地描述。
有关 DNS 的更多信息,请参阅 DNS/BIND,第 8 章。
[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 下一页 ]
Debian GNU/Linux 网络管理员手册 (过时文档)
本手册自 2000 年起已过时且已弃用,请参阅 http://www.debian.org/doc/user-manuals#quick-referenceardo.van.rangelrooij@tip.nl
olly@lfix.co.uk
rkrusty@debian.org
duncan@sciuro.demon.co.uk