1 - 早期的计算 - Early Computing
2 - 电子计算 - Electronic Computing
3 - 布尔逻辑与逻辑电路 - Boolean Logic & Logic Gates
4 - 二进制 - Representing Numbers and Letters with Binary
5 - 算术逻辑单元 - How Computers Calculate - the ALU
6 - 寄存器 & 内存 - Registers and RAM
7 - 中央处理器 - The Central Processing Unit(CPU)
8 - 指令和程序 - Instructions & Programs
9 - 高级 CPU 设计 - Advanced CPU Designs
10 - 编程史话 - Early Programming
11 - 编程语言 - The First Programming Languages
12 - 编程原理:语句和函数 - Programming Basics: Statements & Functions
13 - 算法初步 - Intro to Algorithms
14 - 数据结构 - Data Structures
15 - 阿兰·图灵 - Alan Turing
16 - 软件工程 - Software Engineering
17 - 集成电路、摩尔定律 - Integrated Circuits & Moore’s Law
18 - 操作系统 - Operating Systems
19 - 内存 & 储存介质 - Memory & Storage
20 - 文件系统 - Files & File Systems
21 - 压缩 - Compression
22 - 命令行界面 - Keyboards & Command Line Interfaces
23 - 屏幕 & 2D 图形显示 - Screens & 2D Graphics
24 - 冷战和消费主义 - The Cold War and Consumerism
25 - 个人计算机革命 - The Personal Computer Revolution
26 - 图形用户界面 - Graphical User Interfaces
27 - 3D 图形 - 3D Graphics
28 - 计算机网络 - Computer Networks
29 - 互联网 - The Internet
30 - 万维网 - The World Wide Web
31 - 网络安全 - Cybersecurity
32 - 黑客与攻击 - Hackers & Cyber Attacks
33 - 加密 - Cryptography
34 - 机器学习与人工智能 - Machine Learning & Artificial Intelligence
35 - 计算机视觉 - Computer Vision
36 - 自然语言处理 - Natural Language Processing
37 - 机器人 - Robots
38 - 计算机中的心理学 - Psychology of Computing
39 - 教育型科技 - Educational Technology
40 - (完结) 奇点,天网,计算机的未来 - The Singularity, Skynet, and the Future of Computing
多图预警
在公司内部方便信息交换,比起把纸卡或磁带送到另一栋里更快可靠,这是球鞋网络。能共享资源,他们这部分网络之间是内部链接,构成早期的局域网。
在局域网的计算机是怎么沟通的呢,他们通过光纤,传递2进制信号,头部信息会包含要去往的MAC地址,每一台计算机的MAC地址都是唯一的,所以在同一网络下的计算机接收到信号的时候,解析头部信息,看看这个接收方的MAC地址,是否是自己就能鉴别是否要接受该条信息。这很方便,但随着同一网络下的计算机越来越多,要发送信息的计算机和接受信息的计算机也越来越多,同一时间段很可能会有同时发送信号的情况,于是有了下面的网关。
将一片计算机之间交互频次多的划分到一个区域,每一片区域之间用交换器连接,当在自己区域的信息传播就不需要打开switch,这时即便是另一片区域的计算机也在发送同区域的信息,也不会受到影响,除非他们要跨区域沟通。
当然这不能解决所有问题,在网络通讯中还有非常重要的指数退避机制,就是说当几台计算机想要发送信号时,检查网路中是否已经有信号在占用,如果有的话,就等待一段时间再发送,比如等1秒,再发,这时候再次检测是否网络被占用,如果是那就再等一段时间,2秒钟,2秒之后再检测网络是否占用,如果占用就等4秒,如此指数级的等待时间发送,能极大程度避免网络冲突。这里面起始的1秒钟并不是固定的,它是随机数值,如如果大家的起始时间都是1秒,那依旧会冲突。
现实中的网络连接不是点对点的,这样的连通成本会灰常高,而是采用节点连接的形式,从一个城市去往另一个城市,可能要经过好几段网络路径和节点。当然发送的时候信息里面是包含要去往的目标的信息的,然后到达一个节点(路由器)会根据目标分配路径较短,较不拥挤的路径到达。
一条信息的内容特别大的时候,不便于一次性发送数据,会把数据拆分成若干分包,这些分包打上标签,去往同一目的地,在目的地网络协议会把这些分包组装起来,再解析。
这是早期的网络系统,其实网络并不神秘,他们就是连接计算机的管道,这些管道可能会断掉,那和管道那一头的计算机就断联了,但是管道这头的计算机还是能相互沟通的。
数据包想在互联网上传输,要符合“互联网协议”的标准,简称IP,地址必须是独有的,内容的大小也是有限制的,IP是一个非常底层的协议,数据包的头部只有目标地址,头部存关于数据的数据也叫元数据。在IP之上,要开发更高级的协议,UDP,头部包含了端口号,比如skype会申请3478端口号。IP负责把数据包送到正确的计算机,UDP负责把数据包送到正确的程序。
头部里面还有校验和,用于检查数据是否正确,检查方式是把数据求和来对比,将收到的数据加在一起,与头部校验和比对,一致的话说明正常,不一致那数据有问题。UDP不提供数据修复重复机制。
我们知道连接到一台计算机,我们需要知道这台计算机的IP地址,网络会通过地址转跳到对应网络,不过ip地址都是一串数字,不便于记忆,域名很好的解决了额这个问题,我们只需要记住要访问的网页的域名即可,网络会把我们访问的域名通过DNS查表,得到 域名对应的IP地址,然后访问真实的IP。
当然里面还会有一些相关的状态码,200表示正常。
物理层(光纤电脑),数据链路层(二进制电信号光信号),网络层(IP协议),传输层(UDP,TCP),会话层。
三次握手:
我要给你发数据了你准备好(1),好呢,我准备好了(2),行,我知道你准备好了(3)。······开始发数据。
四次挥手:
客户端发送一个FIN段,并包含一个希望接收者看到的自己当前的序列号K. 同时还包含一个ACK表示确认对方最近一次发过来的数据。(1) , 服务端将K值加1作为ACK序号值,表明收到了上一个包。这时上层的应用程序会被告知另一端发起了关闭操作,通常这将引起应用程序发起自己的关闭操作。(2),服务端发起自己的FIN段,ACK=K+1, Seq=L (3),客户端确认。ACK=L+1(4)。
TCP协议不用等一次通讯的握手全部执行,才能进行下一次,他们是可以同时发送多个数据包的,收多个确认码。
早期搜索引擎怎么去展示你想要的网页呢,通过存储在字典里面的关键字,比如我搜索猫,那存储在猫这个字典里面的网址就会被返回,那谁在前谁在后,看这个网站里面猫这个词出现的次数,很明显这里有很大的缺陷,有许多垃圾网址,将猫这个词无限拷贝,充满了网页内容,那它被,猫这个字典关联的名次就会极大靠前,但其实它根本没什么价值。只是一串无阅读意义的猫合集。谷歌之所以能够搜索引擎成功就避免了这种方式,采用关联性存储,指向性存储等等方式。
HTML标记性语言,超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上,由浏览器来解析。
万维网和互联网是两回事,互联网是传递数据的管道,各种程序都会用,其中传输最多数据的程序是万维网。万维网的最基本单位是单个页面,页面内容有去往其它页面的链接,叫超链接,这些超链接形成巨大的互联网络,这就是万维网的由来。
你是谁?你能访问什么?来确定你在该服务器上的额权限。
不能向上读表示,你在低权限位置不能读取高权限的内容,这样能防止非核心人员窃取到机密,不能向下写表示,你在高权限位置不能在低权限的区间写内容,这样能防止核心人员的核心内容被泄露到低权限区域。
保密性,完整性,可用性,这网络安全的三个目。
在一个页面输入用户名和密码,服务器会将该内容拿去数据库比对,如果被黑客攻击,会将用户名栏输入“用户名”DROP TABLE users; 如果服务器没有做保护,会在执行完用户名校验后清空数据表。这非常可怕。
还有缓冲区溢出,在登录界面要输入用户名和密码,在幕后,系统用缓冲区存输入的值,假设缓冲区大小是10,前后有其它数据,如果超过10个限制,数据会覆盖数据。可能导致系统崩溃。还可以在is_admin的值改成true,这样就能绕过登录,劫持整个系统。可以在缓冲区后,留一些不用的空间,跟踪里面的值,看书否变化。
将一列数据字符,按照一定的矩阵排布,然后从矩阵的左下角往上,从左往右依次读取,这样原先的信息就被打乱了,难以发现里面的加密规则。
我们有一个公开的密文,双方都知道,然后把这个公钥和自己的私钥按一定规则混合,形成新的自己的私钥,然后把这份新私钥发送给对方,对方再将这个新私钥混合自己的私钥,形成最终秘钥,这样一来双方都得到了一致的最终秘钥。外界不能知道。
我们拿最简单的三原色举例,公钥是红色, 我做了一个私钥是绿色, 你做了一个私钥是蓝色,然后我们把自己的私钥和公钥混合,我得到了黄色,你得到了紫色,我们相互交换新混合色,我拿到紫色,用紫色和我的绿色再混了得到了白色, 你拿到了黄色和你的蓝色混合也得到了白色, 我们双方的最终秘钥一致,就能解码内容了。这中间过程,外界只知道公共色红色,两个混合色 黄色和紫色,不知道最终秘钥白色。当然实际的秘钥不会用简单的颜色标记,使用的方法是类似的。
像变换尺寸一样,一个字符,经过转盘换成另一个字符,这个字符又经过新的转盘换成另一个字符,最终输出新字符。原先的内容就完全变化了。这种方式有个弊端,就是在文章中,一个字母出现的频率是有规律的,打个比方,r的频率是最高的,那转换过的密文里面t的频率最高啊,很有可能说明,原先的内容里的r被转换成了t,用这种方式排查能节省很多解密时间。