如何配置一个子网卡
A. 急急急!!怎么设置网卡
正确设置网卡参数
许多使用宽带拨号上网的用户常常会遭遇到这样的麻烦,那就是系统每次开机运行后,打开Windows界面的速度倒是十分正常,可是等到Windows系统桌面中的所有内容显示出来后我们还需要等很长时间才能正常操作键盘和鼠标,其实在这个等待过程中系统正处于一种假死状态。事实上很少有人清楚,这个假死状态竟然是由网卡一手造成的;原来系统在每次运行过程中,网卡在缺省状态下会自动向DHCP服务器申请IP地址,不过我们由于使用的是宽带拨号方式,这种拨号方式一般不会为网卡自动分配IP地址的,这么一来网卡就会耗费很长的时间来反复申请地址,直到最后申请失败为止。
为了避免系统在启动过程中,网卡耗费太长的时间去申请IP地址,我们可以通过下面的两个方法来为网卡快速分配合适的IP地址:
第一种方法就是通过共享路由上网的方法,在使用该方法上网时,我们可以先打开IE浏览器,并在浏览窗口的地址栏中输入路由器默认的IP地址,打开该设备的后台登录界面,并正确输入原始登录帐号与密码,进入后台管理界面,然后在该界面中将路由器的DHCP功能正确启用起来,同时要将可供有效分配的IP地址池参数设置好,最后重新启动一下设置好参数的路由器设备,这么一来Windows系统日后启动时网卡就能很快从路由器内置的DHCP服务器中获得有用的IP地址了,那么系统启动过程中就不会出现假死等待状态了,那样的话启动速度自然就要比以前快了许多。
第二种方法是通过虚拟拨号的方法进行上网,在使用该方法上网时,可以先用鼠标右键单击系统桌面中的“网上邻居”图标,从弹出的右键菜单中执行“属性”命令,打开本地计算机系统的网络连接列表界面,选中该界面中的“本地连接”图标,再用鼠标右键单击该图标,然后执行快捷菜单中的“属性”命令,打开本地连接属性设置窗口;
单击该窗口中的“常规”标签,并在对应标签页面中双击其中的“Internet协议(TCP/IP)”项目,进入到如图2所示的设置对话框;选中该对话框中的“使用下面的IP地址”项目,同时为网卡分配一个与宽带“猫”IP地址同处一个网段的地址;例如,一般宽带“猫”IP地址为“192.168.0.1”,那么网卡IP地址就可以设置成“192.168.0.10”,子网掩码地址可以设置为“255.255.255.0”,网关地址可以设置成“192.168.0.1”;下面的再在DNS服务器地址处选择“使用下面的DNS服务器地址”,然后在对应的文本框中输入本地ISP提供的DNS地址,例如笔者在这里填写的是“202.102.11.141”,单击“确定”按钮,将上面的参数设置保存起来,最后重新启动一下Windows系统,相信这一次系统很快就能启动完毕。
图2
小提示:
网卡参数设置不当,不但会影响计算机系统的启动速度,而且还会影响共享访问速度。例如,要是相互通信的两台工作站网卡使用的工作模式不匹配的话,就会严重影响它们的数据传输速度;这不,当10M/100M自适应网卡与100M网卡相互通信时,一旦10M/100M自适应网卡工作模式被设置为10M全双工时,那么该网卡每次和100M网卡相互传输数据时,就需要耗费一定的时间来决定该使用什么大小的速度进行数据传输,那样的话两台工作站相互传输数据的速度就会受到很大影响。
为了防止网卡模式影响共享访问速度,我们必须根据实际情况来设置好网卡的工作模式。一般来说,当相互通信的网卡型号完全相同时,我们只要将它们的工作模式设置成相同就可以了;当一块网卡为10M/100M自适应的,另外一块网卡为100M的,那么它们在相互通信时,我们可以将10M/100M自适应网卡模式调整成100M全双工模式,而将100M网卡设置成默认工作模式就可以了;当一块网卡为10M/100M自适应的,另外一块网卡为10M的,那么它们在相互通信时,我们可以将10M/100M自适应网卡模式调整成10M全双工模式,而将10M网卡设置成默认工作模式就可以了;在具体调整网卡模式参数时,可以按照下面的操作步骤进行:
首先逐一单击“开始”、“设置”、“网络连接”命令,在其后弹出的网络连接列表界面中右击本地连接图标,执行右键菜单中的“属性”菜单命令,进入本地连接属性设置窗口;
单击该设置窗口中的“常规”标签,并在对应标签页面的“连接时使用”处,将安装在本地计算机中的目标网卡设备选中,同时单击右侧“配置”按钮,打开网卡设备属性设置窗口;
在该设置窗口的“高级”标签页面中,选中“属性”列表中的“Link Speed/Duplex Mode”选项(如图3所示),并在该选项的“值”下拉列表中,为网卡选择一个合适的工作模式,并单击“确定”按钮就可以了。
在开始之前,您应该知道您的网卡类型,它用的芯片和它是 PCI 还是 ISA 网卡。FreeBSD 支持很多种 PCI 和 ISA 网卡。 可以查看您的版本硬件兼容性列表以确定您的网卡被支持。
确认系统能够支持您的网卡之后, 您还需要为它选择合适的驱动程序。 /usr/src/sys/conf/NOTES 和 /usr/src/sys/arch/conf/NOTES 将为您提供所支持的一些网卡和芯片组的信息。 如果您怀疑驱动程序是否使所要找的那一个,请参考驱动程序的联机手册。 联机手册将提供关于所支持的硬件更详细的信息,甚至还包括可能发生的问题。
如果您的网卡很常见的话, 大多数时候您不需要为驱动浪费精力。 常用的网卡在 GENERIC 内核中已经支持了,所以您的网卡在启动时就会显示出来,像是:
dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38
000ff irq 15 at device 11.0 on pci0
dc0: Ethernet address: 00:a0:cc:da:da:da
miibus0: <MII bus> on dc0
ukphy0: <Generic IEEE 802.3u media interface> on miibus0
ukphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30
000ff irq 11 at device 12.0 on pci0
dc1: Ethernet address: 00:a0:cc:da:da:db
miibus1: <MII bus> on dc1
ukphy1: <Generic IEEE 802.3u media interface> on miibus1
ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
在这个例子中,我们看到有两块使用 dc(4) 驱动的网卡在系统中。
如果您的网卡没有出现在 GENERIC 中,则需要手工加载合适的驱动程序。 要完成这项工作可以使用下面两种方法之一:
最简单的办法是用 kldload(8) 加载网卡对应的内核模块。 除此之外, 通过在 /boot/loader.conf 文件中加入适当的设置, 也可以让系统在引导时自动加载这些模块。 不过,并不是所有的网卡都能够通过这种方法提供支持; ISA 网卡是比较典型的例子。
另外, 您也可以将网卡的支持静态联编进内核。 察看 /usr/src/sys/conf/NOTES, /usr/src/sys/arch/conf/NOTES 以及驱动程序的联机手册以了解需要在您的内核配置文件中加一些什么。要了解关于重新编译内核的进一步细节, 请参见 第 8 章。如果您的卡在引导时可以被内核 (GENERIC) 识别,您应该不需要编译新的内核。
11.8.1.1 使用 Windows® NDIS 驱动程序
不幸的是, 许多厂商由于认为驱动程序会涉及许多敏感的商业机密,至今仍不愿意将把驱动程序作为开放源代码形式发布列入他们的时间表。 因此, FreeBSD 和其他操作系统的开发者就只剩下了两种选择: 要么经历长时间的痛苦过程来对驱动进行逆向工程,要么使用现存的为 Microsoft® Windows 平台提供的预编译版本的驱动程序。 包括参与 FreeBSD 开发的绝大多数开发人员, 都选择了后一种方法。
得益于 Bill Paul (wpaul) 的工作, 从 FreeBSD 5.3-RELEASE 开始, 已经可以 “直接地” 支持 网络驱动接口标准 (NDIS, Network Driver Interface Specification) 了。 FreeBSD NDISulator (也被称为 Project Evil) 可以支持二进制形式的 Windows 驱动程序, 并让它相信正在运行的是 Windows。 由于 ndis(4) 驱动使用的是用于 Windows 的二进制形式的驱动, 因此它只能在 i386™ 和 amd64 系统上使用。
注意: ndis(4) 驱动在设计时主要提供了 PCI、 CardBus 和 PCMCIA 设备的支持, 而 USB 设备目前则没有提供支持。
要使用 NDISulator, 您需要三件东西:
内核的源代码
二进制形式的 Windows XP 驱动程序 (扩展名为 .SYS)
Windows XP 驱动程序配置文件 (扩展名为 .INF)
您需要找到用于您的卡的这些文件。 一般而言, 这些文件可以在随卡附送的 CD 或制造商的网站上找到。 在下面的例子中, 我们用 W32DRIVER.SYS 和 W32DRIVER.INF 来表示这些文件。
注意: 不能在 FreeBSD/amd64 上使用 Windows/i386 驱动程序。 必须使用 Windows/amd64 驱动才能在其上正常工作。
接下来的步骤是将二进制形式的驱动程序组装成内核模块。 要完成这一任务, 需要以 root 用户的身份执行 ndisgen(8):
# ndisgen /path/to/W32DRIVER.INF /path/to/W32DRIVER.SYS
ndisgen(8) 是一个交互式的程序, 它会提示您输入所需的一些其他的额外信息; 这些工作完成之后,它会在当前目录生成一个内核模块文件, 这个文件可以通过下述命令来加载:
# kldload ./W32DRIVER.ko
除了刚刚生成的内核模块之外, 还必须加载 ndis.ko 和 if_ndis.ko 这两个内核模块, 在您加载需要 ndis(4) 的模块时,通常系统会自动完成这一操作。 如果希望手工加载它们, 则可以使用下列命令:
# kldload ndis
# kldload if_ndis
第一个命令会加载 NDIS 袖珍端口驱动封装模块,而第二条命令则加载实际的网络接口。
现在请查看 dmesg(8) 来了解是否发生了错误。 如果一切正常, 您会看到类似下面的输出:
ndis0: <Wireless-G PCI Adapter> mem 0xf4100000-0xf4101fff irq 3 at device 8.0 on pci1
ndis0: NDIS API version: 5.0
ndis0: Ethernet address: 0a:b1:2c:d3:4e:f5
ndis0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
ndis0: 11g rates: 6Mbps 9Mbps 12Mbps 18Mbps 36Mbps 48Mbps 54Mbps
这之后, 就可以像使用其它网络接口 (例如 dc0) 一样来使用 ndis0 设备了。
与任何其它模块一样, 您也可以配置系统, 令其在启动时自动加载 NDIS 模块。 首先,将生成的模块 W32DRIVER.ko 复制到 /boot/moles 目录中。 接下来, 在 /boot/loader.conf 中加入:
W32DRIVER_load="YES"
11.8.2 配置网卡
现在正确的网卡驱动程序已经装载,那么就应该配置它了。跟其他配置一样,网卡可以在安装时用 sysinstall 来配置。
要显示您系统上的网络接口的配置,输入下列命令:
% ifconfig
dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
ether 00:a0:cc:da:da:da
media: Ethernet autoselect (100baseTX <full-plex>)
status: active
dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
ether 00:a0:cc:da:da:db
media: Ethernet 10baseT/UTP
status: no carrier
lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000
tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
注意: 老版本的 FreeBSD 可能需要在 ifconfig(8) 后面接 -a 选项,需要了解更多的 ifconfig(8) 语法请查阅使用手册。注意所有关于 IPv6 (inet6 等等) 的记录在这个例子里都被忽略了。
在这个例子中,显示出了下列设备:
dc0: 第一个以太网接口
dc1: 第二个以太网接口
lp0: 并行端口网络接口
lo0: 回环设备
tun0: ppp使用的隧道设备
FreeBSD 使用内核引导时检测到的网卡驱动顺序来命名网卡。例如 sis2 是系统中使用 sis(4) 驱动的第三块网卡。
在这个例子中,dc0 设备启用了。主要表现在:
UP 表示这块网卡已经配置完成准备工作。
这块网卡有一个 Internet (inet) 地址 (这个例子中是 192.168.1.3)。
它有一个有效的子网掩码 (netmask; 0xffffff00 等同于 255.255.255.0)。
它有一个有效的广播地址 (这个例子中是 192.168.1.255)。
网卡的 MAC (ether) 地址是 00:a0:cc:da:da:da
物理传输媒介模式处于自动选择状态 (media: Ethernet autoselect (100baseTX <full-plex>))。我们看到 dc1 被配置成运行在 10baseT/UTP 模式下。要了解驱动媒介类型的更多信息, 请查阅它们的使用手册。
连接状态 (status)是 active,也就是说连接信号被检测到了。对于 dc1,我们看到 status: no carrier。这通常是网线没有插好。
如果 ifconfig(8) 的输出显示了类似于:
dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
ether 00:a0:cc:da:da:da
的信息,那么就是还没有配置网卡。
要配置网卡,您需要 root 权限。 网卡配置可以通过使用 ifconfig(8) 命令行方式来完成, 但是这样每次启动都要做一遍。放置网卡配置信息的文件是 /etc/rc.conf。
用您自己喜欢的编辑器打开 /etc/rc.conf。并且您需要为每一块系统中存在的网卡添加一行, 在我们的例子中,添加如下几行:
ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0"
ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"
用自己正确的设备名和地址来替换例子中的 dc0,dc1 等内容。您应该应该查阅网卡驱动和 ifconfig(8) 的手册页来了解各选项,也要查看一下 rc.conf(5) 帮助页来了解 /etc/rc.conf 的语法。
如果在安装的时候配置了网络,关于网卡的一些行可能已经存在了。所以在添加新行前仔细检查一下 /etc/rc.conf。
您也可能需要编辑 /etc/hosts 来添加局域网中不同的机器名称和 IP 地址,如果它们不存在,查看 hosts(5) 帮助和 /usr/share/examples/etc/hosts 以获得更多信息。
11.8.3 测试和调试
对 /etc/rc.conf 做了必要的修改之后应该重启系统以应用对接口的修改,并且确认系统重启后没有任何配置错误。
系统重启后就应该测试网络接口了。
11.8.3.1 测试以太网卡
为了确认网卡被正确的配置了,在这里我们要做两件事情。首先, ping 自己的网络接口,接着 ping 局域网内的其他机器。
首先测试本地接口:
% ping -c5 192.168.1.3
PING 192.168.1.3 (192.168.1.3): 56 data bytes
64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms
64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms
64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms
64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms
64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms
--- 192.168.1.3 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms
现在我们应该 ping 局域网内的其他机器:
% ping -c5 192.168.1.2
PING 192.168.1.2 (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms
64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms
--- 192.168.1.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms
您如果您设置了 /etc/hosts 文件,也可以用机器名来替换 192.168.1.2。
11.8.3.2 调试
调试硬件和软件配置一直是一件头痛的事情, 从最简单的开始可以减轻一些痛苦。例如网线是否插好了?是否配置好了网络服务?防火墙配置正确吗? 是否使用了被 FreeBSD 支持的网卡? 在发送错误报告之前您应该查看一下硬件说明, 升级 FreeBSD 到最新的 STABLE 版本, 看一下邮件列表或者在 Internet 上搜索一下。
如果网卡工作了, 但性能低下,应该好好阅读一下 tuning(7) 联机手册。您也可以检查一下网络配置, 不正确的设置会导致慢速的网络连接。
一些用户可能会在一些网卡上经历一到两次 “device timeouts”, 这通常是正常现象。 如果经常这样甚至引起麻烦,则应确定一下它跟其他设备没有冲突。 仔细检查网线连接, 或者换一块网卡。
有时用户会看到少量 “watchdog timeout” 错误。这种情况要做的第一件事就是检查线缆连接。 一些网卡需要支持总线控制的 PCI 插槽。在一些老的主板上,只有一个 PCI 插槽支持 (一般是 slot 0)。检查网卡和主板说明书来确定是不是这个问题。
“No route to host” 通常发生在如果系统不能发送一个路由到目的主机的包的时候。这在没有指定默认路由或者网线没有插上时会发生。 检查 netstat -rn 的输出并确认有一个有效的路由能到达相应的主机。 如果没有,请查阅 第 27 章。
“ping: sendto: Permission denied” 错误信息经常由防火墙的配置错误引起。 如果 ipfw 在内核中启用了但是没有定义规则, 那么默认的规则就是拒绝所有通讯,甚至 ping 请求! 查阅 第 26 章 以了解更多信息。
有时网卡性能低下或者低于平均水平, 这种情况最好把传输媒介模式从 autoselect 改变为正确的传输介质模式。 这通常对大多数硬件有用,但可能不会解决所有人的问题。 接着,检查所有网络设置,并且阅读 tuning(7) 手册页。