用户在全球网络中发送和接收信息的能力。
150年前,发一封信件从伦敦到加州,要花2~3周,并且仍是特快邮件。现在,电子邮件只要几分之一秒,“时延”改善了上百万倍(时延指传播一条信息所须要的时间),帮助现代世界在遍及全球的光纤中快速发展。
可能以为计算机和网络密切相关,但事实上,1970年以前,大多数计算机是独立运行的,然而,由于大型计算机开始随处可见,廉价机器开始出如今书桌上。分享数据和资源渐渐变得有用起来,首个计算机网络就出现了。算法
局域网
第一个计算机网络出如今1950~1960年代,一般在公司或研究室内部使用,为了方便信息交换。比把纸卡或磁带送到另外一栋楼里更快速可靠,这叫“球鞋网络”,第二个好处是能共享物理资源。例如,与其每台电脑配一台打印机,能够共享一台联网的打印机,早期网络也会共享存储空间,由于每台电脑的配存储太贵了。
计算机近距离构成的小型网络,叫局域网,简称LAN。
局域网能小到是同一个房间里的两台机器或大到校园里上千台机器,尽管开发和部署了不少不一样LAN技术,其中最著名和成功的是“以太网”,开发于1970年代,在施乐的“帕洛阿尔托研究中心”诞生,今日仍被普遍使用。segmentfault
媒体访问控制地址
以太网的最简单形式是:一条以太网电线链接数台计算机。当一台计算机要传数据给另外一台计算机时,它以电信号形式,将数据传入电缆,固然,由于电缆是共享的,连在同一个网络里的其它计算机也看获得数据。但不知道数据是它们的,仍是给其余计算机的,为了解决这个问题,以太网须要每台计算机有惟一的媒体访问控制地址,简称 MAC地址。windows
这个惟一的地址放在头部,做为数据的前缀发送到网络中,因此,计算机只须要监听以太网电缆,只有看到本身的MAC地址,才处理数据。这运做的很好,如今制造的每台计算机都自带了惟一的MAC地址,用于以太网和无线网络。浏览器
载波侦听多路访问
多台电脑共享一个传输媒介,这种方法叫“载波侦听多路访问” 简称“CSMA“,载体指运输数据的共享媒介。以太网的“载体”是铜线,WiFi的”载体“是传播无限电波的空气,不少计算机同时侦听载体,因此叫“侦听”和“多路访问”,而载体传输数据的速度 叫“带宽”。服务器
不幸的是,使用共享载体有个很大的弊端,当网络流量较小时,计算机能够等待载体清空,而后传输数据,但随着网络流量上升,两台计算机想同时写入数据的几率也会上升,这叫冲突,数据全都乱套了。就像两我的同时在讲话。
幸运的是计算机可以经过监听电线中的信号检测这些冲突,最明显的解决办法是中止传输,等待网络空闲,而后再试一遍。问题是,其它计算机也打算这样作,其余等着的计算机可能在任何停顿间隙闯入,致使愈来愈多冲突,很快,每一个人都一个接一个的讲话,并且有一堆事要说,以太网有个超简单有效的解决方法,当计算机检测到冲突,就会在重传以前等待一小段时间。网络
固然,若是全部计算机用一样的等待时间,是不行的,它们会在必定时间内再次冲突,因此加入一个随机时间,一台计算机可能等1.3秒,另外一台计算机等待1.5秒,要是运气好,等1.3秒的计算机会醒来,发现载体是空闲的,而后开始传输。当1.5秒的计算机醒来后,会发现载体被占用了,会等待其余计算机完成。这有用,但不能彻底解决问题,因此要用另外一个小技巧。若是一台计算机在传输数据期间检测到冲突。会等一秒+随机时间。(等待空令牌),然而,若是再次发生冲突,代表有网络拥塞,此次不等1秒,而是等2秒。若是再发生冲突,等4秒,而后8秒,16秒等等,直到成功传输。由于计算机的退避,冲突次数下降了,数据再次开始流动起来,网络变得顺畅。(二进制退避算法)框架
指数退避
这种指数级增加等待时间的方法叫:指数退避。以太网和WiFi都用这种方法,不少其它传输协议也用。但即使有了“指数退避”这种技巧,想用一根网线连接整个大学的计算机仍是不可能的,为了减小冲突 + 提高效率,须要减小同一载体中设备的数量,载体和其中的设备总称“冲突域”。分布式
为了减小冲突,能够用交换机把它拆成两个冲突域。交换机位于两个更小的网络之间,必要时才在两个网络间传数据,交换机会记录一个列表,写着哪一个MAC地址在哪边网络。ide
若是A想传C,交换机不会把数据转发给另外一边的网络。
若是E想同一时间传数据给F,网络仍然是空的,两个传输是同时发生的。
(链路层,处理的事情)网站
但若是F想发数据给A,数据就会经过交换机,两个网络都会被短暂占用。
分组主要目的时间减少冲突域的范围,switch是交换机,birdge是网桥
大的计算机网络也是这样构建,包括最大的网络:互联网。也是多个链接在一块儿的稍小一点网络。使不一样网络间能够传递信息。
这些大型网络有趣之处是,从一个地点到另一个地点一般有多条路线,引出路由概念。
链接两台相隔遥远的计算机或网络,最简单的办法,是分配一条专用的通讯线路,早期电话系统就是这样运做的。
电路交换
假设(X,Y)两地之间,有五条电话线,若是在1910年,A 想打电话给B,A要告诉操做员他想打到什么地方,而后工做人员手动将A的电话连到通往Y地的未使用线路,通话期间,这条线路就被占用,若是五条线都被占用了,A要等待某条线空出来。 这叫 “电路交换”,由于是把电路链接到正确目的地。
能用却是能用,但不灵活并且价格昂贵,由于总有闲置的线路。
好处是,若是有一条专属于本身的线路,能够最大限度地随意使用,无需共享。
报文交换
所以军队,银行和其它一些机构,依然会购买专用线路来链接数据中心,传输数据的另外一个方法是“报文交换”,“报文交换”就像邮政系统同样,不像以前X和Y有一条专有线路,消息会通过好几个站点。
若是A想写一封信给B,信件可能从X出发,到其它地点,而后转发最终到Y。每一个站点都知道下一站发哪里,由于站点有表格,记录到各个目的地,信件该怎么传,报文交换的好处是,能够用不一样路由使通讯更可靠更能容错。在这个例子里,城市就像路由器同样,消息沿着路由跳转的次数,叫“跳数(hop count)”记录跳数颇有用,由于能够分辨出路由问题。
例如,假设芝加哥认为去米苏拉的最快路线是奥马哈,但奥马哈认为去米苏拉的最快城市是芝加哥,这就致使,2个城市看到目的地是米苏拉,结果报文会在2个城市之间不停传来传去。不只浪费带宽,并且这个路由错误须要修复。这种错误会被检测到,由于跳数记录在消息中,并且传输时会更新跳数。若是看到某条消息的跳数很高,就知道路由确定哪里错了,这叫“跳数限制”(链路状态协议会用到距离)
报文交换的缺点之一是有时候报文比较大,会阻塞网络,由于要把整个报文从一站传到下一站后才能继续传递其它报文。传输一个大文件时,整条路都阻塞了,即使只有一个1KB的电子邮件要传输,也只能等大文件传完,或是选另外一条效率稍低的路线。 解决方法是 将大报文分红不少小块,叫“数据包”。
就像报文交换,每一个数据包都有目标地址,所以路由器知道发到哪里,报文具体格式由“互联网协议”定义,简称IP,这个标准建立于1970年代。每台联网的计算机都须要知道一个IP地址。以点分割的4组数字。数百万台计算机在网络上不断交换数据,瓶颈的出现和消失是毫秒级的。
路由器会平衡与其余路由器之间的负载,以确保传输能够快速可靠,这叫“阻塞控制”
分组交换
有时,同一个报文的多个数据包,会通过不一样线路,到达顺序可能会不同,这对一些软件是个问题。幸运的是,在IP之上还有其它协议,好比TCP/IP
,以解决乱序问题。将数据拆分红多个小数据包,而后经过灵活的路由传递,很是高效且可容错,现在互联网就是这么运行的。这叫“分组交换”。
有个好处是,它是去中心化的,没有中心权威机构,没有单点失败问题,事实上,由于冷战期间有核攻击的威胁,因此创造了分组交换。
现在,全球的路由器协同工做,找出最高效的线路,用各类标准协议运输数据,好比“因特网控制消息协议(ICMP)”和“边界网关协议(BGP)”世界上第一个分组交换网络,以及现代互联网的祖先是ARPANET
。
每一个小圆表示一个点,好比大学或实验室,那里运行着一个路由器,而且有一台或多台计算机,能看到PDP-1
和IBM 360系统
,甚至还有一个伦敦的ATLAS
是经过卫星连到网络里的。
显然,互联网在这几十年发展迅速,现在再也不只有几十台计算机联网,据估计,有接近100亿台联网设备,并且互联网会继续快速发展。特别是现在各类智能设备层出不穷,好比联网冰箱,恒温器,以及其它智能家电,它们组成了“物联网”。
计算机和一个巨大的分布式网络连在一块儿,这个网络叫互联网。
互联网由无数联网设备组成,并且日益增多,计算机为了获取这个资源,首先要连到局域网,也叫LAN
。
家中WIFI路由器连着的全部设备,组成了局域网,局域网再连到广域网,广域网也叫WAN
。WAN
的路由器通常属于“互联网服务提供商”,简称“ISP”。好比,Comcast
, AT&T
, Verizon
这样的公司。
广域网里,先连到一个区域性路由器,这路由器可能覆盖一个街区,而后连到一个更大的WAN
,可能覆盖整个城市,可能再跳几回,但最终会到达互联网主干。互联网主干由一群超大型,带宽超高路由器组成。
为了从网络上获取视频,数据包(packet)要先到互联网主干,沿着主干到达对应有视频文件的网站服务器中。数据包从计算机到网站服务器,可能要跳个10次,先跳4次到互联网主干,2次穿过主干,主干出来可能再跳4次,而后到网站服务器。
若是用windows,Mac OS或Linux系统,能够用traceroute
来看跳了几回。
数据包究竟是怎么过去的呢?
若是传输时数据包被弄丢了,会发生什么?
若是在浏览器里输入 segmentfault.com,浏览器怎么知道服务器地址是多少?
IP/TCP/UDP
互联网是一个巨型分布式网络,会把数据拆成一个个数据包来传输,若是要发的数据很大,好比邮件附件,数据会被拆成多个小数据包。
例如:,网络上的视频就是一个个到达电脑的数据包,而不是一整个大文件发过来。
数据包(packet)想在互联网上传输要符合“互联网协议”的标准,简称“IP”。
就像邮寄手写信同样,邮寄是有标准的,每封信须要一个地址,并且地址必须是独特的,而且大小和重量是有限制的。
IP数据包也是如此,由于IP是一个很是底层的协议。
数据包的头部只有一个目标地址,头部存“关于数据的数据”也叫元数据(metadata),这意味着当数据包到达对方电脑,对方不知道把包交给哪一个程序,所以须要在IP之上,开发更高级的协议,这些协议里,最简单最多见的叫“用户数据报协议”,UDP
。
UDP
也有头部,这个头部位于数据前面,头部里包含有用的信息。
信息之一是端口号,每一个想访问网络的程序,都要想操做系统申请一个端口号。
当一个数据包到达时(好比是skype端口号3478),接收方的操做系统会读UDP
头部,读里面的端口号。若是看到端口号是3478,就把数据包交给skype。
总结:
IP
负责把数据包送到正确的计算机。UDP
负责把数据包送到正确的程序(端口负责送到正确的程序,由于TCP也有端口)。UDP
头部里还有“校验和”,用户检查数据是否正确。 正如“校验和”这个名字所暗示的检查方式是把数据求和来对比。假设UDP
数据包里原始数据是89, 111, 33, 32, 58, 41。在发送数据包前,电脑会把全部数据加在一块儿,算出“校验和”。
例如,89 + 111 + 333...
,以此推类。获得364,这就是“校验和”。UDP
中,“校验和”以16位形式存储(就是16个0或1),若是算出来的和,超过了16位能表示的最大值高位会被扔掉,保留低位。
当接收方电脑收到这个数据包,它会重复这个步骤,把全部数据加在一块儿,89 + 111 + 333...
以此推类。若是结果和头部的校验和保持一致,表明一切正常。若是不一致,数据确定坏掉了。也许传输时碰到了功率波动,或电缆出故障了。
UDP
不提供数据修复或数据重发机制,接收方知道数据损坏后,通常只是扔掉。并且,UDP
没法得知数据包是否到达。发送方发了以后,没法知道数据包是否到达目的地。
这些特性看起来很糟糕,可是有些程序不在乎这些问题。由于UDP又简单又快。
例如,Skype,它用UDP来作视频通话,能处理坏数据或缺失数据。全部网速慢的时候,Skype卡卡的,由于只有一部分数据包到了电脑中,但对于其它一些数据,这个方法不实用。好比,邮件。
若是“全部数据必须达到”就用“传输控制协议TCP
”。TCP
和UDP
同样,头部也在数据前面,所以,通常叫作TCP/IP
。
就像UDP
,TCP
头部也有“端口号”和“校验和”,但TCP
有更高级的功能。
TCP
数据包有序号。 15号以后是16号,16号以后是17号,以此推类,发上百万个数据包也是有可能的。序号使接收方能够把数据包排成正确顺序,即便到达时间不一样,哪怕到达顺序是乱的,TCP
协议也能把顺序排对。TCP
要求接收方的电脑收到数据包而且“校验和”检查无误后(数据没有损坏)给发送方一个确认码,表明收到了。“确认码”简称ACK
,得知上一个数据包成功抵达后,发送方会发送下一个数据包。若是过了必定时间还没收到确认码,发送方会再发送一次。注意,数据包可能的确到了,只是确认码延误了好久,或传输丢失了。但不碍事,由于收件方有序列号。若是收到重复的数据包就会删掉。TCP
不是只能一个包一个包发,能够同时发送多个数据包,收多个确认码,这大大增长了效率,不用浪费事件等确认码。确认码的成功率和来回时间能够推测网络的拥堵程度,TCP
用这个信息,调整同时发包数量,解决拥堵问题。
简单说,TCP
能够处理乱序和丢失数据包,丢了就重发。还能够根据拥挤状况自动调整传输率。
迅雷是,P2P技术,是创建在TCP
协议之上的。
既然TCP
那么厉害,还有人用UDP
嘛?TCP
最大的缺点是,那些“确认码”数据包把数量翻了一倍,但并无传递更多信息,有时候这种代价是不值得的,特别是对时间要求很高的程序,好比在线射击游戏。若是玩游戏很卡,也会以为这样不值得。
当计算机访问一个网址时,须要二个东西:
有了ip和端口号,就能正确访问网站。但记忆一长串数字很讨厌,因此互联网有个特殊服务,负责把域名和ip地址一一对应。就像专为互联网的电话簿,它叫“域名系统”,简称DNS
。
它的运做原理:
在浏览器输入地址,浏览器会去问DNS
服务器,它的IP地址是多少,通常DNS
服务器是互联网供应商提供的。DNS
会查表,若是域名存在,就返回对应的IP地址。而后浏览器会给这个IP地址发TCP
请求。
现在有三亿个域名注册,因此为了更好管理,DNS
不是存在一个超长超长的列表,而是存成树状结构。顶级域名(简称TLD),在最顶部,好比.com
和.gov
。下一层是二级域名,好比.com
下面有baidu.com
和dftba.com
。更下一层叫子域名,好比image.baidu.com
。这个树超级大。
三亿个域名,只是二级域名,不是全部子域名。所以,这些数据散布在不少DNS
服务器上,不一样服务器负责树不一样部分。
能够进行再次封装。
线路里的电信号,以及无线网络里的无线信号。这些叫“物理层”。
而“数据链路层”负责操控“物理层”,数据链路层有:媒体访问控制地址(MAC),碰撞检测,指针退避,以及一些底层协议。
再上一层是“网络层”,负责各类报文交换和路由。
“传输层”里的一大部分是TCP
和UDP
这些协议,负责在计算机之间进行点到点的传输,并且还会检测修复错误。
“会话层”,会使用TCP
和UDP
来建立链接,传递信息,而后关掉链接。
开放式系统互联通讯参考模型
开放式系统互联通讯参考模型(OSI)的底下5层,这个概念性框架,把网络通讯划分红多层,每一层处理各自的问题,若是不分层,直接从上到下捏在一块儿实现网络通讯,是彻底不可能的。抽象使得科学家和工程师能分工同时改进多个层,不被总体复杂度难倒。
OSI模型还有两层,“表示层”和“应用程序层”。其中有浏览器,Skype,HTML解码,在线看电影等。
互联网是传递数据的管道,各类程序都会用。
电线,信号,交换机,数据包,路由器,协议,它们共同组成了互联网。再抽象一层,就是万维网。
万维网(World Wide Web)和互联网(Internet)不是一回事,万维网在互联网之上运行,互联网之上有Skype,Instagram,互联网是传递数据的管道,各类程序都会用,其中传输最多的数据的程序是万维网。
分布在全球数百万个服务器上,能够用“浏览器”来访问万维网。
超连接
万维网的最基本单位,是单个页面。页面有内容,也有去其它页面的连接,这些连接叫“超连接”。这些超连接造成巨大的互联网络,这就是万维网的名字来源。Vannevar Bush
的形容是“关联式索引..选一个物品会引发,另一个物品被当即选中”,他解释说:“将两样东西联系在一块儿的过程十分重要,在任什么时候候,当其中一件东西进入视线,只须要点一下按钮,立马就能回忆起另外一件。”
为了使网页能相互链接,每一个网页须要一个惟一的地址,这个地址叫“统一资源定位器”,简称URL
计算机首先会作“DNS查找”,“DNS查找”的输入是一个域名,好比“www.google.com”,DNS会输出对应的IP地址,如今有了IP地址,浏览器会打开一个TCP链接到这个IP地址,这个地址运行着“网络服务器”,网络服务器的标准端口是80端口,
下一步是 向服务器请求“courses”这个页面,这里会用“超文本传输协议”(HTTP),HTTP的第一个标准,HTTP 0.9,建立于1991年,只有一个指令,“GET”指令。该指令以“ASCII编码”发送到服务器,服务器会返回该地址对应的网页而后浏览器会渲染到屏幕上。
若是用户点击了另外一个连接,计算机会从新发一个GET请求,浏览网站的时候,这个步骤会不断重复。
在以后的版本,HTTP添加了状态码,状态码放在请求前面。
“超文本”的存储和发送都是以普通文本形式,由于若是只有纯文本,没法代表什么是连接,什么不是连接。因此,有必要开发一种标记方法。由于有了超文本标记语言(HTML)。
HTML初版的版本号0.8,建立于1990年,有18种HTML指令。最新版的HTML,HTML5,有100多种标签。
搜索引擎
网页浏览器和网页服务器沟通,浏览器不只获取网页和媒体,获取后还负责显示。Tim Berners-Lee
在1990年写的,一共花了2个月,为了作出来,同时创建了几个最基本的网络标准,URL,HTML和HTTP,在内部使用了一段时间,在1991年发布出去,万维网就此诞生,重要的是,万维网有开放标准,均可以开发新服务器和新浏览器。
最先的搜索引擎,叫JumpStation
,它有3个部分,
与其信任网页上的内容,搜索引擎会看其余网站,有没有连接到这个网站。因此这些“反向连接”的数量,特别是有信誉的网站,表明了网站的质量。
网络中立性,应该平等对待全部数据包,不管是这个数据包是邮件,或则是在看对视频,速度和优先级应该是同样的。但不少公司会乐意让它们的数据优先到达。例如,Comcast,它们不可是大型互联网服务提供商并且拥有多家电视频道,好比,NBC和The Weather Channel,能够在线看。
Comcast可让本身的内容优先到达,节流(Throttled,故意给更少的宽带和更低优先级)其余线上视频。
支持网络中立性的人说,没有中立性后,服务商能够推出提速的“高级套餐”,给剥削性商业模式埋下种子。互联网服务供应商成为信息的“守门人”,它们有着强烈的冬季去碾压对手。另外一方面,从技术缘由看,也会但愿不一样数据传输速度不一样。