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