2005年04月14日

“独乐乐不如众乐乐”,玩玩博客(blog)已经不够过瘾,于是玩Wiki开始成为时尚。如今,有人将Wiki翻译为“维客”,在形声义方面,也算得上一个合格的中文译名。与大多数网络亚文化一样,Wiki也同样是体现开放,合作,平等,共享的网络文化!那么wiki究竟是什么玩意?你肯定不知道,我也才刚刚明白。但是,不要着急,让我们慢慢看下去,你就知道wiki很可能是互联网奉献的又一个让你疯狂的新生事物。

 

何为Wiki(维客)?


首先,我们要搞清楚:wiki概念的发明人是Ward Cunninghamwiki这个字到底是什幺意思呢?根据FAQ的说法,WikiWiki一词来源于夏威夷语的“wee kee wee kee”,原本是“快点快点” (quick)的意思。实际上 wiki 也真的是既简单又快速,你可以看到 wiki 每天都在成长。

新概念的定义总是让人有点摸不着头脑,wiki 也不例外。先看看简单解释:Wiki——一种多人协作的写作工具。Wiki站点可以有多人(甚至任何访问者)维护,每个人都可以发表自己的意见,或者对共同的主题进行扩展或者探讨。

还不明白,那就给你看看更复杂、更晕眩的解释:Wiki指一种超文本系统。这种超文本系统支持面向社群的协作式写作,同时也包括一组支持这种写作的辅助工具。我们可以在Web的基础上对Wiki文本进行浏览、创建、更改,而且创建、更改、发布的代价远比HTML文本为小;同时Wiki系统还支持面向社群的协作式写作,为协作式写作提供必要帮助;最后,Wiki的写作者自然构成了一个社群,Wiki系统为这个社群提供简单的交流工具。与其它超文本系统相比,Wiki有使用方便及开放的特点,所以Wiki系统可以帮助我们在一个社群内共享某领域的知识。

Wiki概念的通俗解说

还是有点云里雾里?那就通俗一点:根据 wiki 社群的定义,wiki 是一种提供「共同创作(collaborative)」环境的网站,也就是说,每个人都可以任意修改网站上的页面资料。这听起来挺疯狂的,万一有陌生人来网站上乱搞怎幺办?别担心,所有的 wiki 都有「版本控制(Version Control)」的概念,你随时都可以找回之前的正确版本;更何况你可不是单打独斗,社群的力量是非常惊人的。就在这种相信人性本善的概念下,整个 wiki 社群迅速地成长茁壮。如果你还是很担心,更可以帮 wiki 加入权限管理(Access Control)的机制,保证万无一失。除了版本控制之外,值得一题的是「格式化语法(Formating Rule)」。因为对一般人来说,HTML 语法实在是个恶梦,所以 wiki 创造了一套更简单的写作语法,让大家可以专注在写作上。

你还是不明白,那也不要紧,我们就先不要咬文嚼字,还是以一种看热闹的从容心态,先慢慢看下去。

Wiki发展历史

Wiki的历史还不长,无论是Wiki概念自身,还是相关软件系统的特性,还都在热烈的讨论中;所以怎样的一个站点才能称得上是一个Wiki系统还是有争议的。与Wiki相关最近出现的技术还有blog,它们都降低了超文本写作和发布的难度。这两者都与内容管理系统关系紧密。第一个 Wiki 网站诞生于 1995 年,Ward Cunningham 创建的,作为波特兰的模式仓库的模式定义和讨论的交互性场所: http://c2.com/ppr/;而其根源可以上述到 1972 年卡耐基-梅隆大学的 ZOG 数据库系统。

1995Ward Cunningham为了方便模式社群的交流建立了一个工具-波特兰模式知识库(Portland Pattern Repository)。在建立这个系统的过程中,Ward Cunningham创造了Wiki的概念和名称,并且实现了支持这些概念的服务系统。这个系统是最早的Wiki系统。从1996年至2000年间,波特兰模式知识库围绕着面向社群的协作式写作,不断发展出一些支持这种写作的辅助工具,从而使Wiki的概念不断得到丰富。同时Wiki的概念也得到了传播,出现了许多类似的网站和软件系统。

历史资料:http://c2.com/cgi/wiki?WikiHistory

 

Wiki可以做什幺?

说法1wiki可以说是一种建站的工具,wiki考虑让更多人参与建设,因此它的语法与HTML相比要容易的多,几乎与普通写字板编辑文字差不多,很容易上手。w iki最适合做百科全书、知识库、整理某一个领域的知识等知识型站点,几个分在不同地区的人利用wiki协同工作可以共同写一本书。我们计划用w iki来编辑一部elearning百科全书,有兴趣的朋友可以与我联系,我们可以共同编辑。

说法2:首先会想到的当然是共笔系统(例如 FreeBSD 共笔 )、读书会、项目开发、写书、翻译、资料整理(例如网站设计资源)、常见问题整理等等,这些本来就非常适合一群人来做。其次你可以想想怎幺样来利用版本控制的功能,例如拿来整理想法(可以时常比对旧版本)、写作业、记上课笔记等等。甚至有人用 wiki 写百科全书喔!如果你还想到可以怎幺玩,欢迎告诉我。

Wiki 是什么做到的?

l         Wiki 使用了简化的语法,替代复杂的 HTML,加上 WEB 界面的编辑工具,降低内容维护的门槛;

l         Wiki 通过文本数据库或者关系型数据库实现了版本控制,可以随时找回以前的版本,也可以和以前的版本进行对比,版本控制使多人协作成为可能,又保护了内容不会丢失;

l         任何信息都可以被任何人修改和删除,页面内容保持了一致性,因为清除垃圾文字、广告是那么的容易,最终剩下的是最有意义的内容;任何人都可以参与,但是最后剩下的是最好的参与者;

l         Wiki 通过协作精神,实现了快速的信息整合;"Wiki" 这个单词本身来自于夏威夷语,就是快速的意思,"WikiWiki"自然就是极快的意思了。

Wiki技术和规范

wiki是任何人都可以编辑的网页。在每个正常显示的页面下面都有一个编辑按钮,点击这个按钮你就可以编辑页面了。有些人要问:任何人都可以编辑?那不是乱套了幺?其实不然,w iki体现了一种哲学思想:“人之初,性本善”。wiki认为不会有人故意破坏wiki网站,大家来编辑网页是为了共同参与。虽然如此,还是不免有很多好奇者无意中更改了w iki网站的内容,那幺为了维持网站的正确性,wiki在技术上和运行规则上做了一些规范,做到既持面向大宗公开参与的原则又尽量降低众多参与者带来的风险。这些技术和规范包括:

 

1)保留网页每一次更动的版本,即使参与者将整个页面删掉,管理者也会很方便地从纪录中恢复最正确的页面版本。

2)页面锁定,一些主要页面可以用锁定技术将内容锁定,外人就不可再编辑了。(虽然wiki都有这个功能,但我看到使用它的甚少,这可能跟w iki倡导的精神相违背吧)。

3)版本对比,wiki站点的每个页面都有更新纪录,任意两个版本之间都可以进行对比,wiki会自动找出他们的差别。

4)更新描述,你在更新一个页面的时候可以在描述栏中写上几句话,如你更新内容的依据、或是跟管理员的对话等。这样,管理员就知道你更新页面的情况。

5IP禁止,尽管wiki倡导“人之初,性本善”,人人都可参与,但破坏者、恶作剧者总是存在的,wiki有纪录和封存IP的功能,将破坏者的I P纪录下来他就不能在胡作非为了。

6Sand Box(沙箱)测试,一般的wiki都建有一个Sand Box的页面,这个页面就是让初次参与的人先到Sand Box页面做测试,Sand Box与普通页面是一样的,这里你可以任意涂鸦、随意测试。

7)编辑规则,任何一个开放的wiki都有一个编辑规则,上面写明大家建设维护wiki站点的规则。没有规矩不成方圆的道理任何地方都是适用的。

 

Wiki的特点

使用方便

l         维护快捷:快速创建、存取、更改超文本页面(这也是为什幺叫作 "wiki wiki" 的原因)。

l         格式简单:用简单的格式标记来取代 HTML 的复杂格式标记。(类似所见即所得的风格)

l         链接方便:通过简单标记,直接以关键字名来建立链接(页面、外部连接、图像等)。

l         命名平易:关键字名就是页面名称,并且被置于一个单层、平直的名空间中。

 

有组织

l         自组织的:同页面的内容一样,整个超文本的组织结构也是可以修改、演化的。

l         可汇聚的:系统内多个内容重复的页面可以被汇聚于其中的某个,相应的链接结构也随之改变。

 

可增长

l         可增长:页面的链接目标可以尚未存在,通过点击链接,我们可以创建这些页面,从而使系统得到增长。

l         修订历史:记录页面的修订历史,页面的各个版本都可以被获取。

 

开放性

l         开放的:社群的成员可以任意创建、修改、删除页面。

l         可观察:系统内页面的变动可以被访问者观察到。

 

BlogWiki的不同之处

毫无疑问,你完全可以用Wiki(工具)架设你的blog站点。但是我认为从比较严格的意义上来说,blogwiki是完全不同的东西,服务这完全不同的目的。

简单来说,blog更是一种无主题变奏,一般来说是少数人(大多数情况下是一个人)的关注的蔓延。一般的blog站点都会有一个主题,凡是这个主旨往往都是很松散的,而且一般不会去刻意地控制内容的相关性。blog注重的是个人的思想(不管多幺不成熟,多幺地匪夷所思),个性化是blog的最重要特色。blog注重交流,一般是小范围的交流,通过访问者对一些或者一篇blog文章的评论和交互。blog也有协作的意思,但是协作一般是指多人维护,而维护者之间可能着力于完全不同的内容。这种协作在内容而言是比较松散的。任何人,任何主体的站点,你都可以以blog方式展示,都有它的生机和活力。

Wiki则不同。Wiki站点一般都有着一个严格的共同关注,Wiki的主体一般是明确的坚定的。Wiki站点的内容要求着高度相关性。最其确定的主旨,任何写作者和参与者都应当严肃地遵从。Wiki的协作是针对同一主题作外延式和内涵式的扩展,将同一个问题谈得很充分很深入。Wiki非常适合于做一种 All about something”的站点。个性化在这里不是最重要的,信息的完整性和充分性以及权威性才是真正的目标。Wiki由于其技术实现和含义的交织和复杂性,如果你漫无主题地去发挥,最终连建立者自己都会很快的迷失。Wiki使用最多也最合适的就是去共同进行文档的写作或者文章/书籍的写作。特别是技术相关的(尤以程序开发相关的)FAQ,更多的也是更合适地以Wiki来展现。

 

来源:http://www.bizbeez.com/index.php?cat=7

Wikipedia:地球上最大的Wiki工程

Wikipedia(维基百科)是目前世界上最大的Wiki系统,它是一个基于WikiGNU FDL的百科全书网站系统。该系统于20011月投入运行,20012月超过1,000条条目,20017月超过10,000条条目,目前(20031月)已经接近100,000条条目。截止到200310月,40个语言版本的维基百科总文章数超过30万条,而且非英语版本的总文章数首次超过英语版本。Wikipedia条目的迅速增长说明了Wikipedia系统的健壮,也说明了Wiki的概念是经得起验证的。中文维基百科开始于200210月底。

维基百科最初的构想是在Larry Sanger(当时Nupedia的主编)和一个电脑程序员Ben Kovitz200112日在美国加利福尼亚州的一次谈话中最早提出的。Kovitz当时是wiki程序的协作开发者之一(现在依然是)。当他在晚餐中向Sanger解释wiki的概念时,Sanger立即发现wiki可能是创建一个更开放的百科全书计划的技术。在此之前几个月,Sanger和他的老板,Jimmy WalesBomis, Inc. 的总裁兼CEO,讨论过如何通过建立一个更开放、轻松的计划来协助Nupedia的发展。

因此Sanger立即说服WalesNupedia中建立一个wikiNupedia的第一个wiki110日上线,不过在Nupedia的编写人员中遇到极大阻力。因此,一个新的以“维基百科”命名的新计划于115日在维基百科.com正式启动。位于圣地亚哥的服务器和电缆都由Walses捐献。在科技站点Slashdot的三次报道后,维基百科开始受到越来越多的关注。此外,Google一天也会带来上百人的新流量。

英文维基百科在2001212日达到1,000页,97日达到10,000条条目。在计划的第一年,有超过20,000条条目被创建,平均每月1,500条。2002830日,已经有40,000条条目。成长的速度从计划之初就在平稳增长。

随之而来的就是国际化的维基百科。20015月,12个非英语维基百科版本计划开始(包括了阿拉伯语, 中文注1,荷兰语,德语,世界语, 法语,希伯来文,意大利语,日语,葡萄牙语,俄语,西班牙语和瑞典语)。到九月,由有三个语言版本加入了维基百科大家族。到了该年度末,挪威语等另外三个语言版本也宣布成立。

 

当然,你最好自己进去看看,就可以亲身感受到Wiki神奇的力量了。

英文版地址:http://simple.wikipedia.org/wiki/Wikipedia

英文版让你头晕,就先参观一下略微简陋的中文版:http://zh.wikipedia.org/wiki/Wikipedia

 

Wikipedia的风风雨雨

维基百科是由全球无数志愿学者、玩家、学生等等有知识的人共同建筑的。计划的参与者叫作维基百科人。参与者的人数在不断增加,特别是受到良好教育的人士。

全计划中没有所谓的主编。两个创立维基百科的人,Jimmy Wales(一个小型互联网公司BomisCEO)和Larry Sanger,喜欢将自己看作是负责防止计划走回头路的普通参与者。

在计划的最初几年,Larry Sanger是一个受雇佣的带薪职员。他的工作是管理维基百科(和Nupedia);当有意见分歧时,他可以在听取各种意见后作出最终决定。但是随着资金的短缺,Larry Sanger最终不得不辞职,不过他依然参与维基百科计划。

Jimmy Wales及全体维基百科人现在负责Larry Sanger之前的部分工作。为维基百科作出过贡献的其他现在和过去Bomis的雇员包括了Tim ShellBomis的创办人之一,和程序员Jason Richey以及Toan Vo

20022月,由Edgar Enyedy领导的非常活跃的西班牙语维基百科突然退出维基百科并建立了他们自己的Enciclopedia Libre(http://enciclopedia.us.es/ );理由是未来可能的商业广告及控制权的丢失。同年十月,在维基百科参与者Daniel Mayer("maveric149")及其他参与者试图重新整和两个计划,但是Enciclopedia Libre的参与者投票决定,在维基百科能够提出一个团圆提案之前,反对重新整和。然而,Enciclopedia Libre的用户不排除在未来重新合并的可能性,并且希望继续与维基百科保持联系。这场纷争也引起了关于非英语维基百科版本的角色的广泛讨论,并且直接导致了非英语维基百科的几项重大改革。

也经常有破坏者访问维基百科并大肆破坏该计划,通常,这些破坏都很快被修复,但是对英文维基百科首页的不断破坏最终导致首页被“保护”,以确保只有管理员可以对其进行修改。20023月,用户ID24开始在英文维基百科发表许多左倾文章;关于他的激烈讨论最终导致严重的人身攻击。Jimbo Wales最后于20024月禁止ID24对维基百科进行编辑(但允许继续浏览)。而经常在德国历史相关的文章中发表亲右翼观点,并且导致多次争论的用户“Helga”,则在20029月被禁止编辑维基百科。20028月,在Jimbo Wales宣布他将不会在维基百科上刊登商业广告之后不久,维基百科的地址从wikipedia.com变为wikipedia.org

同年十月,Derek Ramsey("Ram-Man")开始使用软件(“bot”)自动添加有关美国城市的信息。这些文章都是自动从人口普查报告中产生的。同时,类似的程序还用于部分其他议题。

200212月,兄弟计划Wiktionary正式开始;它的宗旨是建立一个所有语言的词典。它与维基百科在同一个服务器上运行,使用同样的软件。

20031月,维基百科开始支援TeX数学公式显示,代码由Taw编写。

2003122日,英语维基百科达到了100,000条条目的里程碑,并再次被Slashdot报道。两天后,德文维基百科,最大的非英语维基百科,也达到了10,000条条目里程碑。

 

中文Wikipedia

中文维基百科是维基百科协作计划的中文版本,繁简同站,大部分内容由世界各地的华人一起合作完成。中文维基百科希望能为丰富汉语互联网络作贡献。

特色
除了关注于人类共同享有的知识之外,相对其他语言的维基百科协作计划,中文维基百科更注重于华人自己的视角:中文维基百科撰写了大量关于中国的地理、历史、文化方面的条目,内容更贴近于华人自己的理解。 

历史
·       2001年5月,中文维基百科与阿拉伯语、荷兰语、德语、世界语、法语、希伯来文、意大利语、日语、葡萄牙语、俄语、西班牙语、瑞典语的维基百科协作计划一起成立,但没有人撰写条目。当时中文维基百科的域名为zh.wikipedia.com,不支持中文直接输入。 

·       2002年10月24日,用户Ghyll在工具软件的帮助下撰写了中文维基百科第一个有意义的条目HomePage。 

·       2002年10月27日,中文维基百科移动到新服务器,软件正式升级到Phase III,域名改为zh.wikipedia.org。 

·       2003年6月14日,中文维基百科有了华人管理员。 

·       2003年9月21日,中文维基百科突破了2000条条目,但其中包括同一文章的繁简两个版本。 

·       2003年10月20日,《中国电脑教育报》文章《我也来写百科全书》介绍中文维基百科,这是中文媒体第一次正式报道中文维基百科。 

·       2003年10月21日,中文维基百科注册用户数突破了1000人。 

·       2003年11月21日,中文维基百科突破了3000条条目,但其中包括同一文章的繁简两个版本。 

·       2003年12月,中文维基百科出现多次争议,见投票:模拟退火与模拟煺火和投票:删除理想语。 

·       2004年1月6日,中文维基百科注册用户数突破了2000人。 

·       2004年1月23日:中文维基百科突破了4000条条目,但其中包括同一文章的繁简两个版本。 

人类梦想和现实:Wikipedia之前

最早将全世界的知识收集于一个屋顶下,供人查阅的要数古代亚历山大图书馆。而出版百科全书的的想法则可以追溯到狄德多等18世纪百科全书派。在各国的大学中,图书馆是最佳的百科全书会集点。今天最常见百科全书的包括了英语的《大不列颠百科全书》、《美国哥伦比亚百科全书》,西班牙语的Enciclopedia Universal Illustrada,德语的Meyer’s Konversationslexikon and Brockhaus,以及中文的《中国大百科全书》等。参见百科全书。

而至于使用一台自动机器来编写一部更有用的百科全书的想法可以追溯到H. G. Well的短篇小说《大脑世界》(World Brain, 1937)以及Vannevar Bush的科幻小说,《我们可能思考》(As We May Think, 1945)。之后的一个重要里程碑是Ted NelsonXandu计划(1960)

利用国际互联网来编写一部免费的百科全书的构想在二十世纪九十年代初就被提出。这些活动的一个分支就是旧版本的百科全书的电子化。19951月,Gutenberg计划开始出版《大不列颠百科全书》第十一版(1911)ASCII版本,但是由于方法上的分歧,在第一卷出版后整个计划就终止了。2002年,另一方出版了整套28卷的1911《大不列颠百科全书》电子版,发表在 http://1911encyclopedia.org/ ;版本中加入了版权声明,但是该声明应该没有法律效力。其他的电子化计划则出版了许多其他的百科全书,例如由基督教经典图书馆出版的电子Easton圣经辞典(1891)

另一个更有趣的分支则是编写全新的、自由免费的百科全书。1991年,新闻组alt.fan.douglas-adams的参与者开始了一个以出版真正的The Hitchhiker’s Guide to Galaxy百科全书的计划。该百科全书是出现在Douglas Adams的小说中的一个虚构的百科全书。该计划就是星系指导计划(Project Galactic Guide)。尽管最初的宗旨是百科全书只能包括真实的条目,但之后政策改变,允许并鼓励半真实及虚构的条目出现。星系指导计划包含了超过1700条条目,但从2000年起就没有新条目加入。

1993年,一个叫做Interpedia的计划开始被广泛讨论;它的计划是编写一个任何人都可以参与的互联网百科全书。但该计划为还未开始就夭折,互联网的飞速发展使得建立一个有效的搜索引擎成为更紧迫的任务。

 

Wiki站点一览

20038月,cnic.orgWiki翻译成中文维客。百科全书:http://www.cnic.org ,它是一个基于维客和GNU FDL的百科全书网站系统。该系统于20039月投入运行.

 

重要英文参考文献

http://zh.wikipedia.org/wiki/Wiki%E5%BC%95%E6%93%8E

http://c2.com/cgi/wiki?WikiHistory

http://c2.com/cgi/wiki?WikiDesignPrinciples

http://c2.com/cgi/wiki?WikiPrinciples

http://c2.com/cgi/wiki?ElementsOfWikiEssence

http://c2.com/cgi/wiki?WikiEssence

http://c2.com/cgi/wiki?LinkNameIsPageName

http://c2.com/cgi/wiki?WhyWikiWorks

http://c2.com/cgi/wiki?WhyWikiWorksNot

http://c2.com/cgi/wiki?InterWiki

http://c2.com/cgi/wiki?WikiProgramming

http://c2.com/cgi/wiki?WikiEngines

2005年04月13日

我想大多数的UNIX网络管理员或多或少的都有过类似于这样的麻烦:一个用户要在多台不同的UNIX系统上工作,要在不同的UNIX上登录,保存他们的文档等,而管理员就要在每一台UNIX系统上为他建立帐号,设置密码,设置组信息,建立目录,以便他能在所有的机器上正常工作。同时还要建立一台FTP服务器,每次用户必须将它的文件保存在这台FTP服务器上,然后当他登录到另外一台UNIX系统上的时候再从FTP服务器上取回他所需要的文件。这样不但麻烦,而且管理起来非常不便,因为一旦某天某个员工离职了,管理就要到每一台UNIX系统上去删除他的帐号和文件,来保证他不能在那些机器上登录。而且对于一些系统信息的管理也非常不便,比如每台机器上的hosts文件,你必须要在每台机器上建立一份相同hosts文件,以保证所有的机器的机器名和IP地址的对应都是正确的。可一但某天有哪台机器需要更改IP地址,这时管理员又只有为每一台UNIX机器更改它的hosts文件。

从上面的这些问题我们可以看到其实我们所更改的这些东西大部分都是完全相同的,相同的帐号,相同的目录和相同的hosts文件,如果机器少还没有什么,一旦你管理的机器超过200台,那么可能你这一整天的时间都会花在做这些重复的事上面。

也许你要问,那么那些大网络的UNIX管理员们是使用什么方法来解决这些问题的呢?当然他们不可能是为每一台机器更改这些设置,他们使用的就是今天我们要介绍的NIS和NFS服务。

下面我们就向你介绍在FreeBSD中建立NIS和NFS服务的思路及方法。
(注:下面为我们的实验环境)
cat.mydomain.nis OpenBSD3.3 NIS和NFS客户端
dog.mydomain.nis FreeBSD4.8 NIS主服务器和NFS服务器 (保存网络中所有用户的帐号信息,组信息和用户文件)
bee.mydomain.nis FreeBSD4.5 NIS辅服务器


1、使用NIS共享系统信息
NIS是Sun Microsystem开发的用于在UNIX系统间共享用户数据、组数据、主机数据、协议等数据的服务系统,它最早被命名为Yello Page,后来由于商标冲突被Sun重新命名为NIS,但很是有很多地方以YP来称乎它。由于NIS的出现对UNIX网络管理起到很大的推进,所以现在几乎所有的UNIX系统都对它提供了支持。当然FreeBSD系统也不例外,FreeBSD当前提供的主要是NIS v2,同时也提供了对NIS v1的兼容支持。
我们可以看到,如果一个用户要在多台UNIX系统上工作,他们大都使用相同的用户名、属于相同的组、使用相同的密码。那么我们可以将这些信息存放在一台机器上来统一进行管理,其它机器都从这台机器上来获得这些信息,一但要更改某个用户的信息,管理员就只需要在存放这些信息的机器上进行更改,其它机器就自动的收到更改后的信息,而不再需要管理员一一的进行设置了,这就是NIS工作的基本方式。
NIS使用域来管理那些需要共享的信息,这些信息就够成了NIS数据库,所有拥有相同域名的机器就可以共同使用所在域名的数据库。这些数据库被存放在一台机器上,这台机器就是NIS的主服务器,其它机器就都通过它来查询NIS数据库,但有时为了稳定性的考虑,也可以建立一台或多台NIS辅服务器,它们保持与NIS主服务器的数据同步,当主服务器出现故障时承担主服务器的任务。
下面就让我们来看看,如何在FreeBSD中建立NIS主服务器。

首先,因为NIS是基于域来管理的,所以就要为服务器设定域名,你可以通过domainname来查看你现在的域名(注意:这里的域名与DNS的域名没有任何关系,它只起来将一个网络划分为几个部分的作用,因而它可以为任何值,当然你也可以将它设置成你的DNS域名):

dog# domainname
mydomain.nis

如果上面显示为空,则表明你还没有设置你的域名,你同样可以通过domainname来设置和更改你的域名:

dog# domainname mydomain.nis

域名设置好以后,就开始进入后面的工作。
默认情况下,FreeBSD将每个域的NIS数据库存放在/var/yp/yourdomainname下面,你需要将你要共享的信息如master.passwd复制到/var/yp下面,这里需要提醒的是,因为FreeBSD默认使用MD5来加密用户口令,因而,如果你是在一个有多种UNIX系统的网络中,而且某些UNIX不支持MD5加密的话,你就需要更改你的密码加密方式为这些UNIX都支持的加密方法(如DES),否则用户将无法在那些机器上登录。
更改FreeBSD默认加密方式的方法如下:

dog# vi /etc/login.conf

然后编辑用户所在的类(通过如果没有指定的话就是default类),在其后加入:passwd_format=des:\(其中des代表DES加密,md5代表MD5加密,blf代表Blowfish加密),例如:

default:\
:passwd_format=des:\
:datasize=infinity:\

保存退出后,需要使用使用cap_mkdb来生成BD(Berkeley Database)格式的数据库文件:

dog# cap_mkdb /etc/login.conf

这样便会在/etc目录下更新(或生成)login.conf.db文件。
现在我们只是更改了密码的默认加密方式,而真正的密码还没有改变,因而需要使用passwd命令来更改每一个需要共享出来的用户的口令,然后将master.passwd复制到/var/yp目录下,为了安全应该更改一下master.passwd文件的权限:

dog# cp /etc/master.passwd /var/yp/master.passwd
dog# chmod 0600 /var/yp/master.passwd

同样考虑到安全的因素,最好删除那些你不需要和不应该共享的用户(比如:root用户和系统默认用户bin,daemon等)
现在我们就可以初始化我们的NIS主服务器了,初始化使用ypinit(8)命令:

dog# cd /var/yp
dog# ypinit -m mydomain.nis

这里-m表示生成主服务器,而mydomain.nis是你的域名。
在初始化过程中,你会被提及一些问题:

Do you want this procedure to quit on non-fatal errors? [y/n: n] 直接选择n

然后就是设置NIS服务器的名字,包括主服务器和辅服务器,因为这里我们只有一台主服务器,因而直接按Ctrl-D退出,如果你打算再建几台辅服务器的的话就输你的NIS辅服务器的名字。然后会显示你的服务器信息:

The current list of NIS servers looks like this:

dog.mattcell.com

Is this correct? [y/n: y] 如果没有错误的话,就选择y

接下来就开始进入初始化过程,这个过程中会产生一些出错信息,不过不用理它,这是因为你的NIS服务进程(ypserv)还没有启动的原因造成的。完成后会提示:

dog.mattcell.com has been setup as an YP master server without any errors.

这表示你的NIS主服务器已经初化完成。
现在要需要启动我们的NIS守护进程:ypserv(8)了,因为ypserv使用了RPC服务,所以需要先运行portmap(8)来使用它的RPC服务,同时如果用户需要在客户机上更改密码的话,我们就需要在NIS服务器上运行rpc.yppasswdd(8)守护进程:

dog# portmap
dog# ypserv
dog# rpc.yppasswdd

为了让这些命令在系统启动的时候就自动启动,这需要在/etc/rc.conf中加入以下设置:

portmap_enable="YES"
nisdomainname="mydomain.nis"
nis_server_enable="YES"
nis_yppasswdd_enable="YES"

现在我们的NIS主服务器就已经跑起来了,你可以通过以下命令来测试它的工作情况:

dog# ypbind                            启动NIS客户端支持程序
dog# ypcat passwd                 查询NIS服务器上的/etc/passwd信息
dog# ypcat master.passwd      查询NIS服务器上的/etc/master.passwd信息
dog# ypcat group                    查询NIS服务器上的/etc/group信息
dog# ypcat hosts                     查询NIS服务器上的/etc/hosts信息
dog# ypcat networks               查询NIS服务器上的/etc/networks信息
dog# ypcat netgroup               查询NIS服务器上的/etc/netgroup信息
dog# ypcat services                查询NIS服务器上的/etc/services信息
dog# ypcat protocols               查询NIS服务器上的/etc/protocols信息
dog# ypcat ypservers              查询NIS服务器信息
dog# killall -9 ypbind                关闭NIS客户端支持程序

下面我们来看看如何从客户端共享这些信息。

首先要保证客户端的NIS域名与NIS服务器的域名要一致。因为在客户端要对NIS服务器上的信息进行查询,所以需要在客户端启动一个守护进程ypbind(8)来提供对NIS的支持,同样,ypbind也使用RPC服务,所以需要在运行它之前运行portmap(8)进程:

cat# domainname mydomain.nis
cat# portmap
cat# ypbind

这里cat这台机器就会向网络上发出一个广播,来寻找NIS主服务器。同样,你也可以将这些信息加入rc.conf中让它们自动运行:

nisdomainname="mydomain.nis"
portmap_enable="YES"
nis_client_enable="YES"
nis_client_flags="-S mydomain.nis, dog.mydomain.nis, bee.mydomain.nis"

这里nis_client_flags是设置NIS域名为mydomain.nis,以及设置NIS服务器列表:dog.mydomain.nis, bee.domain.nis,这样对那些远程的用户有帮助,因为这种情况下如果依靠ypbind使用广播来查找服务器的话比较困难。
下面就需要设置系统使用NIS来接受用户信息,这需要在/etc/master.passwd的最后加入:

+:::::::::

这样,如果一个用户在该台机器(cat.mydomain.nis)这台机器上登录,login将先查找本地是否有该用户的帐号信息,如果有就使用本地信息,如果没有的话就通过NIS来获取。
同样的方法,如果要共享group信息,就需要在/etc/group最后一行加入:

+:*::

也可以共享NIS服务器上的hosts信息,这需要在/etc/host.conf中增加nis查询选项:

# $FreeBSD: src/etc/host.conf
# First try the /etc/hosts file
hosts
# Second use YP/NIS
nis
# Now try the DNS
bind

这样当你试图查询一台机器的IP地址的时候,系统将先在/etc/hosts中寻找相就的记录,如果没有找到就通过NIS来查询NIS主服务器上的hosts文件,如果还没有找到就使用DNS来查找。
(注意:/etc/host.conf在FreeBSD5.0之后已经使用/etc/nsswitch.conf来代替了)
现在你就可以使用dog.mydomain.nis服务器上的帐号来登录cat.mydomain.nis这台机器了:

FreeBSD (i386) <Power to Server :p>
Login: matthew
Passwd:

注意,因为我们在cat.mydomain.nis上没有为matthew这个用户建立HOME目录,所以这时会提示没有找到HOME目录,不必理会它,因为我们将在后面解决这个问题。

如果在客户端想更改你在NIS服务器上的口令,你可以使用yppasswd(1)来更改(需要服务器上运行rpc.yppasswdd守护进程):

matthew@cat$ yppasswd
Changing NIS passwd for matthew on dog.mydomain.nis.
Old Password:
New Password:
Retype new passwd: NIS password has been changed on dog.mydomain.nis.

下面让我们来看看如何改新NIS服务器上的NIS数据库

如果我们更改了NIS服务器上的某些数据(如:增加了用户,增加了组等。注意:更改了master.passwd后必须将/etc/master.passwd再次复制到/var/yp目录下,将删除不必要的用户)后,NIS客户端并不能立即使用更改的数据,因为NIS数据库是存放在/var/yp/yourdomainname下面的,所以我们需要更新NIS数据库:

dog# cd /var/yp
dog# make

这时make就会根据Makefile自动更新NIS数据库,注意,因为NIS数据库是实时查询,所以我们不需要重新启动ypserv守护进程。

建立NIS辅服务器
如果你担心你的NIS主服务器工作会为稳定而造成用户无法登录,那么你可以再建立一台或数台NIS辅服务器,它的建立方法就比较简单了。
首先还是进行初始化,不过因为它的NIS数据库直接从主服务器上取得,所以就直接在你要作为辅服务器的机器上执行:

bee# cd /var/yp
bee# ypinit -s dog.mydomain.ns mydomain.nis

其中-s指定NIS主服务器的名字,后面的mydomain.nis表示要初始化的NIS域名(即辅服务器的NIS域名)。
然后再修改辅服务器上的/etc/rc.conf以便NIS服务能够自动运行,同时为了当主服务器上的数据在发生变更的时候,辅服务器能够自动保持同步,就需要启动NIS同步进程rpc.ypxfrd:

portmap_enable="YES"
nisdomainname="mydomain.nis"
nis_server_enable="YES"
nis_yppasswd_enable="YES"
nis_ypxfrd_enable="YES"

同时为了支持同步数据传送,需要在主服务器上更改一点设置,因为主服务器默认情况下的设置只考虑了一台NIS服务器的情况。
我们需要将/var/yp/Makefile中的NOPUSH = "True"注释掉:
# NOPUSH = "True"
如果你在之前初始化主服务器的时候没有准备安装辅服务器,所以没有输入辅服务器的名字,而你现在又要使用辅服务器,那么你可以通过以下方法来增加你的辅服务器:

dog# cd /var/yp
dog# vi ypservers

加入你的辅服务器名,这里我们的辅服务器名为bee.mydomain.nis:

dog.mydomain.nis dog.mydomain.nis
bee.mydomain.nis bee.mydomain.nis

现在你的辅服务器在每次主服务器更新之后就会自动保证数据同步了。

NIS的高级设置
上面的例子中,我们是允许所有的NIS主服务器上的用户在NIS客户端(这时为cat)上登录,那么我们可不可以只允许某些用户登录,或者不允许某些用户呢?
答案是肯定的,当我们要允许某个用户登录的时候,可以在master.passwd中加入如下内容:

+matthew:::::::::

这表示允许(+)NIS服务器上的matthew在这台机器上登录,如果+号后面没有指定用户名的话系统就默认允许所有的用户登录,这就是我们上面的那种情况。
如果要禁止某个用户登录:

-badman:::::::::

这就表示禁止(-)NIS服务器上的badman在这台机器上登录,注意,因为系统处理master.passwd的时候是从第一行开始匹配的,一但某行匹配了,就不是对后面的行进行处理了,所以如果你要禁止某些用户登录而允许其它所有的用户登录就一定要将-user:::::::::写在+:::::::::之前,否则该用户还是可以登录系统:

-badman:::::::::
-hacker:::::::::
+:::::::::

上面的设置就使得除NIS服务器上的badman和hacker不能在这些机器登录外,其它的用户都可以登录。
还有一钟情况就是,我只允许某些用户登录我的系统,不允许其它用户登录,但又要保证用户信息与NIS服务器上的服务信息一至,以便使用id等使用的时候能正确的显示出用户的用户名和组名,这也可以使用以下方法来实现,在客户机的/etc/master.passwd后面加入:

+matthew:::::::::
+guest::::::::/home/ftp:
+:::::::::/sbin/nologin

上面的设置使得matthew可以在这台机器上登录,guest也可以登录,但其HOME目录将被到/home/ftp下,而其它用户的shell都被改成/sbin/nologin,所以其它用户都不能登录,但同时又使得这些用户的信息可以与NIS服务器同步。


2、使用NFS共享目录
NFS同样是由Sun Microsystem开发一用于UNIX系统之间共享文件的网络服务系统,与NIS一样,它也得到大多数的UNIX系统的支持。
在文章最开始的时候,我们提到用户需要每次都从FTP下载文件的问题,现在我们就可以用NFS来解决这个问题了,我们可以将某台机器的某个文件(文件夹)共享出来供其它机器使用。

在上面讲NIS的时候我们注意到,当我们使用NIS主服务器上的用户登录到其它UNIX机器的时候会被提示找不到用户的HOME目录,那么我们就利用NFS来将NIS主服务器上的/home目录共享出来,然后在每个UNIX客户端将其mount到本机的/home上,这样就可以解决找不到用户HOME目录问题了,并且无论用户在哪台机器登录,都可以直接进入自己的工作环境,使用自己的文件。
下面就让我们来实施具体的工作。
首先根man nfsd我们可以知道nfsd(8)只是处理NFS协议,真正的远程mount(共享)功能是由mountd(8)来完成的,而mountd是通过/etc/exports来设置共享目录的。exports(5)里的每一行表示第一个共享设置,第一行中都有以下三个部分:
第一部分是设置要共享出去的目录或目录列表,当要共享多个目录的时候使用空格分隔每个目录。
第二部分是共享参数,比如设置只读共享,对帐号的映射等。
第三部分是设置可以访问该共享的主机或主机列表,多个主机使用空格分隔。
我们就以共享NIS服务器(dog.mydomain.nis)上的/home目录为例,向大家说明exports的配制方法:

dog# cat /etc/exports
/home -maproot=daemon -network 192.168.7.0 -mask 255.255.255.0

其中/home为我们要共享出来的目录,-maproot=daemon是共享参数,表示当本地UNIX系统使用远程的/home目录时,将本地的root帐号的uid映射为远程机器上的daemon,gid映射为空,也就是说当我们以root身份访问dog上的/home目录时,我们的身份会被转换成远程主机dog上的daemon的身份。后面的-netmask=192.168.7.0 -mask=255.255.255.0设置可能访问该些共享资源的主机为192.168.7.0/255.255.255.0这个子网内的所有机器。
还有很多共享参数可以设置,比较有用的有:-mapall=将所有的本地帐号映射为远程主机上的某个指定帐号,-ro以只读共享该文件夹(默认为可读写)其它参数你可以通过man exports得到,这里就一一列举了。
现在我们的共享资源已经通过/etc/exports设置好了,接下来就是启动NFS守户进程nfsd和远程共享进程mountd了,由于NFS同NIS一样也使用RPC,所以要在启动NFS之前行启动portmap进程:

dog# portmap 如果已经启动就不再需要这一步了
dog# nfsd -n 5
dog# mountd
其中nfsd -n 5中的-n参数是指定同时建立多少个服务副本,可能选择4-6,这有助于提供NFS系统性能,但也不过太高,否则会占用大量资源。现在NFS就已经启动成功了,你可以通过showmount(8)来查询你的共享资源:
dog# showmount -e localhost
/home 192.168.7.0

这表明我们的NFS服务器已经正确启动了,接下来就要在客户端设置了。
在客户端我们使用mount_nfs来将远程主机共享的目录mount到本地上,因为在本例中我们是希望将远程主机(dog)上的/home目录mount到客户端(cat)的/home目录以保证系统用户的数据同步,所以我们进行以下操作:

cat# mount_nfs dog:/home /home

现在远程的共享目录/home就已经mount到本地的/home目录中了,我们可以看到mount_nfs与其它mount命令不同,它不是使用设备名(如/dev/ad0s1)而是使用hostname:/sharedir的方式来表示mount源,其中hostname是远程主机的主机名或IP地址。
现在我们再次使用matthew这个帐号(该帐号在NIS服务器dog.mydomain.nis上存在),在cat.mydomain.nis登录:

FreeBSD (i386) <Power to Server :p>
Login: matthew
Passwd:
matthew $ pwd
/home/matthew

现在我们可以看到,我们在dog这台机器上的文件,现在在cat上全部可以看到了,当然以前的那个找不到用户HOME目录的错误信息现在也没有了。
可以看到,通过NIS和NFS可以使管理员管理UNIX网络中的用户帐号等信息非常方便,因为所有的修改都只需要在一台机器上进行,而其它机器自动的就会改变。同时对用户来说,他们可以只使用一个帐号而在任何一台主机上登录,而且不用再使用麻烦的FTP在不同的主机间传递文件,用户在每台机器上的文件都会自动保持更新。

本备忘录的状态

本文档讲述了一种Internet社区的Internet标准跟踪协议,它需要进一步进行讨论和建议以得到改进。请参考最新版的“Internet正式协议标准” (STD1)来获得本协议的标准化程度和状态。本备忘录的发布不受任何限制。

摘要

本文档详述Internet协议版本6(IPv6),有时也可以看作是下一代的IP或是IPng。
Table of Contents

目录
 
1.  介绍  2
2.  术语  3
3.  IPv6报头格式  3
4.  IPv6扩展报头  5
4.1  扩展报头顺序  6
4.2  选项  7
4.3  逐跳选项报头  8
4.4   路由报头  10
4.5  分片报头  14
4.6  目的地选项报头  18
4.7 无下一报头  19
5. 分组尺寸问题  19
6.  流标签  20
7.  优先权  21
8. 上层协议问题  22
8.1 上层校验和  22
8.2 最大分组生存周期  23
8.3 最大上层有效载荷尺寸  23
附录A 选项的格式化指导策略  24
实例 1  24
实例 2  25
实例 3  26
安全考虑  26
致谢  27
参考  27

1.  介绍

IP版本6(IPv6)是Internet协议的新版本,作为IP版本4(IPv4)[RFC-791]的后继而设计。IPv4到IPv6之间的变化可以简单地归结到下列范围:

o  扩展地址特性
   IPv6把IP地址大小从32位扩大到128位来支持更多的地址等级,更多数目的地址节点以及更简单的地址自动配置。广播路由的可测量性是通过增加一个用来广播地址的“范围”域来改进的。IPv6定义了一个称为“任意播地址”的新型地址,通常用来发一个分组到一组节点中的任意一个。

o  报头格式简化
   一些IPv6报头域已经被去掉或者做了任选以减少分组句柄通用事件(common-case)并且进程开销已经限制IPv6报头的带宽开销。

o  改进对扩展和选项的支持

   在IP报头选项编码上的改变考虑了更多有效的转发,选项长度上的更少限制以及将来引入新选项时的更大灵活性。

o  流标签特性
   IPv6增加了一种新的特性,该特性能为要求特殊句柄发送者,诸如服务的非默认量或“实时”服务,贴上属于特定通信“流”的分组标签。

o  鉴定和私有化特性

   扩展以支持鉴定,数据完整,以及(优化的)数据机密性是IPv6特有的。

本文档详述了基本的IPv6报头和初始定义的IPv6扩展报头和选项,并且也讨论了分组尺寸问题,流标签和优先权的语义以及IPv6在上层协议中的影响。IPv6地址的格式和语义分别在[RFC-1884]中得以说明。ICMP的IPv6版本在[RFC-1885]里被说明,那里所有的IPv6实现都被要求包括。

2.  术语

节点      - 实现IPv6的设备。

路由器    - 一个转发没有清晰指向自身IPv6分组的节点。[见下面的注意]

主机      - 任何不是路由器的节点。[见下面的注意]

上层       - 紧挨着IPv6的上一个协议层。例子是传输协议如TCP和UDP,控制协议如ICMP,路由协议如OSPF以及Internet或低层作为“隧穿”(即封装进)IPv6的协议如IPX,AppleTalk或是IPv6本身。

链路       - 在能在链路层(即IPv6下的一层)通信的节点之上的一种通信设施或媒质。
             例子是Ethernets(简易的或桥接的),PPP链路,X.25,帧中继,或者ATM网络,以及Internet(或更高)层“隧道”,如隧穿IPv4或IPv6自身。

邻居        - 连接在同一链路上的节点。

接口        - 到一个链路的节点连接设置。

地址        - 一个接口或一组接口的IPv6标识符。

分组        - 加上有效载荷的IPv6报头。

链路 MTU    - 在一个链路上能搬运的一片最大传输单元,即八位字节分组的最大尺寸。

路径 MTU    - 源节点和目的节点之间路径里所有链路的最小链路MTU。

注意:尽管有些不寻常,但对有多个接口的设备来说,把它配置成转发从其某些接口组(少于全部)来的非自身预定的分组,并且抛弃从其别的接口抵达的非自身预定分组是可能的。当收到从前一个(正在转发的)接口以及和邻居相互作用的分组时,这样的设备必须遵循路由的协议要求。当收到从后一个(非正在转发的)接口以及和邻居相互作用的分组时,这样的设备必须遵循主机的协议要求。

3.  IPv6报头格式

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 版本  | 优先权 |              流     标     签                 |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         有效载荷长度         |    下一报头   |     跳限制      |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                         源    地    址                        +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                        目   的   地   址                      +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

版本             4位Internet协议版本号=6

优先权           4位优先权值。见第7节。

流标签           24位流标签。见第6节。

有效载荷长度      16位无符号整数,有效载荷的长度,即IPv6报头之后分组部分是八位字节形式。如果为零,则说明有效载荷长度携带在一个巨大有效载荷逐跳选项里。

下一个报头        8位选择器。标识紧接着IPv6报头的报头种类。其和IPv4协议域使用的是同一个值[RFC-1700后面有述]。
]
下一跳限制        8位无符号整数,转发此分组的每个节点都减去一。如果下一跳限制降为零则此分组被抛弃。

源地址            分组始发者的128位地址。见[RFC-1884]。

目的地址          分组指定接受者的128位地址(如果一个路由报头出现,则可能不是最终接收者)。见[RFC-1884]以及4.4部分。

4.  IPv6扩展报头

在IPv6里,任选Internet层信息被编码在分隔的报头里,这个报头可能位于分组的IPv6报头和上一层报头之间。有少量这样的扩展报头,每个都被一个明确的下一报头值所标识。正如在这些例子中例证的一样,IPv6分组可以有零、一、或更多扩展报头,每个分组都被前一个报头的下一报头域所标识:
   +—————+————————
   |  IPv6  报头   | TCP 报头 + 数据
   |               |
   |  下一个报头 = |
   |      TCP      |
   +—————+————————

   +—————+—————-+————————
   |  IPv6  报头   |  路 由 报 头   | TCP 报头 + 数据
   |               |                |
   |  下一个报头  = |  下一个报头  = |
   |      路由     |      TCP       |
   +—————+—————-+————————

   +—————+—————-+—————–+—————–
   |  IPv6  报头   |   路 由 报 头   |   分 片 报 头   |  TCP 分 片 
   |               |                |                 | 报头 + 数据
   |  下一个报头 = |    下一个报头 = |   下一个报头 =  |
   |     路由      |      片 段     |       TCP       |
   +—————+—————-+—————–+—————–

有一种例外,除非分组抵达一个标识在IPv6报头目的地址域里的节点(或一组节点中的每一个,以多播的形式传递),否则扩展报头不会被沿着一分组传递路径上的任何节点所检查或处理。这样,如果没有扩展报头出现,那么IPv6下一报头域上的正常多路分解就会激发此模块去处理第一个扩展报头,或者是在扩展报头没有出现时去处理上层报头。
每个扩展报头的内容和语义决定是否去继续到下义报头。所以扩展报头必须严格按它们在分组里出现的顺序来处理。例如,一个接收器就不能通过扫描一个分组来寻找一种特别的扩展报头并优先于处理所有前面的分组来处理它。

前面段落里提到的例外就是逐跳选项报头,其携带的信息必须被沿着分组传递路径的每个节点所处理,包括源和目的地址。逐跳选项报头出现时必须立即接着IPv6报头。它的出现在IPv6下一报头域里用数值零来指出。

作为处理一个报头的结果,假如一个节点被继续传递到下一个报头但在当前报头里的下一报头值不被节点承认的话,节点就会废弃分组并发送一ICMP参数问题信息,包括一ICMP编码值2(意即“遭遇未被承认的下一报头类型”)和在原始分组里包含未承认值的补偿的ICMP指针域到分组源发地。如果一个节点在非IPv6报头里遭遇为零的下一报头值,同样的措施也会被采取。

每个扩展报头都是一个8个8位字节的整数倍,这是为了给后来的报头保留8个8位字节的队列。每个扩展报头里的多个8位字节域是排列在它们的本来边界上的,即对n=1,2,4,或8来说,n个8位字节宽的域被放置在从报头开始的n个8位字节的整数倍位置上。

一个IPv6的完全实现包括下列扩展报头的实现:
        
        逐跳选项
        路由(型号 0)
        分片
        目的选项
        授权
        封装安全有效载荷
前面四项将在这篇文档里被详述,后两项将分别在[RFC-1826]和[RFC-1827]中得以描述。

4.1  扩展报头顺序

     当超过一种扩展报头被用在同一个分组里时,可推荐的是那些报头按下列顺序出现:

           IPv6报头
           逐跳选项报头
           目的选项报头(注1)
           路由报头
           分片报头
           授权报头(注2)
           封装安全有效载荷(注2)
           目的选项报头(注3)
           上层报头

      注 1:指那些将被第一个目的地址处理的选项,这个目的地址出现在IPv6目的地址域里的选项应加上随后列在路由报头里。
      注 2:考虑授权和封装安全有效载荷报头相关顺序的附加推荐在[RFC-1827]里给出。
      注 3:指那些将仅被分组最终目的地处理的选项。
      
除了那些目的选项报头将最多出现两次(一次在路由报头之前,另一次在上层报头之前),每个扩展报头将最多出现一次。

如果上层报头是另一个IPv6报头(以IPv6的形式被隧穿或被封装在IPv6里)的话,那它可能会被它自身的扩展报头紧接着,这两个报头属于同一级别的推荐。

如果并且当别的扩展报头被定义的话,那么它们相对于上面所列报头的顺序约束必须被描述。

除了只被约束在立即出现在IPv6报头之后的逐跳选项报头之外,IPv6节点必须接受以及试图处理同一分组里以任何顺序并发生在任何时间的扩展报头。但是,粘有上述推荐顺序IPv6分组源是已经得以仔细考虑过的,直到并且除非以后的规定能修订那个推荐顺序。

4.2  选项

当前定义过的两个扩展报头–逐跳选项报头和目的选项报头–以下面的格式携有被编码为“选项”的类型长度值(type-length-value(TLV))的变量

      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - -
      |  选项类型   |  选项数据长度   |   选项数据
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - -

      选项类型             选项类型的8位标识符。

      选项数据长度         8位未标记整数。此选项的选项数据长度域以8位字节的形式。
      
      选项数据             可变长度域。选项类型精确数据。

在报头里的选项选项顺序必须严格按它们出现在报头里的顺序来处理;例如,一个接收者不能搜索报头寻找一种特殊选项并在处理所有先于它的选项之前优先处理。

选项类型标识符是被内在编码的以便如果正在处理IPv6的节点没有承认选项类型的话,则标识符最高两位字节能说明这个行为。

      00 - 跳过这个选项并继续处理报头。

      01 - 抛弃此分组
                   
      10 - 抛弃此分组并且无论此分组目的地址是不是一个广播地址都发送一ICMP参数问题(代码2)报文给分组的源地址以指出未被承认的选项类型。
 
      11 - 抛弃此分组并且仅假使分组目的地址不是广播地址时才发送ICMP参数问题(代码2)报文给分组的源地址以指出未被承认的选项类型。

选项类型的第三最高位字节表明那个选项的选项数据是否能改变中间选路至分组的最后目的。当授权报头出现在分组里时,对于任何其数据可能改变中间选路的选项来说,在计算或检验分组授权值时它的全部选项数据域必须被看作零值的字节。   

      0 - 选项数据不会改变中间选路

      1 - 选项数据必须改变中间选路

单个选项可能有特殊的队列要求来确保选项数据域里的多字节值指向本来边界。一个选项的队列要求是使用符号xn+y来指定的,意味着选项类型出现必须出现在从报头开始的一个x个字节相乘的整数再加上y个字节。例如:

       2n    意味着任何从报头开始的2个8位字节的偏移。

       8n+2  意味着任何从报头开始的8个8位字节的偏移再加上2个8位字节。

当必须要排列后来的选项并且衬垫所包含的报头在长度上达到8个8位字节的倍数时,则有两个填料选项要使用。这些填料选项必须被所有IPv6实现所承认:

填料1 选项  (队列要求:无)

       +-+-+-+-+-+-+-+-+
       |       0       |
       +-+-+-+-+-+-+-+-+

       注意!填料1选项的格式是一种特殊形式–它没有长度和值域。

填料1选项是被用来把一个8位字节的填料插入报头的选项区域的。如果需要超过一个8位字节的填料的话,那么填料n选项,正如下面所述,应当被使用,而不是多个填料1选项相乘。

填料N选项  (队列要求:无)

       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - -
       |       1       |  选项数据长度 |  选项数据
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - -

填料N选项是被用来把两个或更多8位字节的填料插入报头的选项区域的。对N个8位字节的填料来说,选项数据长度域包含值为N-2,并且选项数据由N-2个零值的8位字节组成。

附录A包含设计新选项的格式化向导。

4.3  逐跳选项报头

逐跳选项报头用来携带必须被沿着分组传输路径的每个节点所检查的优化信息。逐跳选项报头是用IPv6报头里为零值的下一报头来标识的,并且有下列格式:

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  下 一 报 头  |  报头扩展长度  |                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
   |                                                               |
   .                                                               .
   .                            选   项                            .
   .                                                               .
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   下一报头             8位选择器。标识紧挨着逐跳选项报头的报头类型。使用和IPv4协议域的相同值[如RFC-1700所述]。

   报头扩展长度         8位未标记整数。逐跳选项报头长度是以8字节为单元的,不包括头8个字节。

   选项                 可变长度域,其长度可使逐跳选项报头完整为8字节的整数倍。正如4.2节里形容的一样包含一个或多个TLV编码选项。

在第4.2节里有对填料1和填料N的附加说明,下面是逐跳选项的定义:

   巨有效载荷选项(队列要求:4n+2)

                                       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                       |      194      | 选项数据长度=4 |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                      巨 有 效 载 荷 长 度                      |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

巨有效载荷选项用来把大于65,535字节的有效载荷和IPv6分组一起发送。巨有效载荷长度就是以字节为单位的分组长度,除去IPv6报头但包括逐跳选项报头;其一定大于65,535个字节。如果一个分组和包含少于或等于65,535字节巨有效载荷长度的巨有效载荷选项一起被收到的话,那么一个代码为零并指向无效巨有效载荷长度域的高位字节的ICMP参数差错报文应被发送到分组的源发地。

IPv6里的有效载荷长度域应在携带有巨有效载荷选项的每个分组里被设置为零。如果分组和一当前的巨有效载荷选项以及一非零IPv6有效载荷长度域一起收到,则一个代码为零并指向巨有效载荷选项的选项类型域的ICMP参数差错报文应被发送到分组的源发地。

巨有效载荷选项不能用在携带分片报头的分组里。如果在包含有效巨有效载荷选项的分组里遇到分片报头,则一个代码为零并指向分片报头首字节的ICMP参数差错报文应被发送到分组的源发地。

一个不支持巨有效载荷选项的实现有到链路的接口,其链路MTU大于65,575字节(40字节的IPv6加上65,535字节的有效载荷)。

4.4   路由报头

IPv6源发地使用路由报头来列出到分组目的地址途中要“访问”的中间节点。这个功能与IPv4的源路由选项是非常相似的。路由报头是由紧接着继续报头里值为43的下一报头来定义的,格式如下:

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   下一报头  |  报头扩展长度  |   路由类型   |  遗 留 部 分    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   .                                                               .
   .                        特 殊 类 型 数 据                       .
   .                                                               .
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

下一报头                8位选择器。标识紧随着路由报头的报头类型。和IPv4协议域里使用的值一样[如RFC-1700里所述一样]

扩展报头长度            8位未标记整数。长度为8个字节的路由报头,不包括头8个字节。

路由类型                特定路由报头变量的8位标识符。

遗留部分                8位未标记整数。剩下的路由部分数目,即被清楚列出在抵达最终目的地之前仍然需要访问的中间路由的数目。

特殊类型数据            可变长度域,其格式由路由类型决定,并且其长度能使完整的路由报头是8个字节长度的整数倍。

假如节点正在处理一收到的分组时遭遇带有未被承认路由类型值的路由报头,则此节点所要求的行为依靠遗留部分域值,如下:

      如果遗留部分是零,则节点必须忽略路由报头并继续处理分组里的下一个报头,这个报头的类型是由路由报头里的下一报头域来标识的。

      如果遗留片段不是零,则节点必须抛弃此分组并发送代码为零且指向未承认路由类型的ICMP参数差错代码报文到分组的源发地址。

零路由报头类型有下列格式:

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   下一报头    |  报头扩展长度  | 路 由 类 型=0 |  遗 留 片 段   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    预   留    |                 严格/宽松位图                  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +   |                                                               
|
   +                              地址[1]                          +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                              地址[2]                          +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   .                               .                               .
   .                               .                               .
   .                               .                               .
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                              地址[n]                          +
   |                                                               |
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

下一报头                8位选择器。标识紧随着路由报头的报头类型。和IPv4协议域里使用的值一样[如RFC-1700里所述一样]

扩展报头长度            8位未标记整数。长度为8个字节的路由报头,不包括头8个字节。对于零型路由报头,报头扩展长度等于报头里地址数的两倍,且必须是一个小于等于46的偶数。

路由类型                0。

遗留部分                8位未标记整数。剩下的路由部分数目,即被清楚列出在抵达最终目的地之前仍然需要访问的中间节点的数目。最大合法值是23。

预留                    8位预留域。对于传输初始为零;接收时忽略。

严格/宽松的位图          24位的位图,值从0到23,并是从左到右。对于路由的每一片来说,位图指明是否下一个目的地址必须是前一个地址的邻居:1意味着严格(必须是邻居),0意味着宽松(不需要是邻居)。

地址[1...n]             128位的地址矢量,数目从1到n。

多播地址不必在类型为零的路由报头里出现,或是在携带零路由报头类型分组的IPv6目的地址域里出现。

如果严格/宽松位图的位数值为零,则源分组里IPv6报头的目的地址域必须标识源节点的一个邻居。如果位数为零,则源发者必须使用任何合法的,非多播地址作为初始目的地址。

位数大于n的位必须被源发者设为零并被接收者忽略,这里n是在路由报头里的地址数。

路由报头不会被检查或处理除非它抵达在此IPv6报头目的地址域里被标识的节点。在那个节点,在紧随着前一个报头的下一报头域上分派会导致路由报头模块将被调用,这样以类型为零的路由形式来执行下列算法:

   if 遗留片段 = 0 {
      继续处理分组里的下一报头,它的类型是由路由报头里的下一报头域来标识的
   }
   else if 报头扩展长度是奇数或大于46{
       发送代码为零并指向报头扩展长度域,且抛弃此分组的ICMP参数差错报文到源地址。
   }
   else {
       用扩展报头长度除以2来计算n,n为路由报头里的地址数。
      if 遗留片段大于n {
       发送代码为零并指向遗留片段域,且抛弃此分组的ICMP参数差错报文到源地
       址。
      }
      else {
         遗留片段减一;
         通过把遗留片段减去n来计算i,i是地址矢量里将要被访问的下一地址的索引。

         if 地址 [i] 或IPv6目的地址是广播 {
            抛弃分组
         }
         else {
            交换IPv6目的地址和地址[i]

            if 严格/宽松位图的第i位值为1并且新的目的地址不是这个节点的邻居
            地址{
               发送ICMP目的地不可抵达报文–这不是一到源地址的邻居报文并抛
               弃此分组。
            }
            else if IPv6 跳限制小于或等于一 {

               发送ICMP时间超过–在到源地址的传输报文里跳限制超过并抛弃此
               分组
            }
            else {
               从跳限制里减掉1

               重新递交分组给到新目的地的传输IPv6模块
            }
         }
      }
   }

作为上述算法效用的一个例子,考虑一种从源节点S发送一分组到目的节点D,并使用导致分组通过紧挨着的节点I1,I2,和I3被路由的路由报头。在传递路径每个片段上的相关IPv6报头值和路由报头域的值如下:

当分组从S到I1:

        源地址 = S                  报头扩展长度= 6
        目的地址 = I1               遗留片段 = 3
                                    地址[1] = I2
        (如果位图的零位是 1,         地址[2] = I3
         则S和I1必须是邻居,         地址[3] = D
         这个将被S检查)


当分组从I1到I2:

        源地址 = S                  报头扩展长度= 6
        目的地址 = I2               遗留片段 = 2
                                    地址[1] = I2
        (如果位图的1位是 1,         地址[2] = I3
         则I1和I2必须是邻居,        地址[3] = D
         这个将被I1检查)

当分组从I2到I3:

        源地址 = S                  报头扩展长度= 6
        目的地址 = I3               遗留片段 = 1
                                    地址[1] = I1
        (如果位图的2位是 1,         地址[2] = I3
         则I2和I3必须是邻居,         地址[3] = D
         这个将被I2检查)

当分组从I3到D:

        源地址 = S                  报头扩展长度= 6
        目的地址 = D                遗留片段 = 0
                                    地址[1] = I1
        (如果位图的3位是 1,          地址[2] = I2
         则I3和D必须是邻居,         地址[3] = I3
         这个将被I3检查)

4.5  分片报头

IPv6源发地用分片报头来发送比能适合在路径MTU里还大的分组到它们的目的地。(注意:不象IPv4,IPv6里的分片只通过源节点来实现,而不是由沿着分组传递路径的路由器来实现的–见第5节。)分片报头是由在前一个报头里,值为44的下一报头值来实现的,并且有下列格式:

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |  下一报头    |   预       留   |       分 片 补 偿       |预留|M|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         标          识                        |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

下一报头                8位选择器。标识初始分组(如下面所定义的)的分片部分的初始报头。使用和IPv4协议域一样的值[如RFC-1700里所述]。

预留                    8位预留域。传输时初始为零,接收时忽略。

分片补偿                13位未标记整数。相对于初始分组的分片部分开始来说是随着此                                                                                                                                               
报头并以8个字节为单元的数据补偿。

预留                    2位的预留域。传输时初始为零,接收时忽略。

标志M                   1=更多分片;0=最后的分片。

标识                    32位。见下面的描述。

为了发送一个太大了以至于不适合路径MTU的分组到它的目的地,源节点可以把分组分成分片并把每个分片作为一个独立分组来发送,这些分组到达接收者时再被重新集合。

对于每个将要被分片的分组来说,源节点产生标识值。这个标识必须和近来*同一个源发地址和目的地址上的任何别的分片分组不同。如果路由报头出现,要考虑的目的地址就是最后的目的地址。

     *“近来”意味着是要在分组的最大可能生存时间内,包括从源发地到目的地的传输时间和花在等待要重组的同一个分组的其余分片上的时间。然而这并不要求源节点知道分组的最大生存周期,而是假定维持作为一个简单的,32位的,“回环”计数器的,并且每次分组必须被分片时能增加的标识值能符合要求。这是是否维持一个简单的节点还是多个计数器的实现选择,例如,此节点的每个可能源地址用一个计数器,或者每个活动的(源地址,目的地址)连接一个计数器。

初始时大的未分片的分组被参考为“原始分组”,并被认为是由两部分组成的,如下:

   原始分组:

   +——————+———————-//———————-+
   |     未 分 片     |                    分    片                   |
   |       部分       |                      部分                     |
   +——————+———————-//———————–+

未分片的部分由IPv6报头和扩展报头组成,是必须由到目的地前中间选路上的节点处理的,即直到包括路由报头(如果出现的话)的所有报头,另外也包括逐跳选项报头(如果出现的话),但不包括扩展报头。

分片部分由此分组的其余部分组成,即任何仅需要由最终目的节点所处理的扩展报头以及上层报头和数据。

初始分组的分片部分被分成分片,除了可能是最后“最右面”的那个分片,每个分片长度都是8字节的整数倍。分片将按下面例证的独立“分片分组”来传输:

原始分组:

   +——————+————–+————–+–//–+———-+
   |      未 分 片    |    第一个    |    第二个     |      |   最终   |
   |        部分      |     分片     |     分片      | …. |   分片   |
   +——————+————–+————–+–//–+———-+

分片分组:

   +——————+——–+————–+
   |     未 分 片     |  分 片 |    第一个     |
   |       部分       |  报 头 |     分片      |
   +——————+——–+————–+

   +——————+——–+————–+
   |     未 分 片     |  分 片 |    第二个     |
   |       部分       |  报 头 |     分片      |
   +——————+——–+————–+
                         o
                         o
                         o
   +——————+——–+————–+
   |     未 分 片     |  分 片 |     最终      |
   |       部分       |  报 头 |     分片      |
   +——————+——–+————–+

每个分片分组的组成:

    (1) 初始分组的未分片部分和初始IPv6报头的有效载荷长度一起改变到仅包含此分片分组的长度(除去IPv6报头自身的长度),并且未分片部分的最后报头的下一报头域改变为44。

    (2) 一个分片报头包括:

         标识初始分组分片部分的第一个报头的下一报头值。

         包含相对于初始分组分片部分开始而言的分片补偿,并以8字节为单元的分片补偿。第一个分片(“最左边”)的分片补偿是零。

         一个标志M,当分片是最后(“最右边”)一个时值为零,否则标志M值为1。

      (3) 分片自身。.

分片的长度必须被选择能产生适合在到分组目的地路径的MTU里的分片分组。

在目的地,分片分组被重新组合为原始的,未分片的形式,如下:

   重组原始分组:

   +——————+———————-//————————+
   |    未  分  片    |                   分    片                     |
   |      部  分      |                     部分                       |
   +——————+———————-//————————+

下列规则支配重组:

原始分组只能从具有同一源地址,目的地址以及分片标识的分片分组来重组。

重组分组的未分片部分由直到但不包含第一个分片分组的分片报头的所有报头组成(就是说,分组的分片补偿是零),有下面两个变化:

未分片部分最后一个报头的下一报头域是从分片报头的第一个分片的下一报头域里获得的。

重组分组的有效载荷长度是从未分片部分和最后一个分片的长度和补偿里计算得到的。例如,一种计算重组初始分组的有效载荷长度的公式是:

           PL.orig = PL.first - FL.first - 8 + (8 * FO.last) + FL.last

           这里
           PL.orig  = 重组分组的有效载荷长度域。
           PL.first = 第一个分片分组的有效载荷长度域。
           FL.first = 随着第一个分片分组的分片报头的分片长度。
           FO.last  = 最后一个分片分组的分片报头的分片补偿域。
           FL.last  = 随着最后一个分片分组的分片报头的分片长度。

重组分组的分片部分是从接着每个分片分组的分片报头的分片来建立的。每个分片的长度是通过从分组有效载荷长度里减去IPv6报头和分片本身之间的长度来计算的。它在分片部分的相对位置是通过它分片补偿值来计算的。

分片报头没有出现在最后的重组分组里。

当重组被分片的分组时可能产生以下错误类型:

假如收到的分片数不足以使在那个分组第一个抵达分片接收60秒内完成重组的话,则分组重组必须被终止而且所有已经被收到的分组分片必须被抛弃。如果第一个分片(即分片补偿值为零的那个)已经被接收,ICMP时间超出–分片重组时间超出报文应该被发送到分片的源发地。

如果作为从分片分组有效载荷长度域引出的分片长度不是8字节的倍数并且分片的标志M是1,那么这个分片必须被抛弃并发送代码为零且指向分片分组有效载荷长度域的ICMP参数差错代码报文到分组的源发地址。

如果分片的长度和补偿值致使从分片重组产生的分组有效载荷长度将超过65,535字节那么这个分片必须被抛弃并发送代码为零且指向分片分组分片补偿域的ICMP参数差错代码报文到分组的源发地址。

下列情况不期望发生,但如果出现了则不应被视为错误:

同一初始分组的不同分片的前面分片报头的报头数目和内容可能不同。不管报头怎样出现,在排列用来重组的分片之前,前面每个分片分组分片报头在分组抵达时首先被处理。只有那些补偿为零的分片分组里的那些报头保留在重组后的分组里。

同一原始分组的不同分片的分片报头的下一报头值可能不同。只有从补偿值为零的分片分组里来的值才被用于重组。

4.6  目的地选项报头

目的地选项报头是用来携带仅需要被分组的目的节点检查的优化信息的。目的地选项报头用紧前面一个报头里为60的下一报头值来标识,格式有如下:

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    下一报头   |  扩展报头长度  |                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
   |                                                               |
   .                                                               .
   .                            选   项                            .
   .                                                               .
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   下一报头             8位选择器。标识紧接着目的地选项报头的报头类型。使用和IPv4协议域一样的值[如RFC-1700里所述]。

   扩展报头长度         8位未标记整数。目的地选项报头长度是以8字节为单元的,不包括头8个字节。

   选项                 可变长度域,其长度可使目的地选项报头完整为8字节的整数倍。正如4.2节里形容的一样包含一个或多个TLV编码选项。

本文档里定义的唯一目的地选项是在第4.2节里说明的填料1和填料N。

注意到有两种可能的方法可以编译IPv6分组里的优化目的地信息:要么作为目的地选项报头的一个选项,要么做一个独立的扩展报头。分片报头和授权报头是后一种方法例子。
使用哪种方法取决于不能理解优化信息的目的节点所期望的是何种行为:

  如果目的节点期望行为是抛弃分组并且分组的目的地址不是一个多播地址的话,那么信息要么被编码成一个独立报头要么作为目的选项报头里的一个选项,此目的选项报头里的选项类型在其本身最高两位值为11。这个选择可能取决于怎样采用更少的字节,或怎样产生更好的队列,或更有效的语法等因素。

  如果期望的是任何别的行为,则信息必须被编码成目的选项报头里的一个选项,其在最高两位的选项类型值为00,01,或10,用来说明期望行为(见4.2节)。

4.7 无下一报头

IPv6报头的下一报头域里的值为59或者任何扩展报头指出这个报头后没有报头了。如果IPv6的有效载荷长度指出字节晚于一个下一报头域里有59的报头末尾出现时,这些字节将被抛弃,并且如果分组被转发则字节将不改变地传递。

5. 分组尺寸问题

IPv6要求在Internet网上的每个链路都有576或更多字节的MTU。在任何一个不能搬运576个字节或更多字节分组的链路上,链路特定分片或重组必须在IPv6下一层来提供。

从每个链路到它直接连着的节点,节点都必须能接收和链路MTU一样大的分组。有一个可配置的MTU(如PPP链路[RFC-1661])的链路必须被配置为有至少576字节的MTU。推荐配置一个更大的MTU以适应可能的不招致分片的封装。

为了发现并利用具有大于576字节MTU的路径,强烈推荐IPv6节点实现路径MTU发现[RFC-1191]。然而最小化的IPv6实现(如在导入ROM里)可能简单地限制本身发送不超过576个字节的分组,且忽略了路径MTU发现的实现。

为了发送一大于路径MTU的分组,节点可使用IPv6分片报头来在源发地分开分组并在目的地重组分组。然而这样分片在任何能调节本身分组去适合标准路径MTU(即降到576字节)的应用里是不成功的。

一个节点必须能接收在重组后有1500字节大的分片分组,分组包括IPv6报头。节点允许接收重组后大于1500字节的分片分组。然而节点不能发送重组后尺寸大于1500字节的分片除非其已清楚地得知目的地能重组这样大尺寸的分组。

作为IPv6分组被发送到IPv4目的地的响应(即,分组经历从IPv6到IPv4的转换),初始IPv6节点可能收到一个报告下一跳MTU少于576的ICMP分组太大报文。这样IPv6节点就不被要求去减少后续分组尺寸到少于576字节,但必须包括一个分片报头在分组里以使IPv6到IPv4转换路由器能获得一个用在导致IPv4分片的有效标识值。注意到这意味着有效载荷可能必须被减少到528字节(576减去IPv6报头的40和分片报头的8个字节),并且如果附加扩展报头被使用的话还可以更小。

      注意:路径MTU发现必须被一致执行,这里主机“认为”目的地是连接到和本身一样的链路上。

      注意:不象IPv4,为了执行路径MTU发现,IPv6里不必要设置“不分片”标签在分组报头里。就是说这是每个IPv6分组里的隐含特征。而且RFC-1191程序中的那些包括MTU“台阶”表使用的部分不能应用于IPv6,这是因为“自带寻址信息分组太大”报文的IPv6版本已经标识了要被使用的准确MTU。

6.  流标签

IPv6报头里的24位流标签域可以被源发地用来标记那些要求IPv6路由器进行特殊控制(如非默认QOS或“实时”服务)的分组。在写本文档的时候,IPv6的这个问题仍然是实验性的并且归因于对Internet里的流标签要求变得更清晰的改变。不支持流标签域功能的主机和路由器被要求在初始分组时域要设置为零,在转发分组时不改变的穿过这个域,并且在收到分组时忽略这个域。

流是从特定源发地发送到特定目的地(单播或多播)的一个分组序列,对于流来说,源发地要求介于期间的路由器能对其进行特殊控制。特殊控制的本性可以通过控制协议,诸如资源预留协议,或者通过在流分组自身里的信息,如在逐跳选项里的信息来转运到路由器。这样控制协议或选项的细节已经超出了本文档的范围。

和没有与任何流联合在一块的通信一样,从一个源发地到目的地可能有多个活动流。一个流是由源发地和非零流标签联合在一起来唯一标识的。不属于一个流的分组携带的流标签为零。

流的源节点将一个流标签分配给一个流。新的流标签必须(伪)随机选择并且范围一律是从1到0xffffff。随机分配的目的是为了在适合被路由器用做哈希键值的流标签域里设置任何一组位,用来查询和流联合的状态。

所有属于同一流的分组必须随着同一源地址,目的地地址,优先权以及流标签一起发送。如果任何那些分组中任何一个包括逐跳选项报头,那么它们都必须用同样的逐跳选项报头内容(不包括逐跳选项报头的下一报头域)来初始。如果任何分组包括一路由报头,那么
它们都必须用直到包括路由报头的所有扩展报头(不包括下一路由报头的下一报头域)里的同样内容来初始。用路由器和目的地来检查这些条件是否被满足是允许的但不是要求的。
如果探测到阻碍的话,那么节点必须通过发送代码为零且指向流标签域高位字节(也就是IPv6分组里补偿值1)的ICMP参数差错代码报文到分组的源发地址。

对任何流来说,路由器可以自由地“象机会主义者”一样设置流控制态,甚至是在没有通过控制协议、逐跳选项或别的方法提供给路由器清晰的流建立信息。例如,一旦收到从一特定源发地来的带有未知且非零的流标签的分组,路由器就可以处理分组的IPv6报头和任
何必须的扩展报头,就象此时流标签是零一样。这样的处理将包括决定下一跳接口以及可能的其它行为,如更新逐跳选项、推前路由报头里的指针和地址、或者判定怎样基于优先权域来排列分组。然后路由器可能选择“记住”那些处理步骤的结果并缓存这些信息,同
时使用源地址加上流标签作为缓存键值。接着随后带有同一源地址和流标签的分组就可以参考缓存的信息来操控,而不是根据文章前面要求那样去检查所有那些能假设为流里所见到的从第一个分组开始就未改变的域。

正如前面所述,不管同一流的其他分组是否继续抵达,随机设置的缓存流控制态在其被建立后6秒之内必须被抛弃。如果在缓存态已经废弃后别的带同一源地址和流标签的分组抵达的话,分组将经受完全、正常地处理(好象它的流标签是零一样),可能导致对这个流重建缓存流态。

例如被控制协议和逐跳选项随机设置的缓存流控制态的生存周期必须作为清晰的设置机制规范的一部分来说明。

源发地在任何可能已经为流标签预先使用而建立的流控制态的生存周期里不能再为新的流使用流标签。这是因为在6秒生存期内流控制态可以随机为任何流建立,在使用同一流标签的流的最后一个分组和一新流的第一个分组间间隔是6秒。有更长流态生存期的用作清晰设置流的流标签在被重新为新流使用前必须保持不被用做那些更长生命周期。

当一个节点停止并重新开始(如作为“崩溃”的结果)时,它必须仔细地不要使用一个已经被用作更早的、生存期可能还没有过期的流的流标签。这可能通过在稳定存储器上记录流标签以使流标签在崩溃后能被记住,或者通过在直到任何先前可能建立流最大生存期到期(至少6秒;如果带有更长生存期的清晰流设置机制已经使用则时间更长)之前避免使
用任何流标签来完成。如果重起节点的最小时间(经常是多于6秒)已知,那么在开始分配流标签前这个最小时间能被从必须等待时期内扣除。

对于所有或甚至大多数属于流,也就是携带非零流标签的分组来说并没有特殊要求。这份评估放在这儿让协议设计者和实现者不要去考虑别的方面。例如仅假定大多数分组属于流就想要去设计一个性能完备的路由器或者去设计一个仅工作在属于流的分组之上的报头压缩机制都是不明智的。

7.  优先权

IPv6里的4位优先权域可以使源发地能相对于从同一源发地来的别的分组用它期望的传输优先权进行标识。优先权值被分成两个范围:0到7的值用来指定通信优先权给正在提供阻塞协议的源发地,即作为对阻塞的响应“退回”的通信如TCP通信。8到15的值是用来给在响应阻塞时不能退回的通信如以常速率发送的“实时”分组以优先权。

对于受约束的阻塞通信,推荐下列优先权值给特定应用范围:

         0 - 无特征通信
         1 - “填空”通信(如网络新闻)
         2 - 不被注意的数据传输(如email)
         3 - (预留)
         4 - 被留意的块传输(如FTP,NFS)
         5 - (预留)
         6 - 交互通信(如telnet,X)
         7 - Internet控制通信(如路由控制协议,SNMP)

对于不受约束的阻塞通信来说,在阻塞条件下最低优先权值(8)应该用做那些发送者最希望抛弃的分组(如高保真视频通信),最高优先值(15)应该赋给那些发送者最不希望抛弃的分组(如低保真的音频通信)。在受约束的阻塞优先权和不受约束的优先权之间没有暗示的相对顺序。

8. 上层协议问题
8.1 上层校验和

任何包括从IP报头来的地址的传输层或别的上层协议在它的校验和计算里必须修改得可以在IPv6上使用,即用128位IPv6地址来代替32位IPv4地址。特别的,下面的例证显示了IPv6的TCP和UDP的“伪报头”。

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                         源  地  址                            +   
   +                                                               +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                                                               +
   |                                                               |
   +                        目  的  地  址                         +
   |                                                               |
   +                                                               +
   |                                                               |   
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         有效载荷长度                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       零                     |    下一报头    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

      o  如果分组包含有路由报头,用在伪报头里的哪个目的地址就是最终目的地。在源节点,这个地址将是路由报头的最后部分。在接收方这个地址将是在IPv6报头的目的地址域里。

      o  伪报头里的下一报头值标识了上层协议(如,TCP对应的是6,UDP是17)。如果在IPv6报头和上层报头之间有扩展报头的话,那么伪报头的下一报头值和IPv6报头里的下一报头值会不同。

      o  用在伪报头里的有效载荷长度是上层分组的长度,包括上层报头。如果在IPv6报头和上层报头之间有扩展报头的话,那么伪报头的有效载荷长度将小于IPv6报头里的有效载荷长度(或是在巨有效载荷选项里)。

      o  不象IPv4,当UDP分组被一个IPv6节点初始时,UDP的校验和没有被优化。就是说不管什么时候初始一个UDP分组时,IPv6节点都必须在分组和伪报头上计算UDP校验和,并且如果计算产生的结果是零的话,UDP报头里的位置也必须被改变为0xffff。IPv6接收者必须抛弃包含零校验和的UDP分组并记录错误。

ICMP [RFC-1885]的IPv6版本在其校验和计算里包括上述伪报头,而IPv4版本没有在校验和里包括伪报头,这是一个从ICMP的IPv4版本来的改变。这个改变的理由是为了保护ICMP在其依靠的IPv6报头域上不会中断或误传,而不象IPv4一样被网络层校验和掩盖。ICMP的伪报头里的下一报头域包含的值是58,这样就标识了ICMP的IPv6版本。

8.2 最大分组生存周期

不象IPv4,IPv6节点不需要增强最大分组生存周期。这是因为IPv4“存活”域在IPv6里重新命名为“跳限制”。实际上即便要的话,只有非常少的IPv4实现顺应于它们限制分组生存周期的要求,以至于实践中并没有什么改变。任何依靠网络层协议去限制分组生存周期的上层协议(不管是IPv4还是IPv6)都必须先升级才能提供给自身探测和抛弃废旧分组的机制。

8.3 最大上层有效载荷尺寸

当计算最大有效载荷尺寸对上层数据来说是可行的时候,上层协议必须考虑相对IPv4报头的IPv6报头的更大尺寸。例如,在IPv4里TCP的MSS是用最大分组尺寸(默认值或通过路径MTU发现学习得来的值)减去40字节(20字节是最小化IPv4报头长度和20字节的最小化TCP报头长度)来计算的。当在IPv6上使用TCP时,因为IPv6报头的最小化长度要(就是说,IPv6报头没有扩展报头)比最小化的IPv4长度多20字节,MSS必须用最大分组尺寸减去60字节来计算。

附录A 选项的格式化指导策略

本附录对如何在设计用在逐跳选项报头或者目的选项报头(正如4.2节里形容的一样)里的新选项时放置域给出一些建议。这个指导策略是基于如下一些假设:

      o  一个期望的特征是在选项的选项数据区里任何被排列在它们本来边界上的多字节域,即宽度为n字节的域应该被放置在从逐跳或目的选项报头的开始的n字节的整数倍位置,这里n=1、2、4、或者8。

      o  由于报头是8字节长的整数倍的要求,所以另一个期望的特征是逐跳或目的选项报头要尽可能小空间地建立。

      o  当选项类报头中任一个出现时可以假定它们携带非常小的选项个数,通常只为1。

这些假定提出下列方法去放置选项的域:没有内部填充地从最小到最大将域排序,然后派生基于最大域排列要求(直到8字节的最大队列)的整个选项排列要求。这个方法用下面的方法来例证:

   实例 1

如果选项X要求两个数据域,8字节长的域和4个字节长的域,可以如下放置: 
                                   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
                                   |   选项类型 =X  |选项数据长度=12|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            4-字节域                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                            8-字节域                           +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

为了确保8字节域是在从封装报头的开始的8字节的倍数补偿开始的,要求它的队列是8n+2。
一个完整的包括一个这样选项的逐跳或目的选项报头应该看起来如下:

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   下一报头    | 扩展报头长度=1 |   选项类型=X  | 选项数据长度=12|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            4-字节域                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                            8-字节域                           +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   实例 2

如果选项Y要求三个数据域,8字节长的域、4个字节长的域已经一个1字节长的域,可以如下放置:

                                                   +-+-+-+-+-+-+-+-+
                                                   |   选项类型=Y  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 选项数据长度=7 |    1-字节域   |            2-字节域           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                             4-字节域                          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

为了确保4字节域是在从封装报头的开始的4字节的倍数补偿开始的,要求它的队列是4n+3。
一个完整的包括一个这样选项的逐跳或目的选项报头应该看起来如下:

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |    下一报头   | 扩展报头长度=1 |  填料1 选项=0 |   选项类型=Y   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 选项数据长度=7 |   1-字节域    |            2-字节域           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            4-字节域                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 填料N 选项=1  | 选项数据长度=2 |       0       |       0       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   实例 3

包含例1中的选项X和例2中的选项Y的逐跳和目的选项报头根据选项出现的前后将是下列
两种格式之一:

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   下一报头    | 扩展报头长度=3 |  选项类型=X   | 选项数据长度=12|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            4-字节域                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                            8-字节域                           +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 填料N 选项=1  | 选项数据长度=1 |       0       |   选项类型=Y  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 选项数据长度=7 |   1-字节域    |            2-字节域           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            4-字节域                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 填料N 选项=1  | 选项数据长度=2 |       0       |       0       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |   下一报头    | 扩展报头长度=3 | 填料1 选项=0  |   选项类型=Y   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |选项数据长度=7  |   1-字节域    |           2-字节域            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                              4-字节域                         |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 填料N 选项=1  | 选项数据长度=4 |       0       |       0       |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       0       |       0       |   选项类型=X  | 选项数据长度=12|
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            4-字节域                           |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                                                               |
   +                            8-字节域                           +
   |                                                               |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

安全考虑参考Internet协议[RFC-1825]里的安全架构,本文档说明了和IPv6一起使用的IP授权报头[RFC-1826]和IP封装安全有效载荷[RFC-1827]。

致谢

作者对IPng工作组、端到端协议研究组、以及Internet社区成员的许多有益建议表示衷心的感谢。

作者地址

   Stephen E. Deering                   Robert M. Hinden
   Xerox Palo Alto Research Center      Ipsilon Networks, Inc.
   3333 Coyote Hill Road                2191 E. Bayshore Road, Suite 100
   Palo Alto, CA 94304                  Palo Alto, CA 94303
   USA                                  USA

   Phone: +1 415 812 4839               Phone: +1 415 846 4604
   Fax:   +1 415 812 4471               Fax:   +1 415 855 1414
   EMail: deering@parc.xerox.com        EMail: hinden@ipsilon.com

参考

   [RFC-1825]   Atkinson, R., "Security Architecture for the Internet
                Protocol", RFC 1825, Naval Research Laboratory, August
                1995.

   [RFC-1826]   Atkinson, R., "IP Authentication Header", RFC 1826,
                Naval Research Laboratory, August 1995.

   [RFC-1827]   Atkinson, R., "IP Encapsulating Security Protocol
                (ESP)", RFC 1827, Naval Research Laboratory, August
                1995.

   [RFC-1885]   Conta, A., and S. Deering, "Internet Control Message
                Protocol (ICMPv6) for the Internet Protocol Version 6
                (IPv6) Specification", RFC 1885, Digital Equipment
                Corporation, Xerox PARC, December 1995.

   [RFC-1884]   Hinden, R., and S. Deering, Editors, "IP Version 6
                Addressing Architecture", RFC 1884, Ipsilon Networks,
                Xerox PARC, December 1995.

   [RFC-1191]   Mogul, J., and S. Deering, "Path MTU Discovery", RFC
                1191, DECWRL, Stanford University, November 1990.

   [RFC-791]    Postel, J., "Internet Protocol", STD 5, RFC 791,
                USC/Information Sciences Institute, September 1981.

   [RFC-1700]   Reynolds, J., and J. Postel, "Assigned Numbers", STD 2,
                RFC 1700, USC/Information Sciences Institute, October
                1994.

   [RFC-1661]   Simpson, W., Editor, "The Point-to-Point Protocol
                (PPP)", STD 51, RFC 1661, Daydreamer, July 1994.

rfc1883 - Internet Protocol, Version 6 (IPv6) Specification 
          Internet协议,版本6(IPv6)说明书

RFC1883——Internet Protocol, Version 6 (IPv6) Specification         Internet协议,版本6(IPv6)说明书

2005年04月08日

Office办公套件应用非常广泛,其中PowerPoint能以幻灯片的形式清楚形象地展示演讲人的演讲内容,被广泛应用在教学、会议、产品介绍、商务交流等方面。但美中不足的是,一般的PowerPoint文稿主要用于辅助演讲,如果脱离了演讲人,总会让人感觉不够详细。

  今天我们为大家介绍微软公司的Producer,它是PowerPoint的一个免费组件,能轻松地将视频录像、幻灯片演示和现场声音三者组合在一起并同步播放。更重要的是,由它生成的演示文稿不需要任何辅助软件,用IE就能播放。毫不夸张地说,Producer能帮助我们把会议室和教室“搬”回家。

  除此之外笔者还总结了Producer的一些个性用途。

  产品介绍:相信谁都不愿意读那些枯燥无味的说明书,Producer直观的介绍却让您的客户更容易接受。
  培训教程:坐在家中也能上课,更重要的是,没听懂的地方Producer可以不厌其烦地反复讲解。
  会议纪要:误了会议也不要紧,有了直观生动的会议纪要,相信您再也不会对着会议录像犯困了。
  视频相册:记录、整理和收藏值得回忆的瞬间。

  如下图所示就是由Producer配合PowerPoint生成的视频文稿,大家可以看到有ppt幻灯片、视频讲解录像,还有段落索引。


图1

  那Producer使用起来是不是很困难呢?当然不是,正象它的几个兄弟一样,Producer的操作非常简单,只需四五步,您就可以轻松制作出类似于上面的视频文稿。下面我们一起按步骤制作我们自己的视频文稿,亲身感受一下Producer的“魔力”吧!点击这里下载Producer

  制作步骤导读:

  第一步、导入素材 要制作声像并茂的会议纪要,首先要把相关的视频、声音和幻灯片文件准备好。   >>>详细内容

  第二步、调入模板 导入的素材怎样才能像图1那样各就其位呢?这就是“演示文稿模板“的功用了。   >>>详细内容

  第三步、素材的同步处理  导入的素材要进行同步处理才能真正使用,否则文稿中就可能出现演讲人正在讲解B图,而幻灯片却还在显示A图的尴尬现象。   >>>详细内容

  第四步、编辑和预览  在Producer中修改幻灯片非常简便,只需右击并相应幻灯片并选择“编辑幻灯片”命令,随后Producer会自动打开PowerPoint程序供您修改。另外就像我们用Word打印前需要预览一样,Producer在最后输出文稿之前也可以预览一下。   >>>详细内容

  第五步、发布输出 Producer支持将文稿发布到本机硬盘、局域网共享文件夹、Web服务器等三个位置,我们用得最多的仍是将文稿输出为硬盘文件。   >>>详细内容

2005年04月01日

       上网用代理?好累!!100台机器的IP、网关和DNS配置。老总还要从国外访问他的爱机。还好我会用NAT,哈哈……

        一、 基于NAT的网络规划   曾经有一个朋友问我,他们单位有一个100台机器的大机房,要实现每一台计算机都上网,有没有什么好办法?我认为,用代理是一个办法,但是工作量比较大,要为每一台机器分别安装客户端软件,而且还要设置IP地址、网关、DNS服务器等。后来,我想到了一个不错的方法,那就是建立NAT服务器,在服务器上配置DNS和DHCP服务器,每个工作站只要做简单的设置就能自动接入Internet了,同时还能让网外的计算机直接访问内部网的特定计算机呢。

        二、 服务端组件配置具体步骤

1. 在拨号端口上启用路由

        如果接入Internet的连接是永久性连接,在Windows 2000中是LAN接口(如 DDS、T-Carrier、帧中继、永久 ISDN、xDSL或电缆调制解调器);或者运行 Windows 2000 的计算机连接到 Internet 之前先连接到其他路由器,而 LAN 接口静态地或通过 DHCP 配置 IP 地址、子网掩码和默认网关,请直接跳过添加NAT路由选择协议的步骤。有关在拨号端口上启用路由选择的信息,请参阅"在端口上启用路由"的帮助。   

2. 使用拨号接口来连接

         Internet需要有调制解调器和由ISP提供商提供的拨号连接

3. 创建使用 Internet 接口的默认静态路由

        对于默认的静态路由,需要选择用于连接 Internet 的请求拨号接口(用于拨号连接)或 LAN 接口(用于永久性或中介路由器连接)。目标位置是 0.0.0.0,网络掩码是 0.0.0.0。对于请求拨号接口,网关的 IP 地址是不可配置的。

4. 添加 NAT 路由选择协议

        具体操作如下:打开路由和远程访问;在控制台目录树中,单击"server name- IP 路由-常规";右键单击"常规",然后单击"新路由选择协议";在"路由选择协议"对话框中,单击"网络地址转换",然后单击"确定"。

5. 将Internet及内部网络接口添加到NAT路由协议

        具体操作:打开路由和远程访问;在控制台目录树中,单击"server name- IP路由-常规";右键单击"常规",然后单击"新路由选择协议";在"路由选择协议"对话框中,单击"网络地址转换",然后单击"确定"。

6. 启用网络地址转换寻址

        在路由和远程访问控制台目录树中,单击"NAT";右键单击"NAT",选择"属性";在"地址指派"选项卡上,选中"通过使用DHCP自动指派IP地址"复选框;在"IP地址"和"掩码"中配置 IP 地址范围以分配给专用网络上的 DHCP 客户;单击"排除",配置从分配给专用网络 DHCP 客户中排除的地址,然后单?quot;确定";

7. 启用网络地址转换名称解析

        在路由和远程访问控制台目录树中,单击"NAT";右键单击 NAT,选择"属性";在"名称解析"选项卡上,对于DNS服务器主机名称解析,选中"使用域名系统 (DNS) 客户"复选框。当专用网络上的主机将 DNS 名称查询发送到 NAT 计算机时,需要初始化接入 Internet 的连接,则请选中"当名称需要解析时连接到公共网络"复选框,然后单击"请求拨号接口"中适当的请求拨号接口名称。要注意的是:网络地址转换寻址功能只从与单个子网对应的单个范围指派地址。如果将内部网络 LAN 接口添加到 NAT 路由协议,则采用单个子网配置(此处所有的 LAN 接口都连接到相同网络)。如果 LAN 接口连接不同网络,不同网络上的客户之间将不能连接。

        三. 重要注意事项

1. 如果此服务器是Windows 2000 Active Directory 域成员并且你不是域管理员,则请指示域管理员将此服务器的计算机账户添加到域中的"RAS 和 IAS 服务器"安全组,此服务器是该域中的成员。有两种方法:一是通过使用 Active Directory 用户将计算机加入到安全组;二是使用Netsh Ras Add Registeredserver 命令,域管理员可以将计算机账户添加到"RAS 和 IAS 服务器"安全组。

2. 在配置内部网络接口的IP 地址时,在配置地址转换(NAT)服务器之前,请确定你的服务器有两个网络连接。在例子中,我们在服务器上安装了两块网卡,其中一块IP地址为:202.204.219.111,它是外部地址,可以直接连接到Internet;另一块IP地址是:192.168.0.1,子网掩码:255.255.255.0,没有默认网关,它作为内部网络连接的接口,和内部客户计算机在同一网段(192.168.0.0)。

        四. 配置内部网络上的其它计算机

        在内部网络的其它计算机上配置 TCP/IP 协议以自动获得 IP 地址,然后重新启动计算机。当内部网络上的计算机从网络地址转换计算机接收 IP 地址配置时,用户会自动获得:

1. IP 地址:地址范围为 192.168.0.0;

2. 子网掩码:255.255.255.0;

3. 默认网关:地址转换(NAT)服务器的Internet连接接口的IP地址(公网地址);

4. DNS 服务器:地址转换(NAT)服务器的Internet连接接口的IP地址(公网地址)。

        五、 进阶知识点

高级网络地址转换设置

1. 如果ISP服务商,已经提供了可用的公网地址,我们可以把地址转换(NAT)服务器的Internet连接接口的IP地址,设为这个IP地址。

2. 如果Internet 上的用户想要访问内部网络上的资源,需要添加特殊的端口,此端口将公用 IP 地址和端口数映射到内部网络IP 地址和端口数。