4.计算机网络科普
教程地址 P28-P30
计算机网络
以太网最简单的形式是:一条以太网电线连接数台计算机,但是会造成一个问题:每台电脑获得的数据都是一样的,怎么区分哪些数据是给哪些电脑的呢?
解决方案是mac地址
以太网需要每台计算机有一个唯一的媒体访问控制地址简称为mac地址,这个唯一的地址放在头部,作为数据的前缀发送到网络中,
所以,计算机只需要监听以太网电缆,只有看到自己的mac地址,才去处理数据。
多台电脑共享一个传输媒介,这种方法叫做“载波侦听多路访问”--CSMA,运输数据的共享媒介叫做载体,以太网的载体是铜线,WiFi的载体是传播无线电波的空气。
很多计算机同时侦听载体所以名为侦听和多路访问,而载体传输数据的速度叫做宽带
使用共享载体有一个很大的毛病
当网络流量小的时候,计算机可以等待载体清空,然后传输数据,但是随着网络流量的上升,两台计算机想要同时写入数据的概率也会提升,这就叫冲突
--解决方案:指数退避--如果检测到有冲突就开始等待载体清空,第一次等待1s,1s后发现还有冲突就等待2s,4s......
但是这种方法显然不是最终解决方案,为了提高效率我们需要减少同一载体中设备的数量,载体和其中的设备总称为冲突域,图示的六台电脑称为一个冲突域
使用交换机可以把一个冲突域拆分成两个冲突域,交换机位于两个更小的网络之间,必要时踩在两个网络间传输数据,交换机会记录一个列表,写着哪个mac地址在哪边的网络
一些大型网络有趣的地方在于,从一个地点到另一个地点通常有多条路线,这就带出了另一个话题路由:消息如何从一边传输到另一边
连接两台相隔遥远的计算机或者网络,最简单的方法局势分配一条专用的通信线路(军队,国家安全) 另一个方案是报文交换,类似于邮政系统
需要传输的两台计算机的消息会经过多个站点而不是直接从a到达b,在从a到b的过程中间可能经过了c,d,e这些站点,这就很好的解决了有些线路空闲,有些线路忙碌的问题,提高了效率
总结一下报文交换的好处:可以用不同的路由使得通信更加可靠更能容错,消息沿着路由跳转的次数叫做"跳数"
记录跳数是非常有用的,因为可以解决路由问题--假设a点认为去c点最快的路径是经过b,但是b点认为去c点最快的路径是通过a,这样的话报文永远在ab两点之间传输而到不了c点
这样的问题会被检测到,因为跳数记录在消息中,而且传输的时候会更新跳数,如果看到某条消息的跳数异常的高,那么就知道这里产生了路由问题,这就叫跳数限制
报文交换的缺点:报文比较大的时候,会堵塞网络,因为需要把整个报文从一站传输到下一站后才能继续传递报文,传输一个大文件的时候,整条路都堵塞了,
即便你只有一个1kb的右键需要传输也只能等待大文件传输完成或者选择另一条效率稍低的路线,解决办法是把大报文分成很多小块,叫数据包
就像报文交换一样,每个数据包都有目标地址,因此路由器知道发到哪里,报文的具体格式由互联网协议定义简称为IP
每台电脑都有唯一的ip地址 例如谷歌的一个服务器的ip地址是 172.217.7.238
数百万台计算机在网络上不断交换数据,瓶颈的出现和消失是毫秒级的,路由器会平衡与其他路由器之间的负载,来确保传输可以快速可靠,这叫阻塞控制
有时候,同一个报文的多个数据包会经过不同的路线,到达的顺序可能会不一样,IP之上还有其他的协议,TCP/IP可以解决乱序问题
将数据拆分成多个小数据包,然后通过灵活的路由传递,非常高效并且可容错,这叫分组交换
互联网
互联网是一个巨型分布式网络,会把数据拆成一个个数据包来传输,如果数据很大会被拆分成多个小数据包。
IP是一个非常底层的协议,数据包的头部只有目标地址,头部存"关于数据的数据"也叫做元数据,这就意味着当数据包到达对方电脑,对方不知道把包交给哪个程序
因此需要在ip之上,开发更为高级的协议,最简单最常见的叫做用户数据报协议,也叫UDP
UDP也有一个头部,这个头部位于数据的前面,里面包含端口号,每个想访问网络的程序都要向操作系统申请一个端口号,通过这个端口号就知道给哪个程序了
总结:IP负责把数据包送到正确的计算机,UDP负责把数据包送到正确的程序
除此之外UDP头部里还有”校验和“,用于检查数据是否正确,正如它的名字是通过把数据求和来对比数据是否正确
如果发现校验和和之前传过来的不一致怎么办?UDP并不提供数据的修复或者数据重发机制,接收方知道数据损坏之后,一般只是扔掉,并且UDP不知道数据包是否到达
一些程序不在意这些:比如视频通话,直播(即使包丢失了也就是卡一下而已)
一些程序在意这些:比如邮件(因为邮件不能缺失任何一个部分)
这就引出了另一个协议:所有数据必须到达的传输控制协议,TCP,因为其头部是存在数据前面也称TCP/IP
和UDP一样TCP也有端口号和校验和但是也有一些更高级的功能:
1.TCP数据包有序号,序号使接收方可以把数据包排成正确的顺序,即使到达的时间不同
2.TCP要求接收方的电脑接受到数据包,并且校验和检查无误后给对方发送一个确认码表示自己收到了,确认码简称ACK。得知上一个数据包成功抵达之后,发送方会发下一个数据包
这不是三次握手(是数据传输,三次握手是TCP建立连接),如果没有收到确认码的话发送方就会重复第一次操作
可以同时发送多个数据包,收到多个确认码,不用浪费时间等待确认码,确认码的成功率和来回时间可以推测网络的拥堵程度,TCP使用了这个信息,调整同时发包数量,解决了拥堵问题
3.TCP最大的缺点是 确认码数据包把数量翻倍了,并且也没有传输更多的信息,这些代价有时候是不值得的
当计算机访问一个网站的时候需要两个东西:IP地址,端口号,一长串IP数字地址很让人讨厌,互联网有个特殊服务负责把域名(www.baidu.com)和IP地址一一对应,叫域名系统简称DNS
在浏览器输入baidu.com,浏览器会去访问DNS服务器,它的IP地址是多少,如果没有此IP就会返回DNS错误
DNS不是存成一个超级长的列表而是存成树状结构
线路里的电信号以及无线网络里的无线信号这些叫物理层
数据链路层负责操作物理层,数据链路层有:媒体访问控制地址(MAC),碰撞检测,指数退避,以及其他的一些底层协议
再往上一层是网络层,负责各种报文的交换和路由,而刚刚所说的UDP和TCP是属于传输层里的协议
传输层负责在计算机之间进行点到点的传输,而且还会检测和修复错误
会话层会使用TCP和UDP来创建连接,传递信息,然后关掉连接,这一整套称为会话(Session),在查询DNS或者看网页的时候就会发生这一套流程
表示层和应用程序层:其中有浏览器,HTML解码,Skype,在线看电影等----联系到下一个章节万维网
万维网
万维网的最基本单位是单个页面,页面中有内容,也有去往其他页面的超链接
由超链接形成的巨大互联网络就叫做万维网
为了使网页能互相连接,每个网页需要一个唯一的地址,这个地址叫做统一资源定位器URL
之前说过我们可以通过域名来获得ip地址,有了ip地址以后浏览器会打开一个TCP连接到这个IP地址,
这个IP地址运行着网络服务器,网络服务器的标准端口是80端口,到这个时候你的计算机才算是连接到了该ip地址的服务器
下一步是向服务器请求页面,这里就会用到超文本传输协议HTTP
最开始的HTTP只有一个指令GET,当我们想要girl这个页面的时候,向服务器发送GET/girl,该指令会以ASCII编码发送到服务器
服务器会返回该地址对于的网页然后通过浏览器渲染到屏幕上。
在后续版本中HTTP添加了状态码,状态码放在请求的前面例如200代表ok,404代表网页不存在
超文本的储存和发送都是以普通文本的形式,因为如果只有纯文本的话无法表面什么是链接什么不是
所以超文本标记语言诞生了(HTML)