FreeBSD Networking Basics

FreeBSD Networking Basics
by Dru Lavigne
05/13/2004

翻译:完美废人
二○○四年十一月十日

Beginners to Unix-like operating systems such as FreeBSD are often stymied by their network settings.
Sure, the install process may have set up your NIC for you, but where do you go to view these settings,
and how do you proceed if your NIC stops working? Since networking is such an integral part of computing,
this article will demonstrate how to verify, configure, and optimize your network settings.
新接触类 Unix 操作系统(如 FreeBSD)的人经常被网络设置摧残。当然,安装系统的时候也许会自动设置好你的网卡,但是你怎么查看这些设置?
如果网卡不工作了怎么办?联网是计算的重要工作之一,而这篇文章就像您展示了如何查看、配置以及优化你的网络设置。

Verifying Your Interface Configuration
查看网卡设置
If you've come from a Microsoft background, you've probably used either winipcfg or ipconfig /all to verify
your network settings at the command line. Unix comes with a similar utility, named ifconfig (for "interface
config"). By entering this command, you'll see all of the system's interfaces and their settings. Some versions
require you to include the -a, or all, switch.
如果您是从微软系统转向 FreeBSD,那么您也许熟悉用以检查网卡配置的 winipcfg 或者 ipconfig /all 等程序。Unix 系统提供了一个相似的
工具,叫 ifconfig (意思是“接口配置” interface config )。输入这条命令,你就可以看见系统中所有的网卡的以及设置情况。有些版本需要
您在命令后加上 -a、all 等开关。

% ifconfig
rl0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
    options=8<VLAN_MTU>
    ether 00:05:5d:d2:19:b7
    media: Ethernet autoselect (10baseT/UTP)
    status: no carrier
rl1: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
    options=8<VLAN_MTU>
    ether 00:05:5d:d1:ff:9d
    media: Ethernet autoselect (10baseT/UTP)
    status: no carrier
ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    inet 192.168.2.12 netmask 0xffffff00 broadcast 192.168.2.255
    ether 00:50:ba:de:36:33
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    inet 127.0.0.1 netmask 0xff000000
Your output will vary from this, but will contain similarities. This particular system isn't running the default
kernel. I've removed the default IPv6, gif, and faith devices from this kernel, so they don't show in the output.
您的输出也许与我的不同,但是总包含一些相似的东西。这个系统运行的不是默认核心。我从中去除了默认的 IPv6、gif 和 faith 设备,因此它们
不会显示在输出中。

This system does have three physical interfaces (rl0, rl1, and ed0) and the loopback virtual interface (lo0).
Different versions of Unix differ in their interface naming convention. For example, Linux uses eth for Ethernet
NICs, so would show their names as eth0, eth1, and eth2. BSD uses the driver name for each NIC, allowing you to
differentiate between different chipsets and the features available for each driver. To see the documentation
for your NIC's driver, read section 4 of its driver manual. Note that you don't include the number of the
interface, so look up rl instead of rl0:
这个系统安装了三块网卡(rl0、rl1 和 ed0),另外还有一个虚拟回环界面(lo0)。不同的 Unix 版本对于网卡的命名有所不同。例如,Linux
系统用 eth 表示以太网卡,因此这些网卡的名字会显示成 eth0、eth1 和 eth2。BSD 用驱动程序来命名网卡,因此您可以区分不同网卡使用的
不同芯片和具有的各自特性。要查看您的网卡驱动相关的文档,阅读驱动程序手册的第四章。注意,手册的名字不包括网卡的序号,因此您应该查看
rl 而不是 rl0:

% man 4 rl
rl -- RealTek 8129/8139 Fast Ethernet device driver

% man 4 ed
ed -- ethernet device driver
While this system has three NICs, only ed0 is up and running. The two RealTek NICs don't have cables attached,
as indicated by the status: no carrier lines. Accordingly, only ed0 has an IP address (192.168.2.12), a subnet
mask (0xffffff00), and a broadcast address (192.168.2.255).
尽管系统中安装了三张网卡,只有 ed0 正常工作。两张 RealTek 网卡没有连接网络线缆,正如它们的状态信息所示:没有信号线。因此,只有
ed0 被分配了 IP 地址(192.168.2.12)、子网掩码(0xffffff00)和广播地址(192.168.2.255)。

That subnet mask is written in hex, as indicated by the beginning 0x. This particular mask isn't too hard to
translate into decimal, if you remember that each pair of f characters (ff) is equivalent to 255. Thus, the
subnet mask here is 255.255.255.0. If you find a pair of hex numbers that aren't ff (255) or 00 (0), use bc or
the built-in calculator to translate that hex pair into decimal for you. For example, if your mask is 0xffffe000:
正如开头的 0x 显示,子网掩码是用 16 进制格式输出的。这里这个掩码不难转换成十进制,只要您记得每一组 ff 都等于十进制的 255。因此,
这张网卡的子网掩码就是 255.255.255.0。如果您发现有一组子网掩码的十六进制数不是 ff (255)或者 00 (0),您可以使用 bc 或者
内置计算器将每一组十六禁止码转换成十进制。例如,如果您得到的掩码是 0xffffe000:

% bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
base=16
E0
224
<Ctrl d>
Here, I asked bc to translate a base 16, or hex, number as input (ibase=16). Remember to convert any letters to
uppercase, or you won't get the correct answer. Since e0 is decimal 224, this example mask is 255.255.224.0.
这里,我让 bc 将一个基数为 16 的数(或称 16 进制数)作为输入(ibase=16)。记得将所有字母转换成大写,否则您不会得到正确的结果。
因为 e0 是十进制 224,这个例子里的子网掩码就是 255.255.224.0。

Verifying Your Default Gateway
检查您的默认网关
Note that ifconfig gives the applicable status, MTU, IP address, subnet mask, broadcast address, and Ethernet
(or MAC) address of each interface. However, it doesn't give the address of the default gateway or the DNS servers.
您应该注意到,ifconfig 输出了每一块网卡的使用状态、MTU、IP 地址、子网掩码、广播地址和以太网卡(或者 MAC)地址。但是,它没有输出
默认网关地址,也没有指明 DNS 服务器地址。

To see your default gateway address, use the netstat, or network status, command. Include the -r (routing) switch.
Including the -n switch speeds up the results by skipping name resolution:
要查看默认网关地址,使用 netstat (网络状态,network status)命令。包含 -r (表示路由)开关。用 -n 开关避免机器名解析以加速查询。

% netstat -rn
Routing tables

Internet:
Destination      Gateway          Flags    Refs    Use   Netif  Expire
default          192.168.2.100      UGS     0    72664    ed0
127.0.0.1        127.0.0.1          UH      1       46    lo0
192.168.2        link#3             UC      0        0    ed0
192.168.2.12     127.0.0.1          UGHS    0        0    lo0
192.168.2.100    00:48:54:1e:2c:76  UHLW    1        0    ed0   1172
Note: Linux users can also use the route command to receive similar results. The BSD route command works
differently; see man route for details. However, netstat -rn works on all operating systems, including Linux and
Microsoft operating systems.
注意:Linux 用户也可以使用 route 命令得到相似的结果。BSD route 命令具有不同的使用方法;请查看 route 的手册获得细节。不过,
netstat -rn 在所有系统中都能工作,包括 Linux 和 Microsoft Windows 系统。

In your output, look for the line that begins with the word default. The associated IP address is that of your
default gateway. Also look at the flags for that entry. Hopefully they indicate U for up and G for gateway. This
indicates that you can communicate with your gateway. If the number in the Use field isn't 0, you've actually sent
your gateway that number of packets.
在您得到的输出中,查看以 default 开头的那行。相关的 IP 地址就是您的默认网关。同时查看这行中的 Flags 值。一般来说 U 指正在工作
(Up)而 G 是指网关(Gateway)。这表明您可以和您的网关沟通。如果 Use 段中的值不是 0,这里表明的就是您已经向网关发送的包的数目。

Finally, the last line of this output shows the MAC address of the default gateway.
最后,刚才输出的最后一行显示了默认网关的 MAC 地址。

Verifying Your DNS Settings
检查 DNS 设置
The resolver configuration file should contain your DNS settings. You can view that file with:
resolver 配置文件应该包含了您的 DNS 设置。您可以这样查看这个文件:

% more resolv.conf
nameserver 209.226.175.236
nameserver 204.101.251.1
nameserver 204.101.251.2
This particular system contains the IP addresses of three DNS servers. It's a good idea to have the addresses
of at least two servers, in case your primary DNS server becomes unavailable.
这个系统包含了三个 DNS 服务器的地址。保险起见这里至少应该包含两个地址,以防主 DNS 服务器失效的时候。

While you have Internet access, you should know how to query your ISP's DNS servers and to record the results in
a book containing your network settings. This will be invaluable if you ever need to recreate these settings
manually. If you don't keep such a notebook, you can gather those settings from a system that does have working
Internet access.
如果您连接到 Internet,您需要知道如何获取您的 ISP 的 DNS 服务器,并把这些信息和您的其它网络配置信息一起记录在笔记本里。一旦您
需要重新手工设置这些信息,这个记录将是无价的。如果您没有记录下这些信息,您可以从一台可以正常连接 Internet 的系统中获取它们。

To find out the IP addresses of your DNS servers, use dig, the domain information groper. Here, I'll ask for the
ns, or name server, entries for my ISP:
要查看您的 DNS 服务器地址,请使用 dig 命令(域名信息探索器,domain information groper)。这里,我会查询我的 ISP 的名称服务器
(ns,name server):

% dig ns sympatico.ca

; <<>> DiG 8.3 <<>> ns sympatico.ca
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44589
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 4
;; QUERY SECTION:
;;    sympatico.ca, type = NS, class = IN

;; ANSWER SECTION:
sympatico.ca.         6h12m33s IN NS  ns5.bellnexxia.net.
sympatico.ca.         6h12m33s IN NS  ns6.bellnexxia.net.
sympatico.ca.         6h12m33s IN NS  dns1.sympatico.ca.
sympatico.ca.         6h12m33s IN NS  dns2.sympatico.ca.

;; ADDITIONAL SECTION:
ns5.bellnexxia.net.   9m36s IN A      209.226.175.236
ns6.bellnexxia.net.   9m37s IN A      209.226.175.237
dns1.sympatico.ca.    14m7s IN A      204.101.251.1
dns2.sympatico.ca.    3m56s IN A      204.101.251.2

;; Total query time: 46 msec
;; FROM: dru.domain.org to SERVER: 209.226.175.236
;; WHEN: Sun Apr 11 14:30:14 2004
;; MSG SIZE  sent: 30  rcvd: 182

Your output will be divided into several SECTIONs. For now, concentrate on the ANSWER SECTION, which contains
the answer to your dig query. My ISP uses four DNS name servers, as seen in my answer. Each name server uses an
IN (IPv4) record and a NS (name server) record. However, the answer shows the names of the name servers. You don't
want to use names for name resolution; you want the IP addresses of your name servers.
您得到的输出应该分为几个章节。这里,请注意 ANSER SECTION,因为它包含了您的 dig 查询的答案。正如我得到的答复,我的 ISP 使用四台 DNS
服务器。每台服务器都使用一个 IN(IPv4)记号和一个 NS(name server)记号。同时这里输出了名称服务器的主机名。您不会使用主机名来解析
主机名,您需要的是名称服务器的 IP 地址。

You'll find those names mapped to IP addresses in the ADDITIONAL SECTION.
您可以在 ADDITIONAL SECTION 里面得到这些主机名对应的 IP 地址。

dig is also handy if you ever forget the name or IP address of your ISP's SMTP or mail server. This time, query
for the mx, or mail exchange record. Here, I've shown only the ANSWER SECTION for brevity:
dig 在您忘记 ISP 的 SMTP 或者收信服务器地址的时候也显得很有用。这次,查询 ex(信件交换)记录。这里出于篇幅考虑,我仅展示
ANSWER SECTION:

% dig mx sympatico.ca
(snip)
;; ANSWER SECTION:
sympatico.ca.         20m34s IN MX    5 mta2.sympatico.ca.
sympatico.ca.         20m34s IN MX    5 mta3.sympatico.ca.
sympatico.ca.         20m34s IN MX    5 mta1.sympatico.ca.
(snip)
My ISP has three SMTP servers. See that number between the MX and the name of the mail server? That's the priority
number. My ISP's mail servers all have the same priority; however, some ISPs use different priorities. If yours
does, choose the mail server with the lowest priority number, as it has the highest priority.
我的 ISP 有三台 SMTP 服务器。看见 MX 和主机名之间的数字了吗?那是优先级。我的 ISP 的所有 SMTP 服务器都有相同的优先级;不过,有些
ISP 使用不同的优先级。如果您的是这样,您应该使用数字最小的那个——它具有最高的优先级。

Verifying Your DHCP Lease
检查您的 DHCP 租期
If your IP settings are assigned by a DHCP server, you can see all of your settings at once by viewing your current
lease.
如果您从 DHCP 服务器获取 IP 地址,您可以通过查看当前租期还获取所有信息。

The lease itself is contained within curly brackets. If you have several leases, the one at the top of the file is
your most recent lease.
租期(lease)自己包含在一组圆括号中。如果您有多于一个租期,那么最顶上的一个是您最近一个租期。

% more /var/db/dhclient.leases
lease {
  interface "ed0";
  fixed-address 192.168.2.12;
  option subnet-mask 255.255.255.0;
  option time-offset -18000;
  option dhcp-lease-time 345600;
  option routers 192.168.2.100;
  option dhcp-message-type 5;
  option dhcp-server-identifier 192.168.2.100;
  option domain-name-servers 209.226.175.236,204.101.251.1,204.101.251.2;
  renew 2 2004/4/13 02:13:03;
  rebind 3 2004/4/14 23:34:37;
  expire 4 2004/4/15 11:34:37;
}
Adding an Interface
添加一个接口
It's one thing to know how to verify your interface configuration, but what if you need to configure an interface?
Let's say you've just added another NIC to your system. Once your computer reboots, you'll want to verify that the
new NIC was recognized. You can use ifconfig and look for an additional interface. You could also search the boot
probe messages for found Ethernet addresses. Remember to include a capital E in your search:
知道如何查看您的接口配置是一件事,但是如何配置一个接口呢?假设您给系统新添加了一张网卡。当您的系统重新启动,您需要检查新网卡是否被系统
识别了。您可以使用 ifconfig 查看新增的接口。您也应该查看启动信息以得到以太网地址。记得在您的查询中使用大写的 E:

% grep Ethernet /var/run/dmesg.boot
rl0: Ethernet address: 00:05:5d:d2:19:b7
rl1: Ethernet address: 00:05:5d:d1:ff:9d
ed0: <NE2000 PCI Ethernet (RealTek 8029)> port 0x9800-0x981f irq 10 at
device 11.0 on pci0
If your new NIC is listed, it's ready to be configured -- but what if the new NIC wasn't found at bootup? The first
question to ask yourself is, "Have I created a custom kernel?" If so, check your kernel configuration file; you may
have removed the driver required by the new NIC.
如果您看到了新网卡,那么它就准备好接受配置了——但是如果没有发现呢?您首先应该反问,您是否在使用一个自己配置过的内核?如果是,检查内核配置
文件;您可能删除了这个网卡需要的驱动程序。

If that's not the issue, you may have to reboot and examine your CMOS settings. Have you disabled any IRQs? Do you
have enabled onboard devices that you don't use? If so, they may be wasting an IRQ, and there aren't any left over
for your new NIC. If you do decide to change a CMOS setting, record the original value on a piece of paper. Change
one setting, boot up and see if it made a difference. Repeat as necessary.
如果这不是问题的关键,您可能需要重启并检查 CMOS 设置。您是否禁用了某些 IRQ?您是否启用了一些不用的板载设备,而它们耗尽了所有 IRQ?
如果您确定要修改 CMOS 设置,您应该把旧的信息记录在一张纸上。修改一个设置,重启并检查它是否起作用。如果需要,重复这个过程。

If the NIC is PCI, check your CMOS PnP OS setting. Sometimes changing it from yes to no will resolve the issue.
Also, sometimes seating the NIC in another PCI slot solves the problem. Finally, as a last resort, you can
determine if it is an IRQ problem by removing all cards except the new NIC and your video card. If the NIC is
recognized, you have more cards than you have IRQs.
如果网卡是 PCI 插口,检查 CMOS 中的 PnP OS 设置。有时将这个设置改成“否”会解决问题。另外,有时改变 NIC 所在的 PCI 插口可能解决
问题。作为最后一个手段,您可以拔除所有除了网卡和显卡之外的设备,以检查是否存在 IRQ 冲突。如果这样可以让系统检测到网卡,您系统中安装
的设备多余系统支持的 IRQ 量。

Configuring IP Address Information
配置 IP 地址信息
Once your NIC is recognized, decide whether to set the IP address information manually or to use a DHCP server.
Either method requires a change to /etc/rc.conf. If you prefer, you can use /stand/sysinstall, which will edit
this file for you. This is the same utility you used when you installed your FreeBSD system. Once the utility
starts, choose Configure, then Networking, and then use your space bar to select Interfaces.
一旦系统检测到网卡,您需要选择手工设置 IP 信息或者使用 DHCP 服务器。两种方法都需要您修改 /etc/rc.conf。如果您喜欢,您可以使用
/stand/sysinstall。它会帮助您修改这个文件。它就是您安装 FreeBSD 系统时使用的工具。启动这个程序,选择 Configure,然后 Networking,
然后用空格键选择 Interfaces。

Otherwise, edit /etc/rc.conf directly using your favorite text editor. For example, these lines statically assign
an IP address and subnet mask to rl0, and set the default gateway:
或者,用您最喜欢的编辑器直接修改 /etc/rc.conf。就像下面几行,静态指定了 rl0 使用的 IP 地址、子网掩码和默认的网关。

ifconfig_rl0="inet 192.168.2.25 netmask 255.255.255.0" /
  defaultrouter="192.168.2.100"
Also, if you're using static IP addressing, don't forget to add the IP addresses of your DNS servers to
/etc/resolv.conf.
同时,如果您使用静态 IP 地址,别忘了将您的 DNS 服务器地址加入 /etc/resolv.conf。

If you instead use a DHCP server to receive your IP address information, you only need to add one line to
/etc/rc.conf:
如果您通过 DHCP 服务器获取 IP 地址信息,您只需要在 /etc/rc.conf 里面添一行:

ifconfig_rl0="DHCP"
You don't need to add your default router or DNS server addresses, as the lease assigned by your DNS server should
include this information.
您无需设置默认路由器或者 DNS 服务器地址,因为 DHCP 服务器分派的信息应该会包含这些内容。

When you've saved your changes to /etc/rc.conf, initialize your network settings:
等您保存了 /etc/rc.conf,初始化您的网络配置:

# /etc/netstart
Note: If you ever need to renew your DHCP lease, use this command, but substitute rl0 for the name of your NIC:
注意:如果您什么时候需要更新您的 DHCP 租期,用下面这条命令,并且用您的网卡名替换 rl0:

# dhclient -r rl0
Optimizing Your Configuration
优化您的配置
Unless you have an extremely old NIC, or you specifically purchased a 100Mbps NIC, your NIC is 10/100Mbps. This
means it is capable of negotiating a speed of 10 or 100 Mbps. It most likely also negotiates either half-duplex
(cannot send and receive simultaneously) or full-duplex (can send and receive simultaneously) operation. This
negotiation process occurs between the NIC and the hub or switch at the other end of your networking cable.
除非您有一块老得出奇的网卡,或者您特意购买了一块 100Mbps 的网卡,您的网卡都是 10/100Mbps 的。这说明它可以选择 10Mbps 或者 100Mbps
的速度。通常,它还会自动选择半双工(不能同时发送和接收数据)或者全双工(可以同时发送接收)操作方式。它会与您网线另一端的集线器、交换机
协商这些信息。

Obviously, 100Mbps at full-duplex is much better than 10Mbps at half-duplex. The limiting factor will be the hub
or switch; its documentation will indicate its speed and mode of operation. If it doesn't support 100Mbps or
full-duplex, you're not getting the most out of your NIC and your networking experience will be much slower.
显而易见的,100Mbps 的全双工模式会比 10Mbps 的半双工模式好得多。集线器、交换机决定了这个模式;它的文档会指明它的工作速度和模式。
如果它不支持 100Mbps 或者全双工,您无法体验到您的网卡的全部能耐,网速会下降很多。

However, you should also be aware that even if the hub or switch supports 100Mbps and full-duplex mode, the NIC
and the hub or switch still renegotiate these values on an ongoing basis. If your NIC is always plugged into the
same hub or switch, it makes sense to set these values to save the overhead of negotiation.
而且,您也应该明白即使集线器、交换机支持 100Mbps 和全双工模式,网卡和集线器、交换机仍然可能在现有基础上重新协商获取这些信息。如果
您的网卡始终连接在相同的集线器、交换机上,这样可以帮助它们协商获得更高的配置。

Whether you can do this depends upon the driver for your NIC, so carefully read the man 4 for your driver. In my
example network, I would be better off unplugging my ed0 and instead using one of the RealTek interfaces. Why? man
4 ed indicates that this particular driver only supports 10Mbps at half-duplex mode (IEEE 802.3 CSMA). However,
man 4 rl indicates that this driver can be configured to use 100Mbps and full-duplex operation.
您是否可以这样做,完全取决于您的网卡驱动。因此请仔细阅读手册第四章中与您网卡驱动相关的页面。在我的示例网络中,我其实应该拔掉我的 ed0
而改用一个 RealTek 接口。为什么?man 4 ed 显示这个驱动程序仅支持 10Mbps 和半双工模式(IEEE 802.3 CSMA)。但是,man 4 rl 显示
这个驱动可以配置以支持 100Mbps 和全双工操作。

Here is an example of the lines I would use in /etc/rc.conf:
这里是我在 /etc/rc.conf 中相关的几行:

ifconfig_rl0="DHCP"
ifconfig_rl0="100baseTX mediaopt full-duplex"
There are several things to make note of here. One, the manpage will indicate which options are available and how
to set them. Two, don't try to add a setting that your NIC driver doesn't support, as indicated by its manpage.
Third, don't change your speed and duplex mode to a value that your hub or switch doesn't support!
这里有几点需要指明。一,手册会告诉你可以使用哪些选项以及如何设置它们;二、不要尝试使用您的网卡手册页中标明不支持的设置;三、不要设置
成您的集线器、交换机不支持的模式!

To see if my changes worked, I'll plug my network cable into rl0 and issue the command /etc/netstart. I'll then
check out the results:
我将网线插入 rl0 并且运行 /etc/netstart 检查我修改的设置是否工作。然后我这样检查结果:

% ifconfig rl0
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=8<VLAN_MTU>
    inet 192.168.2.87 netmask 0xffffff00 broadcast 192.168.2.255
    ether 00:05:5d:d2:19:b7
    media: Ethernet autoselect (100baseTX <full-duplex>)
    status: active
Success!
成功!
This article has covered most of the configuration scenarios for Ethernet NICs. You should also refer to the
"Setting Up Network Interface Cards" section of the handbook.
这篇文章涵盖了配置以太网卡设置的大部分内容。您同时应该参考 FreeBSD 手册中的“设置网络接口卡”一章。

In the next few articles, I'd like to concentrate on printing.
之后的几篇文章中,我会集中精力于打印相关的内容。

Dru Lavigne is an instructor at Marketbridge Technologies in Ottawa and the maintainer of the Open Protocol Resource.
Dru Lavigne 是渥太华的 Marketbridge Technologies 学校的教师,并且是 Open Protocol Resource 的维护者之一。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值