150年前,写信从伦敦 —> 加州 需要两周,现在email只需要一秒。
在1970以前,大部分的计算机都是独立运行的
第一个计算机网络出现在1950 ~ 60 年代,用于Lab之间传输信息,
用网络传输比用用纸卡磁带要稳定快速的多,这种网路被称为 sneakernet
通过网络共享打印机,存储器等。
计算机近距离构成的小型网络叫局域网 LAN
1 ~ 上千台 计算机
尽管开发了很多的LAN版本,最出名的还是1970年的 以太网Ethernet
一条网络连接数台计算机,发送数据的时候,全网都可以接收到。
为了解决数据的目的计算机,必须给每一个计算机唯一ID,这便是Media Access Control address MAC地址
mac地址放在数据头部,作为前缀发送到网络中。
多台计算机共享一个传输媒介,这种方法叫做载波侦听多路访问CarrierSenseMultipleAccess CSMA
carrier:传输数据的共享媒介,以太网的媒介是铜线,Wi-Fi的媒介是无线电
媒介传输数据的速度叫带宽 Bandwidth
使用共享载体有个很大的弊端:网络流量小的时候,计算机可以等待网络清空,然后再传输数据,但是当流量上升 两台计算机同时写入数据到网络的概率上升,这叫做冲突collision
最简单的解决冲突:再次发送,还有可能再次冲突。
所以需要每个计算机都有一个 等几秒 再次发送数据的机制
1s + 一个随机的时间 : 1.3s 1.5s
当出现网络大量阻塞时,还需要机制来解决:
当等待1s + 随机 后发送再次冲突,再次等待2s + 随机…4s 8s…
这种指数型增长等待时间的方法:指数避难Exponential Backoff
有了指数避难,当是出现在同一个网路中太多设备,也是运行不了的。
需要减少同一网络中的设备数量,网络&设备总称 冲突域collision domain
为了减少冲突,可以分成两个冲突域,用到 交换机Switch
switch会记录一个list:哪个mac地址会在哪边的网络
最大的互联网也是这么设计的,说白了就是很多很多个小的网路链接到一起。
出现了新的问题,从一个计算机到另一个计算机 ,有很多条路线可以走,路由Routing
连接两台相隔远的计算机,最简单的方法:建立专线(专用的通信线路),这种方式称为电路交换 Circuit Switching
经济的方法是用 报文交换 Message Switching
有点像post 邮件 系统,优点:可以使用不同的路由,稳定高
信息沿着路由跳转的次数:跳数 hop count
记录hop count还可以判断路由是否出问题,hop count 太大,就出问题了hop limit 跳数限制
当100GB的传输把整个路由都沾满了,这是时候需要传输1kb的邮件。
等待就不是一个好方法。
因此设计成小块,叫数据包 packets
就像报文交换,每个数据包都有目标地址。因此路由知道发送到哪里。
报文的具体格式由 互联网传输协议 IP from1970
路由器会平衡于其他路由器之间的负载,确保传输稳定,这种叫做 阻塞控制
多条线路 到达顺序可能不一样
TCP/IP 可以解决乱序到达的问题
去中心,现在网络也是这样的
很多局域网 LAN 连接到一起,就组成了广域网WAN
WAN的路由器一般由 互联网服务提供商ISP电信 联通 提供
上面提到的,数据包packet 想要在网路中发送,必须遵守IP协议。
IP协议的头部,写有目标地址,也叫元数据metadata
但是当一个计算机,有很多程序都需要数据包时,就不知道这个数据包是给哪个程序的,因此需要在IP协议上再次封装
UDP的header中,记录有数据的端口号
每一个程序想要和外界通信,必须向计算机OS申请一个端口号。
UDP 中头信息还有 checksum 校验和,用于检查数据是否正确
就是把数据求和来对比
UDP中的数据为
89 111 33 32 58 41
checksum = 89 + 111 + ... = 364
在UDP中checksum 以 16位形式存储(16个0 1)
,超过16位能表示的最大值,高位数会被扔掉,保留低位
接收数据后,会再次校验,checksum不一致,代表数据错误。
but,UDP不提供数据修复 or 数据重发机制,发现数据错误,就会直接扔掉,而且 UDP也无法得知数据包是否到达。
这些特性虽然很糟糕,但是速度上肯定是快的,有些程序更需要的是速度
如果发送email,显然需要稳定的网络环境,就需要用到Transmission Contral Protocol 传输控制协议 TCP
和UDP一样,TCP的头信息也存储在前面,这个组合称为TCP/IP
TCP头部也有checksum port,还有更高级的功能:
www.google.com = 172.217.7.238:80
DNS服务 Domain Name System 域名系统
如今有三千万余名,为了更好的管理,DNS不是存成一个超长的list,而是通过tree的方式
物理层
线路电信号,WiFi中的无线信号
数据链路层
负责控制物理层,有MAC地址 碰撞检测 指数避难 等一些低层协议
网络层
报文交换 & 路由 IP
传输层
TCP UDP , 检测修复错误
会话层
会话层用TCP UDP 来创建连接,传递信息,关掉连接
www 是在互联网internet之上运行的
互联网internet是传递数据的管道,各种程序都会用
其中传输最多数据的就是万维网www,
万维网分布在全球百万个服务器中,可以用浏览器访问
www 最小单位 : 单个页面。
一个页面中又会有多个超链接
为了使一个网页能够访问,需要一个唯一的地址统一资源定位器UinformResourceLocator URL
当浏览器请求 thecrashcourse.com/about/
1)通过DNS匹配到 thecrashcourse.com
2)访问这个ip : 80 默认80端口,建立TCP
3)向服务器请求“course”这个页面
请求这个course页面就需要用到超文本传输协议HypertextTransferProtocl HTTP
第一个标准:1991 “ HTTP 0.9 ”
只有一个get 命令
在前面添加了状态码 200 代表找到了
如果只哟纯文本,就不知道这个是超链接 也不知道字体…
因此,诞生了 标记方法
Hypertext Markup Language 超文本标记语言
第一个版本 0.8 1990
只有 18 种命令
现在的HTML5 有100+命令