2011年11月20日星期日

留学美国,反思北大

云之 | [转贴]留学美国,反思北大

留学美国,反思北大

— 美国亚洲文化学院 艾蓓达

http://hi.baidu.com/vicixsg/blog/item/62fb5246312aa40f6b63e508.html


我在美国学习的第一件事,是基本的讲和写;第二件事,是如何读文献;第三件事,是如何做一个自由的人。回过头来看,北大究竟欠缺了什么?

   
  向往北大差不多有十年,又在北大学了四年本科物理。北大百年校庆之际,很有一些感触。据我的观察,北大的毕业生谈起母校来,总是以调侃批评为主;而清 华、科大的毕业生谈起母校来,总是以赞美为主。北大百年校庆之际,众多的校友已经唱了不少赞美北大的颂歌,北大更是借着人民大会堂大大地张扬风光了一番。 所以我想在此做做恶人,品评一下今天的北大和北大人,以维继母校长久以来的自由和批判的传统。

  北大是不是世界上最好的大学之一?

  我想从教学和科研两个方面谈一下我个人的体会。

  在北大学的课,不可谓不深不难。四年中的三年,都是在苦读中渡过的。我念书的那几年,读书仍旧是校园里的头等大事,入校时本系的毕业分配竟然是 按照成绩挑选。北大理科本科的课程,差不多已经是美国研究生的课程。北大物理研究生的入门课程如高等量子力学,可能连美国名牌大学中某些专业的物理教授都 没学过。所以北大的本科毕业生到美国念研究生和考试,并不费力气。可能是基于同样原因,中国大陆留学生在美国念研究生课程并不费劲,因此而自傲并瞧不起旁 人的人挺多。但是在北大的几年里,我对科学的经验只是考试和做题,不要说没有学到如何做科研,听过多少科学报告,就是如何查文献也基本没有学过。有外宾的 科学报告总有把门的,大四以前根本没有资格进资料室。顺便提一句,北大的科技文献大多是盗版影印的,最新的也是半年以前的;导师不签字,研究生连复印机使 用不成;从图书馆借英文科技书一般都是精装旧板,署着“燕京大学”的名,被同学们戏称为“珍本善本科技书”。现在北大似乎建了许多华贵的新楼,我但愿新瓶 装了新酒才好。

    

我在美国学习的第一件事,便是学习基本的讲和写。

  语言的听和写其实不是主要的问题,语言的内容才是主要的问题。我们大陆留学生说话,总有《人民日报》的底子,哪怕说点儿简单普通的事,也爱“指 点江山、激扬文字”,弄点什么理论来打底充气。所以在美国,搞文科的学“后现代”那几套最轻车熟路。某些北大的老师,爱在芸芸学子面前,将科学讲得高深莫 测,用哪本教材和指定哪本参考书也是攀比的题目之一。实验课也是涵盖得越多越好,哪怕学生们其实是在机械地照单照做照抄。比照一下生动活泼的美国的普通物 理,放任自流的物理教学实验,中国的普通物理一上来便是抽象的教条,既象《易经》又象《圣经》。我在美国,才学会如何将一个复杂的问题讲和写得简单易懂, 领略到科学的精神其实就是将一个复杂的问题表述得简单易懂。不信你便去听听诺贝尔奖获得者的科学报告,再去听听研究生的资格口试,一定前者易后者难。可 能,讲和写的方式便是带有中国特色的科学精神,我们的老祖宗们便喜欢引经据点地把简单的想法复杂化和神秘化。同样是古代“朴素的唯物主义”,中国的“阴阳 五行说”便要比西方的“原子说”要艰深博大得多。

  不仅说话不同,学习的方式也不同。一般地讲,北大的专业课程总是很难的,老师课堂上往往一句废话也没有,同学们下课便是“消化吸收”和做作业, 学得好不好也是看考试成绩来定。不仅学生如此,老师也是如此。在国内参加科学报告时,我经常看到老师们如众星捧月般簇拥着科学名人,几次看见因为一个不深 入的提问,台下问的人灰溜溜地无地自容,台上讲的人趾高气扬地不屑一顾。偶尔听到老师谈老师,也是某某于某年某日向某个名人问了某个愚蠢的问题,或者是某 某曾受到过某位名人的赞赏。一切有点象武侠小说里高手对掌,一口气喘不对便要粉身碎骨。想必在北大呆久了,在专业上沉默是金;偶尔一开口,也一定要点到穴 位上。所以,在北大的几年里,能听到的科学报告很少,倒是关于气功的讲座很多。总之,北大在做学问上,“认真”和“宽容”调和得并不好;学生和老师,在科 学的领域里,精神上是不太自由的。

  在美国上课,便要轻松得多。课堂上有问有答,老师如鱼得水,学生妙语连珠,彼此汤姆、彼德地称兄道弟。即使是荒诞不经的问题,老师也要借机引申 一番。的确,科学上有什么是坏的问题吗?我们如果让中国的“杞人”一直忧下去,不怕他忧变了天——中国便可能是牛顿的故乡和爱因斯坦的故乡。美国学生一般 没有中国学生知道得多,问的问题也天真;但好的学生往往能问出好问题,让老师大大地引申一番兴奋一场。和好的美国学生一起上课,仿佛是在看别人在做有趣的 猜谜游戏,自己因为预先知道了答案而只能旁观,心中充满懊恼和羡慕。美国学生还有一个特色,就是他们十分热爱自己的专业,比如学生物的从小便做野外观测, 案头常常放有自己幼时亲手采来的标本,有的假期依然重操旧业;学物理的十分熬得住,四十出头一无所有依然热忱不减。而决定中国学生所学专业的其实是高考分 数和毕业分配,所以中国留学生们在这里一有风吹草动便纷纷跳槽转业。也许过多的知识让我们早熟了,失去了在科学上的童贞和热情。现在,看看国内教育更加起 劲地制造小天才和小专家,我但愿中国未来的人才别个个都是小老头了。当然,美国并非到处如此,一般工学院的课堂风格便比较近似于国内。可能,这也正是美国 工业界在高科技上拔尖的人物中,工学院科班出身的人并不多。总之,这种培训式的教育严格训练出来的人中,在科技上勤恳有用“成名”的挺多,开辟新路“成 家”的不多。

  在美国听名人演讲也是如此。名人孤单地来,孤单地去。并不因他有名,台下问问题的人便显出胆怯。在美国,自由的含义之一便是尊重每个个体,哪怕 他是多么默默无闻。相反,在中国做个孤独的普通人,是最危险和最寂寞的。一个人稍微在某件事上与众不同一点,便可引祸上身。我们老祖宗的智慧,便是尽量消 灭自己的个性,多往人多的地方站。中国近代史上运动来运动去,一大原因便是大家因恐惧而跟着形势走。在中国做学问,也要依附成理;大学各系里的老师往往都 是本校本系毕业的同门,学术上以校为派。在美国学界,年轻人总想独树一帜,弄一套自己的理论体系来玩玩。留校教书被当做“近亲结婚”而被人不齿。热爱自由 的人说起话来,当然少有顾忌而充满个性,即使说的是科学上的术语。

  我在美国学习的第二件事,便是如何读文献。

  中国式的读书最适合用来读课本和考科举。书中的每一条都是真理、因为每一条都可能被考到。老祖宗传下来的读书方法是:读书要以书为主,掌握了一 个“正确”的理论体系,就是掌握了真理本身,就象武侠小说里的真功夫,都在“秘籍”里一般。迷信理论体系,也是我们中国的特色之一。我们几千年曾捧着孔孟 之道不放,孔孟不行了,便去找其它的主义;找到了马列主义,便当做救国的真理;后来又去弄民族主义和后现代主义之类玄学。“现代化”便意味着当官的都要去 弄文凭。辨证唯物主义的理论体系被官方奉为学科学的指南,反过来大学里同学们昏天黑地的看佛洛伊德、康德、尼采和萨特的理论体系,把它们当作“救国救民救 自己”的武功秘籍。在北大,“科学”是被当做“真理”来看的。更不幸的是,在中国的其他地方,“科学”是被当做“技术”的工具来看的。而“技术”更是搞 “政治”的工具,比如芝麻大一点成果,甚至是抄袭照搬引进别人的,也要和政治联系上、和民族的尊严联系上。

  而林林总总的科学文献中,有对的,有错的,所以读科学文献,要怀疑、要分析、要推理、要就事论事、和要旁敲侧击——要“不信邪”,要以“我”为 主。美国的研究生课程中,读文献才是重头。发展快一点的学科,如生物,研究生课程常常没有教科书,只有文献,甚至于象听科学报告一样,十几位老师轮流传, 每个老师讲他那一方向的科研,留一堆令人头痛的文献。美国教育体制似乎并不在乎给学生一个完整的理论体系,而在乎给学生一个分析信息的方法,“少谈主义, 多谈问题”。我因转学生物物理而旁听了一年的遗传学,就是这种风格;第二年正式选课时,发现内容已经有了许多更新,文献有一半是新的。有的老师还要故意给 学生指定“牛屎”文章请学生分析,让学生上上大当,让我们明白即使是科学也有不完美的地方和撒谎的地方。遇到问题,美国学者的第一本能便是想想“图像” ——想想已知的事实的前后顺序,而不是像我们中国人那样开始一头扎进理论体系,或是象俄国人那样开始解方程式。在美国,一个好的研究生不光要做好项目,还 要会看文章、能拿主意、懂得究竟为什么要做这个项目,并能放眼未来。而一个研究生如果只被动地读导师指定的文献,他不会成为一个真正的科学家,最多只能成 为一个科学上勤勤恳恳的跟屁虫。可惜,读文献的意识在我们中国留学生中并不十分强烈,许多人一说便是个人手头的项目做得有多好,但对其它人在做什么却所知 甚少。在西方,“科学”不是从理论体系开始的,而是从事实和信息开始的;人与理论体系的关系是自由平等之下人人玩理论体系、而不是象在中国那样理论体系一 直在玩人人。我这里并不是说理论体系在科学上不重要,而是说理论体系不应管得过宽过细,成为独裁人的思想的东西。在西方,“真理”是被当做“科学”来看 的。半个多世纪以后,我终于理解了北大老校长胡适忠告要“少谈主义,多谈问题”的苦衷。

   
  我在美国学习的第三件事,便是如何做一个自由的人。
    

记得在北大参加“草地沙龙”时,那时北大学生对北大不自由的一致定义便是:一、要上政治课;二、晚上要熄灯;三、早晨听大喇叭;四、食堂太定时……在美国几年后,我对自由的理解完全变了, 自由不是无法无天、随心所欲、或是御风而游、心驰神想等等。自由包涵着义务、责任、尊严、尊重、法治、平等、和社会的公正。自由不再是一种个人的状态,自 由其实是一种社会的公德。首先,自由的第一要素便是平等。如前所述,我觉得国内的教学是在培养科学上的奴仆门徒。那么国内的科学研究又如何呢?我有一个很 有天赋的同学,在北大跟一位有名的学者做研究生,常常私下抱怨老师管得太严了,不容任何不同的想法,当研究生简直就是在当计算器和仪器的按钮。对学生的不 尊重发展到这样的一种程度:个别老师在做关键的研究实验时,要把自己的研究生请到门外站着。不仅当学生的没有建立在平等基础上的尊严,当老师的也没有;小 小的名气便是瞧不起他人的基础,四十多岁头发都斑白了还被叫做“小某”、还要去给别人当助手,连独立开课也不被允许。

  与此相比,在美国立志从事科学研究的中国留学生便要幸运得多,一上来便能挑大梁,两年以内便在最权威学术杂志上发表文章的人很多。同样的中国人,在海外当当响,在国内窝窝囊,我想制度是主要的原因。美 国的研究生导师一般只给学生提供钱和给项目上开个头,其它由学生自己去闯去做。学生遇到问题,老师给出点子和打气。学生做不下去了,老师帮忙转向。学生和 老师是十分平等的。有几次我和导师有学术上的分岐,两人拍着桌子对吵——我的导师平时是一个非常温文和蔼的人,也是学术上一个方面的权威——如果导师见的 确说服不了我,便与我共同分析一下我的方法会不会损坏仪器、浪费过多的经费和耗费过多的时间,然后让我自己去试去体会。果然有一半时间上我最终明白导师的 意见是对的,但是也有一半时间上我能向导师证明我的想法是对的,导师这时便很是高兴,认为我为项目带来了突破。几年以来,我与导师既有争论的时候,也有共 同庆贺的时候,导师真心地希望我能超过他,师生的情感日笃。美国人一般十分尊重有主见的人,更看重能坚持正确己见的人。

  当然,导师和学生也可能有利益上的冲突。本系与我同届有一位中国学生,不到三年就完成了博士论文的课题,但他的导师不让他马上毕业,阻挠、并在 他的论文答辩上使坏。该同学一状告到学校,结果不仅他顺利毕业、由系主任推荐找到了不错的博士后,而且他三年来的成果属于他个人、而与他的导师不再有关 联。所以,自由的第二要素便是法治保障下的社会公正。表面上“金钱至上”的美国社会有《反垄断法》和《遗产法》等限制 个人财富和自由的立法,就是为了保障个别人的影响力不过度地干涉到社会公正。相反,在法律上少数民族可能拥有更多的个人权利,美国的新闻也更加关注社会上 的弱者和受害者。退一步讲,美国是一个自由的社会,在一个地方呆得不痛快,大可换一个地方继续干。所以,我认为北大校友卢刚几年前枪杀导师和博士论文答辩 委员会全体并杀及无辜的行为,既是卑鄙的和残忍的杀人犯行为,又是对“自由”的完全无知——而不是象网上某些自封的“爱国狂”所说的那样是个“自卫”的 “爱国”的行动:因为他杀了不认同他的美国白人。自由更加重视个人的尊严和个人的责任。

  我国司马迁在伟大的《史记》里,为重信义、一诺千金的人专门做了一篇《刺客游侠列传》。反过来看,几千年封建独裁之后,在中国做重信义、一诺千金的人,便如做刺客一般。解放以来, 中国有那么多的民族苦难和政治运动,敢于仗义直言的人是那么少,他们和他们家人的结局一般比三千年以前战国时代的刺客更加悲惨;相反,随波逐流落井下石迫 害他人的人是那么众多。在我,刚上学便开始学写“在马路上拣了五分钱”、“给军属李奶奶挑水”式的日记,写过无数的决心书和誓言,批判过无数一无所知的人 和事,背诵过无穷无尽的政治答题。统治者的心态,是即使不能给年轻人洗脑,也是要把他们变成不敢说实话和负责任的胆怯的小骗子——对于习惯撒谎的灵魂们, 重信义、看事实、定量办事的个人,便如刺客一般;按塞万提斯的说法:侠士和好主教大人的故事使胆怯的小市民心安理得,因为他们不会武功不是主教也就不必去 想着打抱不平。

  所以我们一旦到了一个自由的世界里,应该检讨一下个人灵魂深处撒谎的习惯。我到美国的第一个震惊,便是美国人对“撒谎者”的极度鄙视。个人的言 行一致、前后一贯,是美国老百姓判断一个人的“试金石”。几年以后,可能是被“西化”了吧,我对许多同胞的办事方法实在不敢恭维。比如这几年国内的 TOEFL和GRE成绩越来越高,许多人便另辟蹊径,给教授写决心书式的自荐信,言辞诚恳、声情并茂;并千方百计找到在这里素不相识的校友做联系人;其实 一面已经在暗中着手转校和转专业;来了不到一年,便神秘失踪,把系里和恩师急得团团转——以为出了什么刑事案件;其人千里之外打个电话过来让联系人去给他 擦屁股和邮寄行李,苦劝之下也绝不给系里和恩师打个电话说明情况和给联系人留个电话号码。言而无信过河拆桥,这样做其实很伤人心,许多教授已经立誓不从中 国大陆招研究生,一些系开始象防贼一样地防大陆来的留学生,老生再也不愿给新生做联系人。其实在美国,转校和换专业是天经地义、受法律和校规保障的。许多 人这样做的小算盘,只是多拿一、两个月资助。撒谎的习惯,也被一些人带到科学研究里。有些人对于导师的所有要求,一概满口答应,下来便造数据和程序输出, 从并不工作的仪器里也能得出最好的结果,仿佛是在国内做学生实验一般。在民主的社会里,真正的自由是无法“法定”的,多数自由基于人与人之间的信任与默 契。而撒谎的人是无法让别人信任的,我们不尊重自由的结果将是做为整体地失去部份自由。我个人有时觉得在美国最受不了的“妖化”,便是被别人在内心深处当 做说谎的种族。
   
  我常常想,北大究竟要为过去的历史事件负怎样的责任。不错,北大也许是中国最民主和自由的地方,但是北大似乎欠缺了什么。从北大发起的历次政治运动, 几次改变了中国的历史。历次要求民主与自由的政治运动里,冲锋陷阵的都是年轻的学生。而当你一旦看到这些运动的领导者,都是一些刚上大学的“青少年”,你 便不再奇怪这些运动非理性的特征和悲剧的结局。北大的中年老师们曾一再向学生们灌输民主与自由好的理念,风雨既来,他们怕受连累连“幕后”也不愿当,只愿 自成一体高谈阔论;风暴一来,纷纷去讲学问做聪明人,使少数敢于坚持社会责任感的老师这样突出和孤独——所以我觉得北大的老师们并没有尽到全部的历史的责 任。作为学生来讲,在运动高潮自己对前途也迷茫,就不该再去号召老百姓们去做什么,让群众去为自己铺路和堵枪眼,把人民当作做政治实验的小白鼠;北大的学 生们也把历史当成作戏,十分追求戏剧效果,一旦不如意就丢开不管,对于历史也是不够负责任的。

  自由的人真正懂得如何尊重他人和他人的工作。我记得中国有一位受尽苦难的老歌唱家,在北大某年校庆时,带着对北大深深的敬意来为北大歌唱,他人老了,一个高音没有唱准,立刻引来台下一片嘘哄之声;我因恰巧坐在前排,而看清了他眼中老花镜后的泪水;不知有多少读此文的北大校友还记着这一幕

    
  所以有时我生气地觉得,北大八十年代的民主热与自由热,不是出于对基本人性的追求,而是出于时尚的偏好。 现在,坦率地说,我与九十年代的北大校友很有隔阂,因为他们一般不太看重我们八十年代这一批人视为基本人性的东西,而谈得更多些中国人与西方人在人性上不 同,和站在纯粹民族主义立场上的“中华抱负”。几年以来,在与“洋人”们的交往上,我深切地觉得“老中”和“老外”在人性上是相通的,相信众生平等、世界 应该大同。而我的许多同学和同胞,在这里不读书不看报也不与洋人交往,却天天大肆批判别人,一直生活在“受迫害”的臆想里。

  在北大时人人大谈特谈自由与民主,我们那一代的大学生大概个个如此。而一旦到了民主与自由的社会里,大家往往热衷于破坏与滥用民主与自由的体 制。举个例子来说,留学生一般都是自费生,拿W-2津贴,照理该交税。但大家不交税的办法五花八门,理由也很多很充足:虽然我拿W-2津贴,但我认为这是 奖学金不用交税;美国反正钱多,不缺这一点;我已经交过税了——我的科研比钱对美国更重要;我将来“要回去”,我应该从现在就享受公费生的待遇;美国反正 花钱白养黑人西班牙人白人,为什么不能白养几个中国人;美国不是讲人权吗?它就应该讲我的人权,养养我。聪明些的到中国城请人代办偷税。而中国留学生有了 小孩却要拿美国的社会福利,因为我们是在养“美国孩子”。有绿卡一定要拿,因为“美国需要我”。来探亲的父母若有病,送到急诊室不要签任何字,让社会福利 和教会出钱……其实,讲“人权”的社会里的许多好处,都是别人奉献给你的,现代民主社会的基石之一,便是在自由公开基础上的“公益”二字。税收是按照民主方式定的,在法律监督下使用。也许分配制度不是尽善尽美,但对个人,它不仅提供了比独裁更公平的机制,而且也给个人充分的抱怨修正的机会。如果大家都像某些同胞那样只会索取不奉献,占便宜只嫌不多,那么再好的社会制度也是要垮台的。

    
  “以恶度人”的态度,也被许多同胞用来看美国。美国人笨,做题和考试远不如老子;我们偷税、不讲公德,不是也有美国人这么干吗?美国人让我们上学,不 就是想将来靠着我们压榨我们吗?同胞们关起门来私谈,说白人多是男盗女娼,称黑人必叫黑鬼,但对任何对中国人的不利评价都要跳,动辄就是“围堵中国”“妖 魔化中国”等帽子。别人说了什么、是不是事实,有多少是事实,都不重要,只要不是正面报导就不行。说实话,每个人到了海外,都有一段对有关祖国的事过分敏 感的时期,因为在我们的爱国教育中,有着过多的“受害教育”和社会达尔文主义“民族至上”的旧货,从未客观地分析看待中华民族历史上与其它民族的关系,而 一直把自己当做别人的家长和恩人。近年来一些同胞到美国并千方百计地留下来,似乎就是专门留在这里“恨”它的。如此,不仅美国先进的东西学不到,中国落后 的东西也看不见;留学爱国的目的又在哪里呢?

  尊重他人,也包括尊重他人的信仰。在美国,基督教是主流。一些中国人为了增加社会关系和受教会的庇护,便积极入教和受洗;但私下对宗教并不以为然。国内政治上的积极分子在这里往往是另一种积极分子。其实,没有很多人是傻子,西方的传教士早就观察到:中国人什么都可以信,其实什么都不信。中国留学生应该认认真真地学学基督教深刻自省、平等博爱和切实奋斗的精神——这些我们传统文化中缺少的东西。


  好了,我从北大谈起,已经谈到民主、自由和道德上。我所谈的,是北大和我们同胞身上最阴暗的一面。其实我在美国,遇到过许许多多献身科学有所建树和道 德高尚的同胞和校友。北大和北大老师留给我的记忆其实是十分美好的,对我的培养也使我终身受益不尽——我写此文,就是缘于“北大精神”的感召,希望整个世 界象北大未名湖那般纯洁和秀美。

  
  ( 本文为作者艾蓓达博士的个人观点及版权权益,不代表任何机构及组织的立场和知识产权

2011年11月14日星期一

经济危机是“生产过剩”造成的吗?

经济危机是“生产过剩”造成的吗?

2011-11-9

目前,世界经济尚未走出困境,中国经济正在走向深渊。关于经济危机,总有这样一个说法:经济危机是生产过剩造成的,似乎只要我们多消费少生产,经济就能摆 脱困境。在一般人看来,这种说法虽然不可思议,但是很符合人们的期望:如果我们多花钱少工作,经济就能好起来,这该有多好!然而真有这样的好事吗?

首先让我们设想一下,假如有一天出现了一个奇迹:所有我们想要的商品都生产得比过去多了!这时会发生什么?由于商品多了,生产者必须降价出售商品,这样很 多以前买不起商品的人就能买得起了。而生产者赚到的钱虽然没有预期的那么多,但是当他们购买其他商品(包括再生产所需的原材料、机器设备等)时,需要的钱 也比以前要少,他们手中的货币购买力增强了,因此他们并没有吃亏。这种情况其实就相当于货币升值,或者叫做通货紧缩。有些人认为通货紧缩对经济有害,不过 美国在整个经济起飞的十九世纪几乎一直是通货紧缩的,那时人们认为商品价格不断下降是经济发展良好的特征(今天我们也认为电脑之类的商品价格不断下降是极 为正常的事)。经济并不会因为“所有我们需要的商品都生产多了”而发生危机。

当然上述情况是不可能发生的,因为生产所需的资本(原材料、机器设备等)是有限的,不可能一夜之间所有的商品都生产多了。生产确实会发展,人们确实能够比以前生产更多的商品,但这是一个渐进的过程,不可能在一夜之间发生。

那为什么有时会出现商品过剩卖不出去的现象呢?这是因为你生产的东西不符合市场的需求。投资者错估了市场需求,进行了错误的投资,导致生产的商品买不出 去,这种情况总是难以避免的。这也不能叫生产过剩,因为资本是稀缺的,一些资本被浪费在生产市场不需要的商品上,必然导致一些原本可以生产出来的市场需要 的商品生产不足。

错误投资在所难免,但是为什么有些时候会出现大规模系统性的投资错误,甚至造成经济危机?这常常是政府行为导致的。政府强行压低银行利率,滥发钞票,制造通货膨胀,扭曲价格信号,误导投资者做出错误投资,这就是今天经济危机的主要来源。

通货膨胀会制造出许多“便宜的钱”,误导投资者投资到本来没有效益、无法收回成本的项目中。同时消费者手里的钱也变多了,他们增加消费,让投资者误以为消 费者的购买力增强。但这些都是通货膨胀造成的幻觉,真实的资本(原材料、机器设备等)并没有增多,购买力也没有真的增强,因此许多投资无法继续,资本被浪 费掉。

更重要的是,通货膨胀发生时,所有商品并不是同时涨价。政府多发钞票之后,政府和与政府关系密切者首先拿到新钱,当他们拿这些钱去投资和消费时,商品价格 还没有上涨,通货膨胀对他们来说是一笔净收益;而那些不幸远离政府权力者只有在所有商品的价格都已经上涨之后才能拿到多出来的钱,通货膨胀对他们来说是净 损失。因此我们可以说通货膨胀是一种变相税收,是有权者从无权者口袋里抢钱的手段之一。通货膨胀误导投资者把资本投入政府偏爱但未必有效益的项目中(与政 府关系密切的大企业总能最先得到新印出来的钱),而另外一些生产消费者真正需要的商品但是得不到政府偏爱的项目则会投资不足,这就造成了大规模系统性的投 资错误。

因此,经济学家主张政府减税,但是减税的前提是减少政府开支平衡预算。因为如果只减税而不平衡预算,政府就会用多发钞票制造通货膨胀的方法来维持政府运转,同样会给经济带来隐患。

经济危机时应该怎么办?需要政府出钱来救助濒临倒闭的企业吗?前面说了,经济危机源于错误投资,企业倒闭破产就是在清理这些错误投资,让资源可以从错误投 资中脱身,投入另一些真正有效益的生产中,避免资源被进一步浪费。政府出钱救助某些“大而不能倒”的企业就阻碍了这一资源重组过程,妨碍了经济的复苏。而 且这种做法纯属劫贫济富。

经济危机需要刺激消费吗?有些人认为经济危机的原因是“生产过剩消费不足”,前文已说明,经济危机并不是生产过剩造成的,同样,消费不足也不是经济危机的 起因,而是经济危机的结果。认为经济危机时应该刺激消费,这就好像在郁金香生产过剩、粮食生产不足、经济发生危机、人们吃不上饭时说:现在经济危机的原因 是生产过剩消费不足,因此只要大家多吃饭少干活,经济就能好起来。

人最不缺的就是欲望,如果商品卖不出去,不是因为商品不符合人们的需要,就是因为价格太贵。如果是前一种情况,那就需要让那些生产不合需要产品的企业破 产,把资源转移出来生产人们需要的商品;如果是后一种情况,经济危机时发生的通货紧缩就是件好事。通货紧缩可以让商品价格下降到人们买得起的程度,因此在 经济危机时依靠多发钞票来刺激消费就阻碍了这一调整过程。

最后,政府不干预经济的“自由放任”原则是否有利于富人剥削穷人呢?这一观点的前提是认为政府对经济的干预总是有利于穷人的,而这是值得怀疑的。既然富人 比穷人更有资源和能力来影响政府,那么我们有什么理由认为政府的干预会有利于穷人呢?通货膨胀就是典型的劫贫济富政策。最先得到新钱并从中大发横财的永远 是那些与政府关系密切的大企业,工薪一族和退休人员则成为通货膨胀的牺牲品。政府各种加强监管的做法通常也是有利于大企业的,因为大企业更容易达到苛刻的 监管标准(即使达不到,向政府监管人员行贿也更加容易),并利用这一标准去打击较小的企业,以此来消灭潜在的竞争对手。减少政府干预的结果很可能会是大企 业更少,小企业更多,贫富差距更小,银行业更加负责……要实现这些目标,除了减少干预之外,还需要政府削减开支、平衡预算、量入为出,彻底消灭通货膨胀。

2011年11月13日星期日

SJTU IPv6 plan

http://ipv6.sjtu.edu.cn/index.php

在Windows操作系统下利用netsh命令配置IPv6


在Windows操作系统下利用netsh命令配置IPv6

简介

    在Windows操作系统下,我们可以通过netsh命令对IPv6的各项参数进行配置,而netsh命令基本上在所有支持IPv6的操作系统下均能使用,功能非常强大,通过netsh命令,我们可以查看、添加、修改、删除各接口的IPv6地址、DNS服务器地址、网关等。同时也可以修改IPv6的全局参数、接口IPv6参数、MTU,也可以添加某些特殊的静态IPv6路由,同时配置IPv6下的6to4隧道、ISATAP隧道等各种隧道……功能实在太多,无法一一列举!该命令几乎涵盖了Windows操作系统下所有针对IPv6的特性参数调整,绝对是Windows下对IPv6协议栈进行控制的最佳武器!同时netsh命令也不仅仅针对IPv6协议栈,同样适用于IPv4以及操作系统下面的一些其它功能,但本文无法一一涵盖,因此仅涉及IPv6部分。
    本文仅针对netsh命令对IPv6协议栈的一些基本配置,尤其的针对Windows XP、2003等操作系统下,因为IPv6地址、网关、DNS服务器等不能像Vista与Win 7下,类似IPv4地址能够直接通过图形化界面添加或修改,均需通过命令来实现,而netsh都可以完成所有功能,而且掌握该命令也非常简单,对一般最终桌面用户、IPv6的网络管理员也能提供很大的帮助!本文仅介绍通过netsh命令进行一些IPv6的地址、DNS、网关(路由)等进行配置,修改、删除等,暂不涉及其它IPv6协议栈参数、隧道等配置部分,后续我们IPv6论坛将针对netsh命令中的隧道部分、IPv6协议栈参数部分的配置进行补充。在本文的基本配置入门以后,相信能够通过netsh进行其它相关的配置,达到触类旁通的效果。
    

1。进入netsh命令下的IPv6视图
操作命令如下图所示:
01.png

2.IPv6协议栈的添加、删除

在操作系统上添加IPv6协议栈:
方式一:
02.png
方式二:
03.png

在操作系统上卸载IPv6协议栈:
方式一:
05.png
方式二:
04.png

如果在安装过程中出现如下错误信息:
C:\Documents and Settings\www.ipv6bbs.cn>ipv6 install
Installing...
Failed to complete the action. Error 0x800704b8

请先运行以下命令修改系统数据库文件:
C:\Documents and Settings\www.ipv6bbs.cnesentutl /p %windir%\security\Database\secedit.sdb

在弹出的提示对话框中选择“确定”,完成后再重新进行IPv6协议的安装。

3.IPv6协议栈的重置
操作命令如下图所示:
06.png

4.netsh命令下IPv6协议栈可用命令列表
我们就不做过多的介绍了,直接上图说明:

full.png

4.查看IPv6地址、DNS、路由
各命令如下图所示:
07.png

5.添加IPv6地址、DNS、路由
各命令如下图所示:
08.png

6.修改IPv6地址、路由
各命令如下图所示:
09.png

7.删除IPv6地址、DNS、路由
各命令如下图所示:
10.png

8.添加、查看、删除IPv6地址操作示例
配置IPv6地址:
01.png

02.png

查看IPv6地址:
03.png

04.png

删除IPv6地址:
06.png

9.添加、查看、删除DNS服务器操作示例

添加IPv6 DNS服务器地址:
07.png

查看IPv6 DNS服务器地址:
08.png

删除IPv6 DNS服务器地址:
09.png

10.添加、查看、删除IPv6路由操作示例

添加IPv6路由命令使用帮助:
10.png

添加、查看、删除IPv6路由:
11.png


11.重置IPv6协议栈操作示例
如下图所示:
12.png
下载 (22.83 KB)
reset命令
2010-8-21 23:40

在Windows XP下使用Teredo隧道接入IPv6网络


在Windows XP下使用Teredo隧道接入IPv6网络

在本站的文章:IPv4网络下接入IPv6网络的方法(隧道与第三方软件)http://www.ipv6bbs.cn/thread-151-1-1.html 中,介绍了在现有IPv4网络接入IPv6 Internet的一种方法:teredo隧道接入IPv6。而具体的teredo隧道与teredo服务器的配置部分却并未涉及,很多新手可能对此部分并不是很了解,因此本文主要以Windows XP为例,给大家演示如何配置teredo隧道,来穿越路由器的NAT,通过不具备公网IPv4的内网,接入IPv6 Internet,提前感受IPv6的魅力。
本文的例子通过Windows XP操作系统来配置,对于Windows 2003、Windows Vista与Windows 7下的用户,方法基本与此类似。

而关于Teredo隧道的技术实现原理,感兴趣的朋友可以参考本站的文章:
Teredo 原理概述
http://www.ipv6bbs.cn/thread-144-1-1.html

Teredo隧道的配置
teredo隧道一般通过windows操作系统下的netsh命令来操作,本站有一篇关于Windows XP下netsh命令对IPv6地址、路由、dns等的基本使用操作,感兴趣的朋友可以查看:
在Windows操作系统下利用netsh命令配置IPv6http://www.ipv6bbs.cn/thread-125-1-1.html
而Teredo隧道同样是通过netsh命令来进行配置,默认我们的操作系统是有teredo隧道的配置,使用Microsoft的官方teredo服务器地址:teredo.ipv6.microsoft.com
但很遗憾,大部分用户并不能正常使用此Teredo服务器,因此我们可手工通过netsh命令修改此服务器地址为其它可用teredo服务器,来实现穿越NAT接入IPv6 Internet中。

配置teredo隧道只有一条命令,该命令相关的参数与实例如下图所示:
1.jpg

我们通过如下命令修改teredo服务器地址
2.jpg
然后等待约30-60s,Windows XP与Teredo服务器建立连接并获取IPv6地址。我们可以查看Teredo的状态:
3.jpg

如果有错误发生,可能状态会显示offline,如下图所示:
4.jpg

此时我们可以将teredo隧道的类型由client修改为enterpriseclient,我们可以再次尝试这条命令:
2_.jpg
然后再次30-60s,Windows XP与Teredo服务器建立连接并获取IPv6地址,我们可以再次查看Teredo的状态:
4_.jpg

此时我们的Teredo隧道已经建立成功了,我们的Windows XP操作系统也获取到了IPv6全球单播地址,确认一下Teredo隧道建立成功,并获取到了IPv6地址:
6.jpg
同时我们也可以退出netsh命令,通过ipconfig /all命令查看teredo隧道是否获取到了IPv6地址,如下图所示(仅截取了其中Teredo隧道的部分):
7.jpg


通过以上的操作,我们的Windows操作系统目前已经是IPv4与IPv6的双栈了,但IPv6的数据是通过Teredo隧道封装在IPv4的UDP包中穿越NAT出去,所有数据仍然是从IPv4中传输。
对于纯IPv6的网络,可能我们能够顺利接入,此时,我们可以直接打开浏览器,输入http://ipv6.google.com (会重定向至http://ipv6.google.com.hk的中文页面) 或http://ipv6.google.com/ncr (会打开google的英文页面),如下图所示:
9.jpg
OK,此时我们已经完全接入了IPv6的Internet了

如果我们此时想通过IPv6访问类似Facebok,youtube,twitter之类的网站,可以通过修改我们操作系统上的文件:
C:\Windows\System32\drivers\etc\hosts
将此类网站的IPv6地址与域名添加到里面,即可直接通过浏览器打开,而直接通过IPv6来连接。
PS:此部分网站如果不添加hosts文件,则默认是通过IPv4进行访问的,但以当前IPv4的情况来看,很显然你只能看到[该页无法显示的画面]。因此我们通过手工修改hosts文件,即可使数据直接通过IPv6隧道传输,而不走IPv4 Internet。
youtube.jpg

对Teredo隧道原理感兴趣的朋友们也可以看看
Teredo 原理概述
http://www.ipv6bbs.cn/thread-144-1-1.html
我们在Teredo隧道建立的过程中可以发现Teredo隧道的几种状态变化,如下图所示:
5.jpg
下载 (236.53 KB)
2010-10-11 00:32

2011年11月12日星期六

如何选择适合自己ipv6隧道


如何选择适合自己ipv6隧道

        现在Google的大部分服务已经支持ipv6来访问了。如果我们的isp没有给我们提供ipv6原生支持,我们也可以通过建立隧道来访问ipv6资源,一般还会加上hosts文件的配合。如何建立隧道我就不多说了,网上的教程也很多,但是如何选择隧道的种类,有些网友还是不太明白,这里我简要说一下。

        现在主流的ipv6隧道技术有这么几种:isatap、6to4、teredo。6to4的一大缺点是运行隧道客户端的主机必须有合法的ip地址,如果你在路由器(NAT设备)或防火墙后面一般就无法使用6to4隧道了,但6to4的优点是运行稳定,不需要你自己手动找relay服务器;isatap和6to4类似;Teredo不需要客户端有合法的ip地址,在路由器或防火墙后也能运行,但由于是把ipv6数据包放在udp包中通过ipv4网络和中继服务器通信,有时网络会不太稳定,而且Windows默认的在只有teredo来连接ipv6网络时dns解析不查询AAAA类型,会造成解析不到ipv6地址,由于windows xp的hosts文件不支持ipv6,所以xp用户使用teredo隧道很麻烦。

建议:有合法ip地址的用户尽量使用6to4和isatap;使用teredo隧道的用户尽量使用Vista、Win7一类的新系统,Linux用户建议使用软件miredo来建立teredo隧道。

下面公布几个隧道服务器的地址:
isatap router:
202.112.26.254 上海交大
59.66.4.50 清华大学
6to4 relay:
tserv15.lax1.ipv6.he.net Los Angeles, CA, US
tserv3.fmt2.ipv6.he.net Fremont, CA, US

Teredo 原理概述

Teredo 原理概述

摘要
了解 Teredo (又成为面向 IPv6 的 IPv4 NAT穿越,是一项 IPv6 / IPv4 过渡技术,在 IPv6 / IPv4 主机位于一个或多个 IPv4 NAT 之后时,用来为单播 IPv6 连接提供地址分配和主机间自动隧道。为了能够通过 IPv4 NAT, IPv6 数据包作为基于 IPv4 的用户数据包协议(UDP) 消息发送出去。本文向读者提供了有关 Teredo 的概述(包括 Teredo 地址以及数据包结构),并且详细解释了 Teredo 客户端的发起通信的方式、特定于 Teredo 主机的中继、仅支持 IPv6 主机使用 IPv4 Internet 的方法、 IPv6 Internet、 Teredo 服务器以及 Teredo 中继。

鸣谢
Christian Huitema, 架构设计师, Microsoft 公司
Stewart Tansley, 项目经理, Microsoft 公司
Mohit Talwar, 软件开发工程师, Microsoft 公司
Dave Thaler, 软件开发主管, Microsoft 公司

本页内容
        简介
        网络地址转换 (NAT)概述
         Teredo 构成
         Teredo 地址
         Teredo 数据包格式
         Teredo 路由
         Teredo 过程
        总结

简介
在开始有关 Teredo 详细讨论前,我们有必要首先了解一下什么是 Teredo 以及我们为什么需要它。 Teredo 是一项地址分配和自动隧道技术,能够跨越 IPv4 Internet 实现 IPv6 单播连接。在它之前已经有了一种能够通过 IPv4 Internet 实现 IPv6 单播连接的自动隧道技术 —— 6to4 。 6to4 路由器使用一个公用的 IPv4 地址来构建 6to4 前缀,起到 IPv6 通告和促进路由器的作用。 6to4 路由器压缩和解压经过站点节点的 IPv6 数据流。
6to4 技术依靠公用 IPv4 地址的配置以及边界设备中采用的 6to4 路由功能。在许多小型办公室/家庭办公室(SOHO)配置中, IPv4 Internet 络地址转换 (NAT) 被广泛使用。如要了解更多关于网络地址转换工作的情况,请参阅文中的“网络地址转换(NAT)概述”。在大多数 NAT 配置中,提供 NAT 功能的设备并不具备成为 6to4 路由器的功能。即使 NAT 设备普遍支持 6to4 ,还是有一些配置包含多层NAT。在这些多层配置中,支持 6to4 的NAT无法成为路由器,因为它不具备一个公共的 IPv4 地址。
Teredo 通过在站点内的主机之间实现 IPv6 数据包隧道来解决现今 NAT 设备缺乏 6to4 功能以及多层 NAT 配置问题。相反, 6to4 使用边缘设备之间的隧道。主机之间隧道给 NAT 带来了另外一个问题:IPv4 压缩的 IPv6 数据包发送时协议域的 IPv4 标头设定为41。大多数的 NAT只解析 TCP 或者 UDP 数据流,而且需要通过手动设置来实现对其它协议的解析或者安装负责处理解析的 NAT 编辑器。因为协议41的解析并不是 NAT 的通用功能,所以 IPv4 压缩的 IPv6 通信传输不能通过一般的 NAT。为了使 IPv6 数据传输能够通过单个或多层 NAT, IPv6 数据包必须压缩成 IPv4 UDP 格式的数据,包含 IPv4 和 UDP 标头各一个。UDP 数据普遍能够被 NAT 解析而且能够通过多层 NAT。
总之, Teredo 是一项 IPv6/IPv4 转换技术,能够实现在处于单个或者多个 IPv4 NAT 后的主机之间的 IPv6 自动隧道。来自 Teredo 主机的 IPv6 数据流能够通过 NAT,因为它是以 IPv4 UDP 数据格式发送的。如果 NAT 支持 UDP 端口解析,那么它就支持 Teredo 。但是对称 NAT是一个例外,详细情况在本文的 "NAT 的种类" 中讲解。
Teredo 是作为实现 IPv6 连接最后一种转换技术而设计的,认识到这一点很重要。如果原来的 IPv6 、 6to4 或者ISATAP连接可用,那么主机就不必作为 Teredo 的客户端。现在,越来越多的 IPv4 NAT 经过了升级以便能够支持 6to4 ,而且 IPv6 连接变得越来越普遍, Teredo 将会使用得越来越少,直到最后完全被放弃。

网络地址转换 (NAT)概述
网络地址转换 (NAT) 是指符合 RFC 1631 标准的 IPv4 路由器,它能够在发送前解析数据包 IP 地址以及 TCP/UDP 端口号。例如,设想一个由多台计算机组成的,连接到 Internet 的小型商务网。通常需要为每台连接到 Internet 的电脑从 Internet 服务提供商 (ISP) 处得到一个 IP 地址。但是通过 NAT,这个小型的商务网就可以使用私有地址 (如 RFC 1918 所述) ,然后通过 NAT 将专用地址映射到单个或者多个 IP 公用地址。
NAT 是针对以下各项要求的常见解决方案:
•        你想利用一条连接访问 Internet,而不是将多台电脑连接到 Internet 上。
•        你想使用私有地址。
•        你想在不部署代理服务器的情况下使用 Internet 资源。

网络地址转换的工作原理
当一台小型商务企业的内部网计算机用户连接到 Internet 资源时,该用户的 TCP/IP 协议产生一个 IP 数据包,该数据包包含以下值,这些值位于 IP 和 TCP 或 UDP 标头中:(粗体内容表示受 NAT 影响的项目):
•        目标 IP 地址:Internet 资源 IP 地址
•        源 IP 地址:私有 IP 地址
•        目标端口:Internet 资源 TCP 或 UDP 端口
•        源端口: 源应用程序 TCP 或 UDP 端口
请求源主机或者其它路由器将此 IP 数据包发送给 NAT, 然后由 NAT 将向外发送的数据包的地址解析如下:
•        目标IP地址:Internet 资源 IP 地址
•        源IP 地址:ISP 分配的公用地址
•        目标端口:Internet 资源 TCP 或 UDP 端口
•        源端口:重新映射的源应用程序 TCP 或 UDP 端口
NAT 将重新映射的 IP 数据包发送到 Internet 。响应计算机将向 NAT 返回一个响应。当 NAT 接收到此响应时,该数据包将包含以下地址信息:
•        目标IP 地址:ISP 分配的公用地址
•        源IP地址:Internet 资源 IP 地址
•        目标端口:重新映射的源应用程序 TCP 或 UDP 端口
•        源端口:Internet 资源的 TCP 或者 UDP 端口
当 NAT 完成映射和解析地址后,将向 Internet 客户端发送数据包,此数据包包含以下地址信息:
•        目标 IP 地址:私有 IP 地址
•        源 IP 地址:Internet 资源 IP 地址
•        目标端口:源应用程序 TCP 或者 UDP 端口
•        源端口:Internet 资源 TCP 或 UDP 端口
对于向外发送的数据包,源 IP 地址和 TCP/UDP 端口号将被映射到一个公用源 IP 地址和一个可能变化的 TCP/UDP 端口号。对于接收的数据包,目标 IP 地址和 TCP/UDP 端口号将被映射到私有 IP 地址和初始 TCP/UDP 端口号。
例如,一个小型办公网络使用 192.168.0.0/24 作为企业内部网络私有 ID 并且其 Internet 网络服务提供商分配的单一公用IP地址为131.107.0.1。当此小型内部网中一台内部私有地址为 192.168.0.99 的客户访问 IP 地址为 157.60.0.1的网站服务器时,此用户机的 TCP/IP 协议产生一个包含以下在 IP 和 TCP 或者 UDP 标头中的数值的 IP 数据包:
•        目标IP地址:157.60.0.1
•        源IP地址: 192.168.0.99
•        目标端口:80
•        源端口:1025
请求源主机将此 IP 数据包发送给 NAT 设备,然后由 NAT 设备解析向外发送数据包的地址如下:
•        目标 IP 地址:157.60.0.1
•        源 IP 地址:131.107.0.1
•        目标端口:80
•        源端口:5000
NAT 将重新映射后的 IP 数据包发送到 Internet。网站服务器向 NAT 返回一个响应。当 NAT 接受到此响应时,数据包包含以下地址信息:
•        目标IP地址:131.107.0.1
•        源IP地址:157.50.0.1
•        目标端口:5000
•        源端口:80
当 NAT 完成地址的映射和解析后,它将此数据包发送给 Internet 客户端,数据包包含以下地址信息:
•        目标IP地址:192.168.0.99
•        源IP地址:157.60.0.1
•        目标端口:1025
•        源端口:80
图 1 展示了此例子的配置方式。

图1:NAT示例

从私用流量到公共流量的映射储存在一个 NAT 转换表中,包括两种类型的条目:
1.动态映射
在专用网络用户开始通信时产生。除非被与 NAT 转换表相对应的流量所刷新,否则动态映射在指定的时间后将从 NAT 转换表中删除。
2.静态映射
通过手动设置,使 Internet 客户进行的通信能够映射到某个特定的私有网络地址和端口。如果想让连接在 Internet 上的计算机能够使用某个私有网络上的服务器(如网站服务器)以及应用程序(如游戏),那么静态映射是必需的。静态映射不会从 NAT 转换表中删除。
如果在 NAT 转换表中存在某个映射,那么 NAT 只是单向地从 Internet 向私有网络传送数据。这样,NAT 就为连接到私有网络部分的计算机提供了某种程度的保护。但是,如果考虑到 Internet 的安全性,NAT 就要配合全功能的防火墙一起使用。

NAT 的类型
以下各类 NAT 的定义:
•        Cone(Cone) NAT
完全 NAT 是指在 NAT 转换表中存储了内部地址和端口号与外部地址和端口号之间映射关系的一类 NAT。一旦 NAT 转换表开始工作,来自任何源地址和端口通往外部地址和端口的入站数据包都将被转换。
•        受限 NAT
受限 NAT是指在 NAT 转换表中存储了内部地址和端口号与外部地址和端口号之间的映射,无论是特定的源地址或者特定源地址与端口号。如果从某个未知外部地址或者端口到外部目标地址和端口的入站数据包与 NAT 转换表吻合,那么此数据流将被自动放弃。
•        对称 NAT
对称 NAT 是指根据外部目标地址(适用于出站数据包)将相同的内部地址和端口号映射到不同的外部地址和端口号的 NAT。
Teredo 只能工作于Cone和受限 NAT,不能工作于对称 NAT。

Teredo 构成
Teredo 结构由以下各部分组成(如图 2 所示):
•        Teredo 客户端
•        Teredo 服务器
•        Teredo 中继
•        特定于 Teredo 主机的中继


图2:Teredo 结构图

Teredo 客户端
Teredo 客户端是指支持 Teredo 隧道接口的 IPv6 / IPv4 节点,通过此隧道界面数据包可以传送给其它的 Teredo 客户端以及 IPv6 Internet上的其它节点 (通过 Teredo 中继)。 Teredo 客户端与 Teredo 服务器建立通信获得配置基于 Teredo 的 IPv6 地址用的地址前缀或者帮助建立与 IPv6 Internet上其它 Teredo 客户端和服务器之间的通信。
The Advanced Networking Pack for Windows XP 包含了一个 Teredo 客户端。

Teredo 服务器
Teredo 服务器是指连接 IPv4 Internet 与 IPv6 Internet 的 IPv6 / IPv4 节点,支持用来接受数据包的 Teredo 隧道接口。Teredo 服务器的常见作用是帮助 Teredo 客户端的地址配置以及协助在 Teredo 客户端之间或者客户端与纯 IPv6 主机之间与其他 Teredo 客户端建立通信连接。Teredo 服务器使用 UDP 3544 端口侦听 Teredo 通信。
有关 Teredo 服务器在协助建立通信连接中的作用,请参阅本文" Teredo 程序步骤"。
The Advanced Networking Pack for Windows XP 不包含 Teredo 服务器功能。 The Advanced Networking Pack for Windows XP 有助于建立通信连接, Microsoft 采用 IPv4 Internet上的 Teredo 服务器。

Teredo 中继
Teredo 中继是指能够在 IPv4 Internet 上的 Teredo 客户端之间(使用 Teredo 隧道接口)以及与纯 IPv6 主机之间传送数据包的 IPv6 / IPv4 路由器。在某些情况下,Teredo 中继和 Teredo 服务器协同工作,帮助在 Teredo 客户端之间以及与纯 IPv6 主机之间建立连接。 Teredor 中继使用 UDP 3544 端口侦听 Teredo 通信。
有关 Teredo 中继在 Teredo 客户端之间以及 Teredo 客户端与纯 IPv6 主机之间的发起和开展通信方面所具有的作用,请参阅本文中"Teredo 进程"部分 。
The Advanced Networking Pack for Windows XP 不包含 Teredo 中继功能。 Microsoft 没有打算使用任何 IPv4 Internet 上的 Teredo 中继。个人 Internet 服务提供商 (ISP) 可以使用他们自己的 Teredo 中继。在向处于 IPv6 Internet 上的 IPv6 主机发送数据包的时候,采用了The Advanced Networking Pack for Windows XP 的 Teredo 客户端将和 Teredo 中继协同工作。 Teredo 中继并不需要和特定于 Teredo 主机的中继进行通信。

特定于 Teredo 主机的中继
配置了全球地址的 Teredo 客户端与 IPv6 主机之间的通信必须经过 Teredo 中继。这对于连接到 IPv6 Internet 的 IPv6 主机而言是必需的。但是,当 IPv6 主机既支持 IPv6 又支持 IPv4,并且同时连接到 IPv4 Internet 和 IPv6 Internet, 那么,Teredo 客户端与 IPv6 主机之间的通信就会通过 IPv4 Internet 实现,而不必经过 IPv6 Internet 和 Teredo 中继。
特定于 Teredo 主机的中继是指同时具有 IPv4 与 IPv6 Internet连接,并且无需 Teredo 中继即可通过 IPv4 Internet 直接与 Teredo 客户端通信的 IPv6 / IPv4 节点。与 IPv4 Internet 的连接可以通过使用一个公用的 IPv4 地址或者使用一个专用 IPv4 地址和边界 NAT 来实现。与 IPv6 Internet 的连接可以通过直接连接或者当 IPv6 数据包通过 IPv4 Internet 隧道时使用诸如 6to4 这类的 IPv6 转换技术来实现。特定于 Teredo 主机的中继使用 UDP 3544 端口侦听 Teredo 通信。
采用了 The Advanced Networking Pack for Windows XP 的 Teredo 客户端包括了特定于 Teredo 主机的中继功能。当在安装了 SP1 或者更高版本的补丁并且分配了全球地址的 Windows XP 上安装了The Advanced Networking Pack for Windows XP 后,特定于 Teredo 主机的中继功能便会自动激活。这个全球地址可以通过从本地 IPv6 路由器、ISATAP 路由器或者 6to4 路由器发送的路由器通告中获得。如果运行 Windows XP SP1 的计算机没有全球地址,那么 Teredo 客户端功能便被激活。
特定于 Teredo 主机的中继能够使 Teredo 客户端与 6to4 主机、带有非 6to4 全球地址前缀的 IPv6 主机或者组织内部的地址中使用全球前缀的 ISATAP 以及 6over4 主机进行有效通信。但是所有的主机都必须使用 The Advanced Networking Pack for Windows XP。


Teredo 地址
Teredo 地址格式见图 3。

图3:Teredo 地址格式


Teredo 地址包含以下内容:
•        Teredo 前缀
最前面的 32 位是 Teredo 前缀,所有的 Teredo 地址的前缀都是相同的。互联网号码分配机构(IANA)还没有对该前缀进行定义,尽管该前缀 3FFE:831F::/32 已经运用于初始配置。
•        Teredo 服务器 IPv4 地址
接下来的 32 位包含 Teredo 服务器的 IPv4 的公共地址以帮助设定 Teredo 地址。更多信息请参阅本文中的 " Teredo 客户的初始配置"。
•        标志
接下来的 16 位是为 Teredo 标志预留的。唯一定义的标志是被称作“Cone Flag”的高位。 只有当接入 Internet 的 NAT 为Cone NAT时,“Cone Flag”才可以使用。接入 Internet 的 NAT 是否是Cone NAT 在 Teredo 客户端的初始配置中设定。更多信息请参阅本文的 "Teredo 客户初始设定" 章节。
•        隐藏外部端口
接下来的 16 位储存的是与该 Teredo 客户端所有 Teredo 通信相对应的外部 UDP 端口的隐藏模式。当 Teredo 客户端向 Teredo 服务器发送初始数据包时,NAT 会将源数据包的 UDP 端口映射到一个不同的外部 UDP 端口。Teredo 客户保留了这个端口映射以便使其留在 NAT 转换表中。因此,主机所有的 Teredo 通信均使用同一外部映射的 UDP 端口。UDP 外部端口是由 Teredo 服务器根据从 UDP 源端口导入的原始 Teredo 客户数据包决定并发回 Teredo 客户的。
外部端口的隐藏是将外部端口与 0xFFFF 进行逻辑异或运算。例如,外部端口的隐藏文件 5000 的16位进制格式是 EC77 (5000 = 0x1388, 0x1388 XOR 0xFFFF = 0xEC77)。隐藏这个外部端口可以预防 NAT 在数据包的有效载荷内转发时对其进行转换。
•        隐藏外部地址
最后32 位储存与 Teredo 客户端所有 Teredo 通信相对应的外部 IPv4 地址的模糊形式。就像外部端口一样,当 Teredo 客户端向其服务器发送初始数据包后,数据包的源 IP 地址被 NAT 映射到一个不同的外部公用地址。 Teredo 客户保留了这个地址映射以便使其留在 NAT 的转换表。因此,主机上所有的 Teredo 通信均使用同一外部的映射公用 IPv4 地址。外部 IPv4 地址是由 Teredo 服务器根据 Teredo 客户发送的原始数据包的源 IPv4 地址决定的,并且发回给 Teredo 客户。
外部地址通过与 0xFFFFFFFF 进行异或运算后被隐藏。例如,公共 IPv4 地址 131.107.0.1 隐藏后其十六进制的冒号格式为 7C94:FFFE (131.107.0.1 = 0x836B0001, 0x836B0001 XOR 0xFFFFFFFF = 0x7C94FFFE)。隐藏外部地址避免了 NAT 在数据包的有效载荷内转发时将其转换。

图 4 是 2 个 Teredo 客户端与他们的地址的示例。

图4:Teredo 地址示例


对于 Teredo 客户端 A,其 Teredo 地址由以下项目组成:
•        Teredo 通信的外部地址和端口是 157.60.0.1,UDP 端口是 4096
•        Teredo 服务器的公用 IPv4 a 地址为 206.73.118.1
•        位于一个 Cone NAT 后面
所以, 使用 Teredo 地址前缀格式:ServerAddr:Flags:ObscExtPort:ObscExtAddr, Teredo 客户端 Teredo 地址为 3FFE:831F:CE49:7601:0:DFFF:7C94:FFFE。这基于以下几点:
•        CE49:7601 是 206.73.118.1 的 16 进制冒号形式
•        8000 是完全标记设为 1 时标记域的值,表示 Teredo 客户端 A 的 NAT 是一个Cone NAT 。
•        EFFF 是 4096 (0x1000) 的隐藏形式
•        C2C3:FFFE 是 157.60.0.1的隐藏形式
对于 Teredo 客户端 B,其 Teredo 地址由以下项目组成:
•        Teredo 通信的外部地址和端口是131.107.0.1,UDP端口是8192
•        Teredo 服务器位于公用 IPv4 a 地址 206.73.118.1上
•        位于一个受限 NAT 的后面
所以,使用 Teredo 地址前缀格式:ServerAddr:Flags:ObscExtPort:ObscExtAddr, Teredo 客户端 Teredo 地址为 3FFE:831F:CE49:7601:0:DFFF:7C94:FFFE。这基于以下几点:
•        CE49:7601 是 206.73.118.1 的 16 进制冒号形式
•        0 是完全标记设为 0 时标记域的值,表示 Teredo 客户端 B 的 NAT 是一个受限 NAT。
•        DFFF 是 8192 (0x2000) 的隐藏形式
•        7C94:FFFE 是 131.107.0.1 的隐藏形式
Teredo 地址只是分配给 Teredo 客户端。Teredo 服务器、中继、和特定于主机的中继并不分配 Teredo 地址。

Teredo 数据包格式
本章节讨论以下问题:
•        Teredo 数据包格式
•        Teredo 气泡数据包
•        Teredo 指示符

Teredo 数据包格式
Teredo 数据包格式如图5所示。

图5: Teredo 数据包格式

Teredo 数据包由以下部分构成:
•        IPv4 标头包含与自动隧道终端相对应的源 IPv4 地址和目标 IPv4 地址并且可以被NAT转换。
•        UDP 标头包含 Teredo 数据通信的源端口和目标端口,可以被 NAT 解析。
•        IPv6 标头包含源 IPv6 地址和目标 IPv6 地址,其中至少有一个是 Teredo 地址。
•        IPv6 载荷包含零个或者更多的 IPv6 扩展标头以及压缩的 IPv6 数据包的上层协议数据单位(PDU)。

Teredo 气泡数据包
Teredo 气泡数据包为建立或维持一个 NAT 映射而发送,由 IPv6 标头组成,并且不包含 IPv6 有效载荷。
图6为 Teredo 气泡数据包。

图6: Teredo 气泡数据包

在 IPv6 标头中,下一个标头的域设置为 59,表示没有有效载荷。

Teredo 指示符
Teredo 使用两种不同的指示符,它们是用来表示验证或者地址和端口信息的标头。

验证指示符
验证指示符用来保证在 Teredo 客户端和 Teredo 服务器之间进行路由器请求和路由器通告信息的可靠性。 Teredo 客户端和 Teredo 服务器都使用在鉴定指示符中产生验证信息的密钥进行加密。验证指示符处于 UDP 标头与 IPv6 数据包之间。如果在路由器通告信息中同时出现原始和验证指示符,那么验证指示符将被放在原始指示信息前面。
验证指示符的结构如图 7 所示。

图7:验证信息结构图


验证数据包含以下各域:
•        Indicator Type(指示符的类型)
这个长度为两个字节的值指定了指示符的类型。对于验证指示符,其值为1。 Teredo 客户端和 Teredo 服务器 能够通过 IPv6 数据包的前两个字节区分出验证信息,因为 IPv6 数据包的前四个高位字节设定为 0110 (6), 与 IPv6 标头的转换域相对应。
•        Client ID Length(客户端 ID 长度)
这个长度为 1 个字节的值指定了“客户端标识”域的长度。
•        Authentication Data Length(验证数据的长度)
这个长度为 1 字节的域指定了“验证值”域的长度。
•        Client Identification(客户端标识)
这个长度不定的域包含一个 Teredo 客户端的标识字符串。
•        Authentication Value(验证值)
这个长度不定的域包含使用共享密钥计算的此数据包的验证值。有关如何计算验证值的信息请参阅 Teredo Internet 草案的 5.2.2 章节。
•        Nonce(现在)
这个长度为 8 字节的域包含了一个任意数字,用来证明数据交流还在进行并且防止数据包重复传送攻击。
•        Confirmation(确认)
这个长度为 1 字节的域包含一个用来表明客户端是否在路由器的请求信息中使用了正确的密钥值,这个确认域设置为0。在路由器通告信息中,此确认域设置为 0 或者密钥错误时为一个非 0 值。
虽然在路由器通告信息和路由器请求信息中也包含了验证指示符,但是在 采用了 The Advanced Networking Pack for Windows XP 的 Teredo 客户端中并不使用客户标识符或者验证值。当在没有客户端标识符或者验证值的时候,验证指示符的格式如图 8 所示。

图8:没有客户端标识符或者验证值时,验证指示符的格式

原始指示符
原始指示符用来表示 Teredo 客户端、 Teredo 中继或者特定于 Teredo 主机的中继的 IPv4 地址和 UDP 端口。它的用途的一个例子就是,当 Teredo 服务器回应 Teredo 客户端的路由器请求信息而发出路由器通告信息。在这种情况下,原始指示数据包含了对应于 Teredo 客户端 Teredo 通信流的已经映射的 IPv4 地址和 UDP 端口号。有关更多信息,请参阅本文"Teredo 客户端初始配置"
如同验证指示符,原始指示符放在 UDP 标头与 IPv6 标头之间。它的结构如图 9 所示。

图9:原始指示符的结构

原始指示数据包含以下域:
•        指示符类型
这个长度为 2 字节的域说明了指示符的类型。对于原始指示符,其值为 0。 Teredo 客户端可以根据 IPv6 数据包的前两个字节区分出原始指示符,因为 IPv6 数据包的前两个高位字节设置为0110 (6), 与 IPv6 标头的转换域相对应。
•        隐藏原始端口号
这个两个字节的与包含一个与 Teredo 客户端、 Teredo 中继或者 特定于 Teredo 主机的中继 Teredo 通信相对应的隐藏外部端口(同 0xFFFF 异或)。 模糊原始端口的值与 0xFFFF 异或。
•        隐藏原始地址
这个长度为 4 字节的域包含与 Teredo 客户端、 Teredo 中继或者特定于 Teredo 主机的中继 Teredo 通信相对应的隐藏外部 IPv4 地址 (同 0xFFFFFFFF XORed) 。隐藏原始地址域与 0xFFFFFFFF 异或。
图 10 表示了实现了 The Advanced Networking Pack for Windows XP 的 Teredo 客户端使用的三种包含原始与验证指示符的不同数据包类型。


Teredo 路由
图 11 显示了 Teredo 数据包在 Teredo 主机, 特定于 Teredo 主机的中继和 IPv6 主机之间的传输。

图 11:Teredo 路由

在 IPv6 网上,前缀 ::/32 路由被用于将使用 Teredo 前缀定义的数据包发送到最近的 Teredo 中继上。 Teredo 服务器, Teredo 中继和 特定于 Teredo 主机的中继有一个前缀::/32 路由,此路由包含了所有用该前缀作为在链的地址,也包含用作 Teredo 隧道出口的地址。 Teredo 隧道接口是一个逻辑接口,它将自动将 IPv4 地址与 UDP 的封装成发送的数据包。 Teredo 服务器, Teredo 中继和 特定于 Teredo 主机的中继同时还有一个默认路由(::/0)指向 IPv6 网络。特别地,这个默认路由包含一个在 IPv6 网络上用一个物理接口与 IPv6 网相连的临近路由器的下个中继段的 IPv6 地址。

Teredo 客户端路由
Advanced Networking Pack for Windows XP 中的 Terodo 客户端有一个默认路由,它将使用该前缀的所有地址都视作 on-link 地址,也包含用 Teredo 隧道接口的地址。当这个默认地址使用时,下一中继段的地址被置于 IPv6 数据包中的目标地址中,同时下一中继段接口被置于 Teredo 隧道接口中。
当 Teredo 隧道接口发送数据包时,分为下面三种情况:
1.目标是位于同一个 IPv4 Internet 络上的 Teredo 客户端。
2.目标是位于另一个站点上的 Teredo 客户端。
3.目标是 IPv6 Internet 上的一个节点。

On-link Teredo 目标
对于发往相同站点和链接中其它 Teredo 主机的数据包, Teredo 隧道接口通过交换气泡数据包来代替 Neighbor Discovery 的地址解析进程。交换气泡数据包保证了每一个 Teredo 客户端之间能够直接发送数据包。想要了解更多信息,请查阅本文 "相同链接上的 Teredo 主机之间的通信初始化" 章节。
Teredo 检查多播气泡数据的缓存,决定目标 Teredo 地址是否与同一连接上的 Teredo 客户端通信。每一个 Teredo 客户端都在 IPv4 链路上发送多点传输气泡数据包给 Teredo 服务器以显示它在链路上的存在。每个 Teredo 客户端接受到其它 Teredo 客户端的气泡数据包后,与自己的 Teredo 和 IPv4 地址一起发送给多播气泡缓存。因此,如果目标 Teredo 地址在多点传输气泡缓存中,那么目标就是一个 on-link 邻居。

站点间的 Teredo 目标
对于发往不同节点上的另一台 Teredo 主机的数据包,如果两个 Teredo 主机都跨越 受限 NAT,Teredo 隧道接口使用气泡数据包替代“邻居发现”(Neighbor Discovery)地址解析过程。当两台 Teredo 主机都穿越受限网络地址转换时, Teredo 隧道出口用气泡数据包的交换代替发现 Neighbor Discovery 协议的地址解析过程。气泡数据包的交换在双方的 NAT 上都会生成特定地址和端口的映射。这样,两个不同点的 Teredo 客户端就可以直接发送数据包给对方。如果希望进一步了解相关信息,请参阅本文的"在不同站点的 Teredo 客户端中初始化通信"部分。

IPv6 网络目标
对于 IPv6 Internet 的数据包, Teredo 隧道接口用 ICMPv6 Echo Request 和 Echo Reply消息来代替 Neighbor Discovery 协议的地址解析进程。当一个 ICMPv6 Echo Request 消息发送给目标后,包含有在 IPv6 网上离 IPv6 主机最近的 Teredo 中继的 IPv4 地址的 ICMP Echo Reply 消息就回复。想进一步了解,请查看本文的"从 Teredo 客户端到 特定于 Teredo 主机的中继的初始化通信" 和 "从 Teredo 客户端到 IPv6 主机的初始化通信"章节。

Teredo 过程
此部分提供了 Teredo 有关数据包交换的细节,具体如下:
•        Teredo 客户端的初始化设置
•        维护 NAT 映射
•        相同链接 Teredo 客户端之间的初始化通信
•        不同站点 Teredo 客户端之间的初始化通信
•        从 Teredo 客户端到 特定于 Teredo 主机的中继的初始化通信
•        从 特定于 Teredo 主机的中继到 Teredo 客户端的初始化通信
•        从 Teredo 客户端到 IPv6 主机的初始化通信
•        从 IPv6 主机到 Teredo 客户端的初始化通信
所有这些过程都是由 Advanced Networking Pack for Windows XP 中的 Teredo 客户端支持的;并且是自动、无需用户干涉的。唯一的例外是:Teredo 服务器的 IPv4 地址是可选配置。

Teredo 客户端的初始化设置
Teredo 客户端的初始化设置通过发送一系列路由请求消息给 Teredo 服务器确定一个 Teredo 地址,并了解客户端是通过一个Cone,受限还是在对称的 NAT。图12显示了 Teredo 客户端的初始化进程。

图12: Teredo 客户端的初始化设置

Teredo 客户端的初始化设置包括以下过程:
1.路由服务器请求信息 Router Solicitation (RS) 由 Teredo 客户端发给首选的 Teredo 服务器(Teredo 服务器1)。 Teredo 客户端从设置过“Cone”标志的当地链接地址发出 RS。
2.Teredo 服务器 1 回应一个路由器登记信息 Router Advertisement (RA)。由于 RS 已经设置了“Cone”标记, Teredo 服务器1会从一个动态的 IPv4 地址发送出 RA。Teredo 客户端收到 RA 后会得知那是一个“Cone”的网络地址转换。
3.如果没有收到 RA, Teredo 客户端就会从当地链接地址发送另一个没有设置“Cone”标志的 RS。
4.Teredo 服务器 1 回应一个 RA。因为 RA 没有设置“Cone”标志,所以服务器 1 会发送一个与 RS 目标地址通信的 IPv4 原地址。如果 Teredo 客户端收到 RA,就得出那是受限的地址转换。
5.为了确保 Teredo 客户端不是一个对称的网络地址转换,它就会发出另一个 RA 到 Teredo 服务器( Teredo 服务器 2)。
6.Teredo 伺服器 2 回应一个 RA。客户端对两个 Teredo 服务器的 RA 来源指示符中的映射地址和 UDP 端口进行比较。如果他们不同,那么NAT就是在映射相同的内部地址和端口号到不同的外部地址和端口号。 Teredo 客户端确定这个 NAT 是一个对称的 NAT,不能用 Teredo 进行通信。
由于收到 RA(先前进程的第二步或第四步), Teredo 客户端以如下方式构造地址:
•        首先 64 位包含收到的 RA 前缀信息。这 64 位由 Teredo 服务器登记的前置码,包含 Teredo 前缀(32 bits)和 Teredo 服务器的 IPv4 的地址码(32位)。
•        接下来的 16 位是 0x8000 (Cone NAT ) 或是 0x0 (受限 NAT)
•        再接下来的 16 位对从 RA 中 Origin (原始)指示符来的外部 UDP 端口号进行赋值。
•        最后 32 位放置从 RA 中 Origin 指示符来的外部 IP 地址。
实现了 The Advanced Networking Pack for Windows XP 的 Teredo 客户端会自动尝试通过解析 name Teredo .IPv6.Microsoft.com 来测定 Teredo 服务器的 IPv4 地址。相应地,你可以用netsh interface IPv6 set Teredo servername= 命令来设置 Teredo 服务器的 IPv4 地址。

维持 NAT 映射
图13 显示了 Teredo 客户端是如何维持 Teredo 通信的 NAT 映射的。

图 13:维持 NAT 映射

Teredo 客户端会定期地(一般默认每隔 30 秒钟)发送单一的气泡数据包到 Teredo 服务器。 Teredo 服务器会在不回复的情况下丢弃该数据包。这个周期性的数据包会重新刷新 NAT 的转换表。否则,这个映射就无效并被删除。如果映射不存在,对于Cone NAT 而言,所有接收的数据流;对于受限 NAT 而言,所有从 Teredo 服务器到 Teredo 主机的数据流会地被 NAT 悄悄删除。
同一链接上的 Teredo 客户端之间的通信初始化
图 14 显示了同一链接上的 Teredo 客户端之间的通信初始化。

图 14:同一链接上的 Teredo 客户端之间的通信初始化


在同一个链接中,要从客户端 A 发送一个通信初始化数据包到客户端 B,按照下面的过程:
1.Teredo 客户端发送一个气泡数据包到 Teredo IPv4 Discovery Address,一个租用的多播地址(其真实地址由 IANA 决定)。在气泡数据包的 IPv6 头部,目标地址被置于 Teredo 客户端 B 的 Teredo 地址中。
2.根据从收到 Teredo 客户端 A 的发出多播气泡数据包的认证信息, Teredo 客户端 B 指定 Teredo 客户端 A 和 UDP 端口 on-link 的 IPv4 地址用于 Teredo 通信,并且用于发送一个多播的气泡数据包给 Teredo 客户端A作为回应。根据从收到 Teredo 客户端 B 的发出多播气泡数据包的认证信息, Teredo 客户端 A 指定 Teredo 客户端 B 和 UDP 端口 on-link 的 IPv4 地址用于 Teredo 通信。
3.Teredo 客户端 A 发送一个通信初始化数据包给 Teredo 客户端 B。

不同站点下 Teredo 客户端之间的通信初始化
不同站点下 Teredo 客户端之间的通信初始化取决于节点之间是用Cone NAT 还是受限NAT。

Cone NAT
图15 表明当节点都位于Cone NAT 之后时, Teredo 客户端之间的通信初始化。

图15:节点都位于 Cone NAT 之后时, Teredo 客户端之间的通信初始化。

当 Teredo 客户端都在 Cone NAT 之后时,Cone NAT 允许其转换表条目开放任何源 IP 地址和 UDP 端口让 Teredo 客户端进行 Teredo 通信。因此, Teredo 客户端 A 可以在无需运用气泡数据包建立额外的 NAT 转换表条目的情况下向 Teredo 客户端 B 直接发送数据。

受限 NAT
图16 表明了当不同站点使用受限 NAT 时, Teredo 客户端之间的通信初始化。

图16:不同站点使用受限 NAT 时, Teredo 客户端之间的通信初始化

从 Teredo 客户端 A 发送通信初始化数据包到 Teredo 客户端 B,过程如下:
1.Teredo 客户端 A 直接发送气泡数据包给 Teredo 客户端 B。因为 Teredo 客户端 B 是位于受限 NAT 之后,从任意的 IPv4 源地址和 UDP 端口号来的 Teredo 通信是不允许的,除非那是一个特定源的 NAT 转换表条目。假如没有,受限 NAT 丢弃此数据包。但是,当受限 NAT 为 Teredo 客户端 A 发送气泡数据包时,它会建立一个特定源的 NAT 的转换表,使得接下来的 Teredo 客户端 B 的数据包被发送至 Teredo 客户端 A。
2.Teredo 客户端 A 通过 Teredo 服务器 2( Teredo 客户端B的 Teredo 服务器)发送数据包给 Teredo 客户端 B。在气泡数据包中的 IPv4 目标地址设置指向 Teredo 服务器 2 的 IPv4 地址,该地址由客户端 A 从客户端 B 的 Teredo 地址的第 3 和第 4 块识别。
3.Teredo 服务器处理这个数据包,为 Teredo 客户端指定 IPv6 目标地址,然后将气泡数据包转发到 Teredo 客户端 B。受限 NAT 为 Teredo 客户端 B 发送数据包,是因为存在一个特定源为从 Teredo 服务器 2 进行 Teredo 通信进行映射。
4.Teredo 客户端 B 用自己直接向 Teredo 客户端 A 发送的数据包,对从 Teredo 客户端 A 收到的数据包进行回应。因为 Teredo 客户端 A 的受限 NAT 有一个特定源的映射,为从 Teredo 客户端 B 来的 Teredo 通信服务的(就象过程1那样,通过从 Teredo 客户端 A 发送初始数据包来建立),这个数据包被发送到 Teredo 客户端 A。
5.根据来自 Teredo 客户端 B 的气泡数据包的认证信息, Teredo 客户端 A了解到特定于源特 NAT 映射存在于两个用户的 NAT 上。 Teredo 客户端 A 直接发送一个初始数据包到 Teredo 客户端 B。

Teredo 客户端到 特定于 Teredo 主机的中继的通信初始化
从 Teredo 客户端发送初始数据包到一个 特定于 Teredo 主机的中继,依赖于 Teredo 客户端是一个Cone NAT 还是一个受限NAT。

Cone NAT
图17表明当 Teredo 客户端在 Cone NAT 之后从 Teredo 客户端到主机特定中继的通信初始化。

图17: Teredo 客户端在 Cone NAT 之后从 Teredo 客户端到主机特定中继的通信初始化

从 Teredo 客户端发送通信初始化数据包到特定于 Teredo 主机的中继,进程如下:
1.Teredo 客户端 A 发送一个经过其 Teredo 服务器的 ICMPv6 Echo Request 消息
2.Teredo 服务器接收到ICMPv6的ICMPv6 Echo Request 消息,然后在 IPv6 网络上发送到 特定于 Teredo 主机的中继或者在 IPv4 Internet 上把它封装在隧道里。
3.特定于 Teredo 主机的中继用一个被送到 Teredo 客户端 A 的 Teredo 地址进行ICMPv6 Echo Reply响应。
4.在特定于 Teredo 主机的中继收到的回送答复后,Teredo 客户端就会发送一个通信初始化的数据包到 特定于 Teredo 主机的中继的 ICMPv4 地址和 UDP 端口上。
所有后续的往来于 Teredo 客户端和特定于 Teredo 主机中继的数据包将直接发送。

受限 NAT
图18 显示了当 Teredo 客户端位于受限 NAT 之后,从 Teredo 客户端发送通信初始化数据到特定于 Teredo 主机的中继的过程。

图18: Teredo 客户端位于受限 NAT 之后,从 Teredo 客户端发送通信初始化数据到 特定于 Teredo 主机的中继

从 Teredo 客户端发送通信初始化数据到特定于 Teredo 主机的中继,进程如下:
1.Teredo 客户端通过自己的 Teredo 服务器发送一个 ICMPv6 Echo Request 消息到特定于 Teredo 主机的中继。
2.Teredo 服务器收到 ICMPv6 Echo Request 消息后,在 IPv6 网上发送给 特定于 Teredo 主机的中继或者封装到 IPv4 Internet 络的隧道上。
3.特定于 Teredo 主机的中继确定 Teredo 客户端位于受限 NAT之后 。如果 Teredo 中继发送 ICMPv6 Echo Request 消息给 Teredo 客户端,则 NAT 丢弃此消息,因为没有从 特定于 Teredo 主机的中继来的 Teredo 通信的源特定的映射。因此, 特定于 Teredo 主机的中继经由 Teredo 服务器在 IPv4 Internet 络上发送一个气泡数据包到 Teredo 客户端。
4.Teredo 服务器从特定于 Teredo 主机的中继的气泡数据包。 Teredo 服务器发送气泡数据包到 Teredo 客户端,同时,Origin 指示符包含了这个特定于 Teredo 主机的中继的 IPv4 地址和 UDP 端口号。因为一个从 Teredo 服务器的 Teredo 通信的映射存在于 NAT,一个气泡数据包被发送到 Teredo 客户端。
5.Teredo 客户端确定从收到气泡数据包的来源指示符上确定特定于 Teredo 主机的中继的 IPv4 地址和 UDP 端口。要建立一个从 特定于 Teredo 主机的中继的 Teredo 的通信的映射, Teredo 客户端还要发送一个气泡数据包到 特定于 Teredo 主机的中继。
6.根据来自 Teredo 客户端的气泡数据包的收条——与一个进入队列等待转发(ICMPv6 Echo Reply 消息)的数据包对应,特定于 Teredo 主机的中继确定一个特定于来源的 NAT 映射现在存在于 Teredo 客户端的受限 NAT 之中。特定于 Teredo 主机的中继将 ICMPv6 Echo Reply 消息发送到 Teredo 客户端。
7.一个通信初始化的数据包从 Teredo 客户端发送到特定于 Teredo 主机的中继的 IPv4 地址和 UDP 端口上。
所有 Teredo 客户端与 特定于 Teredo 主机的中继并发的数据包都直接被发送。

特定于 Teredo 主机的中继到 Teredo 客户端的通信初始化
特定于 Teredo 主机的中继到 Teredo 客户端的通信初始化依赖于 Teredo 客户端是Cone NAT 之后的还是受限 NAT。

Cone NAT
图19显示了当 Teredo 客户端位于Cone NAT 之后时,特定于 Teredo 主机的中继到 Teredo 客户端的通信初始化。

图19:Teredo 客户端位于Cone NAT 之后时,特定于 Teredo 主机的中继到 Teredo 客户端的通信初始化

要从 特定于 Teredo 主机的中继发送到 Teredo 客户端的一个通信初始化数据包, 特定于 Teredo 主机的中继要确定 Teredo 客户端是一个Cone NAT 。因此, 特定于 Teredo 主机的中继直接发送初始化数据包到 Teredo 客户端。
要确定初始化数据包的 IPv6 地址真实,并且符合特定于 Teredo 主机的中继, Teredo 客户端用本文的有关" 特定于 Teredo 主机的中继到 Teredo 客户端的通信初始化"(Cone NAT 之后的)的 1 至 3 步与 特定于 Teredo 主机的中继执行一次 ICMPv6 Echo Request/Echo Reply 的消息交换。当此消息交换完成, Teredo 客户端向特定于 Teredo 主机的中继发送对通信初始化数据包进行响应的消息。

受限NAT
图20 显示了当 Teredo 客户端位于受限 NAT 之后时 特定于 Teredo 主机的中继到 Teredo 客户端的通信初始化。

图20: Teredo 客户端位于受限 NAT 之后时,特定于 Teredo 主机的中继到 Teredo 客户端的通信初始化。

从特定于 Teredo 主机的中继发送通信初始化数据包到 Teredo 客户端,过程如下:
1.特定于 Teredo 主机的中继通过 IPv4 Internet 络经由 Teredo 服务器发送一个气泡数据包到 Teredo 客户端。
2.Teredo 服务器接收到来自 特定于 Teredo 主机的中继的气泡数据包。 Teredo 服务器把这个数据包发送给 Teredo 客户端,同时,来源指示符包含了 特定于 Teredo 主机的中继的 IPv4 地址和 UDP 端口号。因为一个从 Teredo 服务器来的 Teredo 通信的特定源映射存在于 NAT,气泡数据保被发送给 Teredo 客户端。
3.Teredo 客户端通过收到的气泡数据中的来源指示符来确定特定于 Teredo 主机的中继的 IPv4 地址和 UDP 端口号。为了建立一个从 Teredo 中继的 Teredo 通信的映像, Teredo 客户端发送一个气泡数据包给特定于 Teredo 主机的中继。
4.根据气泡数据包的收条——与一个进入队列等待转发的数据包(该数据包来自于特定于 Teredo 主机的中继)对应,特定于 Teredo 主机的中继确定一个特定于来源的 NAT 映射现在存在于 Teredo 客户端的受限 NAT 之中。特定于 Teredo 主机的中继发送通信初始化数据包给 Teredo 客户端。
为确保初始化通信数据包的 IPv6 地址真实,并且指向 特定于 Teredo 主机的中继, Teredo 客户端按照" Teredo 客户端到 特定于 Teredo 主机的中继的通信初始化"(针对受限NAT)的步骤1至6,与 特定于 Teredo 主机的中继执行一个 ICMPv6 Echo Request/Echo Reply的消息交换。当消息交换执行完毕, Teredo 客户端对发送到 Teredo 特定主机服务器的通信初始化数据包进行响应。

Teredo 客户端到 IPv6 主机的消息初始化
Teredo 客户端到 IPv6 主机的消息初始化依赖于 Teredo 客户端是Cone NAT 的,还是受限NAT。

Cone NAT
图21 显示了当 Teredo 客户端位于Cone NAT 之后时, Teredo 客户端与 IPv6 主机的通信初始化过程。

图21: Teredo 客户端位于Cone NAT 之后时, Teredo 客户端与 IPv6 主机的通信初始化过程

Teredo 客户端发送初始化通信数据包到 IPv6 主机,过程如下:
1.要发送一个通信初始化数据包, Teredo 客户端必须首先验证离 IPv6 主机最近 Teredo 中继的 IPv4 地址和 UDP 端口号。 Teredo 客户端A经由它自己的 Teredo 服务器发送一个 ICMPv6 Echo Request 消息。
2.Teredo 服务器收到 ICMPv6 Echo Request 消息后,在 IPv6 网上把它发送给 IPv6 主机。
3.IPv6 主机发送给 Teredo 客户端的一个 Teredo 地址予以响应。根据 IPv6 的网络路由结构,这个含有 Teredo 地址的数据包被发送给最近的 Teredo 中继。
4.Teredo 中继将 ICMPv6 Echo Reply 压缩,并直接发送给 Teredo 客户端。因为这是Cone NAT 之后的,所以来自 Teredo 中继的数据包被发送到 Teredo 客户端。
5.Teredo 客户端从ICMPv6 Echo Reply消息的 IPv4 源地址和UDP端口号确认 Teredo 中继的 IPv4 地址最接近 IPv6 主机。一个通信初始化数据包就被发送至 Teredo 中继的 IPv4 地址和UDP端口上。
6.Teredo 中继去除 IPv4 和 UDP 的标头,并把此数据包发给 IPv6 主机。
所有接下来的往返于 Teredo 客户端和 IPv6 主机的数据包采用经由 Teredo 中继的路径。

受限 NAT
图22 显示了当 Teredo 客户端位于受限 NAT 之后时,Teredo 客户端到 IPv6 主机通信的初始化。

图22 显示了当 Teredo 客户端位于受限 NAT 之后时, Teredo 客户端到 IPv6 主机通信的初始化。

IPv6 主机发送初始化数据包至 Teredo 客户端,过程如下:
1.要发送初始化数据包至 IPv6 主机, Teredo 客户端必须首先验证 Teredo 中继的 IPv4 地址是否距离 IPv6 主机最近。 Teredo 客户端 A 通过它自己的 Teredo 服务器发送一个 ICMPv6 Echo Request 消息给 IPv6 主机。
2.Teredo 服务器收到 ICMPv6 Echo Request 消息,并且在 IPv6 网络上发送给 IPv6 主机。
3.IPv6 主机响应一个发送至 Teredo 客户端 A 的 Teredo 地址的 ICMPv6 Echo Reply 消息。根据 IPv6 网络的路由结构,这个以 Teredo 地址打包的数据包被发送至最近的 Teredo 中继。
4.Teredo 中继验证 Teredo 客户端位于受限 NAT 之后。如果 Teredo 中继本应发送 ICMPv6 Echo Request 消息至 Teredo 客户端而没发,NAT将会丢弃它。这是因为不存在一个起始于 Teredo 中继的 Teredo 通道的映射。因此, Teredo 中继在 IPv4 Internet 络上通过 Teredo 服务器发送一个气泡数据包至 Teredo 客户端。
5.Teredo 服务器收到来自 Teredo 中继的气泡数据包。 Teredo 服务器发送气泡数据包之 Teredo 客户端,同时来源指示符获得 Teredo 中继的 IPv4 地址和 UDP 端口号。因为一个起始于 Teredo 服务器的 Teredo 通道的特定源映射存在于 NAT,气泡数据包就被发送至 Teredo 客户端。
6.Teredo 客户端从收到的气泡数据包的来源指示验证 Teredo 中继的 IPv4 地址是不是距离 IPv6 主机最近。为了建立一个起始于 Teredo 中继的 Teredo 通道的特定于来源的映射, Teredo 客户端发送一个气泡数据包至 Teredo 中继。
7.根据气泡数据包已符合等待发送的接收回执(ICMPv6 Echo Reply消息), Teredo 中继确认 Teredo 客户端的受限 NAT 现在存在一个特定源的映射。 Teredo 中继发送 ICMPv6 Echo Reply 消息至 Teredo 客户端。
8.从 Teredo 客户端发送一个通信初始化数据包至 Teredo 中继的 IPv4 地址和UDP端口。
9.Teredo 中继移除 IPv4 标头并发送此数据包至 IPv6 主机。
所有接下来的往返于 Teredo 客户端和 IPv6 主机之间的数据包都采用经由 Teredo 中继的路径。

IPv6 主机到 Teredo 客户端的通信初始化。
IPv6 主机到 Teredo 客户端的通信初始化依赖于 Teredo 客户端是基于Cone NAT 的,还是受限NAT的。

Cone NAT
图23显示了当客户端位于Cone NAT 之后时, IPv6 主机到 Teredo 客户端的通信初始化。

图23:客户端位于 Cone NAT 之后时,IPv6 主机到 Teredo 客户端的通信初始化

从 IPv6 主机发送初始化数据包至 Teredo 客户端,过程如下:
1.IPv6 主机发送一个数据包至 Teredo 客户端。根据 IPv6 网络的结构,以 Teredo 地址打包的数据包被发至最近的 Teredo 中继。
2.Teredo 中继验证 Teredo 客户端是位于受限 NAT 之后。因此, Teredo 中继就将数据包与 IPv4 和 UDP 的标志压缩在一起,从 IPv6 主机发送到 Teredo 客户端。
根据这个数据包的接收回执,Teredo 客户端,储存对应于 Teredo 中继的 IPv4 地址和 UDP 端口号,这样,响应数据包才能被发送给 Teredo 中继。 Teredo 中继接收到它们,除去 IPv4 和 UDP 标志后,发送该 IPv6 数据包到 IPv6 主机。
为确保这个通信初始化数据包的 IPv6 地址真实有效,并且对应 IPv6 主机, Teredo 客户端按照本文关于" Teredo 客户端到 IPv6 主机通信初始化"(针对Cone NAT )的1-4步骤,与 IPv6 主机执行一次ICMPv6 Echo Request/Echo Reply消息交换。当消息交换执行完成后, Teredo 客户端送到 IPv6 主机的通信初始化数据包进行响应。

受限 NAT
图24 表明当 Teredo 客户端位于受限 NAT之后, IPv6 主机到 Teredo 客户端的通信初始化。

图24: Teredo 客户端位于受限NAT之后时, IPv6 主机到 Teredo 客户端的通信初始化

从 IPv6 主机发送通信初始化数据包至 Teredo 客户端,进程如下:
1.IPv6 主机发送一个数据包至 Teredo 客户端。根据 IPv6 网络的结构,以 Teredo 地址打包的数据包被发至最近的 Teredo 中继。
2.Teredo 中继验证 Teredo 客户端位于受限 NAT之后。如果 Teredo 中继本应发送这个数据包至 Teredo 客户端而没有发,NAT将会丢弃这个数据包,因为不存在一个起始于 Teredo 中继的 Teredo 通道的特定于来源的映射。因此, Teredo 中继在 IPv4 Internet 上,将气泡数据包通过 Teredo 服务器发送到 Teredo 客户端。
3.Teredo 服务器收到来自 Teredo 中继的气泡数据包。 Teredo 服务器将带有来源指示的气泡数据包发送至 Teredo 客户端,这个来源指示包含有 Teredo 中继的 IPv4 地址和UDP端口号。因为一个起始于 Teredo 服务器的 Teredo 通道的特定于来源的映射已存在于 NAT 中,这个气泡数据包被发送至 Teredo 客户端。
4.Teredo 客户端从接收的气泡数据包的来源指示验证 Teredo 中继的 IPv4 地址是不是最离 IPv6 主机最近。
5.根据收到气泡数据包已等待发送的回执(此数据包来自 IPv6 主机), Teredo 中继确认在客户端的受限NAT中建立了一个特定于来源的通道映射。 Teredo 中继向 Teredo 客户端发送数据包。
为根据收到气泡数据包已等待发送的回执(此数据包来自 IPv6 主机), Teredo 中继确认在客户端的受限 NAT 中建立了一个特定于来源的通道映射。 Teredo 中继发送数据包给 Teredo 客户端。

总结
   Teredo 是一种地址分配和主机间自动隧道技术,当 IPv6 / IPv4 主机均位于一个或多个 IPv4 NAT 之后时,它可以帮助用户建立IPv6 单播连接。IPv6 数据包以基于 IPv4 的 UDP 消息发送。 Teredo 通信依托于 Teredo 服务器和 Teredo 中继。一个 特定于 Teredo 主机的中继相当于一个没有使用 Teredo 地址的 IPv6 或是 IPv4 ,但是能够在通信路径上不使用 Teredo 中继的情况下与 Teredo 用户进行通信。本文对获得 Teredo 地址,维持 NAT 映射以及在两个 Teredo 客户端、两个特定于 Teredo 主机的中继、和两个 IPv6 主机之间进行通信的初始化流程都做了详尽的说明。不管是基于Cone NAT 还是受限NAT,任何初始化通信过程都基于 Teredo 客户端。