计算机科学速成课笔记(五):计算机网络和计算机安全

一、计算机网络

第一个计算机网络出现在1950~1960年代

通常在公司或研究室内部使用,为了方便信息交换,这叫"球鞋网络"(sneakernet)

早期网络能共享物理资源(存储空间),因为每台电脑都配存储器太贵了

计算机近距离构成的小型网络叫局域网, 简称LAN,局域网能小到是同一个房间里的两台机器,或大到校园里的上千台机器。

以太网

尽管开发和部署了很多不同 LAN 技术,但其中最著名和成功的是 “以太网” , 开发于1970年代,在施乐的"帕洛阿尔托研究中心"诞生, 今日仍被广泛使用

以太网的最简单形式是:一条以太网电线连接数台计算机。当一台计算机要传数据给另一台计算机时,它以电信号形式,将数据传入电缆

MAC地址

连在同一个网络里的其他计算机也看得到数据,但不知道数据是给它们的,还是给其他计算机的。为了解决这个问题 以太网需要每台计算机有唯一的 \N 媒体访问控制地址 简称 MAC地址

这个唯一的地址放在头部,作为数据的前缀发送到网络中,所以,计算机只需要监听以太网电缆只有看到自己的 MAC 地址,才处理数据

现在制造的每台计算机都自带唯一的MAC地址,用于以太网和无线网络。多台电脑共享一个传输媒介,这种方法叫 “载波侦听多路访问” 简称"CSMA" ,载体(carrier)指运输数据的共享媒介

以太网的"载体"是铜线,WiFi 的"载体"是传播无线电波的空气,很多计算机同时侦听载体,所以叫 "侦听"和"多路访问"

而载体传输数据的速度 叫"带宽"

指数退避

当网络流量较小时 计算机可以等待载体清空,然后传送数据。但随着网络流量上升 两台计算机想同时写入数据的概率也会上升,这叫冲突

计算机能够通过监听电线中的信号检测这些冲突,最明显的解决办法是停止传输,等待网络空闲, 然后再试一遍

于是当计算机检测到冲突 就会在重传之前等待一小段时间

当计算机检测到冲突 就会在重传之前等待一小段时间,如果所有计算机用同样的等待时间是不行的它们会在等待时间后再次冲突。

如果一台计算机在传输数据期间检测到冲突,会等一秒+随机时间。如果再次发生冲突 表明有网络拥塞,这次不等1秒,而是等2秒,如果再次发生冲突 等4秒 然后8秒 16秒等等,直到成功传输

因为计算机的退避冲突次数降低了数据再次开始流动起来网络变得顺畅。这种指数级增长等待时间的方法叫:指数退避(Exponential Backoff)

路由和交换

为了减少冲突和提升效率,需要减少同一载体中设备的数量,载体和其中的设备总称 "冲突域"

可以用交换机把它拆成两个冲突域,交换机位于两个更小的网络之间,必要时才在两个网络间传数据。交换机会记录一个列表写着哪个 MAC 地址在哪边网络,使不同网络间可以传递信息。

大型网络有趣之处是从一个地点到另一个地点通常有多条路线

连接两台相隔遥远的计算机或网路,最简单的办法是分配一条专用的通信线路。消息沿着路由跳转的次数叫 “跳数”(hop count),记录跳数可以分辨出路由问题

如果看到某条消息的跳数很高就知道路由肯定哪里错了,这叫 "跳数限制"

将大报文分成很多小块,叫"数据包",就像报文交换每个数据包都有目标地址,因此路由器知道发到哪里。报文具体格式由"互联网协议"定义,简称 IP,这个标准创建于 1970 年代

路由器会平衡与其他路由器之间的负载以确保传输可以快速可靠,这叫 "阻塞控制"

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

将数据拆分成多个小数据包,然后通过灵活的路由传递,非常高效且可容错,这叫"分组交换"(去中心化)没有中心权威机构 没有单点失败问题。因为冷战期间有核攻击的威胁,所以创造了分组交换

如今,全球的路由器协同工作,找出最高效的线路,用各种标准协议运输数据,比如 “因特网控制消息协议”(ICMP)和 “边界网关协议”(BGP)

世界上第一个分组交换网络以及现代互联网的祖先是 ARPANET,名字来源于赞助这个项目的机构,美国高级研究计划局(Advanced Research Projects Agency)

二、互联网

计算机首先要连到局域网,也叫 LAN,局域网再连到广域网,广域网也叫 WAN,WAN 的路由器一般属于"互联网服务提供商",简称 ISP

广域网里,先连到一个区域性路由器,这路由器可能覆盖一个街区。然后连到一个更大的 WAN,可能覆盖整个城市。可能再跳几次,但最终会到达互联网主干

TCP/IP协议

互联网主干由一群超大型、带宽超高路由器组成,数据包(packet)要先到互联网主干,互联网是一个巨型分布式网络,会把数据拆成一个个数据包来传输

如果要发的数据很大,比如邮件附件,数据会被拆成多个小数据包。数据包(packet)想在互联网上传输要符合"互联网协议"的标准,简称 IP

因为 IP 是一个非常底层的协议,数据包的头部(或者说前面)只有目标地址。头部存 “关于数据的数据” 也叫 元数据(metadata)。因此需要在 IP 之上,开发更高级的协议。这些协议里最简单最常见的叫 “用户数据报协议”,简称 UDP

UDP 也有头部,这个头部位于数据前面,头部里包含有用的信息,信息之一是端口号

每个想访问网络的程序都要向操作系统申请一个端口号,当一个数据包到达时接收方的操作系统会读 UDP 头部,读里面的端口号

IP 负责把数据包送到正确的计算机,UDP 负责把数据包送到正确的程序

UDP 头部里还有"校验和",用于检查数据是否正确,检查方式是把数据求和来对比。 不幸的是,UDP 不提供数据修复或数据重发的机制,接收方知道数据损坏后,一般只是扔掉。而且,UDP 无法得知数据包是否到达

如果"所有数据必须到达" ,就用"传输控制协议",简称 TCP,TCP 和 UDP 一样,头部也在存数据前面。TCP 头部有"端口号"和"校验和", TCP 数据包有序号

序号使接收方可以把数据包排成正确顺序,即使到达时间不同,哪怕到达顺序是乱的,TCP 协议也能把顺序排对

TCP 要求接收方的电脑收到数据包并且"校验和"检查无误后(数据没有损坏)给发送方发一个确认码,代表收到了

"确认码" 简称 ACK,得知上一个数据包成功抵达后,发送方会发下一个数据包。如果过了一定时间还没收到确认码,发送方会再发一次,因为收件方有序列号,如果收到重复的数据包就删掉。TCP可以同时发多个数据包,收多个确认码

确认码的成功率和来回时间可以推测网络的拥堵程度,TCP 用这个信息,调整同时发包数量,解决拥堵问题。TCP 可以处理乱序和丢失数据包,丢了就重发,还可以根据拥挤情况自动调整传输率

TCP 最大的缺点是那些"确认码"数据包把数量翻了一倍,但并没有传输更多信息

DNS

互联网有个特殊服务负责把域名和 IP 地址一一对应,它叫"域名系统",简称 DNS

一般 DNS 服务器是互联网供应商提供的,DNS 会查表,如果域名存在,就返回对应 IP 地址.

DNS 不是存成一个超长超长的列表,而是存成树状结构。顶级域名(简称 TLD)在最顶部,比如 .com 和 .gov,下一层是二级域名,比如 .com ,再下一层叫子域名

这些数据散布在很多 DNS 服务器上,不同服务器负责树的不同部分

OSI

"数据链路层"负责操控"物理层",数据链路层有:媒体访问控制地址(MAC),碰撞检测,指数退避,以及其他一些底层协议

再上一层是 “网络层”,负责各种报文交换和路由,负责在计算机之间进行点到点的传输,而且还会检测和修复错误

"会话层"会使用 TCP 和 UDP 来创建连接,传递信息,然后关掉连接,这一整套叫"会话"。查询 DNS 或看网页时,就会发生这一套流程

这是开放式系统互联通信参考模型(OSI) 的底下5层,这个概念性框架 把网络通信划分成多层。每一层处理各自的问题,如果不分层直接从上到下捏在一起实现网络通信,是完全不可能的

三、万维网

万维网(World Wide Web) 和互联网(Internet)不是一回事,万维网在互联网之上运行

互联网是传递数据的管道,各种程序都会用,其中传输最多数据的程序是万维网,分布在全球数百万个服务器上

万维网的最基本单位,是单个页面,页面有内容,也有去往其他页面的链接,这些链接叫"超链接",这些超链接形成巨大的互联网络,这就是"万维网"名字的由来

超链接的价值早在 1945 年就被 Vannevar Bush 意识到了,1945年的时候计算机连显示屏都没有,所以这个想法非常超前

URL

为了使网页能相互连接,每个网页需要一个唯一的地址,这个地址叫 “统一资源定位器”,简称 URL

当访问一个网站时,计算机首先会做"DNS查找","DNS查找"的输入是一个域名,DNS 会输出对应的IP地址。浏览器会打开一个 TCP 连接到这个 IP 地址,这个地址运行着"网页服务器"。网页服务器的标准端口是 80 端口

HTTP

超文本传输协议(Hypertext Transfer Protocol, or HTTP)

HTTP的第一个标准,HTTP 0.9,创建于1991年。只有一个指令,“GET” 指令,该指令以"ASCII编码"发送到服务器

服务器会返回该地址对应的网页然后浏览器会渲染到屏幕上,如果用户点了另一个链接,计算机会重新发一个GET请求。浏览网站时,这个步骤会不断重复

在之后的版本,HTTP添加了状态码,状态码放在请求前面

HTML

"超文本"的存储和发送都是以普通文本形式,只有纯文本无法表明什么是链接,什么不是链接。所以有必要开发一种标记方法,因此开发了 超文本标记语言(HTML)

HTML 第一版的版本号是 0.8,创建于 1990 年,有18种HTML指令

如今的网页更复杂一些,最新版的 HTML,HTML5,有100多种标签(图片标签,表格标签,表单标签,按钮标签,等等)

浏览器和搜索引擎

第一个浏览器和服务器是 Tim Berners-Lee 在 1990 年写的,一共花了2个月。为了做出来,他同时建立了几个最基本的网络标准(URL, HTML 和 HTTP),和同事在 CERN 内部使用一阵子后在 1991 年发布了出去,万维网就此诞生

"伊利诺伊大学香槟分校"的一个小组,在 1993 年做了 Mosaic 浏览器

随着网络越来越大,人工编辑的目录变得不便利,所以开发了搜索引擎。长的最像现代搜索引擎的最早搜素引擎,叫JumpStation,由Jonathon Fletcher于1993年在斯特林大学创建。

它有 3 个部分:第一个是爬虫,一个跟着链接到处跑的软件, 每当看到新链接,就加进自己的列表里;第二个部分是不断扩张的索引, 记录访问过的网页上,出现过哪些词;最后一个部分,是查询索引的搜索算法

网络中立性

简单说网络中立性(“Net Neutrality”)是应该平等对待所有数据包,速度和优先级应该是一样的

节流(Throttled) 意思是故意给更少带宽和更低优先级

四、计算机安全

威胁模型分析

计算机安全,看成是保护系统和数据的:保密性,完整性和可用性

"保密性"是只有有权限的人才能读取计算机系统和数据

"完整性"是只有有权限的人才能使用和修改系统和数据

"可用性"是有权限的人应该随时可以访问系统和数据

为了实现这三个目标,安全专家会从抽象层面想象"敌人"可能是谁,这叫"威胁模型分析"

模型会对攻击者有个大致描述: 能力如何,目标可能是什么,可能用什么手段(This profiles attackers: their capabilities, goals, and probable means of attack)攻击手段又叫"攻击矢量"

通常威胁模型分析里会以能力水平区分,在给定的威胁模型下,安全架构师要,提供解决方案,保持系统安全

身份认证

用 “身份认证”(authentication)让计算机得知使用者是谁

关于身份认证的详细内容:身份认证(暴力破解基础)

Bell-LaPadula 模型

通过"权限"或"访问控制列表"(ACL)来实现限制,其中描述了用户对每个文件,文件夹和程序的访问权限

"读"权限允许用户查看文件内容,"写"权限允许用户修改内容,"执行"权限允许用户运行文件,比如程序

有些组织需要不同层级的权限,以确保保密性,完整性和可用性

假设有三个访问级别:公开,机密,绝密。用户不能"读上", 不能读等级更高的信息;用户不能"写下"

如果用户能读"机密"文件,那么不应该有权限读"绝密"文件,但能访问"机密"和"公开"文件;如果用户等级是"绝密",那么能写入或修改"绝密"文件,但不能修改"机密"或"公共"文件但这样确保了"绝密" 不会意外泄露到"机密"文件或"公共"文件里

这个"不能向上读,不能向下写"的方法叫 Bell-LaPadula 模型,它是为美国国防部"多层安全政策"制定的

“身份验证"和"访问控制"帮助计算机知道"你是谁”,但是仍然无法保证程序或计算机系统的安全

使用"安全内核"或"可信计算基础"(一组尽可能少的操作系统软件)安全性都是接近可验证的

五、加密

密码学(cryptography) 一词来自 crypto 和 graphy,大致翻译成"秘密写作"

为了加密信息,要用加密算法(Cipher) 把明文转为密文,把明文转成密文叫"加密"(encryption),把密文恢复回明文叫"解密"(decryption)

有一大类算法叫"替换加密",凯撒密码是其中一种。算法把每个字母替换成其他字母,但有个巨大的缺点是,字母的出现频率是一样的

另一类加密算法叫 “移位加密”

Enigma

到了1900年代,人们用密码学做了加密机器

其中最有名的是德国的英格玛(Enigma),纳粹在战时用英格玛加密通讯信息

Enigma 是一台像打字机的机器,有键盘和灯板,两者都有完整的字母表。而且它有一系列"转子"(rotros) ,是加密的关键,一个转子它一面有26个接触点,代表26个字母

英格玛(Enigma)更复杂一些,因为它有3个或更多转子,一个转子的输出作为下一个转子的输入。 转子还有26个起始位置,还可以按不同顺序放入转子,提供更多字母替换映射

转子之后是一个叫"反射器"的特殊电路,它每个引脚会连到另一个引脚,并把信号发回给转子。机器前方有一个插板,可以把输入键盘的字母预先进行替换,又加了一层复杂度

加密和解密的步骤是一样的,只需要确保 发送机和接收机的初始配置一样就行。 字母加密后一定会变成另一个字母,之后这成为最大的弱点

最后,为了让英格玛不只是简单的"替换加密",每输入一个字母,转子会转一格,映射会随着每次按键而改变

艾伦·图灵和同事破解了英格玛加密,并把大部分破解流程做成了自动化

DES和AES

随着计算机出现,加密从硬件转往软件,早期加密算法中,应用最广泛的是 IBM 和 NSA 于1977年开发的"数据加密标准"

DES最初用的是56 bit长度的二进制密钥,意味着有2的56次方,或大约72千万亿个不同密钥

1999年,一台25万美元的计算机能在两天内把 DES 的所有可能密钥都试一遍,让 DES 算法不再安全,因此 2001 年出了:高级加密标准(AES)

AES 用更长的密钥 128位/192位/256位,让暴力破解更加困难

AES将数据切成一块一块,每块16个字节,\N 然后用密钥进行一系列替换加密和移位加密,再加上一些其他操作,进一步加密信息,AES 在性能和安全性间取得平衡

如今AES被广泛使用,比如iPhone上加密文件,用 WPA2 协议在 WiFi 中访问 HTTPS 网站

密钥交换

密钥交换是一种不发送密钥,但依然让两台计算机在密钥上达成共识的算法,可以用"单向函数"来做

单项函数是一种数学操作,很容易算出结果,但想从结果逆向推算出输入非常困难

Diffie-Hellman

在 Diffie-Hellman 中,单向函数是模幂运算,先做幂运算,拿一个数字当底数,拿一个数字当指数,比如 A然后除以第三个数字,最后拿到余数

如果只给余数和基数。很难得知指数是多少,如果把数字变长一些,比如几百位长,想找到秘密指数是多少,几乎是不可能的

Diffie-Hellman 用模幂运算,算出双方共享的密钥:

首先,我们有公开的值 - 基数和模数,为了安全向 John 发信息,选一个秘密指数:X,然后算 B^X mod M 的结果,把这个大数字发给 John

John 也一样做,选一个秘密指数Y,然后把 B^Y mod M 的结果发我,为了算出双方共用的密钥,我把 John 给我的数,用我的秘密指数 X,进行模幂运算,数学上相等于 B的XY次方模M,John也一样做,拿我给他的数 进行模幂运算,最终得到一样的数

双方有一样的密钥,即使我们从来没给对方发过各自的秘密指数,可以用这个大数字当密钥,用 AES 之类的加密技术来加密通信

“Diffie-Hellman 密钥交换"是建立共享密钥的一种方法。双方用一样的密钥加密和解密消息,这叫"对称加密", 因为密钥一样,凯撒加密,英格玛,AES 都是"对称加密”

非对称加密

"非对称加密",有两个不同的密钥,一个是公开的,另一个是私有的

人们用公钥加密消息只有有私钥的人能解密,知道公钥只能加密但不能解密,公钥加密后只能私钥来解密(私钥加密后用公钥解密)

这种做法用于签名,服务器可以用私钥加密,任何人都可以用服务器的公钥解密。这能证明数据来自正确的服务器或个人,而不是某个假冒者

目前最流行的"非对称加密"技术是 RSA,名字来自发明者: Rivest, Shamir, Adleman.

验证服务器的密钥,然后建立临时密钥,然后用对称加密保证通信安全

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值