Week5
Now, I want to make it real clear that, when I give you a 15 minute video of an amazing inventor and computer scientist, you don't have to remember every word that that person says. Okay? it's more important to get the gist of it. I try to cover the things I really want you to know in my slides. You might want to listen to it more than once, or listen to my slides and then go back, but you're not, I, I don't want you to memorize it, I, I wanted to give you smart people, I want you to hear from the smart people who did all this cool work, in their own words. But when we hear from their own words, they're sometimes pretty technical, so just relax and enjoy listening to these people and understand that you're not going to get everything. But hopefully you'll come back and you'll get more and more later.
接上篇
Layer2: Internet Portocol
Keywords: 3COM, PC Cards, Internetwork Layer, Internet Protoco(IP), Router Table, DHCP, Network Address Translation, TTL
Ethernet基于一个由夏威夷大学开发的无线网络 Aloha 的理念来设计,有一个想法就是排除复杂的网线,只共享一个媒介渠道。老师把它比喻成“一个巨人无线电奔跑在天花板上”。后来的Wi-Fi也是在Ethernet上的基础上加以改进而来的。
同时,Bob还组建了3COM公司,这是一个数字电子元器件的制造商,它是第一个生产PC Cards(个人计算机卡)的制造商,这玩意风靡一时。所以说Bob的一生为互联网的发展做了很多有用的贡献。
The InterNetwork(IP)
在简单地完成了对第一层Link Layer的了解之后(其实光第一层的成果就花费了5万名工程师二十年的心血,在此对他们表示感谢!),现在开始了解第二层:Internetwork Layer
网络分层模型的好处就是你不用担心你的上下层的问题,只需要关注你所在的层次的问题。
Link Layer关注的只是一个Link上面发生的问题。第二层Internetwork Layer关心的是多个Link结合在一起的问题。解决完单个link的问题之后,我们要考虑,我们如何到目的地(因为到达目的地需要经过多个link)?
IP address
下面介绍IP地址。前面的物理地址,是和硬件有关的,在某个硬件被制造时,他的物理地址就由制造商决定了,而且无论硬件身在何处,物理地址都不会改变。
IP地址不像物理地址那样不会改变,它是会变的,与连接的服务器、工作站有关。IP地址是全球性的。当你到了另一个地方,那么你的IP地址也会改变。
IP地址的格式是这样的。四组数字,中间有小数点分离。数字的范围是1~255(32bits)。前缀数字指明“哪一个网络?”,就和固定电话号码的前面的区号一样。后面数字代表在网络中的电脑。举例141.211. * . * 就是密歇根大学的IP地址的前缀,代表的是密歇根大学的网络。假设有信息要传到密歇根大学网络里的某台电脑,那么信息在路由器中发送时,路由器先关注的是前缀地址144.211,这样可以先传到目标网络,也就是密歇根大学网络中。然后再关注后缀地址,在该网络中寻找到底要传到密歇根大学的哪一台电脑上。
如果在wiki中搜索Internetwork layer,自动会转到Internet Protocol 的页面,所以说这些问题都是通过制定协议来解决的,所以可以把第二层称为协议层。如果说,这里有一个网络,哪里有一个网络,要如何让这两个网络互相联系起来?这就是协议层完成的事情,而且是非常非常漂亮的设计。
Router Table
这里再对路由器的工作原理做些补充。我们之前知道每个路由器不是直接把信息传到目的地,而是传到下一个路由器。换个说法就是每个路由器都只让信息更加接近目的地一点。在上面的例子中,路由器每次都可能往好几个可供选择的下一个路由器做传输,也就是说它需要做选择。不过它不会每次都选到最优路径,也有可能选错路,不过网络是会解决这些问题的。我们对路由器的要求还是让它尽可能只完成简单的工作,并且想办法让它完成的很好。基于此,我们有一个技术叫做router table
,拥有一系列机制来确保路由器的高效工作。路由表是十分优秀的设计,大大提高了功效表现和传输效率。
路由表的机制
- 存放发送源的地址;
- 根据目的地ip地址决定往哪个方向传递;
- 了解相邻链路的带宽情况,避免拥堵;
- 路由表动态更新机制。
DHCP
DHCP,是Dynamic Host Configuration Protocol的缩写,意即动态主机配置协议,是一个非常重要的互联网协议。允许用户和设备自动请求分配一个动态的IP地址。
这对使用移动设备的人尤其重要。假设你在咖啡厅使用了你的笔记本电脑,又带到家里用它工作了一会儿,到了学校又连上了学校的WiFi,看起来一切工作正常。然而为什么在三个地方我们都能连上网络而没有因为IP地址错误出现什么问题呢?
一般来说,电脑在制造出厂时就分配好了以太网地址,但没有分配IP地址,而是在第一次连接WiFi时询问IP地址。遵守这个协议的电脑是向外提出IP地址请求,请求一个IP地址,在这个地方使用。如果这里有access point,那么access point会分配给你一个IP地址,供你在这个地点使用。所以说实际上你在咖啡店、家里、学校使用的IP地址是三个不同的IP地址。
Non-Routable Addresses
Non-Routable Addresses,意思是专用网络。
在上面的例子中,如果为所有机构的所有电脑都分配一个真实存在的IP地址,那么IP地址将会很紧缺(IPv4情况下是2的32次方个)。所以出现了Network Address Translation技术。
如果你进入某人家里使用电脑,那么你被分配的IP地址可能是以192.168开头的地址,回到家里,就有可能是另一个IP地址,但还是以192.168开头的。实际上真实的IP地址肯定不会全部都是一样的开头。而是这个技术的关键点在于分配一个只在内部网络使用的虚拟IP地址,也就是说实际上在内部网络中使用的只是那个192.168.* . * ,这个地址无法在互联网上使用,但对内部网络有效。如果你要把数据往外部网络传输时,那么使用的还是那个真实的IP地址,只不过你可能没关注到这种转换而已。这个策略解决了IP地址数量紧缺的问题。如果说有192.168开头的IP地址尝试往外部网络传输数据,那么会被路由器直接抛弃掉。这个只适用于非常local的网络。
具体原理见NAT == Network Address Translation - wiki
Time to Live
很多操作系统自带一个命令,能够显示信息在互联网中传递时经过哪些路由器。Mac 是 traceroute ,Windows 是 tracert 。
每个IP都带有一个TTL(Time to Live)。之前我们讲过如果packet在路由器中传递也许会出现回环问题,但没提到解决方法。通常来说一个packet需要差不多三四十个hop也就能到达目的地了,所以设置一个TTL,数值比较大,例如255。没经过一个路由器TTL自减1,TTL减到零之后就丢弃这个packet。一般来说如果hop255次都没到,那么再一直hop下去也不会到了,大概率是(chances are that)因为进入了死循环。这是一个很早期就使用的诊断方法,沿用至今。
运行traceroute者或tracert,就是根据TTL来建立关于数据在互联网中所经过所有的路由器的地图。如果经过255次hop导致被丢弃,也能知道是在哪一个路由器上被丢弃的。
下面是一个traceroute 例子,经过了14个hop。横跨美国所花费的时间也不过60ms
The perfect is the enemy of the good
这堂课所介绍的第二层协议层的设计,是简洁而又优美的。它解决问题的思路并不复杂,这就赋予它可靠性和可扩展性。虽然思路不复杂,但解决了许多的问题,而且解决得都很不错。做最后的总结时老师用的标题是 “完美是良好的敌人”。也提出了一点缺点:虽然IP地址以非常简单的方式让数据通过互联网完成了传输,但没有保障性,有可能会导致传输不到的数据消失。
小记
出于好奇,在wiki中搜索了The perfect is the enemy of the good. ,竟然有结果,这是一句法国格言。
下面摘自wiki页面中的related concepts:
如果决定无法完美地完成任务就不结束,那么就永远无法完成这个任务。
与涅槃谬论密切相关,人们会因为觉得完美地完成太难,从而一直都不敢开始一项重要任务。
在以及足够好的情况下,试图改进会让情况更糟糕。
通常只需要需要20%的工作量就能完成80%的任务,而在完成最重要的20%却需要80%的努力。实现“完美”是不可能的。进一步提高工作导致收益递减,工作变得越来越低效。
早些时候,亚里士多德、孔子和其他古典哲学家提出的相关原理中庸之道,一般建议反对*
Robert Watson-Watt,在二战初期帮助发展雷达技术对抗德军的快速增,他提出了一个“不完美崇拜”:"Give them the third best to go on with; the second best comes too late, the best never comes.",给他们第三好的东西用,第二好的来的太迟,最好的永远别来。
看了之后,表示都很有意思,很能启发思想。
“完美”是一个及其理想的状态,说实话我觉得“完美”的定义也很个人化。其实说的还是自己不要太跟自己过不去吧。如果已经在完成得很不错的前提是还真的非要“完美”地完成任务,那纯粹是浪费精力、没意义的。
对于第二点。不积跬步,无以至千里。不积小流,无以成江海。任何成功的硕果都是由一点点的小努力积累而来的。总之行动力和意志力是很重要的,同样重要的还有不拖延。
关于第三点和第四点我一看到这个标题时我就想到了一句话:“有多少人都是死在了扩大战果的路上”。一般来说,把(满分100的)考试成绩从60分提到80分的难度绝对比从80分提高到100分的难度低得多,更何况有些考试几乎无法取得100分。如果拿高考打比方,数学已经能稳定拿135分以上,那么就不要死磕最后一题的最后一问,而是要花时间去夯实别的科目了。
有的时候我们受自己视野、性格、知识储备、能力等各种原因,我们自己给自己加上了一个限制。或者说我们面对一个事情或者某人表现出来的技能会觉得“哇这个好厉害好perfect啊,我绝对不能做到吧”。实际上这只是自己给自己设置的障碍,所以有的时候我们不该认为这是too perfect to get。
也许真的有我们觉得难以做到的事情,但还是要日复一日的坚持努力,去证明impossible is nothing吧。!~