读书笔记∣世界是数字的

来源:互联网 发布:php namespace用法 编辑:程序博客网 时间:2024/05/17 12:05

第一部分 硬件

第1章 计算机里有什么

1.1 逻辑构造:每一部分是什么、叫什么、做什么、怎么做、之间如何连接



(1)计算机的基本组成,包括处理器、存放指令和数据的存储器以及输入输出设备,这种体系结构通常被称为冯诺依曼体系结构,他在论文《电子计算仪器逻辑设计的初步讨论》中指出“为了让这台完整的设备成为通用的计算机器,它必须包含某些主要元件用于运算、存储数据、控制以及连接操作人员”,翻译成现在的术语就是,CPU提供运算和控制功能,内存和磁盘用于存储数据,键盘、鼠标和显示器用于连接操作人员。

(2)中央处理单元CPU:负责处理运算,来回搬运数据,并控制着一切别的操作。

(3)主存储器RAM:即随机访问存储器,也称为内存,负责保存处理器和计算机的其他部件正在活跃使用的信息。CPU可改变内存里的内容,内存中不仅保存了CPU正在处理的数据,还保存这如何处理数据所需要运行的指令,通过把不同指令加载进内存,就可以让计算机做不同的运算。内存之所以被称为“随机访问”,是因为CPU能以任何顺序访问内存中的不同位置而保持速度不受影响。内存是易失性的,掉电后里面的内容会消失;内存的大小也是有限的。

(4)磁盘和大容量存储器:最常见的大容量存储器是磁盘,也称硬盘或硬驱,磁盘能保存的信息比内存大得多,且是非易失性的,数据、指令和其他信息都长期保存在磁盘上,仅在需要时临时读入内存。

(5)其他设备:输入设备(鼠标、键盘、触摸屏)、输出设备(显示器、打印机、扬声部件)、网络部件(以太网、无线网)

1.2 物理构造:每一部分长什么样子、如何建造起来

第2章 比特、字节与信息表示

计算机表示信息的三个基本思想:

(1)计算机是数字处理器:存储和处理离散信息,而模拟信息则是平滑变化的值;

(2)计算机用比特表示信息:比特为非0即1的二进制数字;

(3)较大的信息以比特组表示:数值、字母、单词、姓名、声音、照片、电影以及各个程序指令都是用比特组来表示的。

2.1 模拟与数字

(1)模拟表达的意思是:值随其他因素变化而平滑变化,在模拟装置中,某些事物(汽车转弯幅度)会随着另一些事物(方向盘转动幅度)的变化平滑而连续地变化,变化过程没有间断,一个事物的微小变化意味着另一个事物的微小变化。

(2)数字系统处理的是离散值,可能的取值是有限的(转向灯只可能是关闭的或在左右方向打开),某个事物小小的变化,要么不引发其他事物的变化,要么就引发其他事物的突变,使其从一个离散的值跳到另一个离散的值。

(3)数字化的信息比模拟信息更容易处理,无论最初来源是什么,数字化数据都可以用多种方式来存储、传输和处理,但模拟信息不行;此外,数字信息更容易扩展,因此,我们在输入端都会尽可能地转换为数字信息,而在输出端尽可能晚地转回模拟形式。

2.2 模数转换

(1)如何把照片转换成数字形式

a. 胶卷相机的成像原理:通过把胶片感光区曝露给被拍物体反射的光线来实现的,胶片上不同区域接收到的不同颜色的光量不同,从而影响胶片上的染料。在胶片显影、印相时,彩色染料数量决定了显示出来的颜色变化。

b.对数码相机来说,镜头把影像聚焦到一块位于红、绿、蓝滤镜后面的矩形感光器阵列上,感光器由微小的光敏探测器组成。每个探测器存储一定数量的电荷,与落在它上面的光量成正比。这些电荷被转换为数字值,照片的数字表示就是这些表现光强度的数值序列。探测器越小,数量越多,电荷测量的结果就越精细,数字化图像就能越精确地反映原始的影像。传感器阵列的每个单元都由一组能够捕获红、绿、蓝光的探测器构成,每个单元对应
一个像素,即像元。 3000×2000 像素的图像,包含 600 万个像元,或 600 万像素,对今天的数码相机而言并不算大。像素的颜色通常由三个值表示,分别代表红、绿、蓝光的强度,因此 600 万像素的图像总共要存储 1800 万个颜色值。屏幕在显示图像时,使用的是红、绿、蓝光三元组的阵列,其亮度与像素亮度一致。如果你用放大镜仔细观察手机或电脑屏幕,很容易看到每个独立的彩色块。

(2)如何将声音转换成数字形式

音源通过振动或快速运动引起空气压力的波动,人的耳朵把这种压力变化转换为神经活动,经大脑解释之后就形成了“声音”。把空气压力随时间的变化测量出来并不难,测量得到的数值序列是波形的数字化表示,可以存储、复制、操作它们,也可以把它们发送到任何地方。如果有设备把这些数值转换成对应的电压或电流,然后再通过电压或电流驱动音箱或耳机,就能够实现回放。从声波到数值是模数转换,相应的设备叫A/D转换器;反过来当然是数模转换,或者叫 D/A。转换过程并不是完美无缺的,两个方向的转换都会损失一点信息。

(3)如何将电影转换为数字形式

通过组合(并同步)声音和影像

(4)其他信息的数字表示

还有一些信息很方便以数字形式来表示,因为除了想好如何表示它之外,根本不需要做什么转换。比如这本书中的文字、字母、数字和标点符号,我们称为其普通文本。可以为其中每个字母指定一个唯一的数值,标点符号等其他字符用的是其他数值。这个表示标准叫做ASCII
不同地区有不同的字符集标准,但也有一个世界通用的标准叫Unicode,它为所有语言的所有字符都规定了一个唯一的数值。

2.3 比特、字节与二进制

(1)比特:表示数字信息的最基本单位是比特,一个比特就是要么是0要么是1 的一个数,没有其他可能。而十进制中有 0 到 9,共有10 种可能。只用一个比特,可以表示任何二选一的事物的值,但我们经常还要面对更多选项,表示更复杂的事物。为此,可以使用一组比特,然后为不同的0 和 1 的组合赋予不
同的含义。

(2)字节

在所有现代计算机中,数据处理及内存组织的基本单位都是8 个比特。 8 比特被称为 1字节。要是你想把一或多个字节表示的数值写出来,那可以用十进制,如果它真是一个数值的话,十进制是最适合人类看的。如果你想看清每一个比特,特别是在不同比特编码不同信息的情况下,那还是二进制更方便。然而,二进制写起来太长了,比十进制格式长三倍还多,因此我们常用另一种替代数制,即十六进制。


第3章 深入了解CPU

1、CPU 反复执行简单的循环:从存储器中取得下一条指令,该指令正常情况下保存在存储器的下一个位置,但也可以是使用 GOTO 或 IFZERO 指定的位置;对指令进行译码,也就是搞清楚这条指令要干什么,然后为执行该指令做好准备;执行指令,从存储器中取得信息,完成算术或逻辑运算,保存结果,总之是执行与指令匹配的组合操作;然后再从头取得指令,开始下一次循环。真正的处理器也执行同样的“取指令—译码—执行”循环,只不过为了加快处理速度,还会配备精心设计的各种机制。

2、现代计算机会在 CPU和 RAM之间使用少量的高速存储器来保存最近使用过的指令和数据,这种高速存储器叫作缓存。如果可以从缓存中找到信息,那么就会比等待 RAM返回数据快得多。在 CPU 中, 缓存是容量小但速度快的存储器,用于存储最近使用的信息,以避免访问 RAM。通常, CPU 会在短时间内连续多次访问某些数据和指令。缓存之所以有用,关键在于最近用过的信息很可能再次被用到,而把它们存储在缓存里就意味着减少对 RAM 的等待。缓存通常会一次性加载一组信息块,比如只请求一个字节,但会加载 RAM 中一段连续的地址。因为相邻的信息也可能被用到,要用的时候它们同样已经在缓存了,换句话说,对邻近信息的引用也不需要等待。


第二部分 软件

计算机是一种通用机器,能够执行任何计算。虽然它只有很少的指令,但执行这些指令的速度却极快,而且它能够很大程度上控制自己的运行。但如果没有人告诉它该做什么,它就什么都不会做,而且得事无巨细一五一十地告诉它。计算机是“魔法师的学徒”,能够不知疲倦、分毫不差地执行指令,但下达给它的任务书也必须高度精确。能够让计算机完成某种任务的指令序列通称软件。

第4章 算法

4.1 线性算法

如果计算时间与数据量成正比或叫线性比例,那该算法就叫做线性时间算法或线性算法。以数据量为横坐标,以时间为纵坐标画一条线,得到的将是一条向
右上方延伸的直线。我们平时遇到的大多数算法都是线性的,因为它们对某些数据所执行的基本操作是相同的,数据越多工作量也会同比例增加。

4.2 二分搜索

二分搜索的关键是数据量的增长只会带来工作量的微小增长。

4.3 排序

4.4 难题与复杂性

第5章 编程与编程语言

算法是忽略具体实例而对过程进行的一种抽象或理想化的描述,是分毫不差且没有歧义的“菜谱”。算法通过一组确定的基本操作来表达,这些
操作的含义是完全已知且明确的。算法描述了应用这些基本操作的一系列步骤,涵盖所有可能的情况,而且保证最终能够停止。

程序则不是抽象的,它陈述了一台真正的计算机要完成某个任务所必须执行的具体步骤。程序之于算法,犹如建筑之于图纸,一个是实际存在的,一个是理想化的。

换一个角度看,程序又是以计算机能够直接处理的某种形式表达出的一个或多个算法。程序必须考虑实际的问题,比如内存不足、处理器速度不快、无效或恶意的输入、网络连接中断,以及(看不见摸不着,但却经常会导致其他问题恶化的)人性弱点。因此,如果说算法是理想化的菜谱,那程序就是让烹饪机器人冒着敌人的炮火为军队准备一个月的给养所需的操作说明书。

5.1 汇编语言

5.2 高级语言

5.3 软件开发

1、库、接口和开发工具包

(1)最基本的层次上,编程语言提供了一种机制,叫做函数。这样,程序员就可以写出一段执行某个任务的代码,然后以某种形式把它包装起来,提供给别的程序员在其他程序里使用,而这些程序员不必知道那些代码具体如何完成该任务。函数使我们可以基于组件搭建程序,而这些组件则是独立创建、可以由任何程序员按需使用的。把一组相关的函数集合起来,就叫做库。例如,C 有一个标准函数库,用于读写磁盘和其他地方的数据,scanf 和 printf就这个库里的函数。

(2)函数库提供的服务是通过 API(Application Programming Interface,应用编程接口)的形式描述给程序员的。 API 会罗列出所有函数,说明每个函数的用途、用法、需要的输入数据,以及生成什么值。 API 也会描述数据结构,也就是传进来传出去的数据的组织形式,以及为请求服务必须遵守哪些条条框框和计算将返回什么结果。这种说明书必须面面俱到、严谨准确,因为基于它编写的程序最终会由一台不会说话的计算机而不是一个随和友善的人去解读。API 文档中不仅包含对语法的要求,也包括大量辅助说明,用以帮程序员更有效地使用函数库。今天的大型系统开发通常都会用到 SDK(Software Development Kit,软件开发工具包),以便程序员在极其复杂的软件库里找到有用的函数。

2、开放源代码

(1)程序员编写的代码,无论使用的是汇编语言还是(更可能的)某种高级语言,都被称为源代码。而编译源代码得到的适合某种处理器执行的编码,叫做目标码。正如已经介绍的它们之间的其他区别一样,区别源代码和目标码看起来有点迂腐,但却非常重要。源代码是程序员可以读懂的,尽管可能得费点时间和精力。因此源代码是可以仔细研究并加以改编的,它所包含的任何创新和思想也是可见的。相对而言,目标码则经过了很大程度的转换,一般不太可能再恢复为类似源代码的形式,也无法从中提取出什么结构再加以改造,甚至连理解它都是不可能的。正因为如此,大多数商业软件只以目标码的形式分发,而源代码是重要的机密,因此说比喻也好,事实也罢,反正它会被锁得严严实实的。

(2)开放源代码则是指另一种做法,即源代码可以被任何人自由阅读、研究和改进。


第6章 软件系统

1、操作系统

(1)现代的计算机确实是一个复杂的“怪物”。它由很多部件组成,包括处理器、内存、磁盘、显示器、网卡,等等。为了有效地使用这些部件,需要同时运行多个程序,其中一些程序等着某些事件发生(如网页下载),另一些程序则必须实时作出响应(跟踪鼠标移动或在你玩游戏的时候刷新显示器),还有一些会干扰其他程序(启动新程序时需要在已经很拥挤的 RAM 中再腾出空地儿来)。要管理如此复杂的局面,唯一的办法就是用程序来管理程序,这也是让计算机自己帮自己的又一个例子。这么一个程序就叫作操作系统。

(2)操作系统控制和分配计算机资源。首先,它负责管理 CPU,调度和协调当前运行的程序。它控制 CPU 在任意时刻执行的程序,包括应用程序和后台进程(如杀毒软件和检查更新的程序)。它会将一个暂时等待的程序(比如等待用户在上面单击的对话框)挂起。它会阻止个别程序多占资源。如果一个程序占用 CPU 时间太多,操作系统会强行将其中断以便其他任务得以正常执行。操作系统通常都需要管理数十个同时运行的进程或任务。其中有些是由用户启动的程序,但大多数还是一般用户看不到的系统任务。在 Mac OS X 上通过 Activity Monitor,或在 Windows 上通过任务管理器,可以看到系统当前都运行有哪些程序。其次,操作系统管理 RAM。它把程序加载到内存中以便执行指令。如果 RAM 空间不足,装不下所有程序,它就会将某些程序暂时挪到磁盘上,等有了空间之后再挪回来。它确保不同的程序相互分离、互不干扰。第三,操作系统管理存储在磁盘上的信息。 文件系统是操作系统中的一个主要组成部分,负责提供我们在计算机中都见过的那种文件夹和文件般的分层机制。最后,操作系统管理和协调外接设备的活动。

(3)操作系统也是程序。跟其他应用程序程序一样,都是用同一类编程语言编写的,最常用的是 C 和 C++。

(4)操作系统如何工作

a.系统调用

操作系统提供了硬件和其他软件之间的接口。有了这个接口,硬件就好像能听懂人的话了,而程序员编程因此就会变得简单。操作系统为应用程序定义了一组操作(也叫服务),操作系统以标准化的或者说大家协商一致的方式提供这些服务,而应用程序通过执行一种特殊的指令来请求这些服务,并将控制权移交给操作系统中特定的地址。操作系统根据请求完成计算,然后再将控制权和结果返回给应用程序。操作系统的这些“入口”被称为系统调用(system call),而对这些系统调用的详细说明实际上恰恰解释了操作系统能做什么。系统调用可以直接拿操作系统内部的代码作为入口,也可以是对某个(为相应服务而准备的)库函数的调用。

b.设备驱动程序

设备驱动程序是一种沟通操作系统与特定硬件设备(如打印机和鼠标)的程序。驱动程序的代码知道怎么让特殊的设备履行自己的职责,比如从特定的鼠标得到移动和按钮信息、让磁盘通过旋转的磁表面读取和写入信息、让打印机在纸上留下记号、让特定的无线网卡发送和接收无线电信号。驱动程序把操作系统与特定设备独有的性质隔离开来(任何设备,比如各种键盘,都有一些操作系统要用到的基本性质和操作),操作系统通过驱动程序的接口以统一的方式访问相应设备,从而方便在设备之间切换。例如打印机专属的驱动程序,要负责把操作系统请求转换为特定设备完成相应任务必需的指令。一句话,就是操作系统发送通用的请求,而具体的设备驱动程序负责在各自硬件上落实、执行请求。

下面这幅图展示了操作系统、系统调用、驱动程序和应用程序之间的关系。


(5)文件系统

a. 文件系统是操作系统的一个组成部分,它能够让硬盘、 CD 和 DVD、移动存储设备,以及其他各种存储器等物理存储媒体,变成看起来像是由文件和文件夹组成的层次结构。我们常说计算机有逻辑组织和物理实现两大概念,文件系统就是这两大概念的集中体现。文件系统能够在各种不同的设备上组织和存储信息,但操作系统则为所有这些设备都提供相同的接口。文件系统管理所有这些信息,方便其他程序和操作系统的其他部件读写这些信息。它统筹安排所有的读写操作,确保这些操作有效进行,且不会相互干扰。它记录数据的物理位置,确保它们各就各位。在最低级的层次上,文件系统服务是通过系统调用来提供的。程序员通常要借助代码库来使用这些系统调用,以简化编程过程中常见的文件处理操作。

b.在应用程序要访问已有的某个文件时,文件系统必须从其顶级层次开始搜索该文件,在相应文件夹里查找文件路径中的每一部分。举个例子,假设要在 Mac 中查找/Users/bwk/book/book.txt。文件系统首先要在其顶层搜索 Users,然后在该文件夹里搜索 bwk,接着在找到的文件夹里搜索 book,最后再在找到的文件夹里搜索 book.txt。在 Windows 中,这个文件的路径可能是 C:\My Documents\book\book.txt,但搜索过程相似。这是一种化整为零的思路。也就是说,路径中的层次会逐步缩小要搜索的文件或文件夹的范围,同时把其他不相干的部分过滤掉。正因为如此,不同层次中的文件可以使用相同的名字,唯一的要求是完整的路径必须独一无二。实践中,应用程序和操作系统会记住当前的文件夹,因而文件系统不必每次都从顶层开始搜索。而为了加快处理速度,系统还可能会缓存频繁用到的文件夹。

c. 应用程序在创建新文件时会向文件系统发送请求,文件系统会在相应的文件夹中增加一个新条目,包含文件名、日期等项,还有文件大小为零(因为还没有为这个新文件分配磁盘块)。接下来,应用程序要向文件中写入某些数据时(比如向一封邮件中写几句话),文件系统会找到足够多的当前没有使用的或者“空闲”的块来保存相应内容,并把数据复制过去。然后把这些块插入到文件夹的块列表中,最后返回给应用程序。
d.删除文件时,过程恰好相反:文件占用的块会回到空闲列表,而文件夹中该文件的条目会被清除,结果就好像文件被删除了一样。现实中的情况并不完全如此,而是加入了一些有意思的比喻。当你在 Windows 和 MacOS X 中删除一个文件时,这个文件会跑到“回收站”或“垃圾桶”里去。“回收站”和“垃圾桶”不过是另外一个文件夹,但具备某些常规文件夹所不具备的属性。正因为如此,才成其为“回收站”嘛。删除文件时,相应的文件夹条目将从当前文件夹被复制到名叫“回收站”或“垃圾桶”的文件夹里,然后会清除掉原来的文件夹条目。但是,这个文件占用的块以及其中的内容没有丝毫变化!从“回收站”里还原文件的过程正好相反,就是把相应条目恢复到它原来所在的文件夹中。“清空回收站”倒是跟我们本节一开始描述的过程很相似。此时“回收站”或“垃圾桶”里的文件夹条目会被清除,相应的块会真正再添加到空闲块列表中。不管是明确地执行这个操作,还是文件系统因为空闲空间过少而在后台静默地清空,这个过程都将实实在在地发生。假设是你明确地执行清空操作。那么这个操作首先清除“回收站”文件夹中的条目,然后把其中文件占用的块回写到空闲块列表。但是,这些文件的内容并没有被删除。换句话说,原始文件占用的每个块中的所有字节都会原封不动地呆在原地。除非相应的块从空闲块列表中被“除名”并奉送给某个应用程序,否则这些字节不会被新内容覆盖。

2. 应用程序

(1)“应用程序”是一种统称,表示所有在操作系统平台上完成某种任务的软件或程序。应用程序可大可小,可以只完成特定的任务,也可以囊括大量功能。可以是花钱买的,也可以是免费送的。它的代码可以高度保密,也可以开放源码,甚至没有任何限制。或许可以把应用程序分成两类。一类是小型独立的应用,通常只帮用户做一件事;另一类是大型软件,包含非常多的操作,比如 Word、 iTunes 或 Photoshop、浏览器等。

3. 软件分层

(1)通俗地讲,计算机的最底层是硬件。硬件,除了总线支持在系统运行期间添加和删除设备之外,其他方面几乎可以看成不可变的。

(2)再往上就是所谓的操作系统层了。为了突出其核心地位,通常把这一层称为内核(kernel)。操作系统介于硬件和应用程序之间。无论底层是什么硬件,操作系统都要负责隐藏其特殊性,向应用程序提供统一的接口或界面,这个接口或界面不因硬件的种种差别而变化。在接口设计得当的情况下,同一个操作系统的接口完全可以适用于众多制造商生产的不同类型的 CPU。

(3)操作系统再往上的一层是函数库。函数库提供通用的服务,这样一来,程序员就不必各自重复实现这些功能。有些库比较靠近底层,能够完成一些基本功能(完成数学计算,比如开方和求对数,或者像前面 date 命令一样计算日期和时间)。另外一些库的功能更强大(涉及加密、图形处理、压缩等)。图形用户界面上的组件,包括菜单、按钮、复选框、滚动条、选项卡面板等等,都需要编写很多代码。为此,只要把这些代码封装成函数库,任何人就都可以使用它们,而且还能保证统一的行为和外观。这就是为什么大多数 Windows 应用(至少它们的基本图形组件)看起来那么相似的原因。同样的情况在 Mac 上更是如此。如果所有软件开发商都重新发明、重新实现这些功能,那不仅会浪费大量资源,而且五花八门的界面也会让用户感到无所适从。如前所述,典型的应用程序会使用函数库和操作系统服务,把它们集成到一起实现某种功能。不过,库函数与系统调用之间的区别并不十分明显。某个特定的服务可以作为系统调用实现,也可以借助使用了系统调用的库函数来实现。

第7章 学习编程

1、任何编程语言都会提供一些手段,用于取得赖以完成计算的输入数据、进行算术计算、在计算期间存储和获取中间值并显示结果、根据之前的计算结果决定下一个计算步骤,以及在计算完成时保存结果。

2、编程语言是表达所有计算步骤的记号库,人们可以籍此轻松写出代码来,而且代码可以被翻译成计算机最终可以执行的二进制形式。翻译方式有很多种,但最常见的是使用编译器,有时候还要用汇编器,把用 C 等语言编写的程序转换成二进制形式,以便在计算机上运行。不同的处理器有不同的指令集和指令形式,因此编译器也会有相应的差异。解释器和虚拟机是模拟真正或假想计算机的程序,可以面向它们编译并运行代码。 JavaScript 程序就是面向解释器编译运行的。

3、是语言就有语法,而语法就是一系列规则,根据它们可以判断什么符合语法,什么不符合语法。编程语言对语法规则是锱铢必较的,哪怕有一点点地方违反语法,它都会提出抗议。语言还要有语义,语义规定了语言中所有元素的含义。JavaScript 这门语言实际上包含三个方面。第一是语言本身,包括让计算机完成算术计算的语句、测试条件,以及重复计算的规则等。第二是 JavaScript 代码库,也就是由别人写好的程序段,你可以在自己的程序里直接使用,而不必再花时间重写。比如数学函数、计算日历的函数,以及搜索和操作文本的函数。第三是访问浏览器和网页的接口,JavaScript 程序通过这些接口可以在其所在的网页中获得用户输入、响应用户动作(如单击按钮或填写表单)、让浏览器显示不同的内容或者切换到其他网页。

4、库:编写一个在真正计算机上运行的程序要牵扯很多细节,涉及很多常用操作。库以及类似的机制可以提供预制的组件,供程序员在编程时使用。有了库,程序员就可以在既有工作成果基础上开展新工作。今天的编程工作通常都是组织既有组件与编写原创代码并重。组件可能是库函数(比如 JavaScript 程序中用到的那些函数),也可能是像 Google Maps 一样的大型系统,或者是其他 Web 服务。然而,从底层来看,它们都是由程序员使用我们介绍过的语言或没介绍过的类似语言指令编写的。

5、接口:接口或者 API(应用程序编程接口)是提供服务的软件与使用该服务的软件之间的一种约定。库和组件通过 API 提供服务。操作系统通过自身的系统调用接口让硬件看起来更有章可循,而且可以编程控制。


第三部分 通信

第8章 网络

1、电话与调制解调器

大约有近 20 年的时间,人们都是通过电话网把家用计算机接入互联网的。在家庭中,电话系统传送模拟的声音信号,不传输数据。因此,必须有一种设备来实现数字化信息(比特)和模拟的声音之间的转换,才能利用电话网络传输数据。改变要通过声音信号传输的信息的形式叫调制。相反,把这种形式再转换成比特叫解调。而能够完成调制和解调功能的设备就叫调制解调器(modem)。使用电话网络传输数据有很多缺点,比如占用电话线路、速度慢等

2、有线和DSL

电话线传输信号的速度限制是与生俱来的,为此很多人选择了另外两种上网方式:

(1)有线电视电缆。来回转换有线信号与比特数据的设备叫有线调制解调器
(2)DSL(Digital Subscriber Loop,数字用户环路),有时候也叫 ADSL(其中 A 代表 asymmetric,意为“非对称”,因为下载带宽比上传带宽高)

3、局域网和以太网

电话、有线电缆和 DSL 等联网技术都可以把计算机连接到一个大型系统,但通常会有一定的距离限制。

(1)以太网可以在通过同轴电缆相连的计算机之间传送信号,每台以太网设备都有一个 48 位的数字标识符,这个标识符独一无二,叫做(以太网)地址。因此,以太网最多可以连接 248(约为 2. 8 × 1014)个设备。你的计算机也有以太网地址,这些地址通常会印刷在机器底部。当然,在 Windows 中使用 ipconfig,在 Mac 上使用 ifconfig 也可以显示这些地址。而且经常会有两个地址,一个是有线网卡地址,一个是无线网卡地址。以太网地址都是以十六进制数字表示的,而且两位数字表示一个字节,因此总共是 12 位十六进制数字。了解了前面讨论的有线网络,也就不难想象以太网也存在同样的两个问题:隐私和资源争用。

(2)以太网有一个明显的缺点——离不开网线。无线网络同时解决了上网和移动的问题。无线网络(当然不用网线)通过无线电波传输数据,只要信号强度足够,在任何地方都可以通信。无线信号覆盖的范围从几十米到几百米不等。与电视遥控器使用的红外线不同,无线信号不一定非要直线传播。但是,金属物(比如墙壁和隔断)和混凝土结构(如楼板)会干扰无线信号,导致其实际覆盖的范围要远小于在空旷环境下所能覆盖的范围。种使用最广泛的无线联网技术有:蓝牙、nterchange-newline">RFID(radio-frequency identification)无线射频识别、GPS。


第九章 互联网

1、互联网初创于 1960 年代,其初衷在于建造一个网络来连接分散在不同地理位置的计算机。
2、如今的互联网由成千上万个松散连接的独立网络构成,其中的每个网络都连接到另外一个或多个网络。邻近的计算机通过以以太网为主的局域网连接,然后网络和网络再连起来。网络连接采用的设备叫网关或 路由器,其实就是一种专用的计算机,用来把组成信息的数据包从一个网络发送到下一个网络(维基百科上说网关是通用设备,而路由器是专用的,在本书里就不作区分通称为“网关”了)。网关之间互相交换着路由信息,这样它们就至少知道哪些网络与本地网络相连并可以被访问到。hans: 2; text-align: -webkit-auto; tex每个网络都可以连接上许多计算机主机(以下简称“主机”),比如家里、办公室里、宿舍里的 PC 和 Mac。家用计算机可以通过无线网卡连接到路由器,然后路由器通过电缆或 DSL 链路连接到互联网服务提供商(Internet Service Provider,缩写为 ISP)。办公室的计算机则可用有线网卡与以太网连接。

3、信息在网络之间游弋的时候,被分作称为包(packet)的小块,一个包就是按特定格式组织起来的一串字节。不同设备使用不同的包格式。在互联网上,输送数据的包叫做 IP 包(IP 即 Internet Protocol,互联网协议)。所有的IP 包都是一样的格式。在具体的物理网络上, IP 包通过一个或多个物理包来传输。每个 IP 包会经过多个网关,每个网关都把这个包传递给离包的最终目的地更近的下一个网关。要让这一切运转起来,我们需要以下机制:

a. 地址。就像电话号码一样,每台主机都必须有一个辨识身份的地址,才能跟互联网上的其他主机区分开来。这个辨识号码叫做 IP 地址,长度为 32 位(4 字节)或 128 位(16 字节)。

b. 域名。由于人们不太擅长记忆无规律的 32 位数字,哪怕写成点分十进制也不好记,因 此 , 要 让 人 们 直 接 访 问 一 台 主 机 , 必 须 给 它 取 个 名 字 才 方 便 。 比 如 , 像www.stanford.edu 和 microsoft.com 这种常见的名字,我们称之为域名。 域名系统(Domain Name System,缩写为 DNS)用于将名字转换为地址,是互联网基础设施的重要组成部分。

c. 路由。必须有一种机制,能为每个包查找从源地址到目标地址的路径。前文提到的网关就提供了这种功能。网关之间持续交换路由信息,即互联网上网络和设备的相互连接情况,并根据路由信息把收到的每个包转发到下一个离最终目的地更近一些的网关。
d. 协议。最后,为了使信息在不同计算机之间成功复制,必须有一些规则和步骤,用来准确描述上述机制和其他互联网组件是如何协作的。互联网有很多协议,其中最基础的有两个,一是互联网协议(Internet Procotol, IP),定义了单个包的格式和传输方式,二是传输控制协议 (Transmission Control Protocol,TCP),定义了 IP 包如何组合成数据流以及如何连接到服务。两者合起来起就叫 TCP/IP。


其他协议:文件传输协议FTP、远程登录Telnet、简单邮件传输协议SMTP、文件共享和点对点协议

第10章 万维网

1、互联网最外在的一面就是万维网(World Wide Web),也就是我们常说的“上网”的“网”(简称 Web)。虽然平常我们不怎么区分互联网和万维网,但两者其实并不相同。万维网连接着提供信息和请求信息的计算机(提供信息的叫服务器,请求信息的叫客
户端,比如我们的个人计算机),它通过互联网建立连接和传送信息,并为互联网支持的其他服务提供人机界面。

2、万维网主要有以下四个组成要素:

a. URL(Uniform Resource Locator,统一资源定位符),形如 http://www.amazon.com,用于指定要访问信息的名字以及信息所在位置。

b. HTTP(HyperText Transfer Protocol,超文本传输协议)它让客户端能够请求某个 URL,同时让服务器能
够返回客户端想要的信息。

c. HTML(HyperText Markup Language,超文本标记语言),描述服务器返回信息的格式(或表现形式)。

d. 浏览器,即运行在客户端计算机上的 Firefox、 Internet Explorer 等程序,它通过URL 和 HTTP 向服务器发送请求,然后读取并显示服务器返回的 HTML。

3、万维网如何工作的?

(1)点击链接,浏览器就会打开一个到 w3.org 域的 80 端口的 TCP/IP 连接,然后发送 HTTP请求,获取 URL 中域名后面部分表示的信息。例如,如果链接是 http://w3.org/index.html,那么请求的就是 w3.org 服务器上的 index.html 文件。

(2)收到请求后, w3.org 服务器首先判断接下来该怎么做。如果客户端请求获取的是服务器上的文件,服务器就将该文件发送回去,由客户端(也就是浏览器)显示出来。服务器返回的文本绝大多数都是 HTML 格式的,其中包含实际内容和如何显示这些内容
的格式信息。

4、cookie

HTTP 协议是“无状态”的。“无状态”的意思是, HTTP 服务器不必记住不同客户端发送的请求信息,只要向客户端返回了请求的页面,它就可丢弃有关这次数据交换的全部记录。于是,问题就来了:有时候服务器确实需要记住某些东西,如用户已经输入的名字和密码,这样后续的每一次交互就不必让用户反复输入了。怎样才能让 HTTP 记住这些东西呢?难点在于,客户端第一次和第二次访问服务器的时间可能间隔几小时、几星期,也可能访问一次以后再也不会访问,服务器要把信息保留多长时间呢?

第11章 数据、信息和隐私


阅读全文
0 0