计算机科学速成课 Crash Course Computer Science 第二十八集 计算机网络 Computer Networks

GitHub链接:https://github.com/WilliamWuLH/My-notes-about-CCCS

如果你觉得不错可以 ⭐Star 和 Fork ❤

计算机科学速成课 Crash Course Computer Science

第二十八集 计算机网络 Computer Networks

150年前发一封信件从伦敦到加州要花2~3周(还是特快邮件),如今电子邮件只要几分之一秒,时延改善了上百万倍,时延指传播一条信息所需要的时间,帮助现代世界在遍布全球的光纤中快速发展。

球鞋网络 Sneakernet

第一个计算机网络出现在1950~1960年代,通常在公司或研究室内部使用,为了方便信息交换,这叫“球鞋网络”(sneakernet),第二个好处是能共享物理资源,早期网络也会共享存储空间,因为每台电脑都配存储器太贵了。

局域网 LAN

计算机近距离构成的小型网络叫局域网(Local Area Networks),简称LAN。局域网能小到是同一个房间里的两台机器,或大到校园里的上千台机器。尽管开发和部署了很多不同LAN技术,其中最著名和成功的是“以太网”(Ethernet),开发于1970年代,在施乐的“帕洛阿尔托研究中心”诞生,今日仍被广泛使用。

以太网

以太网的最简单形式是:一条以太网电线连接数台计算机,当一台计算机要传数据给另一台计算机时,它以电信号形式将数据传入电缆,当然因为电缆是共享的,连在同一个网络里的其他计算机也能看得到数据,但是不知道数据是给它们的还是给其他计算机的。

媒体访问控制地址 MAC地址

为了解决这个问题,以太网需要每台计算机有唯一的媒体访问控制地址(media access control address),简称MAC地址。这个唯一的地址放在头部,作为数据的前缀发送到网络中,所以计算机只需要监听以太网电缆,只有看到自己的MAC地址才处理数据。这运作得很好,现在制造的每台计算机都自带唯一的MAC地址,用于以太网和无线网络。

载波侦听多路访问 CSMA

多台电脑共享一个传输媒介,这种方法叫“载波侦听多路访问”(Carrier Sense Multiple Access),简称“CSMA”,载体(carrier)指运输数据的共享媒介,以太网的carrier是铜线,WiFi的carrier是传播无线电波的空气。很多计算机同时侦听载体,所以叫“侦听”和“多路访问”,而载体传输数据的速度叫“带宽”(bandwidth)。

冲突 collision

Unfortunately,使用共享载体有个很大的弊端,当网络流量较小时,计算机可以等待载体清空,然后再传送数据。但是随着网络流量上升,两台计算机想同时写入数据的概率也会上升,这叫冲突(collision)。Fortunately,计算机能够通过监听电线中的信号检测这些冲突,最明显的解决方法就是停止传输,等待网络空闲再试一遍。问题是其他计算机也打算这样做,其他等着的计算机可能在任何停顿间隙闯入,导致越来越多的collision。

以太网有个 surprisingly simple and effective 的解决方法,当计算机检测到collision时就会在重传之前等待一小段时间。当然如果所有计算机用同样的等待时间是不行的,所以加入一个随机时间,一台计算机可能等待1.3s,另一台计算机等待1.5s。

指数退避 exponential backoff

这有用但不能完全解决问题,需要另一个小技巧,假设一台计算机在传输数据期间检测到collision,会等待1s+随机时间,然而如果再次发生collision表明网络拥塞,这次等待2s,如果再次发生collision则等待4s,然后8s,16s等等,直到成功传输。因为计算机的退避,collision次数降低了,数据再次开始流动起来,网络变得顺畅。这种指数级增长等待时间的方法叫做“指数退避”(exponential backoff)。以太网和WiFi都用这种方法,很多其他传输协议也用。

冲突域 Collision Domain

但即便有了指数退避,想用一根网线链接整个大学的计算机还是不可能的,为了减少collision并提高效率,我们需要减少同一carrier中设备的数量,carrier和其中的设备总称为“冲突域”(Collision Domain)。

交换机 network switch

以太网的例子:一根电缆连接6台计算机,也叫一个冲突域,为了减少collision,可以用交换机(network switch)把它拆成两个冲突域,交换机位于两个更小的网络之间,必要时才在两个网络之间传输数据。交换机会记录一个列表,写着哪个MAC地址在哪边网络。

路由 routing

大的计算机网络也是这样构建的,包括最大的网络——互联网(Internet),也是多个连在一起的稍小一点的网络,使不同网络间可以传递信息,这些大型网络的有趣之处是从一个地点到另一个地点通常有多条路线,这就带出了另一个话题——路由(routing)。连接两台相隔遥远的计算机或网络,最简单的办法就是分配一条专用的通信线路,早期电话系统就是这样运作的。

电路交换 circuit switching

假设 Indianapolis 和 missoula 之间有五条电话线,如果在1910年代,John想打电话给Hank,John要告诉操作员他想打到什么地方,然后工作人员手动将John的电话连到通往 missoula 的未使用线路,通话期间这条线就被占用了,如果五条线都被占用了,John要等待某条线空闲出来,这叫做“电路交换”(circuit switching),因为是把电路连接到正确目的地,能用但是不灵活而且价格昂贵,因为总有闲置的线路。好处是如果有一条属于自己的线路,你可以最大限度地随意使用而无需共享。因此军队,银行和其他一些机构依然会购买专用线路来连接数据中心。

报文交换 message switching

传输数据的另一个方法是“报文交换”(message switching),报文交换就像邮政系统一样,消息会经过好几个站点,每个站点都知道下一站发哪里,因为站点有表格,记录到各个目的地的message应该怎么传。报文交换的好处是可以用不同路由,使通信更可靠更能容错(fault-tolerant)。

跳数 hop count

消息沿着路由跳转的次数叫做“跳数”(hop count)。记录跳数很有用,因为可以分辨出路由问题。假设 Chicago 认为去 missoula 的最快路线是 Omaha,但是 Omaha 认为去 missoula 的最快路线是 Chicago,导致message在2个城市之间不停传来传去,不仅浪费带宽,而且这个路由错误需要修复。这种错误会被检测到,因为跳数记录在消息中,而且传输时会更新跳数。如果看到某条消息的跳数很高,就知道路由肯定哪里错了,这叫“跳数限制”。

报文交换的缺点之一是有时候message比较大,会堵塞网络,因为要把整个message从一站传到下一站后才能继续传递其他message。传输一个大文件时整条路都堵塞了,即便你只有一个1KB的电子邮件要传输,也只能等大文件传完,或者是选另一条效率较低的路线。

数据包 packets

解决方法是将大报文分成很多小块,叫做“数据包”(packets),就像报文交换一样,每个packet都有目标地址,因此路由器(routers)知道发到哪里。

互联网协议 IP

报文具体格式由“互联网协议”(Internet Protocol)定义,简称IP,这个标准创建于1970年代。每台联网的计算机都需要一个IP地址,以点分隔的4组数字(four, 8-bit numbers written with dots in between),例如172.217.7.238是Google其中一个服务器的IP地址。

阻塞控制 congestion control

数百万台计算机在网络上不断交换数据,瓶颈的出现和消失是毫秒级的,路由器会平衡与其他路由器之间的负载,以确保传输可以快速可靠,这叫“阻塞控制”(congestion control)。

TCP/IP

有时同一个message的多个packet会经过不同线路,到达顺序可能会不一样,这对一些软件是个问题。Fortunately,在IP之上还有其他协议,比如TCP/IP,可以解决乱序问题。

分组交换 Packet Switching

将数据拆分成多个小数据包(packets),然后通过灵活的路由传递,非常 efficient 且 fault-tolerant,如今互联网就是这么运行的,这叫“分组交换”(Packet Switching)。有个好处是它是去中心化的(decentralized),没有中心权威机构,没有单点失败问题,事实上因为冷战期间有核攻击的威胁,所以创造了分组交换。

发展

如今,全球的路由器协同工作,找出最高效的线路,用各种标准协议运输数据,比如“因特网控制消息协议”(Internet Control Message Protocol——ICMP)和“边界网关协议”(Border Gateway Protocol——BGP),世界上第一个分组交换网络以及现代互联网的祖先是 ARPANET,名字来源于赞助这个项目的机构——美国高级研究计划局(Advanced Research Projects Agency)。

互联网会继续快速发展,特别是如今智能设备层出不穷,组成“物联网”(internet of things),

你可能感兴趣的:(计算机科学速成课,Crash,Course,Computer,Scie)