如何配置一個子網卡
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) 手冊頁。