精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>● FreeBSD>>《FreeBSD使用大全》第二版>>5.2.2 配置网络界面

主题:5.2.2 配置网络界面
发信人: sungang(笨刚)
整理人: sungang(2003-11-17 16:29:37), 站内信件
网络界面实际就是网卡的驱动程序,操作系统使用它与网络硬件打交道,而配置网络界面的操作应该通过命令ifconfig来完成。这个命令能够完成对网络界面的IP层的设置,也能够完成对网络界面的一些网络访问层的设置。大多数情况下,对IP的设置最为基本,而对网络界面的网络访问层的设置则很少需要。

<font size=+3>1) 网络界面基本设置
理解了IP协议之后,使用ifconfig设置网络界面相当简单。

# ifconfig  xl0  inet  192.168.1.64  netmask  255.255.255.0 up

其中xl0标识一个3c905B的网络界面,inet为inetnet的简写,标识IP协议,FreeBSD也支持其他几种协议,如ipx、atalk等。设置本网络界面地址为192.168.1.64,网络掩码为255.255.255.0,up表示将这个网络界面运行起来,通常这个参数缺省已经蕴涵在配置命令本身了,而不需要单独指定。

一般情况下不需要这么复杂的写法,简单的使用下面命令将使用缺省网络掩码配置这个网络。

# ifconfig  xl0  192.168.1.64

使用down参数可以简单停止网络界面的工作:

# ifconfig xl0 down

此外,还可以在一个网络界面上捆绑上多个IP地址,第二个及其之后的IP地址可以使用alias参数指定,如果不再想使用这个地址,可以使用delete命令删除这个ip别名,而-alias、remove与delete具备同样的含义。

# ifconfig xl0 alias 192.168.2.100

# ifconfig xl0 delete 192.168.2.100

设置完毕之后,可以查看设置的结果:

# ifconfig xl0 inet

xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500

        inet 192.168.1.64 netmask 0xffffff00 broadcast 192.168.1.255

        inet 192.168.2.100 netmask 0xffffff00 broadcast 192.168.2.255

配置界面完成之后,就可以将结果保存在rc.conf之中,以后启动就可以自动设置网络了。这需要设置相应的rc.conf变量ifconfig_xl0,表示xl0的ifconfig配置,这个变量的值就是需要执行的内容,而ifconfig_xl0_alias0为xl0的第一个别名配置等等:

ifconfig_xl0=“192.168.1.64”

ifconfig_xl0_alias0=“192.168.1.100 netmask 255.255.255.255”

ifconfig_xl0_alias1=“192.168.2.100 netmask 255.255.255.0”

需要注意的是,对一个网络界面每添加一个IP地址,就意味着这个地址对应的网络可以通过这个网络界面来访问,这就是要添加一个路由数据。例如,下面的操作需要增加两次对192.168.1.0网络的路由数据,因此会失败。

# ifconfig xl0 192.168.1.64

# ifconfig xl0 alias 192.168.1.100

ifconfig: ioctl (SIOCAIFADDR): File exists

# ifconfig xl0 inet

xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500

        inet 192.168.1.64 netmask 0xffffff00 broadcast 192.168.1.255

        inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255

然而,IP地址仍然绑定在网络界面上了,上面的操作如果是针对两个不同的网络界面设置同一个网络地址,显然是错误的,因为路由是冲突的,系统要与192.168.1.0网络通信的时候,无法选择正确的网络界面。但是,由于上面是对一个网络界面设置的别名,因此网络通信仍然可以正确进行。但是为了避免路由错误,应该指定不同的子网掩码,告诉系统这是不同的网络。

# ifconfig xl0 192.168.1.64

# ifconfig xl0 alias 192.168.1.100 netmask 255.255.255.255

很多人有这样的想法的来源是希望能完成网络流量的负载均衡,就是希望通过两个或更多的网络界面来访问同一个网络。例如,将两个网卡连接在同一个网络上,希望能增加网络性能。基本上,如果仅仅使用地址配置的方法,这种目的并不能达到,除非在特定情况下才可能,例如,虽然是同一个物理网络,但使用两套完全独立的IP网络地址,此时可以让一个网络界面对应一个地址进行操作。这个时候,系统可能会报告一些ARP错误,因为这两个网络界面连接到一个网络上,能接收到同样的ARP数据广播。

达到提高网络界面性能的基本方法是将多个网卡绑定成一个虚拟网络界面,FreeBSD的Netgraph网络系统中的one2many能支持这种作法,能用于FreeBSD到FreeBSD的网络连接。如果是FreeBSD到其他系统的连接,则需要交换机的支持,例如CISCO的交换机支持Fast Ethernet Channel,能将多个网络端口绑在一起,FreeBSD就能通过NetGraph的FEC内核模块来与交换机连接。设置这些虚拟网络界面需要系统的高级特性。

无论哪种情况下,将两个物理网络界面绑在一个物理网络上,系统内核都会报告arp错误,因为其他计算机的arp应答,第一次会在一个网络界面获得,接下来有可能会在其他网络界面得到,这种情况系统会认为是网络配置错误,事实上这也的确是一种非常规的网络配置,大部分情况下应该是一种网络配置错误。要屏蔽这种错误,可以屏蔽某一个网络界面的arp功能,使其不再回应arp协议。

# ifconfig xl1 -arp

然而,由于ARP协议涉及通信的具体细节,不支持ARP协议的网络界面,如果要达到通信的目的,就需要手工制定其他计算机的MAC地址。因此,屏蔽 arp的这种方式只用于特殊情况下。

<font size="+3">2) 网络访问层设置
要了解网络界面的细节,仍然可以通过ifconfig来完成。

# ifconfig xl0

xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500

        inet 192.168.1.64 netmask 0xffffff00 broadcast 192.168.1.255

        ether 00:90:27:4e:f6:67 

        media: autoselect

        supported media: autoselect 100baseTX <full-duplex> 100baseTX 10baseT/UTP <full-duplex> 10baseT/UTP

使用ifconfig还可以报告网卡的MAC地址和介质类型,并列出所有支持的介质类型,当然,这也可以通过ifconfig进行改变。

通常情况下,网卡的MAC地址是由网卡的制造商从国际组织申请得到,并固化到网卡内部,不需要改变。然而,一些主板上带的网卡其初始地址并不正确,就需要更改,否则只要同一个网络上的两个计算机具有同样的MAC地址,这两个计算机就不能正常通信。而ifconfig使用lladdr来表示MAC地址。

# ifconfig xl0 lladdr 00:90:27:4e:f6:67

当然,指定MAC地址就要选择合适的MAC地址,不能与同一个网络中的其他计算机的MAC地址冲突是最基本的一点,MAC地址也具备广播地址和组播地址的类别,选择地址应避开这些地址。原则上,可以从一个已有的MAC地址,稍作更改就可以了。

不仅FreeBSD,很多操作系统都可以随意改动网卡的MAC地址,这使得一些利用MAC地址进行安全性的设置,或者用MAC地址标识计算机的努力,其实都是无用的和无意义的。

同样,使用ifconfig也可以来改变连接网卡的介质类型。通常,现代交换机具备100M与10M自适应的能力,也能够支持全双工和半双工的连接模式。FreeBSD系统能支持这些介质选择能力。

# ifconfig xl0 media autoselect

自动选择模式是最常用的模式,让网卡通过和交换机的协商,自己确定网络模式。

# ifconfig xl0 media 10baseT/UTP

# ifconfig xl0 media 100baseTX

还可以选择不同的双工模式。

# ifconfig xl0 media 10baseT/UTP mediaopt full-duplex

# ifconfig xl0 media 100baseTX mediaopt half-duplex

此外,一些网卡同时具备两种不同的物理连接方式,这种网卡通常是很老10M网卡,具备细缆10base2的连接方式,和粗缆10base5的连接方式,这两种连接方式只能选择一种,有些网卡具备10base2和10baseT的连接方式等等。然而,这和介质类型不同的是,这涉及物理连接方式。FreeBSD使用link参数来进行这种设置。

# ifconfig ed0 link2

上面的命令将使一种3C503的网卡使用其本身的粗缆接口AUI,细缆接口BNC不再生效。

# ifconfig ed0 -link2

上面指令屏蔽AUI,恢复缺省接口BNC。显然,link参数需要网卡驱动支持的。

现代以太网中,快速以太网已经是标准配置,此外,以太网还具备一些扩展能力。VLAN支持就是一个例子,交换机能设置端口支持的VLAN序号,以满足网络灵活性的设置。FreeBSD的VLAN支持使得FreeBSD系统能通过一个网络接口连接多个VLAN,这样FreeBSD能作为服务器同时服务多个VLAN,因此具有很大的意义。

VLAN支持需要内核的额外支持,需要重新定制内核。然后,确定VLAN的标记序号与VLAN相连的物理端口,最后就可以配置vlan网络界面了。

# ifconfig vlan0 create

# ifconfig vlan0 vlan 12 vlandev xl0

# ifconfig vlan0 10.0.0.100

注:FreeBSD 4.4之前不需要执行create语句,vlan0等设备在系统启动的时候就自动创建了,这种方法的缺点是不灵活,vlan设备的数量不能动态的改变。

而取消VLAN需要执行:

# ifconfig vlan0 -vlandev xl0

进一步,在支持vlan设备自动创建的版本中,也可以撤销创建的vlan设备。

# ifconfig vlan0 destroy

需要注意的是,有些网卡硬件对VLAN的支持不好,因为VLAN要在以太网数据帧上添加额外的数据,那么VLAN数据帧要更大一些,一些网卡对大帧的支持不好,那么在使用VLAN的时候就需要注意,也许会出现丢包的现象。

<font size="+3">3) 查看网络界面
ifconfig的另一个重要的作用是用来观察当前网络的所有界面的配置状态。使用-l参数可以列出所有的网络界面名字。

# ifconfig -l

xl0 lp0 tun0 sl0 ppp0 lo0

然而,有些网络界面是处于UP状态,用于网络传输,而另外的网络界面则处于DOWN状态,处于备用状态。这可以使用-u和-d参数标识不同的网络界面。

# ifconfig -l -u

xl0 lo0

# ifconfig -l -d

lp0 tun0 sl0 ppp0

要获得完全信息,可以使用-a参数将列出所有界面的配置信息。更改配置之后最好使用这个命令查看效果。

# ifconfig -a

xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500

        inet 192.168.1.64 netmask 0xffffff00 broadcast 192.168.1.255

        ether 00:90:27:4e:f6:67 

        media: autoselect

        supported media: autoselect 100baseTX <full-duplex> 100baseTX 10baseT/UTP <full-duplex> 10baseT/UTP

lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500

tun0: flags=8050<POINTOPOINT,MULTICAST> mtu 1500

sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 552

ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384

        inet 127.0.0.1 netmask 0xff000000

上图显示的信息包括各个网络界面,如以太网界面xl0,并行口界面lp0,用于ppp拨号的tun0和ppp0界面,用于slip拨号的sl0界面等各个网络界面的设置数据。

这些信息中,对于flags标志,我们还没有提及。flags用于标识该网络界面的一些特征,这是一个二进制数据,但ifconfig已经在括号中解释了对应的具体含义。例如UP表示up状态,BROADCAST表示该网络界面属于广播类型,与此相对的是POINTTOPOINT,对应点对点类型的界面。RUNNING标志当前是否有对该网络界面的请求,与UP标志不同,有对该网络界面的请求并不意味着该网络界面已经正常提供网络服务了,例如,当ppp程序占用了tun0,准备连接网络的时候,虽然还没有开始连接,但tun0已经被请求,就会被标记上RUNNING标记。

需要注意的是SIMPLEX标记,虽然这里使用了SIMPLEX,但并不意味着这个网络连接是单工方式,这只是表明了网络界面的一些物理特征,网络界面并不能同时处理接收和发送。真正网络连接方式的双工或半双工的是由ifconfig的media选项决定的。MULTICAST表示该网络界面支持组播。LINK2标识该物理界面使用link2的网络物理连接方式,有些情况下,可以用来表示系统的某种处理方式,例如ppp0用LINK2来表示使用压缩来传输数据。

而mtu表示该网络界面传输的一个数据包的大小限制,原则上可传输的数据包越大,网络性能就越好,但是在传输过程中发生硬件错误的可能性也越大。因此,每种物理连接方式都规定了大小限制,以避免出现数据错误,当然随着当前硬件技术的发展,可以允许传输更大的数据包了。虽然mtu与物理连接标准有关,但与IP数据包有一定关系,因为有些IP数据包不允许被分割,如果超长,又不允许分割,就会被系统丢弃。

正是因为可传输的数据包越大,网络性能就越好,那么TCP/IP就尽量以最大的包来传输数据,否则,TCP/IP虽然允许数据包被分割,但分割之后必然得不到最合适的包大小,因此效率也不是最高。然而,网络是复杂的,因此就需要获得所经过的每一个网络的最大限制,这个过程称为路径mtu(path mtu)发现。

对于点对点的PPP界面,ppp0或tun0,通常要求指定另一端的IP地址,如果没有另一端的IP地址,就不能正常设置网络,事实上PPP软件会自动完成这些设置,而不需手工执行ifconfig。

# ifconfig  tun0 inet 10.10.1.42 10.10.1.29 

当然,即使这样设置tun0,网络也不会正常工作,因为tun0与具体的物理设备(如串口)的连接还没有完成。

[关闭][返回]