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吧。!~

Internet History, Technology and Security (Week5.2)的更多相关文章

  1. Internet History, Technology and Security (Week5.1)

    Week5 The Transport layer is built on the Internetwork layer and is what makes our network connectio ...

  2. Internet History, Technology and Security (Get Started)

    Abstract 课程名称:互联网的历史.技术和安全 coursera地址 制作方:密歇根大学(University of Michigan) 教师:Charles Severance, Associ ...

  3. Internet History,Technology and Security

    Internet History,Technology and Security(简单记录) First Week High Stakes Research in Computing,and Comm ...

  4. Internet History,Technology,and Security - History Through Supercomputing(Week2)

    时间飞逝,一周又过去了,这周我们来到了Internet History, Technology and Security (Week 2)的学习,从标题就可以看出,这周主要是介绍“互联网”雏形的诞生. ...

  5. Coursera: Internet History, Technology, and Security

    课程网址:https://www.coursera.org/learn/internet-history 学习笔记: Week 1: History - Dawn of Early Computing ...

  6. Internet History, Technology and Security (Week 2)

    Week 2 History: The First Internet - NSFNet Welcome to week 2! This week, we'll be covering the hist ...

  7. Internet History, Technology and Security (Week 9)

    Week 9 Security: Web Security We are now on the second to last week of the class and finishing up ou ...

  8. Internet History,Technology,and Security - Technology: Internets and Packets (Week5)

    Week5 Technology: Internets and Packets Welcome to Week 5! This week, we’ll be covering internets an ...

  9. Internet History, Technology, and Security(week5)——Technology: Internets and Packets

    前言: 之前都在学习Internet的历史,从这周开始,进入到了Internet技术的学习. Layer1: Link Introduction / The Link Layer 80年代之前,主流网 ...

随机推荐

  1. NULLIF与ISNULL的交叉使用

    事件源于字词字段拼接,由于不清楚NULLIF的本质导致惨剧发生. ', 'T5')), '6063-T5') ', 'T5'), ''), '6063-T5') 函数f_CTRL_GetAlloy功能 ...

  2. 针对Windows 64位系统中Matlab没有LED Control Activex控件的解决方法

    Win 10 64bits系统中Matlab 64位软件没有LED Control Activex控件,LED ActiveX Control控件位于Gauges Blockset模块中,而Gauge ...

  3. UWP 播放直播流 3MU8

    UWP 播放直播流 3MU8 参考:http://www.c-sharpcorner.com/UploadFile/2b876a/http-live-streaming-in-windows-10-u ...

  4. 【转载】COM 组件设计与应用(十四)——事件和通知(vc.net)

    原文:http://vckbase.com/index.php/wv/1244.html 一.前言 我的 COM 组件运行时产生一个窗口,当用户双击该窗口的时候,我需要通知调用者: 我的 COM 组件 ...

  5. 安装OpenvSwitch (ovs)

    简介 搭建SDN环境少不了SDN交换机,SDN交换机跟普通交换机最大的区别就是将普通交换机的数据平面和控制平面相分离,SDN交换机只负责数据的转发,而控制指令则由更上一级的控制器下发. Open vS ...

  6. jzoj5341 捕老鼠

    Description 为了加快社会主义现代化,建设新农村,农夫约(Farmer Jo)决定给农庄里的仓库灭灭鼠.于是,猫被农夫约派去捕老鼠. 猫虽然擅长捕老鼠,但是老鼠们太健美了,身手敏捷,于是猫想 ...

  7. 用Micro:bit播放生日快乐歌

    Micro:bit自带一个有趣的功能就是可以生成音乐播放,今天做一个简单实用的案例,用Micro:bit播放生日快乐歌. 算法: 按下按键A,显示生日快乐 播放D 播放D 播放E 播放D 播放G 播放 ...

  8. cadence allegro16.6 pcb文件转pads pcb文件方法教程

    在pcb设计工作中,有时会被要求将pcb文件转成其他软件的格式,pcb Allegro装Pads的方法如下. 在转换的过程中我们需要用到三种软件,ad.pads.allegro.转换的流程是:alle ...

  9. 使用Fiddler进行Web接口测试

    一.Fiddler简介1.为什么是Fiddler?抓包工具有很多,小到最常用的web调试工具firebug,达到通用的强大的抓包工具wireshark.为什么使用fiddler?原因如下: A)Fir ...

  10. Java类型转换工具类(十六进制—bytes互转、十进制—十六进制互转,String—Double互转)

    /** * 数据类型转换工具类 * @author cyf * */ public class NumConvertUtil{ /** * bytes 转16进制字符串 * @param bArray ...