2007-12-02

windows和linux混合系统的多重启动


windows和linux混合系统的多重启动从来都是一个启动加载器加载另一个系统的引导记录或启动加载器.
因此Vista,Linux的双重启动也是如此:

方法1:用Vista的bootMbr加载grub
方法2:把Grub装到mbr,用grub "chainloader (hd0,1)+1"

方法2和XP没什么好说的,现在说方法1.

Vista的bootMbr可以看成一个小的操作系统,加载几种不同的程序

先来看:bcdedit /?create 中的一段话:

/application <apptype> 指定新项必须是应用程序项。
<apptype> 指定应用程序类型。
<apptype> 可以是下列类型之一:
BOOTSECTOR
OSLOADER
RESUME
STARTUP

如果使用其他应用程序类型而不是这些类型, 则还必须指定已知的标识符。

再来看,我系统的实际的BCD记录:

Windows 启动管理器
--------------------
标识符 {bootmgr}
device partition=D:
description Windows Boot Manager
locale zh-CN
inherit {globalsettings}
default {current}
displayorder {ntldr}
{current}
{cdb7d744-a02e-11dc-a438-00115b1add5f}
toolsdisplayorder {memdiag}
timeout 30
Windows 启动加载器
-------------------
标识符 {current}
device partition=C:
path Windowssystem32winload.exe
description Microsoft Windows Vista
locale zh-CN
inherit {bootloadersettings}
osdevice partition=C:
systemroot Windows
resumeobject {91d7a191-a009-11dc-8f33-c08105f3e2d8}
nx OptIn
Windows 启动加载器
-------------------
标识符 {cdb7d741-a02e-11dc-a438-00115b1add5f}
device partition=D:
path ghldr
description GHLDR-O
从休眠状态恢复
---------------------
标识符 {91d7a191-a009-11dc-8f33-c08105f3e2d8}
device partition=C:
path Windowssystem32winresume.exe
description Windows Resume Application
locale zh-CN
inherit {resumeloadersettings}
filepath hiberfil.sys
pae No
debugoptionenabled No
Windows 内存测试程序
---------------------
标识符 {memdiag}
device partition=D:
path bootmemtest.exe
description Windows 内存诊断
locale zh-CN
inherit {globalsettings}
badmemoryaccess Yes
Windows 旧 OS 加载器
------------------------
标识符 {ntldr}
device partition=D:
path ntldr
description 早期版本的 Windows
实模式启动扇区
---------------------
标识符 {cdb7d744-a02e-11dc-a438-00115b1add5f}
device partition=D:
path NSTNeoGrub.mbr
description NeoGrub Bootloader
EMS 设置
------------
标识符 {emssettings}
bootems Yes
调试器设置
-----------------
标识符 {dbgsettings}
debugtype Serial
debugport 1
baudrate 115200
RAM 故障
-----------
标识符 {badmemory}
全局设置
---------------
标识符 {globalsettings}
inherit {dbgsettings}
{emssettings}
{badmemory}
启动加载器设置
--------------------
标识符 {bootloadersettings}
inherit {globalsettings}
恢复加载器设置
----------------------
标识符 {resumeloadersettings}
inherit {globalsettings}

可见vista的boorMbr(Windows 启动管理器)
可以加载:
OSLOADER(Windows 启动加载器)
BOOTSECTOR(实模式启动扇区)

也就是说,我们可以把Grub修改成上面两种程序中的一种,来让"Windows 启动管理器"来加载.

第一种的配置例如上面的:
Windows 启动加载器
-------------------
标识符 {cdb7d741-a02e-11dc-a438-00115b1add5f}
device partition=D:
path ghldr
description GHLDR-O
但这样的文件,ghldr,实现起来是比较麻烦的,因为缺少资料.

第二种:
实模式启动扇区
---------------------
标识符 {cdb7d744-a02e-11dc-a438-00115b1add5f}
device partition=D:
path NSTNeoGrub.mbr
description NeoGrub Bootloader
则已经有了产品:NeoGrub.mbr

这是我D:NST的文件:
d:NST>dir
驱动器 D 中的卷是 XPHOME 卷的序列号是 A05A-B1BB
d:NST 的目录
2007/12/02 02:16 <dir> .
2007/12/02 02:16 <dir> ..
2007/12/02 02:16 397 menu.lst
2007/06/15 05:19 8,192 NeoGrub.mbr
2 个文件 8,589 字节
2 个目录 393,293,824 可用字节
d:NST>type menu.lst
# NeoSmart NeoGrub Bootloader Configuration File#
# This is the NeoGrub configuration file, and should be located at D:NSTmenu.lst
# Please see the EasyBCD Documentation for information on how to create/modify entries:
# <a href="http://neosmart.net/wiki/display/EBCDhttp://neosmart.net/wiki/display/EBCD">http://neosmart.net/wiki/display/EBCD</a>
find --set-root --ignore-floppies /boot/grub/menu.lst
configfile /boot/grub/menu.lst
# All your boot are belong to NeoSmart!
d:NST>

这样,Grub就会按分区顺序寻找/boot/grub/menu.lst

也许你会问,到哪里去找这个NeoGrub呢?
上面的文件已经透露了:
请google "EasyBCD"

2007-06-22

Linux系统的构成和相互间的依赖(从LFS看Linux)

原题 : 换个角度看LFS——反向分析LFS


更新日志
2006-08-12:修改有歧义的句子一处。
2006-06-21:增加对结尾插图的说明。
2006-06-21:修改最后一副插图。
2006-06-21:修改笔误一处。

前言
  写了几篇关于LFS的制作过程中的文章,但分析性的文章还没怎么写过,论坛上也有一些分析性的文章,但大多数都是真对某个特定部分的,最近酝酿了一下,准备写点分析性质的文章调剂调剂。
  这次用的标题大概已经能说明本文分析的角度,按照LFS的顺序写,似乎总不能摆脱LFS的制作过程的牵制,总觉得像写制作教程,所以决定反过来写,利用一个大家熟悉的情景为开始反过来推出整个LFS的过程,本文不能算专业的分析文章,只是想简单的说明白LFS为什么要这样的过程。
  本文并不是要完全还原LFS,只是为了说明一种分析过程,因此文中部分内容和实际的LFS略有出入。
  限于水平的问题,我只能将我现在的理解来写,如果有什么错误或者不当的地方希望大家及时指出。
  本文的读者应该是一个已经经历过LFS至少一次的朋友,如果你从来没搞过LFS,建议亲自动手制作一遍后再看本文,应至少看过下面文章中的一篇:
  《Linux from scratch》英文版本
  《LFS-Book 6.1.1 中文正式版》
  《手把手教你如何建立自己的Linux系统(LFS速成手册)》

  更新,由于篇幅比较长所以难免出现一些错误或者笔误,也有可能加入新内容,因此难免会进行修正或增删一些内容,如果本文被转载您可以在本人的Blog或者www.linuxsir.org的LFS版中中查看最新版本。
  我的Blog:http://youbest.cublog.cn
  linuxsir:http://www.linuxsir.org/bbs/showthread.php?t=262010
  如须转载请注明作者为冲天飞豹(youbest),并请保持文章的完整和提供转载出处。

工作情景:
  我正在用VIM编辑一篇文件


分析:
  问:那么要完成这个任务我需要些什么呢?
  答:硬件(略),本文将不对硬件做任何分析。
    软件:VIM

  问:那么运行VIM又需要什么条件呢?
  答:一个Linux内核
    一组支持VIM运行的动态库,按照比较标准的组合,应该是glibc和ncurses这两个库来承担VIM的运行时动态库

  问:那么内核需要什么条件呢?
  答:符合内核运行的硬件环境。

  问:glibc又需要什么条件呢?
  答:于glibc相适应的Linux内核

  问:ncurses需要什么条件呢?
  答:合适的glibc

最后我们来画一副图来描述这个关系



  那么这个关系图基本上就可以描述一个VIM运行的环境需求,当然在启动VIM的过程中少不了一个shell的参与,通常我们用BASH来完成,那么这个任务的整个大致环境和关系大致如下图所示。


  清楚了这个问题,下面需要解决的就是这个运行环境从哪里来的呢?
  通常Linux下的软件都提供了源代码,我们可以用这些源代码来组合成我们自己需要的二进制程序。
  在这个例子中,我们想要有一个VIM,那么我们要先下载一份VIM的完整源代码,然后利用一组编译工具来完成VIM的编译。
  对于一个通常编译的过程大致如下图





  这其中最复杂的就是make阶段,make会调用目录中的Makefile来执行一系列的工作,其中包括创建必要的文件,以及调用gcc和binutils来编译源代码和链接目标文件,最终生成需要的可执行文件和附属文件。
  所以make过程中一般需要用到的是gcc,binutils,make和一些系统程序(不同的软件需求不同)。


这样我们再来画最开始的运行环境的图


  好了,这样我们就清楚了这个整个运行时候的环境是从哪里来的了。用红色虚线框起来的就是整个构造运行时环境的必要条件了,其实就是我们通常在LFS中最常见到的一个词汇:工具链。
  那么下面的一个问题就是这些工具运行的条件是什么?
  这些编译环境中的应用程序也和其它程序一样必须有运行的环境:
  GCC依赖于glibc
  binutils依赖于glibc
  make依赖于glibc
  头文件是在编译时候gcc所需要的,但本身都是一些文本文件,因此没有需要的运行环境。
  常用工具依赖于glibc和各种需要用到的动态库。

  这里的一个新问题就是编译环境中使用的glibc和Linux内核和“运行时环境”中的glibc与Linux内核是否是同一个。
  答案很显然,绝对不是,因为“运行时环境”中的glibc和Linux内核是依靠工具链中编译工具来完成的,所以工具链所依赖的glibc和Linux内核于目标系统的不可能是同一个(但版本什么的是可以一样的,这里说的不同是指已经编译成二进制的实体不同)。
说明:
  为了说明方便,下面将“运行时环境”称为目标系统。
  但就LFS而言目标就是要做一个通用的可自主扩展(编译)的系统,所以在完成目标系统的glibc后又编译了一整套工具链中的东西,目的是将工具链中的工具全部移植到目标系统中,以便在完成目标系统后可以抛弃工具链而又能够自主的进行编译,而这些工具依赖的环境就是目标系统的glibc了。
  内核这东西比较特殊,虽然运行任何程序都需要用的内核,但本身在制作目标系统过程中,目标系统的Linux内核却不需要先进行编译,因为使用 Linux内核并不像glibc那样是依靠动态链接库的方式被调用的,内核不是用动态库的方式被调用的,因此不需要先编译,只要提供对应的头文件即可,后面将不再探讨Linux内核的问题。
  作为LFS的另一个目标就是要建立一个“纯净”的系统,因此编译glibc的编译器和最后目标系统里的编译器应该保持一致,同时目标系统是完全依靠工具链编译出来的,而工具链应该是在目标系统建立完毕后可以很方便的剥离掉的,而且为了保持工具链的稳定工具链中的工具所依赖的glibc以及其它用到的动态库应该是不会被替换掉的。
  要解决上面这个问题,那么最好的方法就是将工具链放置在一个独立的目录中,LFS将其放在了/tools目录下,因此在用工具链建立目标系统的过程中将PATH设置为/bin:/usr/bin:/tools/bin来让bash调用命令时能首先调用目标系统中已经建立好的命令,如果没有则从工具链中调用。这样的话在目标系统还没有编译工具的情况下使用工具链来进行编译。
  好了,现在已经可以用工具链来完成目标系统的编译了,下面的问题就是这个工具链是如何来的呢?
  这个问题就要回到前面所提到的工具链运行时所依赖的环境,还是这个glibc,要编译这个glibc必须是在工具链的编译工具生成之前,而工具链的编译工具又依赖于glibc,那么这个glibc就不能是现在工具链中的编译工具编译出来的,那么是谁编译的呢?
  这个问题的答案:当然还是编译器编译的这个glibc和工具链里的编译工具,也就是说在工具链中的编译工具编译目标系统之前需要另一个编译器来编译这个在使用的工具链中的编译器和编译器所依赖的glibc。


  用蓝色的虚线框起来的部分就是生成工具链的工具链,我暂时称为“预工具链”。
  “预工具链”的存在则能完成工具链中的glibc,以及工具链中的编译工具,并且工具链中的工具将被编译成依赖于工具链中的glibc。
  那么现在要解决的问题就是这个“预工具链”是如何建立起来的。
  答案还是一样,需要一套编译工具来编译出这个“预工具链”。

  现在要提到的一个问题就是,用不同版本的gcc编译出来的程序可能不一样,而不同的gcc编译出来的目标文件要用能正确处理的binutils的版本来链接成可执行文件,因此我们现在已经能确定的gcc、binutils版本是工具链中的版本,那么用工具链编译出来的目标系统是符合我们的要求的。
  那么编译工具链中的glibc和gcc以及binutils的gcc和binutils的版本现在还没有确定,但根据LFS的“纯净”目标,也就是说 gcc和binutils也必须和工具链中的gcc和binutils相同才行。而其它的常用工具及make虽然参与,但不会对编译的二进制产生影响(前提是必须能正确处理它应该做的事情)。

  现在的问题就集中到“预工具链”中的gcc和binutils上了,只要能编译出和工具链中的gcc与binutils相同版本就可以了,也就是说只要一套编译环境能编译gcc和binutils就可以了。

  那么问题是这一套编译环境是怎么来的呢?
  如果还继续按照前面的套路,这个问题就成了无穷无尽的了,这个不是我们想做的,现在已经能“纯净”的建立一套符合条件的工具链就已经达到我们的目的了,因此编译“预工具链”的binutils和gcc的任务我们就采用一套能正确编译的发行版或者预制好的编译环境就可以了,我们可以称这个发行版或者预制好的编译环境为“主系统”。
  那么我们现在只要能用这个“主系统”编译出“预工具链”的binutils和gcc就可以了,“预工具链”中的其它部分就直接采用“主系统”里的就可以了。
  但这里有一个问题就是:“主系统”中的gcc和binutils与“预工具”中要求的gcc和binutils版本不同(通常会老些),但只要能正确编译binutils、gcc就行了,gcc具备自我编译的功能,因此建议编译不同版本的gcc采用bootstrap的方式比较好。当然“主系统”中的在参与编译过程中的其它工具也需要符合要求就成。
  最后用一副图来表达简单的表达整个过程,也算本文的结尾。
(转载请保持文章的完整性,请注明作者和出处)

                               作者:冲天飞豹(youbest)
                               Email:youbest@sina.com
                               2006年6月21日

希望大家能多写一些分析性的文章,共同提高。




说明:上图的内容实际上并不是标准的LFS编译关系,按照LFS的做法,应该在预工具链编译完成工具链中的glibc、gcc和binutils,工具链后续的部分是由工具链的gcc和binutils来完成的,但本文并不追求和LFS完全一致,只是为了说明整个过程是如何反向推出来的,而且我认为按照图里的方法也完全没问题,完全不影响目标系统的“纯净”度。
图中实际上也表现了一种可以用来编译不同平台上的工具链的方法,因为在编译整个工具链的过程中都由预工具链来完成的(此方法我自己没实验过,只是一个设计)。


更新日志:

2006年6月21日:
修改笔误一处
由linuxsir上的doom3d发现并报告

2006年6月21日:
在结尾的图片上加入gcc的bootstrap的标记。
由linuxsir上的doom3d建议

2006年6月21日:
对结尾的图片做出说明。

2006年8月12日:
修改有歧义的句子一处。

2007-06-18

关于无线全球电力广播的不知道可不可信的报道

关于无线全球电力广播的不知道可不可信的报道

他(特斯拉)的最著名的发明是“特斯拉线圈”,这是一种分布参数高频共振变压器,可以获得上百万伏的高频电压。 特斯拉线圈的线路和原理都非常简单,但要将它调整到与环境完美的共振很不容易,特斯拉就是特别擅长这项技艺的人。

  特斯拉后来发明了所谓的“放大发射机”,现在称之为大功率高频传输线共振变压器,用于无线输电试验。特斯拉的无线输电技术。值得一题的是:特斯拉把地球作为内导体,地球电离层作为外导体,通过他的放 大发射机,使用这种放大发射机特有的径向电磁波振荡模式,在地球与电离层之间建立起大约 8 赫兹的低频共振,利用环绕地球的表面电磁波来传输能量。

(这个怎么弄呀!整个地球岂不是要变成一个球形的电容器,一次充放电要多大的能量呀!)

  这一系统 与现代无线电广播的能量发射机制不同,而与交流电力网中的交流发电机与输电线的关系类似,当没有电力接收端的时候,发射机只与天地谐振腔交换无功能量,整 个系统只有很少的有功损耗,而如果是一般的无线电广播,发射的能量则全部在空间中损耗掉了。

  特斯拉有生之年没有财力实现这一主张。后人从理论上完全证实了 这种方案的可行性,证明这种方案不仅可行,而且效率极高,对生态安全,并且不会干扰无线电通信。只不过涉及到世界范围内的能量广播和免费获取,在现有的政 治和经济体制下,无人实际问津这种主张。

2007-06-02

xorg配置的一些看法

xorg配置的一些看法
以下是本人的一些看法,如有错误请指正:
--------------------------------------------------------------------------------
关于液晶显示器采用高的刷新频率而不是最佳刷新频率的问题:
如果是液晶显示器的话,很多是有一个显示效果最好的刷新频率,设高了,如果没超出显示器的范围,还是能工作的,但是显示器的显示效果反而不好。
这时候应该在你xorg.conf中有效的那一段Section "Monitor" 中添加或修改VertRefresh设置成VertRefresh (显示器底限) - (最佳频率+0.3到0.5)
因为X进行显示模式匹配的时候,同一分辨率的索引项,是安刷新频率从高到低排列的,也就是说合格的显示模式中,同一分辨率的,高刷新频率的模式会优先采用。
------------------------------------------------------------------------------------
关于X采用的刷新频率高于显示器的实际工作能力的问题:
X是跟据程序中Probe phase (硬件侦测)生成的数据和VertRefresh信息,HorizSync信息设定,进行显示模式索引的建立的。当VertRefres高限过高,或根本没提供VertRefresh信息时,能否正确进行显示模式索引的建立就依赖于Probe phase,Probe phase绝大部分情况下还是能很好工作的,但是程序毕竟不是万能的。就有可能采用的刷新频率高于显示器的实际工作能力。
另外HorizSync也是一个很有用的参数,因为显示器的刷新频率和分辨率是关联的,高分辨率时能工作的刷新频率就低。X就是根据HorizSync计算不同分辨率下的刷新频率的高限的。HorizSync不正确,即使VertRefres正确,也可能导致X在使用较高分辨率时刷新频率过高。
解决办法:(不太适用于不会在文本方式下工作的人)
1.先去掉所有的HorizSync VertSync 配置(Comment all HorizSync and VertSync values to use DDC)
2.1的方法不行的话,就需要收工指定HorizSync VertSync,在没有可靠资料的情况下:
如果是液晶显示器的话:VertRefresh高限设成 (最佳频率+0.3到0.5),一般最佳的是在60或65。 如果是CRT 17寸的话,VertRefresh 高限应该可以设到70。
如果同时装有windows的话,VertRefresh 高限设成你windows正在使用的刷新频率+0.3到0.5,同时Modes设成对应的Windows正在使用的分辨率。
3.2的办法不行的话把显卡驱动模块改成 "vga",去掉所有的HorizSync VertSync 配置,先提供一个图形界面供你上网,然后就google你的显示器型号,应该能找到一些资料吧。
-------------------------------------------------------------------------------------
还有的一些疑问,希望知道的告诉我:
现在还不清楚是xorg.conf中的配置和Probe phase是怎样配合的,有时候发现光靠Probe phase(就是xorg.conf不作配置)X能工作,这时xorg.conf添加了错误配置后反而不能工作,并不是设想的xorg.conf和Probe phase只要有一个能正确进行就能工作。这大概就是为什么有的xorg.conf的配置软件会在xorg.conf写入一行:
### Comment all HorizSync and VertSync values to use DDC:

2007-05-31

Visio,整理思路,交流思想的好工具(1)

任何历史老师或学生都知道,要理解历史事件仅仅靠记住其发生日期是远远不够的。每个历史事件的发生,都有一系列错综复杂的小事件作前导,并最终导致了该历史事件的发生。您可以使用 Visio 因果图来显示这种历史因果关系的循环。

您可以将因果图添加到您的课程安排中,或将它们留作家庭作业,以帮助学生分析特定事件背后的原因。或者,如果您是一名学生,那么可以将因果图放入您的研究论文和其他课外作业中。

什么是因果图?
因果图的发明者 Kaoru Ishikawa 是一名管理专家,其最初的目的是改进车间的质量控制工作。正如以下示例所示,因果图还能表达其他环境中的因果关系。



由于因果图的形状很像鱼的骨架,所以它又称作鱼骨图。鱼的脊骨上几根最大的鱼骨表示主要的原因类别。例如,在本例中,主要的原因类别有盎格鲁人/朱特人、丹麦人、萨克逊人和诺曼底人,这些种族群体都想控制英格兰,从而导致了该战争的爆发。

主要类别中的较小鱼骨表示主要的原因。例如,在本例中,在萨克逊人这个类别方面,黑斯廷斯战争的主要原因在于公元 1051 年萨克逊王爱德华许诺将王位传给威廉一世。

您还可以在主要原因上添加次要原因。

如何创建因果图?
当您打开因果模板后,您会发现因果图的基本骨干已经搭建好。您只需向其中添加类别和名称。

创建因果图
启动 Visio。在“选择绘图类型”窗口中,单击“业务进程”,然后单击“因果图”。
将在绘图页上打开一个因果图,其中已经具备脊骨和类别。

单击脊骨,然后键入事件(或结果)的名称。
确定所需的原因类别数量。
要添加类别,将“类别 1”或“类别 2”形状拖到绘图页上放好,使箭头接触到脊骨。
要删除类别,单击它,然后按 Delete 键。
单击每个类别形状,并键入原因类别的名称。
对于每个类别,确定所需的主要原因数量。对于每个主要原因,执行以下操作:
将“主要原因”形状拖到绘图页,并将箭头与类别线对齐。
单击每个主要原因形状,并键入原因的说明。
如果您要在某些主要原因中添加次要原因,请执行以下操作:
将“次要原因”形状拖到绘图页上,并将箭头与主要原因线对齐。
单击每个次要原因形状,并键入原因的说明。
保存并命名该因果图。

2007-05-30

访问控制技术 IP ACL

技术从来都是一把双刃剑,网络应用与互联网的普及在大幅提高企业的生产经营效率的同时,也带来了诸如数据的安全性,员工利用互联网做与工作不相干事等负面影响。如何将一个网络有效的管理起来,尽可能的降低网络所带来的负面影响就成了摆在网络管理员面前的一个重要课题。



  A公司的某位可怜的网管目前就面临了一堆这样的问题。A公司建设了一个企业网,并通过一台路由器接入到互联网。在网络核心使用一台基于IOS的多层交换机,所有的二层交换机也为可管理的基于IOS的交换机,在公司内部使用了VLAN技术,按照功能的不同分为了6个VLAN。分别是网络设备与网管(VLAN1,10.1.1.0/24)、内部服务器(VLAN2)、Internet连接(VLAN3)、财务部(VLAN4)、市场部(VLAN5)、研发部门(VLAN6),出口路由器上Fa0/0接公司内部网,通过s0/0连接到Internet。每个网段的三层设备(也就是客户机上的缺省网关)地址都从高位向下分配,所有的其它节点地址均从低位向上分配。该网络的拓朴如下图所示:

自从网络建成后麻烦就一直没断过,一会儿有人试图登录网络设备要捣乱;一会儿领导又在抱怨说互联网开通后,员工成天就知道泡网;一会儿财务的人又说研发部门的员工看了不该看的数据。这些抱怨都找这位可怜的网管,搞得他头都大了。那有什么办法能够解决这些问题呢?答案就是使用网络层的访问限制控制技术――访问控制列表(下文简称ACL)。

那么,什么是ACL呢?ACL是种什么样的技术,它能做什么,又存在一些什么样的局限性呢?

ACL的基本原理、功能与局限性

  网络中常说的ACL是Cisco IOS所提供的一种访问控制技术,初期仅在路由器上支持,近些年来已经扩展到三层交换机,部分最新的二层交换机如2950之类也开始提供ACL的支持。只不过支持的特性不是那么完善而已。在其它厂商的路由器或多层交换机上也提供类似的技术,不过名称和配置方式都可能有细微的差别。本文所有的配置实例均基于Cisco IOS的ACL进行编写。

基本原理:ACL使用包过滤技术,在路由器上读取第三层及第四层包头中的信息如源地址、目的地址、源端口、目的端口等,根据预先定义好的规则对包进行过滤,从而达到访问控制的目的。

功能:网络中的节点资源节点和用户节点两大类,其中资源节点提供服务或数据,用户节点访问资源节点所提供的服务与数据。ACL的主要功能就是一方面保护资源节点,阻止非法用户对资源节点的访问,另一方面限制特定的用户节点所能具备的访问权限。

配置ACL的基本原则:在实施ACL的过程中,应当遵循如下两个基本原则:

u 最小特权原则:只给受控对象完成任务所必须的最小的权限

u 最靠近受控对象原则:所有的网络层访问权限控制

局限性:由于ACL是使用包过滤技术来实现的,过滤的依据又仅仅只是第三层和第四层包头中的部分信息,这种技术具有一些固有的局限性,如无法识别到具体的人,无法识别到应用内部的权限级别等。因此,要达到end to end的权限控制目的,需要和系统级及应用级的访问权限控制结合使用。

ACL配置技术详解

“说那么多废话做什么,赶快开始进行配置吧。”,A公司的网管说。呵呵,并不是我想说那么多废话,因为理解这些基础的概念与简单的原理对后续的配置和排错都是相当有用的。说说看,你的第一个需求是什么。

“做为一个网管,我不期望普通用户能telnet到网络设备”――ACL基础

“补充一点,要求能够从我现在的机器(研发VLAN的10.1.6.66)上telnet到网络设备上去。”。hamm,是个不错的主意,谁都不希望有人在自己的花园中撤野。让我们分析一下,在A公司的网络中,除出口路由器外,其它所有的网络设备段的是放在Vlan1中,那个我只需要在到VLAN 1的路由器接口上配置只允许源地址为10.1.6.66的包通过,其它的包通通过滤掉。这中只管源IP地址的ACL就叫做

标准IP ACL:

我们在SWA上进行如下的配置:

access-list 1 permit host 10.1.6.66

access-list 1 deny any

int vlan 1

ip access-group 1 out

这几条命令中的相应关键字的意义如下:

access-list:配置均ACL的关键字,所有的ACL均使用这个命令进行配置。

access-list后面的1:ACL号,ACL号相同的所有ACL形成一个组。在判断一个包时,使用同一组中的条目从上到下逐一进行判断,一遇到满足的条目就终止对该包的判断。1-99为标准的IP ACL号,标准IP ACL由于只读取IP包头的源地址部分,消耗资源少。

permit/deny:操作。Permit是允许通过,deny是丢弃包。

host 10.1.6.66/any:匹配条件,等同于10.1.6.66 0.0.0.0。刚才说过,标准的ACL只限制源地址。Host 10.1.6.66(10.1.6.66 0.0.0.0)的意思是只匹配源地址为10.1.6.66的包。0.0.0.0是wildcards,某位的wildcards为0表示IP地址的对应位必须符合,为1表示IP地址的对应位不管是什么都行。简单点说,就是255.255.255.255减去子网掩码后的值,0.0.0.0的wildcards就是意味着IP地址必须符合10.1.6.66,可以简称为host 10.1.6.66。any表示匹配所有地址。

注意:IOS中的ACL均使用wildcards,并且会用wildcards对IP地址进行严格的对齐,如你输入一条access-list 1 permit 10.1.1.129 0.0.0.31,在你show access-list看时,会变成access-list 1 permit 10.1.1.128 0.0.0.31,PIXOS中的ACL均使用subnet masks,并且不会进行对齐操作。更为详细的关于IP V4地址的资料可以参见拙著《IP v4基础知识》http://www.ultratechnology.net/showarticle.php?s=&articleid=60 一文

int vlan1///ip access-group 1 out:这两句将access-list 1应用到vlan1接口的out方向。其中1是ACL号,和相应的ACL进行关联。Out是对路由器该接口上哪个方向的包进行过滤,可以有in和out两种选择。

注意:这里的in/out都是站在路由器或三层模块(以后简称R)上看的,in表示从该接口进入R的包,out表示从该接口出去的包。

好了,这就是一个最基本的ACL的配置方法。什么,你说普通用户还能telnet到RTA?那你在int vlan3上现加一个ip access-group 1 out吧。Hammmm,等等,你这样加上去普通用户就访问不了internet了。让我们把刚才的ACL去掉,重新写一个。

回忆一下,我们的目的是除了10.1.6.66能够进行telnet操作外,其它用户都不允许进行telnet操作。刚才我们说过,标准的IP ACL只能控制源IP地址,不能控制到端口。要控制到第四层的端口,就需要使用到:

扩展的IP ACL的配置

先看看配置实例吧。在SWA上进行如下配置:

int vlan 1

no ip access-group 1 out

exit

no access-list 1

access-list 101 permit tcp host 10.1.6.66 any eq telnet

access-list 101 deny tcp any any eq telnet

int vlan 1

ip access-group 101 out

int vlan 3

ip access-group 101 out

你应该注意到到这里的ACL有一些变化了,现在对变化的部分做一些说明:

access-list 101:注意这里的101,和刚才的标准ACL中的1一样,101是ACL号,表示这是一个扩展的IP ACL。扩展的IP ACL号范围是100-199,扩展的IP ACL可以控制源IP、目的IP、源端口、目的端口等,能实现相当精细的控制,扩展ACL不仅读取IP包头的源地址/目的地址,还要读取第四层包头中的源端口和目的端口,的IP在没有硬件ACL加速情况下,会消耗大量的CPU资源。

int vlan 1///no ip access-group 1 out///exit///no access-list 1:取消access-list 1,对于非命名的ACL,可以只需要这一句就可以全部取消。注意,在取消或修改一个ACL前,必须先在它所应用的接口上先把应用给no掉,否则会导致相当严重的后果。

tcp host 10.1.6.66 any eq telnet:匹配条件。完整格式为:协议 源地址 源wildcards [关系] [源端口] 目的地址 目的wildcards [关系] [目的端口]。其中协议可以是IP、TCP、UDP、EIGRP等,[]内为可选字段。仅在协议为tcp/udp等具备端口号的协议才有用。关系可以是eq(等于)、neq(不等于)、lt(大于)、range(范围)等。端口一般为数字的1-65535,对于周知端口,如23(服务名为telnet)等可以用服务名代替。源端口和目的端口不定义时表示所有端口。

把这个ACL应用上去后,用户们开始打电话来骂娘了,因为他们都访问不了Internet了,是哪里出了问题了呢?

注意:所有的ACL,缺省情况下,从安全角度考虑,最后都会隐含一句deny any(标准ACL)或deny ip any any(扩展IP ACL)。所以在不了解业务会使用到哪些端口的情况下,最好在ACL的最后加上一句permit ip any any,在这里就是access-list 101 permit ip any any。

现在用户倒是能够访问Internet了,但我们的可怜的网管却发现普通用户还是能够telnet到他的SWA上面,因为SWA上面有很多个网络接口,而且使用扩展的ACL会消耗很多的资源。有什么简单的办法能够控制用户对网络设备的Telnet访问,而又不消耗太多的资源呢?这就需要使用到:

对网络设备自身的访问如何进行控制的技术

让我们先把刚才配置的ACL都取掉(具体配置略,不然后读者会以为我在骗稿费了。),再在每台网络设备上均进行如下配置:

access-list 1 permit host 10.1.6.66

line vty 0 4(部分设备是15)

access-class 1 in

这样就行了,telnet都是访问的设备上的line vty,在line vty下面使用access-class与ACL组进行关联,in关键字表示控制进入的连接。

就这么简单?wk,你丫是不是在玩我们,为什么还要绕一大圈?臭鸡蛋和烂西红柿开始在70的脑袋上方狂飞。(5555555,偶也只是想向大家把ACL的基础知识讲的明白一些的嘛)。经过刚才的配置,我们可以理出一个简单的ACL配置步骤了:

u 分析需求,找清楚需求中要保护什么或控制什么;为方便配置,最好能以表格形式列出。在本文的后面会举例的。

u 分析符合条件的数据流的路径,寻找一个最适合进行控制的位置;

u 书写ACL,并将ACL应用到接口上;

u 测试并修改ACL。

当A公司的领导知道在网管能够控制普通用户对网络设备的访问后,我们的可怜的网管就收到了很多看起来很难的要求。领导要求网管:
“使用ACL技术对网络访问进行精细化控制”――ACL进阶配置

命名的IP ACL

由于最近服务器网段的机器老是被人用telnet、rsh等手段进行攻击,我们只对员工开放web服务器(10.1.2.20)所提供的http、FTP服务器(10.1.2.22)提供的FTP服务和数据库服务器(10.1.2.21:1521)。好吧,我们着手进行配置,可是我们的ACL刚写到一半,发现前面写的几句好像有问题,一个no命令输进去,整个ACL都没了,唉,一切都得重来,难道就没有一个变通的办法么?有,这里我就需要用到:

命名的IP acl提供的两个主要优点是:

l 解决ACL号码不足的问题。

l 可以自由的删除ACL中的一条语句,而不必删除整个ACL。

命名的ACL的主要不足之处在于无法实现在任意位置加入新的ACL条目。比如上面那个例子中,我们进行了如下的配置:

ip access-list extend server-protect

permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.20 eq www

permit tcp 10.0.0.0 0.0.255.255 host 10.1.2.21 eq 1521

permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.22 eq ftp

配置到这里,我们发现permit tcp 10.0.0.0 0.0.255.255 host 10.1.2.21 eq 1521这句配错了,我们得把它给取掉并重新配置,OK,我样可以简单的进行如下配置:

ip access-list extend server- protect

no permit tcp 10.0.0.0 0.0.255.255 host 10.1.2.21 eq 1521

permit tcp 10.1.0.0 0.0.0.255 host 10.1.2.21 eq 1521

exit

int vlan 2

ip access-group server- protect

就可以了。现在对命名的IP access-list的配置方法解释如下:

ip access-list extend server-access-limit:ip access-list相当于使用编号的access-list中的access-list段。extend表明是扩展的ACL(对应地,standard表示标准的ACL)。server-access-limit是access-list的名字,相当于基于编号的ACL中的编号字段。

permit tcp 10.1.6.0 0.0.0.255 host 10.1.2.21 eq 1521:这一段和使用编号的access-list的后半段的意义相同,都由操作和条件两段组成。

其实基于名字的IP ACL还有一个很好的优点就是可以为每个ACL取一个有意义的名字,便于日后的管理与维护。所以Ultra工作室强烈建议各位看官在实际工作中均使用命名的ACL。

进一步完善对服务器数据的保护――ACL执行顺序再探讨

在服务器网段中的数据库服务器中存放有大量的市场信息,市场部门的人员不希望研发部门访问到数据库服务器,经过协商,同意研发部门的领导的机器(IP地址为10.1.6.33)可以访问到数据库服务器。这样,我们的服务器网段的的访问权限部分如下表所示:

协议
源地址
源端口
目的地址
目的端口
操作

TCP
10.1/16
所有
10.1.2.20/32
80
允许访问

TCP
10.1/16
所有
10.1.2.22/32
21
允许访问

TCP
10.1/16
所有
10.1.2.21/32
1521
允许访问

TCP
10.1.6/24
所有
10.1.2.21/32
1521
禁止访问

TCP
10.1.6.33/32
所有
10.1.2.21/32
1521
允许访问

IP
10.1/16
N/A
所有
N/A
禁止访问


于是,网管就在server-protect后面顺序加了两条语句进去,整个ACL变成了如下形式:
ip access-list extend server-protect

permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.20 eq www

permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.21 eq 1521

permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.22 eq ftp

deny tcp 10.1.6.0 0.0.0.255 host 10.1.2.21 eq 1521

permit tcp host 10.1.6.33 host 10.1.2.21 eq 1521

做完之后发现根本没起到应有的作用,研发部门的所有机器还是可以访问到数据库服务器。这是为什么呢?

前面我们提到过,ACL的执行顺序是从上往下执行,一个包只要遇到一条匹配的ACL语句后就会停止后续语句的执行,在我们的这个ACL中,因为前面已经有了一条permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.21 eq 1521语句。内部网上所有访问10.1.2.21的1521端口的在这儿就全部通过了,跟本不会到后面两句去比较。所以导致达不到我们的目的。应该把server-protect这个ACL按如下形式进行修改才能满足我们的要求:
ip access-list extend server-protect

permit tcp host 10.1.6.33 host 10.1.2.21 eq 1521

deny tcp 10.1.6.0 0.0.0.255 host 10.1.2.21 eq 1521

permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.21 eq 1521

permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.20 eq www

permit tcp 10.1.0.0 0.0.255.255 host 10.1.2.22 eq ftp

这个例子告诉我们在写ACL时,一定要遵循最为精确匹配的ACL语句一定要写在最前面的原则,只有这样才能保证不会出现无用的ACL语句。
基于时间的ACL

在保证了服务器的数据安全性后,领导又准备对内部员工上网进行控制。要求在上班时间内(9:00-18:00)禁止内部员工浏览internet,禁止使用QQ、MSN。而且在2003年6月1号到2号的所有时间内都不允许进行上述操作。但在任何时间都可以允许以其它方式访问Internet。天哪,这可叫人怎么活呀,但领导既然这样安排,也只好按指示做了。

首先,让我们来分析一下这个需求,浏览internet现在基本上都是使用http或https进行访问,标准端口是TCP/80端口和TCP/443,MSN使用TCP/1863端口,QQ登录会使用到TCP/UDP8000这两个端口,还有可能使用到udp/4000进行通讯。而且这些软件都能支持代理服务器,目前的代理服务器主要布署在TCP 8080、TCP 3128(HTTP代理)和TCP1080(socks)这三个端口上。这个需求如下表所示:

应用
协议
源地址
源端口
目的地址
目的端口
操作

IE
TCP
10.1/16
所有
所有
80
限制访问

IE
TCP
10.1/16
所有
所有
443
限制访问

MSN
TCP
10.1/16
所有
所有
1863
限制访问

QQ
TCP
10.1/16
所有
所有
8000
限制访问

QQ
UDP
10.1/16
所有
所有
8000
限制访问

QQ
UDP
10.1/16
所有
所有
4000
限制访问

HTTP代理
TCP
10.1/16
所有
所有
8080
限制访问

HTTP代理
TCP
10.1/16
所有
所有
3128
限制访问

Socks
TCP
10.1/16
所有
所有
1080
限制访问

All other
IP
10.1/16
N/A
所有
N/A
允许访问


然后,让我们看看ACL应该在哪个位置配置比较好呢?由于是对访问Internet进行控制,涉及到的是公司内部所有的网段,这们这次把ACL就放到公司的Internet出口处。在RTA上进行如下的配置,就能够满足领导的要求了:

time-range TR1

absolute start 00:00 1 June 2003 end 00:00 3 June 2003

periodic weekdays start 9:00 18:00

exit

ip access-list extend internet_limit

deny tcp 10.1.0.0 0.0.255.255 any eq 80 time-range TR1

deny tcp 10.1.0.0 0.0.255.255 any eq 443 time-range TR1

deny tcp 10.1.0.0 0.0.255.255 any eq 1863 time-range TR1

deny tcp 10.1.0.0 0.0.255.255 any eq 8000 time-range TR1

deny udp 10.1.0.0 0.0.255.255 any eq 8000 time-range TR1

deny udp 10.1.0.0 0.0.255.255 any eq 4000 time-range TR1

deny tcp 10.1.0.0 0.0.255.255 any eq 3128 time-range TR1

deny tcp 10.1.0.0 0.0.255.255 any eq 8080 time-range TR1

deny tcp 10.1.0.0 0.0.255.255 any eq 1080 time-range TR1

permit ip any any

int s0/0

ip access-group internet_limit out

或int fa0/0

ip access-group internet_limit in

或者将ACL配置在SWA上,并

int vlan 3

ip access-group internet_limit out

呵呵,现在让我们来看看在基于时间的访问列表中都有哪些新内容吧:

time-range TR1:定义一个新的时间范围,其中的TR1是为该时间范围取的一个名字。

absolute:为绝对时间。只使用一次。可以定义为1993-2035年内的任意一个时点。具体的用法请使用?命令查看。

Periodic:为周期性重复使用的时间范围的定义。完整格式为periodic 日期关键字 开始时间 结束时间。其中日期关键字的定义如下所示:

Monday 星期一

Tuesday 星期二

Wednesday 星期三

Thursday 星期四

Friday 星期五

Saturday 星期六

Sunday 星期天

daily 每天

weekdays 周一至五

weekend 周末

access-list 101 deny ip 10.1.0.0 0.0.255.255 any time-range TR1:注意这一句最后的time-range TR1,使这条ACL语句与time-range TR1相关联,表明这条语句在time-range TR1所定义的时间范围内才起作用。

注意:给出三种配置位置是帮助大家深刻理解关于in/out的区别的。acl是对从一个接上流入(in)或流出(out)路由器的包进行过滤的。

网管发问了,“你是怎么找到这些应用的所使用的端口的?”。呵呵,在如下文件中可以找到大多数应用的端口的定义:

Win9x:%windir%services

WinNT/2000/XP:%windir%system32driversetcservices

Linux:/etc/services

对于在services文件中找不到端口的应用,可以在运行程序的前后,运行netstat –ap来找出应用所使用的端口号。
使用IP ACL实现单向访问控制

A公司准备实行薪资的不透明化管理,由于目前的薪资收入数据还放在财务部门的Vlan中,所以公司不希望市场和研发部门能访问到财务部Vlan中的数据,另一方面,财务部门做为公司的核心管理部门,又希望能访问到市场和研发部门Vlan内的数据。我们的网管在接到这个需求后就在SWA上做了如下的配置:

ip access-list extend fi-access-limit

deny ip any 10.1.4.0 0.0.0.255

permit ip any any

int vlan 5

ip access-group fi-access-limit in

int vlan 6

ip access-group fi-access-limit in

配置做完后,测试了一下,市场和研发部门确实访问不到财务部了,刚准备休息一下,财务部打电话过来说为访问不到市场与研发部门的数据了。这是怎么回事呢?

让我们回忆一下,在两台主机A与B之间要实现通讯,需要些什么条件呢?答案是既需要A能向B发包,也需要B能向A发包,任何一个方向的包被阻断,通讯都不能成功,在我们的例子中就存在这样的问题,财务部访问市场或研发部门时,包到到市场或研发部门的主机,由这些主机返回的包在到达路由器SWA时,由于普通的ACL均不具备检测会话状态的能力,就被deny ip any 10.1.4.0 0.0.0.255这条ACL给阻断了,所以访问不能成功。

要想实现真正意义上的单向访问控制应该怎么办呢?我们希望在财务部门访问市场和研发部门时,能在市场和研发部门的ACL中临时生成一个反向的ACL条目,这样就能实现单向访问了。这里就需要使用到反向ACL技术。我们可以按照如下配置实例就可以满足刚才的那个单向访问需求:

ip access-list extend fi-main

permit tcp any 10.1.0.0 0.0.255.255 reflect r-main timeout 120

permit udp any 10.1.0.0 0.0.255.255 reflect r-main timeout 200

permit icmp any 10.1.0.0 0.0.255.255 reflect r-main timeout 10

permit ip any any

int vlan 4

ip access-group fi-main in

ip access-list extend fi-access-limit

evaluate r-main

deny ip any 10.1.4.0 0.0.0.255

permit ip any any

int vlan 5

ip access-group fi-access-limit in

int vlan 6

ip access-group fi-access-limit in

现在对反向ACL新增加的内容一一解释如下:

n 新增了一个ACL(fi-main)并应用在具备访问权限的接口下(财务部所在的vlan4)的in方向,使用该acl中具备reflect关键字的acl条目来捕捉建立反向ACL条目所需要的信息。我们将该ACL称为主ACL。

n reflect r-main timeout xxx:其中的reflect关键字表明该条目可以用于捕捉建立反向的ACL条目所需要的信息。r-main是reflect组的名字,具备相同reflect组名字的所有的ACL条目为一个reflect组。timeout xxx表明由这条ACL条目所建立起来的反向ACL条目在没有流量的情况下,多长时间后会消失(缺省值为300秒),单位为秒。

n evaluate r-main:我们注意到在fi-access-limit(我们把它称为反ACL)增加了这样一句,这一句的意思是有符合r-main这个reflect组中所定义的acl条目的流量发生时,在evaluate语句所在的当前位置动态生成一条反向的permit语句。

反向ACL的局限性:

n 必须使用命名的ACL,其实这不能叫局限性,应该算注意事项吧;

n 对多通道应用程序如h323之类无法提供支持。

好了,到现在我们从IP ACL的基础知识讲起,中间讲述了标准的IP ACL、扩展的IP ACL、基于名字的ACL、基于时间的ACL、反向ACL等诸多内容,这些ACL在ios的基本IP特性集中都能提供支持,在一般的企业网或校园网中也应该完全够用了。如果各位看官还需要了解更加深入的知识,如CBAC之类能够为多通道应用程序提供良好支持的配置技术的,请参考《Cisco IOS Security Configuration Guide,Part 3: Traffic Filtering and Firewalls》。

“站住!”,70正想开溜,只听那网管一声大吼,“有什么办法能知道ACL都过滤了从哪儿来,到哪儿去的流量??”。呵呵,刚才忘记说了,你只需要在需要记录的acl条目的最后加一个log关键字,这样在有符合该ACL条目数据包时,就会产生一条日志信息发到你的设备所定义的日志服务器上去。谢谢大家的捧场,本文到此为止。

PPPoE工作原理与帧格式

PPPoE工作原理与帧格式
作者:lycb_gz 来源:http://blog.csdn.net/lycb_gz/ 发表时间:2006-10-19
以下内容摘自笔者的《网络工程师必读——接入网与交换网》一书:

4.3.2 PPPoE协议工作原理
PPPoE协议的工作流程包含发现和会话两个阶段,发现阶段是无状态的,目的是获得PPPoE终结端(在局端的ADSL设备上)的以太网MAC地址,并建立一个唯一的PPPoESESSION_ID。发现阶段结束后,就进入标准的PPP会话阶段。
当一个主机想开始一个PPPoE会话,它必须首先进行发现阶段,以识别局端的以太网MAC地址,并建立一个PPPoESESSION_ID。在发现阶段,基于网络的拓扑,主机可以发现多个接入集中器,然后允许用户选择一个。当发现阶段成功完成,主机和选择的接入集中器都有了他们在以太网上建立PPP连接的信息。直到PPP会话建立,发现阶段一直保持无状态的Client/Server(客户/服务器)模式。一旦PPP会话建立,主机和接入集中器都必须为PPP虚接口分配资源。
PPPoE协议会话的发现和会话两个阶段具体进程如下:
1. 发现(Discovery)阶段
在发现(Discovery)阶段中用户主机以广播方式寻找所连接的所有接入集线器(或交换机),并获得其以太网MAC地址。然后选择需要连接的主机,并确定所要建立的PPP会话识别标号。发现阶段有四个步骤,当此阶段完成,通信的两端都知道PPPoESESSION_ID和对端的以太网地址,他们一起唯一定义PPPoE会话。这四个步骤如下:
(1)主机广播一个发起分组(PADI),分组的目的地址为以太网的广播地址0xffffffffffff,CODE(代码)字段值为0x09,SESSION_ID(会话ID)字段值为0x0000。PADI包必须至少包含一个服务名称类型的标签(标签类型字段值为0x0101),向接入集中器提出所要求提供的服务。
(2)接入集中器收到在服务范围内的PADI包分组,发送PPPoE有效发现提供包(PADO)分组,以响应请求。其中CODE字段值为0x07 ,SESSION_ID字段值仍为0x0000。PADO分组必须包含一个接入集中器名称类型的标签(标签类型字段值为0x0102),以及一个,或多个服务名称类型标签,表明可向主机提供的服务种类。
(3)主机在可能收到的多个PADO分组中选择一个合适的PADO分组,然后向所选择的接入集中器发送PPPoE有效发现请求分组(PADR)。其中CODE字段为0x19 ,SESSION_ID字段值仍为0x0000。PADR分组必须包含一个服务名称类型标签,确定向接入集线器(或交换机)请求的服务种类。当主机在指定的时间内没有接收到PADO,它应该重新发送它的PADI分组,并且加倍等待时间,这个过程会被重复期望的次数。
(4)接入集中器收到PADR包后准备开始PPP会话,它发送一个PPPoE有效发现会话确认(PADS)分组。其中CODE字段值为0x65 ,SESSION_ID字段值为接入集中器所产生的一个惟一的PPPoE会话标识号码。PADS分组也必须包含一个接入集中器名称类型的标签确认向主机提供的服务。当主机收到PADS包确认后,双方就进入PPP会话阶段。
【注意】如果主机正在等待接收PADS分组,应该使用具有主机重新发送PADR的相似超时机制。在重试指定的次数后,主机应该重新发送PADI分组。
2. PPP会话阶段
用户主机与接入集中器根据在发现阶段所协商的PPP会话连接参数进行PPP会话。一旦PPPoE会话开始,PPP数据就可以以任何其它的PPP封装形式发送。所有的以太网帧都是单播的。PPPoE会话的SESSION_ID一定不能改变,并且必须是发现阶段分配的值。
PPPoE还有一个PADT分组,它可以在会话建立后的任何时候发送,来终止PPPoE会话,也就是会话释放。它可以由主机或者接入集中器发送。当对方接收到一个PADT分组,就不再允许使用这个会话来发送PPP业务。PADT包不需要任何标签,其CODE字段值为0xa7 ,SESSION_ID字段值为需要终止的PPP会话的会话标识号码。在发送或接收PADT后,即使正常的PPP终止分组也不必发送。PPP对端应该使用PPP协议自身来终止PPPoE会话,但是当PPP不能使用时,可以使用PADT。
以上各个阶段的会话流程可用图4-5描述。
图4-5 PPPoE会话建立流程
4.3.3 PPPoE帧格式
对应于上节介绍的两个PPPoE协议会话的两个阶段,PPPoE帧格式也包括两种类型:发现阶段的以太网帧中的类型字段值为0x8863;PPP会话阶段的以太网帧中的类型字段值为0x8864,均已得到IEEE的认可。PPPoE分组帧结构如图4-6所示。
图4-6 PPPoE帧结构
PPPoE分组中的版本(VER) 字段和类型(TYPE)字段长度均为4比特,在当前版本PPPoE建议中这两个字段值都固定为0x1。代码(CODE)字段长度为8比特,根据两阶段中各种数据包的不同功能而值不同。在PPP会话阶段CODE字段值为0x00,发现阶段中的各步骤中的各种数据分组格式参见前面介绍。版本标识号码(SESSION_ID)字段长度为16比特,在一个给定的PPP会话过程中它的值是固定不变的,其中值0xffffff为保留值。长度(LENGTH)字段为16比特长,指示PPPoE净荷长度。发现阶段PPPoE载荷可以为空或由多个标记(TAG)组成,每个标记都是TLV(类型-长度-值)的结构;PPP会话阶段PPPoE载荷为标准的点对点协议包。

数字电视名词解释

=================
数字电视名词解释
google.com检索结果
IPTV 是Internet Protocol Television的缩写,是一种系统的总称,在这一系统中,电视和视频信号使用因特网协议上的宽带连接分配给订户。这经常是与订户的因特网连接并行的,由宽带运营者使用相同的基础设施提供,但在专用带宽分配之上。
IPPV 按次点播付费 Impulse Pay-Per-View。

=================
数字电视技术标准
IT.SOHU.COM
信道传输技术标准 —卫星传输
—有线传输(浙江大学)
—地面传输(清华大学、上海交通大学)
·信源编码技术标准(AVS工作组)
—数据与命令格式(系统)
—视频编码
—音频编码
·用户与安全管理标准(信息产业部第三所)
—付费管理
—加密与解密

==================
数字电视广播和数字电视终端
IT.SOHU.COM  2004-10-20 18:17
  随着数字电视(DTV)的开播,将给人们带来前所未有的高品质电视画面和逼真的环绕立声体效果.人类的生活质量将经历一次类似从马车向汽车转变的巨大变革.
  什么是数字电视?按照中国电子行业标准,数字电视是从电视信号的采集、编辑、传播、接收整个广播链路数字化的数字电视广播系统.与传统的模拟电视(TV)相比,其优点是可基本实现高保真传输,即图像、伴音质量与演播室效果无差异.而现有的模拟电视广播,模拟信号离发射塔越远,衰减越严重.同时由于可以采用数据压缩技术,传输一套模拟节目的频道可用来同时传输4~6套数字电视节目,大大降低发射、传输费用.
  数字电视节目的制作 数字电视节目根据内容的不同,采用不同制式摄制,其中大部分电影、电视连续剧和商业广告都先摄制在分辨率很高的胶片上,而现场演出或体育比赛实况则用高清 晰度电视(HDTV)摄像机摄制.一般来说,有1080i制式,即每帧画面有1080行隔行扫描线,每行含有1920个像素,则一帧画面超过200万像 素,(像素越多越清晰),另有一种720P制式,即720行逐行扫描线,每行像素1280个,每帧画面近100万像素.另外还有720i制式(720行隔 行扫描),还有480P制式(480行逐行扫描).最终将出现设想中的具有数字电视最高分辨率水平的1080P制式(1080行逐行扫描).无论哪种制式 的数字电视节目摄制后,都必须经过数字化处理后用于播出.
  数字电视节目数据的压缩与传输 没有数字压缩技术,数字电视就不能产生.数字电视和其它数字视频系统采用MPEG-2压缩方案,用巧妙的算法对一幅画面进行分析;并经有效的方式对画面数 据进行代码冗余处理.在数据的传输过程中,将根据节目的要求,采用不同制式用不同的带宽传输数据:例如体育比赛要求信息传输量大,速率更快,须采用 (HDTV)制式占用一个带宽,而相同的带宽可以混输2~6套电影、戏剧等信息量少、速率慢的SDTV制式节目.电视台将根据节目类型、画面分辨要求,采 用不同的制式、不同速率进行数据压缩播出,以此达到数据最佳传输效果.
  数字电视最终收看效果取决于数字电视机 不论电视台采用什么制式进行节目的制作或传输,新型的数字电视机将对数字信号自动处理,并显示接收到的节目.为能自动处理数字信号,数字电视机必带有数字 电视调谐器和解码器,有些电视机在加装一个单独模块或一个机顶盒后也能达到相同作用.美国消费电子协会最近界定了数字电视机标准,分为高清晰度电视 (HDTV),增强清晰度电视(EDTV),标准清晰度电视(SDTV)三类.均采用16∶9或4∶3的屏幕宽高比,杜比数字音响.
  国内市场上的数字化彩电 最近国内市场出现了大量数字化彩电、数码彩电;都是在不改变现行的广播传输体制(模拟体制)前提下,将经过图像检波的视频信号、经过伴音鉴频的音频信号以 及其它部分进行数字处理的广播电视接收机.由于不带数字电视调谐器、解码器或不能加装模块、机顶盒(即不能升级),所以都只能是数字化彩电,不能称为数字 电视机.1998年5月,长虹集团数字电视机样机才刚刚出现,而其它彩电厂商如康佳集团等力争三年后有数字电视机上市.
  要实现数字电视广播,首先要对电视信号的采集及传输体系的制式进行变更;其次对节目摄录设备、电视台广播设备、传输设备,用户中电视接收机全面 更新换代.英、美两国1998年数字电视广播已进入部分家庭,其中美国宣布在2006年全部淘汰现有模拟电视系统,而我国中央电视台1995年才购买数字 播出设备,1999年进行了试播.要在我国全面开通数字电视广播业务需要500多亿资金投入建立数字电视台,需要更多资金进口昂贵的数字电视机(7000 美元~100000美元每台),显然是不现实的,因此我国的数字电视广播的开通还有一段漫长的路要走,而模拟电视系统将在相当长的时间内存在

2007-05-20

生活如同魔方!

今天稍微“用心”玩了一下魔方,就15min,没有完成,但想了很多。

觉得,起始生活,做事很多情况下和玩魔方很像。

比如组成魔方的3x3x3个小方块都是不一样的,他们在完成状态下(每个面的颜色都单一)他们的位置都是固定的。
但是,当我们只是关注一种颜色的时候,(比如阶段性任务:把其中一个面变成单色的)
往往会把其中几个当成一样的,当你完成阶段性任务,把一个面变成单色的时候,其实第一层里面还有很多都不是最终态的应该的位置上。我们只是被一样的颜色给迷惑了。或者说我们在完成阶段性任务的时候把一些不该忽略的细节给忽略了。
紧接着,完成下一个阶段任务,在把一个面变成单色的基础上,第一层的四个侧面,变成完成态的样子。这是发现原来的成就里面包含了太多的浪费。而且老是担心会破坏已有的成就。

因此如果把任务:把其中一个面变成单色的改成,把第一层变成完成态,那我们就可以把没个小方块编号。不在被相同的颜色给迷惑了。我们眼里是1-9号方块,如何归位的问题。而不是再把白色的都看成是一样的了。
颜色其实根本没有意义了。

生活也是这样,要完成一个大目标,需要化解成许多个小目标来,一步一步完成,但如何分解成小目标,如何完成小目标,一定要盯住大目标。

另外:
如果是用计算机来计算这个问题。

把27个方块归位,和把六个面变成同色,两种想法就意味着两种不同的建模方式,程序也将不一样。
也许程序运行的结果是一样的。但一开始,内在的,处理问题的起点的水平就不一样了。

另外:
用人脑玩的时候,魔方变化的过程中,如果不把每个方块编号,那你就算知道每个方块都不一样,你还是
会误把一些方块当成一样的。而且就是知道前一个成就其实包含很多水分,但你还是不愿意破坏他。

另外:
同一个方块上有几种颜色,当我们从颜色的方向想办法的是后,就好像有许多的牵制。但从1-27编号来看,许多牵制就消失了。看问题的角度,和层次的问题呀。
(还有很多,太晚了,休息时间过了,以后再续吧)

悲惨的狼

兔子在写论文,狼走过来,问兔子在写什么?兔子,我在写论文《论兔子怎么打败狼》,狼大

笑:哈,可能吗,你的论据呢?兔子指着背后的山洞:论据在里面呢!狼不相信,就走进山

洞。一阵惨叫后,兔子走进山洞,看到狮子在剔牙,兔子:老师,怎么样了?狮子冷笑道:这个世界,写论文要什么他论据啊,关键看...............!

2007-05-14

今天早晨醒来对梦的回忆

好像是在后悔,放弃了对zhcon在AUR上的维护。
没想到在我的潜意识里会对这件事情这么在意。
没办法,没有时间维护这个包了。及时放弃,让
别人接手是对的。
如果我有空再把自己的pkgbuid提交给新的维护者就好

开源世界,好像曾被人戏称为“共产主义”在软件开发上的试运行。

可惜现实世界还是市场模式。

开源的I&F的驱动模式还只是这个世界的一个很小的一个钉子

特别是生产力还不发达的发展中国家,驱动力更小。

2007-05-10

文章的来源与版权

这里的文章不都是我写的,应该有很多是搜集来的
很多是从我的kjobs里面拿出来的。有些copy进kjobs里
的时候没把出处写下来,因此就没写出处了。

对于我写的文章,可以链接,复制。
但请保留出处,有修改请说明,避免不必要的误会。

kjobs是KDE下的一个电子笔记本软件。

2007-05-07

Subversion手册

http://svnbook.subversion.org.cn/

三层交换机

(文章搜集)
=============================
为什么用三层交换机
=============================

交换的基本功能在于将输入输出端口连接起来从而实现业务流转发,以往的二层报文交换使用MAC地址来判别数据包的去向,也就是说二层交换是转发基于第二层地址的业务流。三层交换则是转发基于第三层地址的业务流,除了还可以进行与二层交换相似的交换、认证、报文过滤等功能外,三层交换机还可以进行路由处理,这也是三层交换机特点所在。
我们知道二层交换是基于MAC寻址,但是对于我们想要联系的设备来说,MAC地址只是物理地址而不是逻辑地址,而实际应用中我们则需要比简单的物理地址更多的地址来达到应用的要求,而基于第三层的IP地址则比MAC更能合乎要求。TCP/IP是目前很多应用程序的通讯接口,它标明了实际通讯目标所拥有的逻辑地址,也是我们想要联系的设备的地址。我们连接网络的NIC都具有自己独一无二的MAC 地址,而在数据传输过程中MAC地址并不是应用程序所能够直接理解的地址,在数据的传输过程中物理地址不断的变化但是保持完整的是逻辑地址。为了更方便快捷地工作,我们使用可移动的寻址方式(IP)来获得数据目的地的信息而不用考虑下层信息,而且使用IP地址则拥有更好的扩展性能。

LAN交换机不但使用简单、费用较低,而且它的性能也非常不错,但是我们却不能把一个大型网络全部构建在交换机上。一个完全构建在交换机上的 LAN看上去就象一个广播网络,碰撞、堵塞以及通信问题会使你的网络变得一团糟。使用路由器则可以将网络划分为多个子网,通过路由所具备的功能来有效的进行安全控制策略以及避免堵塞等。数据报文以及数据包只能由路由在子网之间传输,因为子网地址是一种第三层地址,在这方面路由的功能是不能被取代的。路由另外一个功能就在于连接不同协议的网络。如果你拥有一个以太网和令牌环的组合网络,那么使用网桥和交换机是不能将其组合使用,而路由器则具备同时处理多个协议的能力。

在具备出色功能的同时,路由器也具备自己无法避免的缺点。路由的很多功能都是由软件所实现,这就不可避免的造成它成为网络的瓶颈,在速度上路由是无法与交换相比的,而通过使用三层交换机(路由交换机),我们就可以解决路由的速度问题。

三层交换机通过使用硬件交换机构实现了IP的路由功能,从而取代了以往的软件路由。三层交换机可以提供二层交换的网络速度以及每个连接端口的IP 路由功能。当基于MAC层的报文被三层交换机所接收,如果其目的地址属于已知地址,那么就直接以二层交换的速度进行交换;如果地址属于其他网络则进行路由。

简单的说三层交换机可以进行二层、三层的综合处理,其价格和性能可以达到以往二层交换机的位置,而又可以部分取代传统的路由器。相对于二层交换机,三层交换机具有连接大型网络的能力。


===================================================
三层交换
===================================================
三层交换技术的出现,解决了局域网中网段划分之后,网段中子网必须依赖路由器进行管理的局面,解决了传统路由器低速、复杂所造成的网络瓶颈等问题。
三层交换原理

一个具有三层交换功能的设备,相当于是一个带有第三层路由功能的第二层交换机,但它是二者的有机结合,并不是简单地把路由器设备的硬件及软件叠加在局域网交换机上。

其原理是:假设两个使用IP协议的主机A、B通过第三层交换机进行通信,发送主机A在开始发送时,把自己的IP地址与B主机的IP地址比较,判断B主机是否与自己在同一子网内。若B与A在同一子网内,则进行二层的转发。若两个主机不在同一子网内,如A要与目的主机B通信,发送主机A要向“缺省网关”发出 ARP(地址解析)封包,而“缺省网关”的IP地址其实是三层交换机的三层交换模块。当发送主机A对“缺省网关”的IP地址广播出一个ARP请求时,如果三层交换模块在以前的通信过程中已经知道B主机的MAC地址,则向A回复B的MAC地址;否则三层交换模块根据路由信息向B广播一个ARP请求,B得到此 ARP请求后向三层交换模块回复其MAC地址,三层交换模块保存此地址并回复给发送主机A,同时将B主机的MAC地址发送到二层交换引擎的MAC地址表中。从这以后,当A向B发送的数据包便全部交给二层交换处理,信息得以高速交换。由于仅仅在路由过程中才需要三层处理,绝大部分数据都通过二层交换转发,因此三层交换机的速度很快,接近二层交换机的速度,同时比相同路由器的价格低很多。

因为通信双方并没有通过路由器进行“拆包”和“打包”的过程,所以那怕主机A、B或C分属于不同的子网,它们之间也可直接知道对方的MAC地址来进行通信,最重要的是,第三层交换机并没有像其它交换机一样把广播封包扩散,第三层交换机之所以叫三层交换机就是因为它可以看懂三层信息,比如IP地址、 ARP等。所以,三层交换机便能洞悉某一广播封包目的何在,在没有把它扩散出去的情形下,同时满足了发出该广播封包的人的需求(不论它们在任何子网里)。因为第三层交换机没做任何“拆、打”数据包的工作,所有经过它的数据包都不会被修改并以交换的速度传到目的地。所以,应用第三层交换技术即可实现网络路由的功能,又可以根据不同的网络状况做到最优的网络性能。

三层交换机种类

三层交换机可以根据其处理数据的不同而分为纯硬件和纯软件两大类。

(1)纯硬件的三层技术相对来说技术复杂,成本高,但是速度快,性能好,负载能力强。其原理是,采用ASIC芯片,采用硬件的方式进行路由表的查找和刷新。如图1所示。

当数据由端口接口芯片接收进来以后,首先在二层交换芯片中查找相应的目的MAC地址,如果查到,就进行二层转发,否则将数据送至三层引擎。在三层引擎中,ASIC芯片查找相应的路由表信息,与数据的目的IP地址相比对,然后发送ARP数据包到目的主机,得到该主机的MAC地址,将MAC地址发到二层芯片,由二层芯片转发该数据包。

图1 纯硬件三层交换机原理
① 端口A向三层交换模块发出ARP请求 ② 三层交换模块向端口B所在网段广播ARP请求 ③ 端口B的ARP应答 ④ 更新MAC地址表

广州百讯的SPEED ES3224及ES3800都属于这种类型。

(2)基于软件的三层交换机技术较简单,但速度较慢,不适合作为主干。其原理是,采用CPU用软件的方式查找路由表。如图2所示。

当数据由端口接口芯片接收进来以后,首先在二层交换芯片中查找相应的目的MAC地址,如果查到,就进行二层转发否则将数据送至CPU。CPU查找相应的路由表信息,与数据的目的IP地址相比对,然后发送ARP数据包到目的主机得到该主机的MAC地址,将MAC地址发到二层芯片,由二层芯片转发该数据包。因为低价CPU处理速度较慢,因此这种三层交换机处理速度较慢。

图2 软件三层交换机原理
① 端口A向三层交换模块发出ARP请求 ② 三层交换模块向端口B所在网段广播ARP请求 ③ 端口B的ARP应答 ④ 更新MAC地址表

===============================
和路由器的区别
===============================
传统的路由器在网络中有路由转发、防火墙、隔离广播等作用,而在一个划分了VLAN以后的网络中,逻辑上划分的不同网段之间通信仍然要通过路由器转发。由于在局域网上,不同VLAN之间的通信数据量很大,这样,如果路由器要对每一个数据包都路由一次,随着网络上数据量的不断增大,它将成为瓶颈。而第三层交换技术就是将路由技术与交换技术合二为一的技术。在对第一个数据流进行路由后,它将会产生一个MAC地址与IP地址的映射表,当同样的数据流再次通过时,将根据此表直接从二层通过而不是再次路由,从而消除了路由器进行路由选择而造成网络的延迟,提高了数据包转发的效率。路由器的转发采用最长匹配的方式,实现复杂,通常使用软件来实现。而三层交换机的路由查找是针对流的,它利用CACHE技术,很容易采用ASIC实现,因此,可以大大节约成本,并实现快速转发。

  但从技术上讲,路由器和三层交换机在数据包交换操作上存在着明显区别。路由器一般由基于微处理器的引接执行数据包交换,而三层交换机通过硬件执行数据包交换。因此与三层交换机相比,路由器功能更为强大,像VPN等功能仍无法被完全替代。处于同一个局域网中的各子网的互联,可以用三层交换机来代替路由器,但局域网必须与公网互联以实现跨地域的网络,这时路由器就不可缺少。一个完全构建在交换机上的网络会出现诸如碰撞、堵塞以及通信混乱等问题。使用路由器将网络划分为多个子网,通过路由所具备的功能来有效进行安全控制策略,则可以避这些问题。三层交换机现在还不能提供完整的路由选择协议,而路由器则具备同时处理多个协议的能力。当连接不同协议的网络,像以太网和令牌环的组合网络,依靠三层交换机是不可能完成网间数据传输的。除此之外,路由器还具有第四层网络管理能力,这也是三层交换机所不具备的。

CUPS系统简介

Linux打印系统最早源于Unix打印系统,但Unix系统却一直缺乏统一的标准接口。由于历史原因,不同Unix平台使用着不同的打印系统。在各种Unix打印解决方案中,最流行的是Berkeley打印系统和 System V打印系统。一方面,不同打印系统需要不一样的打印驱动支持; 另一方面,Unix只拥有相对较小的客户群。这些因素使得很多打印机供应商完全放弃了对Unix平台的支持。统一打印接口的缺乏和底层驱动的不完善使打印在很长一段时间内成为了Linux平台的一大功能漏洞。

最终CUPS (Common Unix Printing System)的出现解决了上述窘境。CUPS是Unix/Linux上通用的打印系统。CUPS提供了一套CUPS API来完成Unix/Linux系统和打印机之间的交互。例如,用户可以通过CUPS获取打印机的信息,也可以通过CUPS设置打印机。CUPS提供了对Berkeley和System V打印命令的支持,这种兼容性使得之前的系统不用进行大规模修改就可被延续使用。同时,CUPS还提供一系列模块化的过滤接口。通过这些接口,打印机提供商只需要开发一个驱动程序就可以满足所有平台的需求。至今为止,CUPS已被所有Unix和Linux平台所支持。

CUPS 是Unix/Linux平台上的打印系统。CUPS的定义和实现是基于IPP(Internet Printing Protocol)协议的。IPP是通用的打印系统标准,它的功能和操作被一系列RFC(Request for Comments)所详细定义。这些具体功能和操作包括:建立IPP请求、应答IPP请求和设置IPP请求等等。和IPP相关的RFC包括 RFC1179、RFC2910、RFC2911、RFC3196等。在网络协议中,IPP位于HTTP(Hyper-Text Transport Protocol)协议之上。

深入分析Windows和Linux动态库应用异同

Linuxeden.com---自由文档 / 编程开发 / 深入分析Windows和Linux动态库应用异同 2005-09-21
------------------------------------------------------------------------------------------------------------------------
深入分析Windows和Linux动态库应用异同

摘要:动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。

但不同操作系统的动态库由于格式 不同,在需要不同操作系统调用时需要进行动态库程序移植。本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Linux上的方法和经验。

1、引言

动态库(Dynamic Link Library abbr,DLL)技术是程序设计中经常采用的技术。其目的减少程序的大小,节省空间,提高效率,具有很高的灵活性。

采用动态库技术对于升级软件版本更加容易。与静态库(Static Link Library)不同,动态库里面的函数不是执行程序本身的一部分,而是根据执行需要按需载入,其执行代码可以同时在多个程序中共享。

在Windows 和Linux操作系统中,都可采用这种方式进行软件设计,但他们的调用方式以及程序编制方式不尽相同。本文首先分析了在这两种操作系统中通常采用的动态库调用方法以及程序编制方式,然后分析比较了这两种方式的不同之处,最后根据实际移植程序经验,介绍了将VC++编制的Windows动态库移植到 Linux下的方法。

2、动态库技术

2.1 Windows动态库技术

动态链接库是实现Windows应用程序共享资源、节省内存空间、提高使用效率的一个重要技术手段。常见的动态库包含外部函数和资源,也有一些动态库只包含资源,如Windows字体资源文件,称之为资源动态链接库。通常动态库以.dll,.drv、.fon等作为后缀。

相应的windows静态库通常以.lib结尾,Windows自己就将一些主要的系统功能以动态库模块的形式实现。

Windows动态库在运行时被系统加载到进程的虚拟空间中,使用从调用进程的虚拟地址空间分配的内存,成为调用进程的一部分。DLL也只能被该进程的线程所访问。DLL的句柄可以被调用进程使用;调用进程的句柄可以被DLL使用。

DLL 模块中包含各种导出函数,用于向外界提供服务。DLL可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式;一个DLL在内存中只有一个实例;DLL实现了代码封装性;DLL的编制与具体的编程语言及编译器无关,可以通过DLL来实现混合语言编程。DLL函数中的代码所创建的任何对象(包括变量)都归调用它的线程或进程所有。

根据调用方式的不同,对动态库的调用可分为静态调用方式和动态调用方式。

(1) 静态调用,也称为隐式调用,由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码(Windows系统负责对DLL调用次数的计数),调用方式简单,能够满足通常的要求。通常采用的调用方式是把产生动态连接库时产生的.LIB文件加入到应用程序的工程中,想使用DLL中的函数时,只须在源文件中声明一下。

LIB文件包含了每一个DLL导出函数的符号名和可选择的标识号以及DLL文件名,不含有实际的代码。Lib文件包含的信息进入到生成的应用程序中,被调用的DLL文件会在应用程序加载时同时加载在到内存中。

(2)动态调用,即显式调用方式,是由编程者用API函数加载和卸载DLL来达到调用DLL的目的,比较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。在Windows系统中,与动态库调用有关的函数包括:

①LoadLibrary(或MFC 的AfxLoadLibrary),装载动态库。

②GetProcAddress,获取要引入的函数,将符号名或标识号转换为DLL内部地址。

③FreeLibrary(或MFC的AfxFreeLibrary),释放动态链接库。

在windows 中创建动态库也非常方便和简单。在Visual C++中,可以创建不用MFC而直接用C语言写的DLL程序,也可以创建基于MFC类库的DLL程序。每一个DLL必须有一个入口点,在VC++中, DllMain是一个缺省的入口函数。DllMain负责初始化(Initialization)和结束(Termination)工作。

动态库输出函数也有两种约定,分别是基于调用约定和名字修饰约定。DLL程序定义的函数分为内部函数和导出函数,动态库导出的函数供其它程序模块调用。通常可以有下面几种方法导出函数:

①采用模块定义文件的EXPORT部分指定要输入的函数或者变量。

②使用MFC提供的修饰符号_declspec(dllexport)。

③以命令行方式,采用/EXPORT命令行输出有关函数。

在windows动态库中,有时需要编写模块定义文件(.DEF),它是用于描述DLL属性的模块语句组成的文本文件。

2.2 Linux共享对象技术

在Linux 操作系统中,采用了很多共享对象技术(Shared Object),虽然它和Windows里的动态库相对应,但它并不称为动态库。相应的共享对象文件以.so作为后缀,为了方便,在本文中,对该概念不进行专门区分。Linux系统的/lib以及标准图形界面的/usr/X11R6/lib等目录里面,就有许多以so结尾的共享对象。

同样,在Linux下,也有静态函数库这种调用方式,相应的后缀以.a结束。Linux采用该共享对象技术以方便程序间共享,节省程序占有空间,增加程序的可扩展性和灵活性。Linux还可以通过LD-PRELOAD变量让开发人员可以使用自己的程序库中的模块来替换系统模块。

同Windows 系统一样,在Linux中创建和使用动态库是比较容易的事情,在编译函数库源程序时加上-shared选项即可,这样所生成的执行程序就是动态链接库。通常这样的程序以so为后缀,在Linux动态库程序设计过程中,通常流程是编写用户的接口文件,通常是.h文件,编写实际的函数文件,以.c或.cpp为后缀,再编写makefile文件。对于较小的动态库程序可以不用如此,但这样设计使程序更加合理。

编译生成动态连接库后,进而可以在程序中进行调用。在Linux中,可以采用多种调用方式,同Windows的系统目录(..\system32等)一样,可以将动态库文件拷贝到/lib目录或者在/lib目录里面建立符号连接,以便所有用户使用。

下面介绍Linux调用动态库经常使用的函数,但在使用动态库时,源程序必须包含dlfcn.h头文件,该文件定义调用动态链接库的函数的原型。

(1)_打开动态链接库:dlopen,函数原型void *dlopen (const char *filename, int flag); dlopen用于打开指定名字(filename)的动态链接库,并返回操作句柄。

(2)取函数执行地址:dlsym,函数原型为: void *dlsym(void *handle, char *symbol); dlsym根据动态链接库操作句柄(handle)与符号(symbol),返回符号对应的函数的执行代码地址。

(3)关闭动态链接库:dlclose,函数原型为: int dlclose (void *handle); dlclose用于关闭指定句柄的动态链接库,只有当此动态链接库的使用计数为0时,才会真正被系统卸载。

(4)动态库错误函数:dlerror,函数原型为: const char *dlerror(void); 当动态链接库操作函数执行失败时,dlerror可以返回出错信息,返回值为NULL时表示操作函数执行成功。

在取到函数执行地址后,就可以在动态库的使用程序里面根据动态库提供的函数接口声明调用动态库里面的函数。在编写调用动态库的程序的makefile文件时,需要加入编译选项-rdynamic和-ldl。

除了采用这种方式编写和调用动态库之外,Linux操作系统也提供了一种更为方便的动态库调用方式,也方便了其它程序调用,这种方式与Windows系统的隐式链接类似。其动态库命名方式为“lib*.so.*”。在这个命名方式中,第一个*表示动态链接库的库名,第二个*通常表示该动态库的版本号,也可以没有版本号。

在这种调用方式中,需要维护动态链接库的配置文件/etc/ld.so.conf来让动态链接库为系统所使用,通常将动态链接库所在目录名追加到动态链接库配置文件中。如具有X window窗口系统发行版该文件中都具有/usr/X11R6/lib,它指向X window窗口系统的动态链接库所在目录。

为了使动态链接库能为系统所共享,还需运行动态链接库的管理命令./sbin/ldconfig。在编译所引用的动态库时,可以在gcc采用 –l或-L选项或直接引用所需的动态链接库方式进行编译。在Linux里面,可以采用ldd命令来检查程序依赖共享库。

3、两种系统动态库比较分析

Windows和Linux采用动态链接库技术目的是基本一致的,但由于操作系统的不同,他们在许多方面还是不尽相同,下面从以下几个方面进行阐述。

(1) 动态库程序编写,在Windows系统下的执行文件格式是PE格式,动态库需要一个DllMain函数作为初始化的人口,通常在导出函数的声明时需要有 _declspec(dllexport)关键字。Linux下的gcc编译的执行文件默认是ELF格式,不需要初始化入口,亦不需要到函数做特别声明,编写比较方便。

(2)动态库编译,在windows系统下面,有方便的调试编译环境,通常不用自己去编写makefile文件,但在linux下面,需要自己动手去编写makefile文件,因此,必须掌握一定的makefile编写技巧,另外,通常Linux编译规则相对严格。

(3)动态库调用方面,Windows和Linux对其下编制的动态库都可以采用显式调用或隐式调用,但具体的调用方式也不尽相同。

(4) 动态库输出函数查看,在Windows中,有许多工具和软件可以进行查看DLL中所输出的函数,例如命令行方式的dumpbin以及VC++工具中的 DEPENDS程序。在Linux系统中通常采用nm来查看输出函数,也可以使用ldd查看程序隐式链接的共享对象文件。

(5)对操作系统的依赖,这两种动态库运行依赖于各自的操作系统,不能跨平台使用。因此,对于实现相同功能的动态库,必须为两种不同的操作系统提供不同的动态库版本。

4、动态库移植方法

如果要编制在两个系统中都能使用的动态链接库,通常会先选择在Windows的VC++提供的调试环境中完成初始的开发,毕竟VC++提供的图形化编辑和调试界面比vi和gcc方便许多。完成测试之后,再进行动态库的程序移植。

通常gcc默认的编译规则比VC++默认的编译规则严格,即使在VC++下面没有任何警告错误的程序在gcc调试中也会出现许多警告错误,可以在gcc中采用-w选项关闭警告错误。

下面给出程序移植需要遵循的规则以及经验。

(1) 尽量不要改变原有动态库头文件的顺序。通常在C/C++语言中,头文件的顺序有相当的关系。另外虽然C/C++语言区分大小写,但在包含头文件时, Linux必须与头文件的大小写相同,因为ext2文件系统对文件名是大小写敏感,否则不能正确编译,而在Windows下面,头文件大小写可以正确编译。

(2)不同系统独有的头文件。在Windows系统中,通常会包括windows.h头文件,如果调用底层的通信函数,则会包含 winsock..h头文件。因此在移植到Linux系统时,要注释掉这些Windows系统独有的头文件以及一些windows系统的常量定义说明,增加Linux都底层通信的支持的头文件等。

(3)数据类型。VC++具有许多独有的数据类型,如__int16,__int32, TRUE,SOCKET等,gcc编译器不支持它们。通常做法是需要将windows.h和basetypes.h中对这些数据进行定义的语句复制到一个头文件中,再在Linux中包含这个头文件。例如将套接字的类型为SOCKET改为int。

(4)关键字。VC++中具有许多标准C中所没有采用的关键字,如BOOL,BYTE,DWORD,__asm等,通常在为了移植方便,尽量不使用它们,如果实在无法避免可以采用#ifdef 和#endif为LINUX和WINDOWS编写两个版本。

(5) 函数原型的修改。通常如果采用标准的C/C++语言编写的动态库,基本上不用再重新编写函数,但对于系统调用函数,由于两种系统的区别,需要改变函数的调用方式等,如在Linux编制的网络通信动态库中,用close()函数代替windows操作系统下的closesocket()函数来关闭套接字。另外在Linux下没有文件句柄,要打开文件可用open和fopen函数,具体这两个函数的用法可参考文献[2]。

(6)makefile 的编写。在windows下面通常由VC++编译器来负责调试,但gcc需要自己动手编写makefile文件,也可以参照VC++生成的 makefile文件。对于动态库移植,编译动态库时需要加入-shared选项。对于采用数学函数,如幂级数的程序,在调用动态库是,需要加入-lm。

(7)其它一些需要注意的地方

①程序设计结构分析,对于移植它人编写的动态库程序,程序结构分析是必不可少的步骤,通常在动态库程序中,不会包含界面等操作,所以相对容易一些。

②在Linux中,对文件或目录的权限分为拥有者、群组、其它。所以在存取文件时,要注意对文件是读还是写操作,如果是对文件进行写操作,要注意修改文件或目录的权限,否则无法对文件进行写。

③ 指针的使用,定义一个指针只给它分配四个字节的内存,如果要对指针所指向的变量赋值,必须用malloc函数为它分配内存或不把它定义为指针而定义为变量即可,这点在linux下面比windows编译严格。同样结构不能在函数中传值,如果要在函数中进行结构传值,必须把函数中的结构定义为结构指针。

④路径标识符,在Linux下是“/”,在Windows下是“\”,注意windows和Linux的对动态库搜索路径的不同。

⑤编程和调试技巧方面。对不同的调试环境有不同的调试技巧,在这里不多叙述。

5、结束语

本文系统分析了windows和Linux动态库实现和使用方式,从程序编写、编译、调用以及对操作系统依赖等方面综合分析比较了这两种调用方式的不同之处,根据实际程序移植经验,给出了将VC++编制的Windows动态库移植到Linux下的方法以及需要注意的问题,同时并给出了程序示例片断,实际在程序移植过程中,由于系统的设计等方面,可能移植起来需要注意的方面远比上面复杂,本文通过总结归纳进而为不同操作系统程序移植提供了有意的经验和技巧。

各类开源协议介绍

Mozilla Public License

  MPL License,允许免费重发布、免费修改,但要求修改后的代码版权归软件的发起者。这种授权维护了商业软件的利益,,它要求基于这种软件得修改无偿贡献版权给该软件。这样,围绕该软件得所有代码得版权都集中在发起开发人得手中。但MPL是允许修改,无偿使用得。MPL软件对链接没有要求。

  BSD开源协议

  BSD开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。 当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:

  1. 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。

  2. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。

  3. 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。

  BSD代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。

  Apache Licence 2.0

  Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件:

  1. 需要给代码的用户一份Apache Licence

  2. 如果你修改了代码,需要再被修改的文件中说明。

  3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。

  4. 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。

  Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

GPL

  GPL许可证是自由软件的应用最广泛的软件许可证,人们可以修改程式的一个或几个副本或程式的任何部分,以此形成基於这些程式的衍生作品。必须在修改过的档案中附有明显的说明:您修改了此一档案及任何修改的日期。您必须让您发布或出版的作品,包括本程式的全部或一部分,或内含本程式的全部或部分所衍生的作品,允许第三方在此许可证条款下使用,并且不得因为此项授权行为而收费。

  LGPL

  Linux就是采用了 GPL。GPL协议和BSD, Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。

  GPL协议的主要内容是只要在一个软件中使用(“使用”指类库引用,修改后的代码或者衍生代码) GPL协议的产品,则该软件产品必须也采用 GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。

  由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。

  其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似

  Public Domain

  公共域授权。将软件授权为公共域,这些软件包没有授权协议,任何人都可以随意使用它。

  Artistic许可

  使作者保持对进一步开发的控制。

ISBN(国际标准书号)

各位看了那么多年书,看了那么多书,可了解或想了解“书号”这个书的唯一标识?
在国际上有种通行的“书号”标准——ISBN(国际标准书号),我国在1982年起加入ISBN,现在国内正规途径出版的每一本书都有唯一的ISBN号。例如7-121-02344-X。现在我国的ISBN号为10位,到2007年将会升为13位。
我国的标准书号除了包含ISBN外,还有一个“图书分类—种次号”。“图书分类—种次号”由图书所属学科的分类号和该类号下的种次号两段组成,其间用中圆点“·”隔开。如TP·340。
所以,在我国一本书的书号一般形为:7-144-00316-X/TP·340。

那么ISBN和“图书分类—种次号”是怎么编码,不同的字母和数字代表什么意思呢?我不是这方面的专家,所以在网上找了几份资料给大家参考。希望能增长大家的知识。

另外,豆瓣网上面可以根据ISBN号搜索图书,只要你使用这样的URL——http://www.douban.com/isbn/ISBN号/ ——进行访问就可以看到该ISBN对应的书籍的信息了。此外还提供了该书籍在当当网、蔚蓝网、China-Pub上面的价格信息,非常实用。

--------------------------------

ISBN号介绍

ISBN号是国际标准书号的简称,它是国际标准化组织于1972年公布的一项国际通用的出版物统一编号方法。所有正规出版的普通图书版权页都有 ISBN号,ISBN是international standard of book number 几个英文字母的缩写,即国际标准书号。它由10位数字组成,这10位数字由组号、出版者号、书名号、校验号这四部分组成,其间用“-”相连。

ISBN号是由10位数字组成,共分四段:

1.组号: 代表出版者的国家,地理区域,语种等.我国的组号为“7”。

2.出版者号: 代表组内所属的一个具体出版者(出版社,出版公司等)。由国家或地区的ISBN中心设置和分配,可取1-7位数字。

3.书名号:书名号是由出版者给予每种出版物的编号。

4.校验号: 校验号是ISBN号的最后一位数值,它能够校验出ISBN号是否正确,即:将ISBN1-9位数字顺序乘以10-2这9个数字,将这些乘积之和再加上校验号,假如能被11整除,则这个ISBN号是正确的,算式为7*10+3*9+0*8 +5*7+0*6+1*5+5*4+6*3+8*2+ 7=198,198/11=18,能被11整除。校验号只能是1位数,当为10时,记为罗马数字X。

例如: 《 Frontpage 98网页设计》一书的ISBN号是: 7-118-01984-4,所代表的意思是:7,代表中国;118,代表国防工业出版社;01984,是书名号;4,是检验码。

-------------------------------------

中国标准书号和分类法解说

  本标准的目的在于使在中国注册的出版社所出版的每一种图书的每一个版本都有一个世界性的惟一标识代码,使利用计算机或其他现代化技术进行图书的贸易管理和信息交换得到更高的效率和可靠性,并为图书的分类统计和销售陈列工作创造方便条件。
  1.中国标准书号的结构
  一个中国标准书号由一个国际标准书号(International Standard Book Number,缩写为ISBN)和一个图书分类——种次号两部分组成,其中国际标准书号(ISBN)是中国标准书号的主体,可以独立使用。
  1.1 国际标准书号(ISBN)的结构
  国际标准书号由分为以下四段的十位数字所组成:
  第一段——组号
  第二段——出版社号
  第三段——书序号
  第四段——校验码
  1.1.1 组号:组号是国家、地区、语言或其他组织集团的代号。由国际书号中心(International ISBN agency)负责分配。中国组号为一位数字“7”。
  1.1.2 出版社号:由国家标准书号中心负责分配,其位数视申请出版社图书出版量多少而异。出版社号的设置参见本标准第2章。
  1.1.3 书序号:由出版社负责管理分配,每个出版社所出各种图书的书序号的位数L是固定的,计算公式如下:
     L=9 -(组号位数+出版社号位数)………(1)
  1.1.4 校验码:为中国标准书号的第十位数字。其数值C10由中国标准书号的前九位数字(C1~C9)依次以10~2加权之和并以11为模数按式(2)(略)计算得到。
  1.2 图书分类——种次号的结构
  图书分类——种次号由图书所属学科的分类号和种次号两段组成,其间用中圆点“·”隔开。如:
  A·125; TP·301等等。
  1.2.1 分类号:由出版社根据图书的学科范围参照《中国图书馆图书分类法》的基本大类给出,其中工业技术类图书按二级类目给出。因此本段代码为1~2个汉语拼音字母。
  1.2.2 种次号:为同一出版社所出版的同一图书分类号的不同图书的流水编号,由出版社自行给出。其最大数字不应超过国际标准书号第三段书序号(见1.1.3)的数字。
  2.出版社号的设置
  为使在相当长的历史时期内,满足申请中国标准书号的出版社的需要,并使各个出版社分配到与其出版量相适应的出版社号,本标准确定如下出版社号的分段范围设置表:

  出版社号长度     出版社号范围    出版社数量
  2位数字         00~09       10
  3位数字          100~499       400
  4位数字        5000~7999       3000
  5位数字         80000~89999     10000
  6位数字       900000~999999     100000

  3.中国标准书号的印刷与存储格式
  中国标准书号应印在图书的版权页与封底(或护封)上。国际标准书号前应冠以ISBN字样;书号的四段(组号、出版社号、书序号、校验码)之间要用一个字符相连接。例如:
  ISBN 7-01—134069—6
  国际标准书号和图书分类——种次号之间应以水平线或斜线隔开。
  例如:

   或:
  ISBN 7—144—11316—X/TP·1064
  中国标准书号的印刷字体不应小于13级照排字(新五号铅字)。
  当在计算机内部存储中国标准书号的ISBN部分时,可在相应字段内省略ISBN及连字符。如:7011340696,以节省存储空间。当由计算机内读出这种压缩形式的书号时,可借助本标准第2章所列出的出版社号分段范围设置表,打印ISBN分段格式。
  本标准从1987年1月1日起实施。

                     附录 A
                 《中国图书馆图书分类法》
                  采用类目—览表(补充件)

  A 马克思主义、列宁主义、毛泽东思想
  B 哲学
  C 社会科学总论
  D 政治、法律
  E 军事
  F 经济
  G 文化、科学、教育、体育
   G0 综合性文化刊物
   G1 世界各国文化事业
   G2 各项文化事业
   G3 科学、科学研究工作
   G4 教育
   G8 体育
  H 语言、文字
  I 文学
  J 艺术
  K 历史、地理
  N 自然科学总论
  O 数理科学和化学
   O1 数学
   O3 力学
   O4 物理学
   O6 化学
  P 天文学、地球科学
  Q 生物科学
  R 医药、卫生
  S 农业、林业
  T 工业技术总论
   TB 一般工业技术
   TD 矿业工程
   TE 石油、天然气工业
   TF 冶金工业
   TG 金属学、金属工艺
   TH 机械、仪表工业
   TJ 武器工业
   TK 动力工程
   TL 原子能技术
   TM 电工技术
   TN 无线电电子学、电讯技术
   TP 自动化技术、计算技术
   TQ 化学工业
   TS 轻工业、手工业
   TU 建筑科学
   TV 水利工程
  U 交通运输
  V 航空、宇宙飞行
  X 环境科学
  Z 综合性图书

----------------------------

关于国际标准书号和中国标准书号

国际标准书号 / ISBN

(本部分摘自《外文文献采访工作手册》。编写者:朱硕峰;校订者:顾?)

  国际标准书号的英文全称为International Standard Book Number,简称ISBN。1966年11月,西柏林第三届国际图书市场研究和图书贸易合理化会议(International Conference on Book Market Research and Rationalization in the Book Trade)上,当时的联邦德国的克莱特(Klett)出版公司的艾勒(H. J. Ehlers)提出了标准号码的倡议,被公认为是国际标准书号的历史起点。当时,欧洲的许多出版社和图书发行商正在考虑把计算机用于图书订购和书目控制。 1967年英国在惠特克(Whitaker)公司成立了标准书号(SBN - Standard Book Number)中心。1969年4月国际标准组织第46技术委员会(ISO/TC46 - International Standard Organization / Technique Committee 46)在斯德哥尔摩起草了ISBN方案。1971年国际标准组织批准了国际标准书号在世界范围内实施,前后历时五年。

  国际标准书号由十位数字组成。被三条短横线分为四段,每一段都有不同的含义。

  第一个号码段是地区号,又叫组号(Group Identifier),最短的是一位数字,最长的达五位数字,大体上兼顾文种、国别和地区。把全世界自愿申请参加国际标准书号体系的国家和地区,划分成若干地区,各有固定的编码:0、1代表英语,使用这两个代码的国家有:澳大利亚、加拿大、爱尔兰、新西兰、波多黎各、南非、英国、美国、津巴布韦等;2代表法语,法国、卢森堡以及比利时、加拿大和瑞士的法语区使用该代码;3代表德语,德国、奥地利和瑞士德语区使用该代码;4是日本出版物的代码;5是俄罗斯出版物的代码;7是中国出版物使用的代码。

  组号分为五个档次,长度为1―5位数字,其具体设置范围如下:

组号位数 设置范围 可分配的组区数 每组号允许出版量(种) 每档总计出版量(种)

一位 0~7 8 1亿 8.00亿
二位 80~94 15 0.1亿 1.50亿
三位 950~997 48 0.01亿 0.48亿
四位 9980~9989 10 0.001亿 0.01亿
五位 99900~99999 100 0.0001亿 0.01亿
合计 181 10.00亿

  第二段号码是出版社代码(Publisher Identifier),由其隶属的国家或地区ISBN中心分配,允许取值范围为2-5位数字。出版社的规模越大,出书越多,其号码就越短。

  第三个段是书序号(Title Identifier)由出版社自己给出,而且每个出版社的书序号是定长的。最短的一位,最长的六位。出版社的规模越大,出书越多,序号越长。

  第十位是电子计算机的校验码(Check Digit)。固定一位,起止号为0-10,10由X代替。

  四段数字之间应该用连字符( - )连接(例如:2-02-033598-0)。但是,有些图书馆集成系统不能自动分配连字符,图书馆编目人员也对ISBN的分段方式不甚了解,所以人们经常在书目记录中省略连字符(例如:2020335980)。

  标准书号的核对方法是加权法,即用10至2这9个数分别去乘标准书号的前9位数,其乘积之和加上校验码再除以常数11,如能整除,说明书号正确,如不能整除,表明书号错误。

  国际标准书号的使用范围是:印刷品、缩微制品、教育电视或电影、混合媒体出版物、微机软件、地图集和地图、盲文出版物、电子出版物。

  总管国际标准书号的机构是设在德国柏林国立普鲁士文化遗产图书馆(Staatsbibliothek zu Berlin - Preußischer Kulturbesitz)的国际国际标准书号管理局(International ISBN Agency)。该机构的主要工作之一是向下一级地区机构分配地区号码。一般的地区机构都设在国家图书馆内,但是一些大的国家和地区却不是这样。例如,英国的地区机构是惠特克公司(Whitaker),该公司在国际标准书号尚未问世前,就是英国的国家书号中心,可以说是国际标准书号的先驱;美国的地区中心是鲍克公司(R.R. Bowker);我国的地区机构设在新闻出版署。地区机构的主要工作是接受出版社的申请,批给第二段号码,即出版社的代码。第三个号码和校验码就由出版社自己决定了。

  要让全世界出版的书,每一种都有一个编号,又不重复,这决不是一件易事。要把书号严格控制在10位以内,就必须有一套精密的设计安排。首先是地区号。世界上应用最广泛的文种英、法、德、日、中、俄都只占一位,目的是留下更多的位数安排大量的出版社和图书。而最小的地区,如苏里南、特立尼达和多巴哥则占用五位数。最让国际标准书号设计者头痛的是出版社号码。以英文为例,除了地区号和校验码,还有八位用来解决英文地区的每个出版社和每一种书。出版社号码定为2至7位,书号定为1至5位,各出版社国际标准书号的分配成如下格局:

出版社号码位数 出版社起始号 书号位数 可出版的图书种数

2 00 6 1 000 000
3 200 5 100 000
4 7000 4 10 000
5 85000 3 1 000
6 900000 2 100
7 9500000 1 10

  最小的出版社只有10个书号,很容易用完,用完后可向地区机构申请再给一个号码。例:

0-13-001660-8是美国Prentice-Hall出版社的一个ISBN;

0-471-00084-1是美国Wiley出版社的一个ISBN;

2-7000-2444-3是法国Gründ出版社的一个ISBN;

4-80970-182-4是日本东洋文库的一个ISBN;

1-919876-03-0是南非NAEP出版社的一个ISBN;

3-9800462-3-0是德国Freitag für Umwelttechnik的一个ISBN;

981-238-187-2是新加坡World Scientific出版社的一个ISBN

  有的出版社在不同国家或地区的分社出版的同一种书,用两个不同的ISBN。例如,德国施普林格出版社(Springer-Verlag)出版的Introduction to the Mori Program一书,在纽约出版用0-387-98465-8,在柏林出版则用3-540-98465-8。对于这个出版社,两个ISBN的后六位(书序号和校验位)都相同。对于这种情况,图书馆员要从实践中总结经验,通过多个途径检索,减少查重中的遗漏。不过,许多出版社在不同地点出版的书的书序号不同。不过,许多出版社在不同国家或地区出版时,不同的ISBN之间并没有必然的关系。

  国际标准书号问世后,很快得到推广。主要是因为是出版商首先倡议的,对出版商、书商的工作有很大的益处。其优点主要体现在:国际标准书号是机读的编码,从图书的生产到发行、销售始终如一,对图书的发行系统起了很大的作用;它的引入使图书的定购、库存控制、帐目和输出过程等任何图书业的分支程序都简化了;国际标准书号也对图书馆和文献中心的订购、采选、编目和流通程序都有促进作用;ISBN系统的引入也服务于书目信息的流动和使用,而且为一个国家的图书生产提供经济的书目控制;ISBN对图书市场更有效率,它能确定国际上出版的任何图书及其出版社。在书业中习惯称ISBN为库藏码(Stock Number),就是因为被普遍应用于书库管理。可见,它对书业的发展的作用很大。

  下面主要说一下国际标准书号的采用对图书馆的影响。出版商和书商与图书馆的着眼点不同。图书馆侧重于区别书的品种,最好是同样内容的书只有一个ISBN号。这样,查重时,只要查ISBN就能确定是否重复。但在出版商那里,一个ISBN说明了一本书的版本、装帧、文种、材料和出版地等内容。同一内容的书,因版本、装帧、文种、材料和出版地的不同,ISBN就不同。这样,ISBN与图书之间就出现了一些特殊关系,一种书就出现了多个ISBN,给图书馆采选人员带来了很大的麻烦,不能仅仅根据ISBN的不同来确定是否复本。能否利用ISBN查重,看法不一。可以这样说,ISBN具有唯一性,只要其相同,肯定是同一种书。这样,可以避免因目录报导有误,订单打错,排片错误造成的重复;但目前ISBN还不是唯一的查重方法,必须与书名等项目相结合。另外,ISBN是适应电子计算机的需要产生的机读编码,利用其通过计算机查重,可以节省时间。

  由于国际标准书号是书目数据中唯一可以识别一种出版物的国际通用代码,所以现在许多图书馆将其应用于采访和编目中的查重。例如,对于普通图书,各个机构的编目方式可能略有差异,出版社和书商的信息报道也不尽相同,所以我们几乎不可能让计算机通过著者或书名进行查重。但是国际标准书号具有唯一性和标准性,人们可以让计算机自动对其查重,从而省去了不少手工劳动,然后再进行人工判断。

  但是,我们也应当在使用国际标准书号查重时注意由于一些特殊问题。有些书可能有三个书号(丛书书号、分丛书书号、本书书号)。例如,英国罗德里奇(Routledge)出版社出版的《文明史》(History of Civilization: a Complete History of Mankind from Pre-Historic Times)共有50卷,其总的ISBN是0-415-14380-2;它下面分六个部分,包括《希腊文明》(Greek Civilization)(7册)(ISBN 0-415-15612-2)、《东方文明》(Eastern Civilization)(10册)(ISBN 0-415-15614-9)等;而各个部分下的每一册也有自己的ISBN,包括《马其顿帝国主义和东方的希腊化》(Macedonian Imperialism and the Hellenization of the East) (ISBN 0-415-15577-0)、《中国文明》(Chinese Civilization) (ISBN 0-415-15591-6)等。在这套书中,每本书上都印有三个ISBN。此外,同一种书在不同国家出版有不同的书号,不同的装帧形式(例如平装和精装)有不同的书号;这些情况都是很常见的。

查阅出版社ISBN的工具书有国际标准书号管理局(International ISBN Agency)编的《出版社的国际ISBN指南》(Publisher’s International ISBN Directory)。有关ISBN的详细说明,可以参见ISBN国际中心的网站(http://www.isbn.org/)。



中国标准书号 / China Standard Book Number

(本部分摘自《外文图书采选工作》。编写者:朱硕峰)

  1982年,中国参加ISBN系统,并成立中国ISBN中心(设在国家新闻出版署)。中国标准书号自1987年1月1日起实施,至1988年 1月1日完全取代原用的统一书号。中国标准书号共分两部分, 第一部分为ISBN,是主体部分;第二部分为《中国图书馆图书分类法》基本大类类号和种次号。类号除工业技术诸类图书用两个字母外,其他各学科门类图书均用一个字母。种次号是同一出版社出版同一学科门类图书的顺序号,由出版社自行编定。类号与种次号之间用中圆点(•)隔开。第一部分和第二部分分两行排列,也可用斜线隔开,排成一行。例如: ISBN 7-144-00316-X/TP•340。

  如前面所述,ISBN代表一种图书的一个版本,甚至代表一个分册。但是当ISBN应用到中国以后,由于中国的具体历史情况和不规范管理,出现了一号多书的现象。我们在图书采选工作中应当注意到这种情况,避免产生差错。

  参见:《中华人民共和国国家标准:中国标准书号》


13位的国际标准书号 / 13-Digit ISBN

  2004年,位于柏林的国际ISBN机构(International ISBN Agency)出版了《13位国际标准书号指导方针》(Guidelines for the Implementation of 13-Digit ISBNs),描述了将于2007年启用的13位的ISBN的概况。

  新的ISBN实际上就是现在的EAN号(European Article Number, 即欧洲商品号)。大家现在就可以看到,图书封四的ISBN上有一个13位的号码,其实就是EAN号,即在ISBN前加978(代表图书),但是最后一位(校验码)与ISBN不同。正式启用13位ISBN以后,可能会增加前三位的号码(例如:978, 979, 980),但是后面的号码用法与过去一样。

--------------------------------------

《中国标准书号》使用手册
《China Standard Book Number》 User'sManual


  《中国标准书号》(《China Standard Book Number》)是1986年1月由国家标准局批准颁布的一项国家标准(GB 5795-86)。该标准是在采用国际标准ISO 2108—国际标准书号(International Standard Book Number简称ISBN)的基础上制订的,于1987年1月1日起在全国实施。

  现就《中国标准书号》的使用做如下说明:

  一、“中国标准书号”产生的历史背景及其意义

  1966年11月,在西柏林召开的第三届国际图书市场研究与图书贸易合理化会议上,首次提出了制订一种国际通用的图书编号系统的问题。具体要求是:使每一种出版物都有一个唯一的、简单的识别号,以便于有效地使用计算机系统进行管理。

  1967年,英国按照上述要求制订了一个图书编号方案,并在国内推行。在此基础上,经过各国专家的反复讨论,国际标准化组织(International Standard Organization简称ISO)于1972年制订了ISO2108—国际标准书号(ISBN),并在西柏林成立了该标准实施的管理机构:国际ISBN中心(International ISBN Agency)。二十多年来,ISBN在国际上获得了广泛应用。到1987年,国际ISBN中心已记录有65个国家和地区的约16万家出版者。

  我国是世界上最早使用图书统一编号的国家之一。1956年2月,文化部出版局颁发《全国图书统一编号方案》(简称“全国统一书号”),并付诸实施。三十年来,“全国统一书号”在我国图书出版发行管理中起了重要的作用。为适应我国“四化”建设的发展和出版发行、情报文献等部门的工作需要,根据国务院关于积极采用国际标准的政策,原国家出版局决定采用《国际标准书号》,以取代原有的“全国统一书号”。经过几年的准备,我国已正式加入国际ISBN系统,并制订了相应的国家标准——《中国标准书号》。《中国标准书号》在等效采用《国际标准书号》的基础上,结合我国国情做了适当补充。

  按照国际ISBN中心的规定,加入ISBN系统的国家或地区,必须成立相应的国家或地区级管理机构,称做组区中心(Group Agency)。我国已成立了中国ISBN中心(China ISBN Agency)。设在国家新闻出版署内。中国ISBN中心将负责《中国标准书号》的实施。

  ISBN是目前在国际上通用的一种科学合理的编码系统。ISBN在我国的实施,将有效地促进我国图书出版发行业和整个文献工作的现代化建设,使以图书为主的出版业能充分发挥自己作为信息行业对社会发展的重要贡献;同时也为中国图书扩大国内、外市场开辟了广阔的前景。

  二、中国标准书号的结构及其使用

  中国标准书号是由“国际标准书号”(ISBN)和“图书分类一种次号”两部分组成。其中“国际标准书号”(ISBN)是中国标准书号的主体,可以独立使用。

  每一个“国际标准书号”都由10位数字组成,前面均冠以字母ISBN。这10位数字为不同长度的四段,每段之间用连字符隔开。这四段的名称分别是:组号、出版者号、书名号和校验位。

  例如:组号—出版者号—书名号—校验位

  ISBN 90—7000—134—5

  ISBN 7—144—11316—X等。

  除校验位固定用一位数字之外,其余三段的长度可变。但这前三段长度的位数之和,必须是9。再加上一位校验位,使ISBN编号长度的位数恒等于10。

  (1)组号(Group Identifier)

  这一段编号代表出版者的国家、地理区域、语种或其他分组特征。

  组号由国家ISBN中心分配。愿意参加ISBN系统的出版者必须隶属于一个已经加入了ISBN系统的国家或地区中心。

  组号分为五个档次,组号长度可取1~5位数字,其具体设置范围如下:

  组号档次     设置范围      可分配的组区数     每组号允许出版量(种)    每档总计出版量(种)

  一位       0—7         8                 1亿          8亿

  二位       80—94       15              0.1亿        1.5亿

  三位      950—995      46             0.01亿       0.46亿

  四位     9960—9989     30            0.001亿       0.03亿

  五位    99900—99999    100          0.0001亿       0.01亿

  合计                   199(个)                       10亿

  由表1可见,ISBN总容量是10亿种不同的出版物,可分配给199个出版量大、小不同的国家和地区。出版量大的国家、地区,获得位少的组号。如:一位数字组号可分配8个国家或地区,每组可出书1亿种;两位数字组号可分配15个国家或地区,每组可出书1千万种。反之出版量小的国家,地区获得位数多的组号。如:三位数字组号可分配46个国家或地区,每组可出书1百万种;四位数字组号可分配30个国家或地区,每组可出书10万种,等等。

  我国加入ISBN系统后,已获得一位数字组号“7”。可以出书一亿种。

  (2)出版者号(Publisher Identifier)

  这一段编号代表组区内的具体出版者。

  出版者号由其所隶属的国家或地区ISBN中心分配,可允许取值范围1~7位数字。

  我国的出版者号,由中国ISBN中心分配。我国出版者号分为五档,其长度为2~6位数字。具体设置范围如下:

  出版者号                    可分配的    每出版者号允         每档总计

   档次      设置范围           出版者数    许出版量(种)        出版量(种)

   二位      00—09            10      100万        1000万

   三位     100—499          400       10万        4000万

   四位    5000—7999        3000        1万        3000万

   五位   80000—89999     10,000      0.1万        1000万

   六位  900000—999999   100,000     0.01万        1000万

   合计                 113410(个)                    1亿

  根据各出版社出版量大小的不同,分别给予2~5位数字出版者号。其中6位数字出版者号暂不动用,留待开拓非书出版物的出版单位之用。

  由表2可见,每个两位数字出版者号,可容出书量1百万种;三位数字出版者号,可容出书量10万种,依此类推。当一个出版者号所容出书量用完之后,出版者可以向中国ISBN中心申请新的出版者号。

  ISBN的前两段编号,即组号和出版者号加在一起称之为“出版者前缀”(Prefix of Publisher)。出版者前缀是一个出版机构在国际上的唯一识别号。

  中国ISBN中心已经根据国家出版局统计的历年来各出版者的出版量,给全国各出版者分配了出版者前缀。

  (3)书名号(Titil Identifier)

  这一段编号代表某出版者出版的具体出版物。

  书名号由出版者自己分配。每个出版者所支配的书名号长度的位数是恒定的。在ISBN编号的前两段(组号和出版者号)即出版者前缀已经确定之后,书名号的位数也就是9和出版者前缀位数之差。出版者可以在自己支配的书名号的范围内,给自己的出版物分配书名号。分配时一般可按出版的先后顺序编制流水号。

  现将分配书名号有关规定说明如下:

  a)书名号必须占满其固定位数。

  例如:一个书名号定长为四位,那意味着该书名号允许在0000到9999之间取值。而且不足四位的数,也一定要用“0”在该数字之前补足四位。如:当出版第16本书时,应给书名号“0015”,切不可只给“16”或“15”。

  b)出版者必须给其出版的每一种不同出版物(包括外观方面的不同)以一个书名号,作为ISBN唯一识别号。对同一种书的不相同版本,也必须给予不同的书名号。但是对内容和外观毫无变化的重印图书,不另给新的书名号。切忌把一个书名号给两种书。

  c)ISBN编号在任何情况下都禁止重复使用。如:由于笔误使一本书带上了错误的书号,那么这个号必须从可用书号段中撤销,而且不能再给其他出版物使用;并应将这种撤销的号码,通知中国ISBN中心。

  d)连续出版物中的期刊不要使用ISBN编号。而应用ISSN编号。但对连续出版物中的年鉴、丛刊,其各辑除使用ISSN编号外,还应各分配一个ISBN编号。

  e)出版者在重印或再版其没有ISBN的库存图书时,必须补编ISBN号,并在书上刊印。

  f)出版者应设专人负责,正确、科学地管理和使用授于本社的ISBN编号段。这段编号为该出版者专用,任何其他出版者不得占用。

  出版者要对其已出版和行将出版的图书的ISBN号码建立登录账。登录账应按数字顺序进行登记。

  (4)校验位(Check Digit)

  校验位是ISBN编号的最后一位数字,用以检查ISBN编号转录过程中的错误。

  校验位是其他9位数字的求余函数。计算方法是:用10~2这九个数分别顺序乘ISBN的前九位数字,所得乘积之和被模数11除,其余数与11 的差,即是校验位的数值。所以,校验位的数值可能是1~11中的任何一个整数,当校验位为10时,用大写字母“X”表示;当校验位为11时,用“0”表示。由此可见校验位只能是0,1,2,3,4,5,6,7,8,9,X,恒为一位数。

  例1.

  ISBN  组号    出版者号     书名号      校验位

  ISBN   0  —  8436  —    1072  —     (7)

    ×    10     9876       5432

     0+72+32+21+36+5+0+21+4=191

         191÷11=17……余4

  校验位=11-4=7

  验算0+72+32+21+36+5+0+21+4+7=198

            198÷11=18

  因为:校验位与前九个乘积之和正好被模数11除尽。

  所以:ISBN 0—8436—1072—7是一个正确的ISBN编号。

  例2.

       ISBN 7—144—11316—(X)

         ×  10 987 65432

    70+9+32+28+6+5+12+3+12=177

    177÷11=16余……1

    11-1=10

    校验位为10,记做“X”

    验算:70+9+32+28+6+5+12+3+12+10=187

           187÷11=17

    所以:ISBN 7—144—11316—X为正确的ISBN编号。

  中国ISBN中心向各出版者提供他们所需的带有校验位的ISBN编号清单,供出版者分配书名号用。

  (5)ISBN编号结构的特点

  掌握ISBN编号结构的特点,是正确使用它的前提。

  a)ISBN编号采用10位数字定型定长的结构;同时各段编号(除校验位之外)长度可变。

  目前,世界上不同国家和地区之间;同一国家或地区的不同出版者之间,在出版量上存在很大差别。ISBN系统采用出版量越大;前缀越短,书名号越长;反之出版量越小,前缀越长,书名号越短的方法,既保证了ISBN编号定长,便于计算管理;又由于出版者前缀长度随出版量大小变化,而使编号容量得到充分合理的利用。

  b)采用错位分档的办法,设置组号和出版者号,保证ISBN编号分段的唯一性。

  ISBN编号是遵守下述原则分档设置组号和出版者号的:每一档取值范围的下限数,加1乘10后得到下一档取值范围的上限数。例如:一位数字组号范围是0—7。将下限数7加1后乘10:(7+1)×10=80,得到80。80为下一档、二位数字组号范围的上限数。二位数字组号范围是80-94, (94+1)×10=950,950为三位数字组号范围的上限数,等等。

  采用这种分档方法,使ISBN编号每段之间没有连字符隔开,也能准确分段。为计算机管理提供了方便。

  例如:

          组号设置                  我国出版者号设置

           0-7                    00—09

          80—94                  100—499

         950—995                5000—7999

        9960—9989              80000—89999

      99900—999999            00000—999999

  所以,当看到ISBN 7149627854时,首先你可从组号设置表判断,其第一段组号只能是7,决不可能是71或714等,因为两位组号是 80—94;三位组号是950—997等。于是得到ISBN7—149627854。“7”是中国地区组号,可参见中国出版者号设置表,判断第二段编号,只能是149,决不可能是1496或14962等。于是又得到ISBN7—149—627854。再将最后一位校验位分出,于是可得ISBN 7—149 —62785—4。

  c)设置校验位,有很高的查错功能。

  如10位数字中某一位有误,查错率为100%;即使10位数字中两位有误(这种情况发生的几率很小),仍有909%的查错率。

  d)整个编号结构的层次性,便于计算机在世界范围的分散管理及各种自动化处理。

  中国标准书号的第二部分是“图书分类——种次号”。

  ISBN系统与我国三十年来一直沿用的“全国统一书号”相比,缺少图书分类标识。鉴于我国目前图书出版、发行及图书馆行业是以手工检索、手工排架为主,在图书中印有分类标识仍是必要的。

  所以在制订《中国标准书号》时,经反复讨论决定在ISBN编号之外,增加“图书分类——种次号”。

  “图书分类——种次号”由图书所属学科的分类号和该类号下的种次号两段组成,其间用中圆点“·”隔开。

  如:A·125

  TP·301等。

  “分类号”按照《中国图书馆图书分类法》编制。其中工业技术类图书按二级类目给出。因此本段代码为1~2个汉语拼音字母。

  (附表:《中国图书馆图书分类法》)

  “种次号”是同一出版社所出版的同一类图书的流水编号。其最大数字不应超过ISBN编号第三段书名号的数字。

  “图书分类——种次号”由出版者自己给出。

  三、中国标准书号的印刷

  “中国标准书号”应印在图书的版权页和封底(或护封)上。

  国际标准书号和“图书分类——种次号”之间应以水平线或斜线隔开。

  例:ISBN 7—144—11316—X

        TP·1064

    或ISBN 7—144—11316—X/TP·1064

  中国标准书号的印刷字体,不应小于13级照排字(新五号铅字)。

  当在计算机内部存储中国标准书号时,可以省略ISBN字样和连字符。如:714411316X,以节省存储空间。当由计算机读出书号时,可根据组号和出版者号的分档范围设置表,即表1、表2,打印出ISBN编号分段格式。

  四、中国标准书号适用范围

  中国标准书号适用于下述出版物:

  印刷的图书及小册子

  缩微出版物

  盲文出版物

  混合媒介出版物(注:声、像出版物)

  用来产生可读印本的机读带

  包括教学影片和幻灯片在内的其他类似媒介出版物

  微型计算机软件

  电子出版物

  地图及教学制图、图示类出版物

  不适用于下述出版物:

  暂时性印刷材料。如:日历、广告等。

  无书名页和正文的美术印制品及美术折页印张

  转录录音材料

  连续出版物(但请参见二、(3),d)的说明)

  五、中国标准书号的管理

  中国标准书号是ISBN系统的一个子集。ISBN系统既是一个科学的编号系统,又是一个职责分明的管理体系。

  ISBN系统的行政管理分三级:国际中心;组区中心(即国家或地区中心)和出版者。国际ISBN中心通过组号设置和分配对各组区中心进行管理;组区ISBN中心通过出版者号的设置和分配对各出版者进行管理;出版者通过书名号的分配对其出版物进行直接管理。

  国际ISBN中心设在西柏林。

  中国ISBN中心设在国家新闻出版署内。

  中国ISBN中心的职责是:

  (1)负责给所有在中国注册的出版者分配出版者前缀。对全国出版者前缀进行登记管理。

  (2)代表国内所有出版者与国际ISBN中心联系。

  (3)为全国出版者提供使用书号的各种技术指导和制订使用手册。

  (4)向出版者提供他们所要求的、带有校验位的ISBN编号清单。

  (5)协调解决出版、发行、图书、情报各部门在使用书号时遇到的问题。

  出版者的职责是:

  (1)中国标准书号是通过出版者最后落实的。各出版者应严格按照本手册有关条款规定使用中国标准书号。

  (2)按照书名号的使用规定,负责分配书名号。

  (3)向中国ISBN中心提供使用书号的各有关数据及信息。

  (4)向各有关单位提供书号方面的服务。

------------------------------------------------------------

新版《中国标准书号》国家标准明年一月实施

  新版《中国标准书号》实施和中国标准书号升位工作是目前出版业关注的课题之一。由新闻出版总署图书司和总署条码中心举办的2006年全国书号条码工作会议10月25日
至26日在京举行。此次会议与2006年全国图书出版管理工作会议套开。新闻出版总署副署长邬书林出席会议并讲话。

  本次会议旨在部署升位后新版《中国标准书号》的实施、使用和管理工作。据悉,《中国标准书号》(GB/T5795-2006)国家标准已于今年10月18日经国家标准化管理委员会批准,将于2007年1月1日正式实施。届时,中国标准书号将与国际同步从10位升至13位。

  邬书林在讲话中强调,国际标准书号标准的修订和书号升位,对全世界出版业和我国出版界都是一件大事,是关系到出版业管理和出版业信息化发展的基础性工作。要认真执行书号升位,积极做好各项工作:第一,正确认识中国标准书号的使用和管理意义,条码的顺利升位是维持中国出版业正常秩序的一件大事,同时也关系到我国出版业的国际形象;第二,高度重视前一阶段中国标准书号使用中出现的问题,争取通过新标准的推行加以克服解决,并借新书号的推行,对中国标准书号使用情况进行清理;第三,要完善制度,坚决贯彻、严格执行新标准,做好中国标准书号的使用和管理工作;第四,中国标准书号的正确使用和管理,是中国出版业信息化建设的基础,要将出版物元数据做好,实现一次编码全程享用。

  会上,总署条码中心主任齐相潼着重介绍了新版《中国标准书号》修订情况、实施过程中应注意的相关事项。有关部门负责人还就新版《中国标准书号》的实施、使用和管理作了讲解和答疑。 (姚贞 冯威)

据中国新闻出版网


相关链接:

2007年书号执行新标准 “10”退位“13”登场

  2005年6月,国际标准化组织(ISO)发布新版国际ISBN标准即ISO 2108:2005《信息与文献——国际标准书号(ISBN)》,该标准规定新的13位国际标准书号的执行日期为2007年1月1日。

  ISBN早已被人们所熟知,它是英文International Standard Book Number的缩写,是国际通用的图书或独立的出版物(不含定期出版的连续出版物,如期刊)代码,即出版物的身份证。因为一个出版物按照ISBN取得的编号,将自始至终伴随着该出版物从编辑制作到出版发行的整个过程。任何人都可以通过ISBN清晰准确地辨认所有非连续出版物——书籍或其他形式,并通过 ISBN的信息知道该出版物所属的国家或地区或语言。一个ISBN只能有一个或一份相应的出版物与之对应。

  ISBN 标准对世界图书贸易起着十分重要的作用,同时它也是图书或其他出版物建立目录档案不可缺少的组成部分。从图书或其他出版物出版、发行和管理的角度看, ISBN标准不仅是图书或其他出版物分类系统的关键数据,也是方便版权管理和监视销售数字的关键环节。因此,它在世界范围内得到了极大的推广。然而,由于该系统创建时只考虑到了印刷类出版物,随着电子及多媒体出版物的出现和出版业的蓬勃发展,ISBN 系统的编号容量正在迅速减少,其速度并不亚于当年该系统的推广速度,远远超过了该系统设计时的预想消耗速度。

  需要促使ISBN增容

  我们目前使用的ISBN标准是由10位数字组成,系统编号的理论容量为10亿。这个容量看上去似乎有很大的发展空间,但实际上,ISBN的内部结构限制了系统的有效容量。例如:ISBN 7-5064-2595-5,这是一本图书的ISBN标识,该标识分为4部分,第一部分“7”是“群体识别号”代表语言区域或国家,由国际ISBN中心分配。第二部分“5064”是“出版者识别号”代表出版者,由ISBN组区中心根据出版者预期出版量的大小分配。这种在10位数字范围内将成段的号码分配给具体组区和出版者的分配方法限制了ISBN系统的总容量。如果ISBN只是 “默认编号”(也就是说,它不包含任何意义),那么,整个ISBN系统所有未被分配的编号都可以用来调剂分配,但由于该系统划分为预先设定的ISBN区域,则许多号码就不能调配使用,比如:中国的“群体识别号”是“7”,允许编号1个亿,从目前编号的消耗速度预测,20年内不会发生危机,但是这些未分配的号码已经限定了区域,其他区域是不能使用的,所以ISBN系统的实际容量也就小多了。也就是说只要ISBN系统内的任一区域出现了编号短缺,都将会影响到整个系统的正常运转。另外,10位数的结构也限制了系统的发展,它只能容10个亿,超过10个亿时系统将无法编号。

  13位ISBN标准解决难题

  新版国际ISBN标准修订的目的是全面提升ISBN系统的编码能力,标准中详细规定了ISBN的基本形式、分配规则以及ISBN系统的管理,使在出版业成功运行了30余年的系统走上一个新的平台,标准化、规范化、科学化地保障了系统的可持续发展。

  新版国际ISBN标准主要修订的内容包括:(1)、增加ISBN系统的编号容量和出版物的范围,第一版的国际ISBN标准(ISO 2108:1972),只是用来为印刷版图书编号,而新版国际ISBN标准适用于各种作品形式(例如,精装、平装、盲文、录音带、视频、在线电子出版物等)、各种电子出版物格式(例如,“.lit”,“.pdf”,“.html”,以及“.pdb”等),而不仅仅是印刷版。(2)、确定了与ISBN编号相结合的元数据以及它们的关联方法。(3)、确定了ISBN分配与使用的规则。(4)、确定了分配ISBN的权利和ISBN系统的管理。(5)、明确了 ISBN系统的费用收取问题。

  13位ISBN的结构

  10位数的ISBN由4部分组成,它分为组号、出版者号、书序号、校验号。比如:ISBN 7-5064-2595-5,“7”是组号,代表中国;“5064”是出版者号,代表出版社,由中国ISBN中心根据出版社预期出版规模的大小分配; “2595”是书序号,“5”是校验码。

  13位数的ISBN分为5部分,即在10位数前加上3位ENA(欧洲商品编号)图书产品代码“978”,这样书号标识与物品标识就完整结合在一起了。上面的ISBN 编号显示为:ISBN 978-7-5064-2595-7。

  条形码显示为:

  校验码将根据前面的12位数而不是9位数计算得出。13位数的系统与10位数的系统是兼容的。为了使系统资源供给充足并且能连续不间断地运行下去,同时为使更多的组织和个人进入出版界成为可能,在“978”用完后,可以用“979”“980”或者……,这样,EAN产品代码成为了ISBN的一部分,13位数的ISBN系统就与国际供应链上的EAN-UCC系统完全吻合了,出版物从此不再作为另类产品有独立的渠道发售,而是作为产品的一个分支存在,在贸易上的运做更容易进行,同时也可以预防任何可能的混淆、重复和错误的问题。

  我国于1991年加入国际物品编码协会(EAN),1993年开始在出版物上使用条码,预计新标准的实施将不会给出版业的各个环节带来障碍。

  修订ISBN标准是ISBN系统管理方式改革的一个契机,ISBN系统的发展如同生命一样有成长周期,ISBN系统在经历了30余年的发展后,应该有更科学、更规范、更标准化的管理方式以维持它的可持续性发展。

  2007年1月1日,新标准将全面实施。(邢瑞华)

据中国ISBN信息网

科学发现与方法:黑箱、灰箱、白箱

【转贴】科学发现与方法:黑箱、灰箱、白箱

在人类认识世界、从事科学研究的时候,常常会遇到这样的情况,有一些我们所要认识或控制的客体,由于种种条件的限制,其内部的结构一时不能够(不允许或不容易,被我们直接观测到,仿佛是一个既不透明且又密封的箱(盒)子,其复杂的结构和神妙的机理,珍藏其中,人们无法从外部或无法打开来直接探察其内部的奥秘。例如人类思维着的大脑,直至目前,人们还不能直接从外部,或通过生理解剖窥视其内部·构造细节和思维机理。对于这样一种内部结构尚不能直接观测,只能从外部去认识的客体,控制论创始人维纳起先称它为“闭盒”(Closed Box),后来艾什比、维纳又称它为“黑箱”(Black Box,又译出“暗盒”)。

  黑箱这种认识对象,在现实中简直是随处可见。例如:商店中待顾客选购的电视机;电工中被封闭在盒子内的“四端网络”;军事上不准拆开而要对其内部故障作出判断的“保密的密封投弹瞄准器”;门诊医生面前就诊的“患脑震伤或失语症的病人”;一批受到心理学家跟踪观察的儿童;国家欲实行计划控制的人口系统;如此等等,都可称为“黑箱”。

  当然,黑箱的概念是相对的。同一研究对象,对于不同的认识主体,由于主体拥有的经验、技术手段及认识任务的不同,可以是“黑箱”,也可以不是;在不同的历史时期,由于人类认识能力的提高,某一客体开始是黑箱,后来可能是“灰箱”(Grey Box,其内部结构可部分直接观测的系统),或是“白箱”(White Box,其内部结构可以直接观测的系统)。认识对象是否是黑箱,不仅取决于客体本身,同时也与认识主体有关。认识对象的黑箱属性,是认识过程中主体与客体相互关系的一种反映。可见,“黑箱”并不是对现实某些事物的生动形象的比喻,而是具有认识论和方法论意义的概念。

  为了研究这个黑箱,应该使用哪些一般的方法呢?黑箱内部的那些性质可以探出来,哪些根本探不出来?这就成了认识论和方法论的重要课题,由此发展成一种研究事物的黑箱方法,形成了黑箱理论。

  很早以前,人们为了研究黑箱这类认识对象,就不自觉地采取了现今被称为“黑箱方法”的一些基本原则:不打开黑箱,而是利用外部观测,考察对象与周围环境的相互联系来了解黑箱的特征和功能,猜测其内部构造和机理。我国人民通过长期考察人体与生活条件的联系,考察人体对各种刺激的反应,逐渐熟悉了人体的各种功能,创立了关于人体生命控制系统的经络学说,总结出一套“望、闻、切、问”,“审证求因”,“辨证施治”的诊断与治疗医学技术和理论,就是典型的事例。但是,自觉地把“黑箱”概念引入方法论领域,把黑箱方法上升为一种具有普遍意义的方法,并赋予它现代科学形态,则应归功于控制论的创始人维纳和艾什比。

  控制论所研究的对象是技术、生命、社会的控制系统,这是一个极为复杂而又高度活动性的系统,运用近代科学历形成的传统方法,即把复杂的事物分解为简单的元素。把整体肢解为部分。用简单事物来说明复杂事物,用部分来说明整体,显然是无能为力的。例如人脑这个系统,仅大脑皮层就有一百多亿个神经元,每个神经元平均又与约一千个其他神经元相联接,要弄清每一个元素及每一个具体联系几乎是不可能的,即使弄清了也不能简单地说明人脑的整体功能。维纳等人不愧是富于创新精神的科学家。他大胆冲破了近代科学所形成的传统的方法论思想的束缚。继承和发展了古代本质上是从整体、从整体与外界环境的相互联系中研究事物的辩证思维方式,又吸收了近代科学实践中所形成的一套行之有效的精密的科学研究方法(如实验方法、数学方法、模拟方法等),并且引进入“系统”、“信息”等新的概念,从而形成了适合于控制论研究对象的新方法——控制论黑箱方法。

  控制论黑箱方法一般包括如下的基本原则和步骤:

  (1)相对孤立的原则,确认黑箱。就是说,把所要研究的对象看成是一个整体。把它相对地从其环境中孤立出来;把研究对象所受到周围环境的影响看成是通过特定通道实现的“输入”,把研究对象对周围环境的作用看成是通过特定通道来实现的“输出”。根据研究对象的性质相研究目的,划定了研究对象与周围环境的边界。选定了对象与环境的相互联系的特定通道,确定了对象的一组输入和输出,就意味着一个黑箱的确立。

  (2)观测和主动试验,考察黑箱。考察黑箱就是要考察对象的输入、输出及其动态过程。由于控制论所要研究的是有组织系统的目的性行为和控制功能,而行为指的就是对象在周围环境作用(输入)下所作出的反应(输出),功能是对象对于周围环境的变化作出反应的能力,所以考察输入、输出及其变化,在控制论系统的研究中具有特别重要意义。对黑箱的考察可以采取直接观测的办法,对系统不加干预的情况下测量系统的输入和输出,取得系统输入一输出状态变化的记录。亦可以采取主动试验的办法,人为地在系统的输入端,加入某种典型的测试信号(如在控制工程中,采用单位阶跃式、单位脉冲式、正弦式的测试信号等)然后再观测对应的输出及其变化。从而获得对象的功能特性和内部结构的大量信息,作为认识黑箱的根据。

  (3)建立模型,阐明黑箱。即利用系统的输入、输出的观测试验的数据,以及原有对系统的知识,建立关于研究对象的模型(框图模型、动态登记表,数学模型等),然后据此对系统的功能特性进行定性、定量和静态、动态的分析评价,对系统的未来行为作出某种预测,对系统的内部结构和机理作出某些推测和假说。在这方面,近年来已发展了一个新的学科分支——系统辨识。

  值得指出的是,黑箱方法也给探索物质结构奥秘指出了一条重要的途径。早在1911年卢瑟福面对着原子这一黑箱,由于利用α射线轰击(输入)金属箔,观测粒子散射(输出)的特性,根据α粒子行为特性提出了原子结构的新模型。本世纪五十年代末期,人们面对基本粒子这一黑箱,用能量为十亿电子伏特的电子,对质子进行弹性散射试验,研究电子散射的角分布(输出),发现质子电荷分布在半径为0.8×10一13厘米的球形区域内;六十年代后半期,人们又用能量高达二百亿电子伏特的电子轰击质子(输入),进行动量传递很大的非弹性碰撞试验,进一步发现质子内部电荷分布不均匀,存在一些颗粒状散射中心,根据上述考察的事实,使人认识到强子内部具有内部结构,导致了各种基本粒子模型的提出。

  总之,从工程技术到社会领域,从无生命到有生命系统,从宏观世界到微观世界,黑箱方法都有其用武之地。

  当然,黑箱方法同任何其他方法一样,也有局限性,黑箱方法强调从整体、从整体与外部环境联系中认识事物,而不去深究其内部结构和局部细节,这是它的长处,也是它的不足。结构与功能是辩证的统一,运用黑箱方法来研究系统的功能和行为特性时,由于完全不对其内部结构进行研究,必然不可能更深刻地认识系统的功能和行为特性的基础与本质,运用黑箱法来对系统的内在结构和机理进行推测和辨识时。也必须特别谨慎小心,切莫轻率从事。现代系统辨识理论指出:并非所有系统都可以从它的输入、输出完全确定其结构和参数。正确的态度应当是把黑箱方法与其他科学方法结合起来。取长补短,相得益彰。

某人的投稿经历《Nature》

随着综合国力的不断增长,中国作为一个大国在国际上的影响力与日俱增。中国科技界的实力也在不断增强。“科教兴国”的提出与实施将把这一趋势提到个新的阶段。在这样一个在趋势下,中国科技界也在各个领域中全面走向世界,成为世界科技界的一个重要声音。科技界走向世界并影响世界的一个重要标志是通过各种出版物向世界介绍中国科学家的研究成果、科学发现与学术思想。科学研究,尤其是基础科学研究的成果主要是以科技论文的形式表现出来的。这些研究成果的影响与出版物的传播范围与能见度有相当的关系。一篇有价值的研究论文如果纯粹以中文发表在某个地方刊物上,它的价值受到国际同行认可的机会就相对较小。
据我所知,为了让世界更多地听到中国科技界的声音,至少有2个方面的工作正在进行:一是提高国内刊物在国际上的影响力,如增加论文中英文信息的份量,在出版形式上与国际刊物规范接轨等等;二是通过经济、名誉与个人利益相关联等手段鼓励中国科学家在国际性的专业刊物上发表论文。这些措施已经取得了明显的效果。据《中国科学引文资料库》统计结果表明,1997年中国科技论文总数和被引用数双双首次进入世界前10名。被收入SCI的论文数量达16 833篇,比1996年增长16.8%。在众多的国际刊物中英国的《Nature》和美国的《Science》是最为著名的2种综合学术刊物,它们的发行量和影响力可以说高于其他任何专业性刊物。从1994—1998年,我曾在《Nature》上以第一作者发表过4篇文章,也为《Nature》审过若干篇稿件。在编辑的鼓励下,我想借此机会谈一下自己向英国《Nature》投稿、审稿的经验与体会,希望能对科学界同行 向《Nature》等国际刊物投稿时有一点帮助。

1 为什么向《Nature》投稿
我为什么连续向《Nature》而不是向《Science》投稿?这个问题有它的机遇性,也有一些实在的原因。对我来说,文章在两刊中任何一个发表具有同等的重要性。但两刊各有自己的特点,细小的特点有时可以影响投稿者的倾向性。两刊在形式上有它们的相同性。比如科技论文基本以3种形式出现:(1)学术论文:《Nature》:Articale;《Science》:Research articale;(2)研究报道:《Nature》:Letter;《Science》:Report;(3)通讯:《Nature》:Correspondence;《Science》:Letter。研究文章较长,一般可在5—7页左右。研究报道一般为2—4页,通讯一般不超过1页。但两刊的一个重要差别是《Science》允许参考文献中在一个参考文献号下列出一个以上的文献,同时也允许在参考文献下加入简要注解说明等。这2点在《Nature》中都是不允许的。因此,在同一类文章形式中,《Science》提供了较大的空间。在对空间要求极为苛刻的情况下,这是十分值得考虑的一点。
另外一个重要区别是两刊的审稿程序。这个程序与两刊的隶属有很大关系。《Science》是“美国科学促进会(AAAS)”的会刊,而《Nature》则属于一出版公司。《Science》有一个很大的评审委员会负责审稿,评审委员会成员由世界知名科学家组成。这些科学家的背景与组成成分对稿件的筛选有很大的影响。而《Nature》对稿件的筛选受编辑的影响较大。稿件由编辑初选后寄送有关专家审阅。
第三点差别是《Science》在北美的影响力较强,这和它是AAAS会刊有关。因为美国许多科技人员都是该会会员,而会员交纳会费后就自动收到每一期《Science》,因此它的发行量较《Nature》大一些。而《Nature》则基本是商业性经营。但它在全球的影响似乎较大一些,所发表的文章引用率也高一些。但这些差别每年都会有变化。
对我来说,一个重要的因素是《Nature》有它的姐妹刊《自然医学》和《自然遗传学》等。由于医学和遗传学是当今科学研究中最为活跃、研究成果产出最高的2个学科,因此,《Nature》姐妹刊的存在可以减少这2方面文章对其他科技论文的压力。其结果是非医学,非遗传方面的研究可能有较多的机会在《Nature》上得以发表。一旦我向《Nature》投了第一篇稿并得到发表后,便与《Nature》的编辑有了某种工作联系,继续向《Nature》投稿似乎顺理成章。

2 什么样的文章能在《Nature》上发表
这个问题没有固定答案。由于它的知名度,世界上许许多多科学家都希望在《Nature》上发表文章,使自己的研究为世人所知。由于稿源充分,《Nature》的退稿率可达90%。也就是说每10个投稿人各投1份稿,仅有1人能发表。我共投过4次稿,4次都发表了,不能不说运气比较好。除了运气之外,以下一些看法也许可供参考。
首先是研究的质量和重要性。质量的衡量较为客观,可以从研究的深度广度,研究方法,资料数据的完整与可信程度,论文的逻辑推理与结论等方面来判断。重要性则是一个很主观的没有固定衡量标准的概念。不同领域的研究其重要性基本上不能相比,比也没有多大意义。即使在同领域的研究中相比也有很大的难。那么什么样的因素让我觉得我的研究“重要”到能投给《Nature》呢?
我的看法是,研究内容首先要新。新发现一般较具报道性。虽然《Nature》是一份综合性学术刊物,但它同时也刊载大量广告,具有商业刊物的性质,可报道性对它来说至关重要。这一点对投稿人作出判断也是十分重要。
我所学的是古生物,古生物学研究中常有新发现。中国地大物博,古生物资源丰富,最近几年中国古生物研究比其他领域在《Nature》和《Science》有较多的报道,比如辽西的中生代鸟化石,和这个“新”字多少有些关系。但新的发现在科学研究中比比皆是,并不是所有新发现都可在《Nature》上发表的。新发现还应当有几个其他的要素。(1)它为基础科学研究提出了新的方向、新的问题;(2)它提供的证据和解释有助于理解当前具有争议的问题;(3)具有广泛的公众效应。第1点很容易理解。对第2点各家刊物有不同的政策,有的刊物倾向于少登或不登有争议的东西。从我的经验来看觉得《Nature》似乎鼓励某些带有争议性的研究。往往在带有争议性的研究发表的同时或以后,《Nature》还会组织有关的讨论,让不同的看法意见得以表达。这不仅可以起到活跃和引导科学研究的目的,也增加了刊物本身的能见度。公众效应在我的理解中是指在科学界被接受和感兴趣的程度。过于深奥狭窄的研究较不容易在《Nature》上发表。因为这一类文章涉及的读者面窄,编辑或审稿人经常会建议作者将此类论文投到专业刊物上去。辽西的鸟化石对于鸟的起源演化以及鸟类与其他脊椎动物(如恐龙)的关系都有重要意义,具有上述几个要素,所以比较容易出现在《Nature》上。辽西中生代鸟化石之宝贵,可以说是皇帝的女儿不愁嫁。但皇帝的女 儿毕竟有限,大部分的科学发现往往不太显眼,它们的重要性不是一眼就能看出来的。这些研究能否登上《Nature》要看研究者能否发掘出其上述几个要素来,这取决于研究者对学科的了解深浅,知识面的广窄,技术手段的先进程度等“水平”因素,如最近1期(1999年2月18日出版)《Nature》上刊载的Zhu M.等人的论文,虽然所研究的材料并不十分精彩,但其涉及的问题也有以上几个要素。述的研究以新发现为其重点。
另一类科技论文偏重于建立理论、假说、模型等。这一类论文带有综合性,针对存在的问题,虽然其重要性可能更高,但它们在《Nature》上发表的几率较小。这可能是因为:(1)它们不如一个新发现来得实在而具报道性;(2)它们需要大量的支持资料和数据,因而不易用短文表达;(3)它们容易因为审阅者的不同观点而被枪毙掉;(4)这类论文数量本身较少。对于第2点来说,(Nature)现在可以让一篇论文的支持资料和数据存入它的万维网页上作为正文的辅助材料,扩展了有关论文发表的面。从我所了解的情况看,我们中国学者发表的这一类论文相对较少。同行中常会有人抱怨某某研究不怎么样,居然也登在《Nature》上。
客观地看,有2点可能构成这种抱怨的基础。(1)严格从科学研究的角度来看,《Nature》上的文章不一定都是某个学科中最重要的研究。有的重要研究因为某些技术原因,比如篇幅所限无法以短文的形式呈现出来,因而不会在《Nature》上发表。有些重要的研究不一定有上述的可报道性。(2)虽然经过严格的审阅,但人毕竟有出差错的时候,更不用说偏见与知识面的有限。因此,科学价值有疑问的研究有时也会蒙混过关刊登出来。

3 《Nature》文章的写作
《Nature》是英文刊物,所有的文章都以英文写成。由于篇幅限制,文章必需简明扼要,能将研究的要点准确无误地表达出来。总的来说写这样的文章难度较高,每个字句都必须仔细推敲,相对费时较多。这并不意味着写作时需要特别漂亮的英文。相反《Nature》的文章要面向非英语国家读者,因此更需要以简单平易的英语来写作。科技文章的第一要素是清晰,明确告诉读者作者要讲的事,而不是绕弯弯。我曾经问过《Nature》的编辑《Nature》稿件写作有什么窍门,回答是就象平时说话一样平易简单就行。但以平易的英文写作与用平易的中文写作一样,或许更不容易。
对于中国学者来说,以英文写作或多或少都会有些困难。我个人认为这一点多少会影响到投稿的成功率。因为如果作者的思想不能明确表达出来,研究的意义可能被削弱。但我相信真正有价值的研究不会因为英文上的缺陷而被埋没。不断的练习以达到一个基本的英文表达水平则是必要的。稿件请同行阅读修改也不失为一可考虑的途径。当然,科学研究是一个竞争很激烈的领域,适当的保护行为是必需的。
《Nature》面向的读者是多样性的,它要求作者尽量少用偏颇的技术词汇,能不用尽量不用,必须要用时一定要将定义解释清楚。《Nature》希望一篇科技文章不仅本专业的人士能理解,非专业读者也能至少理解其主要意义。尤其是文章开头的一段,更是要让人一眼看懂文章的背景,内容和结论是什么。因此,这一段虽然仅有百十来个字,往往最为难写。我通常要经过几十遍的修改才能感到满意。由于篇幅有限,基本没有可以重复的余地,文章的结构,逻辑关系就变得非常重要。仔细推敲文章结构可以增加文章的明晰度并减少不必要的赘述。
《Nature》文章中,允许一定数量的图表。图表不仅是研究结果的直接表述,我相信对文章的接收发表亦有一定的影响。因为一个刊物是让人读和看的,好的图表可以增加可看性。此外,图表也允许有一定字数的图件说明,与正文相比,这是一个可以包含大量信息的地方。善用图表及图件说明非常重要。总的来说,图件说明主要是技术性的内容,而有关的背景,结果,讨论,结论等则是正文的内容。

4 《Nature》文章的审稿
一般来说,如果作者知道负责自己这个研究领域的编辑,可以将稿子直接寄给该编辑。否则寄给《Nature》编辑部,除了伦敦的办公室外,《Nature》在美国华盛顿,***东京有自己的办公室,北美的作者一般可将稿件寄往华盛顿办公室。
一篇稿件投到《Nature》后,作者会很快收到编辑的一个卡,表明稿件已收到。如果在1—2个月中作者没有听到任何消息,那么这可能是个好征兆,说明编辑认为稿子可能适合《Nature》,把稿子寄给有关专家审阅去了。如果编辑认为稿子不合适,会很快将它退回作者。从我自己的投稿审稿经验来看,稿子一般会寄给3位专家审阅。投稿时作者可以附带建议可能的审稿人并提供他们的联系地址、电话、电子邮件信箱等资料。但编辑为了审稿的公正性,不会把稿子都寄给作者建议的审稿人。编辑先要与可能的审阅人联系,征求他们是否愿意审稿并且可在3个星期之内将审完的稿子寄还给编辑。如果达成协议,稿子会经由快递在第2天或第3天寄到审稿人手中。《Nature》要求审稿人对稿件绝对保密,不允许告诉其他任何人所审的稿件,不许复印留存,不许让另外的人看所审的稿件。如果由于技术上的原因需要某人协助审稿,则审阅人需向《Nature》报告这一情况。审稿人当然不能使用稿件的内容。由于审稿人一般是同行,所以存在研究上的利益冲突是常见的情况,保护作者的利益不言而喻是十分重要的,也是科学道德问题。审稿人要说明所审稿件的科学性、重要性、是否有新见解以及是否适合在《Nature》上发表,并写下具体的评论。尤其在有不同意见时,更要说明问题所在的原因理由。稿子审阅完后,审稿人可向编辑表明自己的名字可以让稿件作者知道,否则所有的审稿意见将以匿名形式经由编辑寄给作者,让作者进行修改。修改过程中,如作者不同意审稿人的意见,不愿做相关的修改,则需要提出合理的解释和理由。当然,如果审稿人对稿件提出严重的问题或表明其意义不大,编辑可根据审稿人的意见正式退稿。稿子修改后被再次寄给审稿人,编辑也会把另外2个审稿人的意见分别寄给第3个审稿人。审稿人根据稿子修改的情况再作一次审评,审评后的稿子由编辑再次寄给作者修改,最后由编辑决定是否发表。当然稿子也可能在一次审阅后便适合发表,也可能有2次以上的修改。根据我的经验,一份稿件从投稿到正式发表要花4—7个月的时间,少数情况会更短或更长。一旦稿子被采用,编辑会正式通知作者。从采用到正式发表一般约1个月的时间。
总的来说,这个周期是相当短的。作者在收到稿子被采用发表通过的同时,要与《Nature》签一个合约,表明在文章正式发表之前不公开自己的研究结果,尤其不能与媒体发表有关内容,否则《Nature》有权不发表该稿件 。唯一例外是在专业性的学术会议上简报研究内容。另外一种例外情况是虽然作者与某个媒体的记者谈论了自己的研究,但记者保证不事先发表有关内容。这种情况主要是因为记者一般不懂研究的内容,需要一定的时间来理解,以便文章正式发表时能及时发新闻。《Nature》办公室每个星期四在伦敦和华盛顿(东京的情况我不了解)有新闻发布会,介绍下期《Nature》的内容。此时,有关的研究内容便可见报了。因为《Nature》也希望通过媒体的报道来扩大它的影响力。从这个时候到文章发表后的两三个星期间,作者将会接到许多报刊,电台记者的采访。论文在《Nature》发表是没有稿酬的。作者在收到稿子被接收发表通知时,还会收到论文抽印本的定购单。如需要,作者可用课题费或自己掏腰包定购抽印本。如果文中有彩色图表,抽印本会很昂贵。
最后要说的一点是,就象其他任何出版物一样,《Nature》也在不停地开发自己的市场。作为一个国际性的综合科学刊物,《Nature》在欧美有更大的影响,这与历史、语言和经济发展程度等因素有关。随着中国和亚洲各国经济、科学的不断发展,《Nature》也希望开拓这一巨大的市场,这给中国科技人员带来了更好的机遇。可以预见中国科技研究的结果将会更多的出现在《Nature》等国际科学刊物上。

Windows下svn服务器架设

转贴
1 首先下载Subversion Windows版本的服务器软件,下载地址如下:
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91
文件为svn-1.2.0-setup.exe,然后执行安装,安装目录如:d:\develop\subversion,然后设置一下系统的环境变量Path,将Subversion的bin路径加入到系统的path中。
2 创建Subersion库:首先建立一个目录存放Subversion的库,在该库中存放所以的Subversion项目,如
D:\repository\subversion
3 创建一个新的Subversion项目。
只需执行:
svnadmin create D:\repository\subversion\projectname
下面需要设置项目的用户信息,只需打开Subversion项目conf目录下passwd文件添加新的用户即可,如
[users]
admin = mypassword
接下来是设置项目的一些其他信息,打开conf目录下的svnserve.conf文件,然后进行如下设置即可:
[general]
anon-access = read
auth-access = write
password-db = passwd
realm = projectname
4 启动Subversion,这里可以通过命令行启动,最好使用SVN Service Wrapper,你可以通过以下地址下载: http://dark.clansoft.dk/~mbn/svnservice ,将SVNService.exe拷贝到Subversion安装主目录的bin目录下即可,然后执行以下命令,就可以将Subversion以windows服务方式启动啦。
SVNService -install -d -r D:\repository\subversion
5 向Subversion中导入项目:现在我们需要将项目导入到Subversion的库中,只需执行一下命令:
svn import d:\projectname svn://localhost/projectname -m "initial import" --username admin --password mypassword
这样项目就导入到subversion库中啦。
6 将项目导出:从Subversion项目中导出项目也很简单,只需执行以下操作:
svn co svn://localhost/projectname --username admin --password mypassword

2007-04-28

游戏的两种不同的玩法

一个高手托梦给我
游戏有两种玩法

一种是普通的玩法,参与游戏,按照规则,一步步玩下去。


另一种是独特的玩法,把构成游戏的各个要素当成玩具来玩。

游戏由什么构成呢?

可以看到的包括:参与者,裁判,规则,道具,场地等等。

第二种玩法道具可以是道具,也可以不是道具,游戏本身只不过是你的玩具而已。

如果两种玩法一起玩,那心态可就要好了!!!

2007-03-18

想做一个magiclinux的动态的阶段报道

原来想做在这里,但后来决定做到
google 论坛上了,依托google的搜索功能,让更多的人看到。

但不知道能不能坚持。

迷上了刘慈欣的作品

我从来不追星。

看书也不看谁是作者。

技术方案从来不管是谁提出来的。

但这次我却记住了一个不是历史人物的现实中的作家。

他的博客:
http://daliu.blogd.cn/

2007-03-10

从社区获得帮助

可以自由修改,任意传播。
欢迎共同完成本文。


从社区获得帮助
Ver 070309Night

Linux是大集市式的环境下开发出来的,因此信息也是到处都是。
对于新手,如何获取信息来解决自己面临的问题,往往是最大的
障碍。
通过互连网上成百上千的BBS,邮件列表,Web论坛来求获取帮助是必备
的本事。
但要别人帮助你,需要自己有一定的基础,并能够提供有用的可靠的
信息。

一、寻求帮助前的准备工作。

1。先了解一下自己面临的问题的现状,自己最大的障碍点在那里。
有时是自己对问题的背景知识不够,无从下手。有时是只有具体的一个
细节有疑问。

2。整理一下思路,看看自己已经作了什么,已经排除了什么因素。

3。调整自己的逻辑方式,特别注意不要受你原有产品的逻辑设定影响。
比如:Linux和windows在网络配置方面有逻辑上的差别,这种差别是系统
设计带来的,一般情况下,没有谁优谁劣的问题。

4。尝试自己处理问题,比如Google现有的文档,查看man文档。查看帮助文件
到出问题的部件的项目主页看看现有的文档。以来加深对问题的理解。二来
这往往是最快最有效的办法。

二、收集信息。

要寻求帮助,需要的是提供有效的信息。
提供信息有两种方法:
一种是提供反映你系统现状的信息,如配置文件的内容,诊断工具的输出,
屏幕的截图,log文件等等。

二是提供你的超作流程,和现象。

三、常见问题的信息提供办法。

1.显示配置问题:
a) 提供硬件信息。

lspci > pciinfo.txt
lsusb > usbinfo.txt
dmesg > booting.tx

然后提供给社区生成的文件
目的:提供显卡鼠标等的信息。

b) 提供X系统的配置文件和log文件:
对于现在最常用的xorg
是:
/etc/X11/xorg.conf
/var/log/Xorg.0.log

c)问题的描述。

2.硬件无法驱动的问题:
a)硬件的主控制芯片的型号,设备ID,:
lspci > pciinfo.txt
lsusb > usbinfo.txt
dmesg > booting.txt

然后提供给社区生成的文件
目的:提供硬件的信息。

还有就是硬件上面,或包装的标识。

b)内核的信息
uname -a 的输出
lsmod的输出

c)问题的描述

3。网络配置问题
a) 网络接口信息
ifconfig -a 的输出

b)路由表的信息
route的输出

c)DNS配置文件的内容

d)网络的物理结构
最好可以用物理连接的示义图,或拓扑图表示。
也可以用文字描述。

e)问题的描述
最好带有几个关键ping 的输出

ping www.google.com
ping 网关IP
ping modem的IP
ping DNS的IP

四、其他
1.为什么使用文本界面的工具
因为文本界面的工具已经发展了很久了,不同版本间的差异很小,
而且输出的内容清楚明了。且输出结果为文本,便于交流。
还有就是这样的东西能直接放映本质的东西。且到处都可以找到。

2.应该把求助发到哪里
针对发行版特有的问题发到发行版的专门的论坛或邮件列表。
针对某个项目的问题发到项目的论坛或邮件列表。
总之要有针对性。
并注意礼貌。并积极参与问题的讨论。不要好像大家亏欠你似的。
不要表现得对别人过分得依赖,如果你让人觉得你什么都不愿想,
很难一起解决问题得话,大家就没有热情了。

2007-02-25

游走在灰色地带,大打擦边球的数字电视机顶盒共享器

游走在灰色地带,大打擦边球的数字电视机顶盒共享器

来源:薄皮山芋

随着南京市有线电视数字化发展进程的加快,数字电视这一新兴的电视观看及传输方式已经开始被更多的普通市民所熟悉,数字电视以接近于DVD的画质和立体声甚至5.1声道伴音这两大最明显的特点受到了不少有线电视用户的关注,同时更多可选择的电视台、点播节目也为丰富市民的业余生活增添了不少色彩,不过在数字电视刚刚起步的萌芽阶段,还有多的不足和缺点需要改进。

按照国际惯例,数字电视机顶盒(SET-TOP-BOX,简称STB)分为数字地面STB、数字卫星STB、数字有线STB和网络STB4种,南京市目前正在大力发展的数字电视类型是数字有线STB,是目前成本最为低廉,也最适合大力向普通市民所推广的。整体来说,数字机顶盒以支持HDTV和互动性作为发展方向,而就目前的机顶盒产品来看,一部机顶盒内包括了接收数字信号的调制解调芯片、视频信号编解码芯片、音频处理器、音视频数模转换芯片等,一些高端的机顶盒中甚至还会整合安全芯片甚至可录像硬盘,可见数字电视机顶盒在未来的发展空间还是相当宽广的。

上图中的三部机顶盒中包括了南京市民目前所使用的三款不同品牌、型号的机顶盒,其中最上方的创维C6000采用了意法的Qami5516方案;熊猫3216采用了意法的5516芯片,带有180MHZCPU,而最下方的银河则采用了最为简单的富士通功能单芯片H20A,虽然这三种机顶盒在内部的设计上有一定的区别,但它们都是需要通过插入数字电视智能卡才能够工作的,而数字电视智能卡就相当于一个人有了驾照才能合法地驾驶汽车一样。

在使用模拟电视信号的时候,大家只需要申请有线电视开户之后就可以在家中通过自带电视信号调谐器的电视观看节目,如果有多部电视的话只要购买有线电视信号分配器就可以在所有的电视上观看有线电视。而数字电视却将这种免费的电视信号共享给“封杀”了,机顶盒需要在插入有效的智能卡之后才能使用就是为了保证数字电视信号不被盗用的一种方式,同时也能够保证数字信号不被盗版商用来作为盗版节目源。

为了保证数字信号不被盗用,数字电视内容管理方式以条件式接取(CA)和数字版权管理(DRM)作为基本保护机制,目前国内的数字电视机顶盒采用的管理方式就是条件式接取这种机卡分离的方式,用户必须通过专属的智能卡来取得授权才能够接收被解码的信号,而服务提供商也能够通过这种方式接收用户的信息,包括用户户名、地址、智能卡卡号和收看数字电视的费用等信息。这种机卡分离的机顶盒使用方式被美国、欧洲和亚洲等国视为数字电视发展的机顶策略。

DRM采用的是许可证管理策略,由数字电视信号运营商对节目源进行加密,在用户通过机顶盒发出节目接收请求之后系统会自动检查是否经过许可,而认证的方式也同样是通过IC卡等带有帐号、密码等信息的进行的,不过DRM管理的规格相当繁多:Windows MediaDRM、开放移动联盟OMA推出的DRM 1.0/2.0规格、UT-DRMNDSSecureMediaWideVineBesDRM等,规格的不统一使其并不被大多数有限数字电视运营商所接受。


由于数字电视信号必须通过机顶盒才能接收,同时采用了用户身份认证的防盗用方式,所以有线数字电视节目只有一部电视机搭配一部机顶盒才能够正常观看,在目前大多数市民家中同时拥有一部以上电视的这一情况下,如果希望每部电视机都能够收看数字电视的话必须购买数量相对应的机顶盒,这在一定程度上家中了消费者观看数字电视的成本,于是有一些厂家开始在有线数字电视共享上开始下功夫,纷纷推出名为数字电视机顶盒共享器的产品,以此实现对数字电视信号的共享。

目前的数字电视机顶盒共享器共有有线和无线两种,有线的共享器只需要将共享器与机顶盒接驳,并且通过音视频信号线将它与其它电视的AV接口接驳就可以使用,而无线的共享器则包括与机顶盒互联的信号发射器和与电视互联的信号接收器。

机顶盒共享器的功能介绍上将这种产品的优点共分为多显示终端信号共享和节约费用两大类,对于大多数购买这种产品的消费者来说,可能最能够吸引他们的是通过共享器可以节约机顶盒的购买费用和电视信息点播费,有了省钱作为最大卖点之后,这种产品自然更受关注。

虽然这种产品具有一定的实用意义,但是我们仔细看看就会发现这种所谓的共享器实际上就是一个音视频信号分配器,与机顶盒连接的接口包括了复合视频输入和模拟立体声音频输入这两个接口,而用于输出信号的则包括了复合视频信号输出和3.5毫米信号输出接口,并没有能够直接发送及接受智能卡用户信息的接口,这也就意味着即使是通过这样的共享器接驳其它电视之后也并不能独立选台,换句话说,如果客厅中的电视在通过机顶盒播放中央一套的电视节目,那么其它房间的另一台电视也同样只能够播放中央一套的电视节目。

无线机顶盒共享其与有线机顶盒共享器一样都是通过音视频接口接受机顶盒上的第二路信号输出接口来实现数字电视信号的“共享”的,不过无线的共享器的传输方式是通过红外、调频或2.4GHz来实现的,值得注意的是,目前的机顶盒在背后的接口都带有两路信号输出接口,只要使用连接线将机顶盒的信号与两台电视连接就同样可以实现这样的所谓“共享”功能,而这样一来机顶盒共享器的作用也只有在不同房间都可以用遥控器控制机顶盒这种“遥控共享器”的功能了。

那么这种有限数字电视机顶盒共享器是不是一无是处呢?事实上有一定动手能力的消费者完全可以将这种共享器与客厅中的DVD连接使用,这样没有DVD的卧室里的电视机也同样能够收看DVD影碟。不过需要注意的是,目前的有线电视管理相关规定显示:如果在有线电视网络上连接其他设备,必须通过广播电视管理机构的审查、批准和备案,否则就是非法入网。到目前为止,在有线电视网络允许入网的设备中,还没有机顶盒共享器这种产品,这也就意味着没有入网手续的机顶盒共享器在有线电视管理部门将被视为一种违规的产品。

不过目前机顶盒共享器的经销厂家认为:他们销售的机顶盒共享器与机顶盒连接可以将机顶盒输出的电视信号放大,传输到其他电视机上,达到多台电视机共看数字电视的目的。而共享器所解决的只是信号传输问题,并未涉及到破解、转换数字电视信号的问题,所以不算是盗取数字电视信号的行为。

归根结底,市场上之所以会出现机顶盒共享器这种产品的最大原因,就在于如果要多部电视收看数字电视,需要再另外购买一部价值680元的机顶盒。而按照南京广电目前有线数字电视的以有的有线电视线缆带宽,每个家庭中最多能够同时使用三部机顶盒分别对应三部电视,如果你想要使用第4部电视观看节目的话就需要再另外开户,令外开户就意味着除了有线初装费之外,每月的收视费用都要翻倍,相比之下每只售价在200-500元之间不等的机顶盒共享器自然有着一定的生存空间。至于这种大打擦边球的数字电视信号的共享行为究竟算不算违规产品,还要待相关的法律或法规修正后才能够界定。