互联网能做什么

到现在为止,我们还没有具体介绍互联网能够做什么。但是在这之前,我们还需要介绍几个概念。

几个概念

内容分发网络

内容分发网络,即“Content Distribution Network”,简称“CDN”。对于一些经常被大量用户访问的内容,使用单一服务器,纵使提高带宽和增大计算机的运算速度,也是不足以提供服务的。这时,发布者就可以将内容分布在多个服务器上,这就相当于原始的服务器拥有了很多个分身,可以同时服务的用户数量就提升了很多。

对于用户,算法会分配对于用户方来说最快的一个“分身”进行访问。

不过,如果发布者对内容进行了修改,不同于直接访问主服务器,由于用户访问的是“分身”,而这些“分身”需要一定的时间才能完成信息的更新,因此会出现用户访问到过时信息的情况。

一般情况下,上述的“分身术”适用于用户只读(或者读取远大于写入)的情景。如果不同用户同时还需要对内容进行修改,则不同用户之间的数据同步将会成为一个问题。

P2P

P2P,即 Peer-to-Peer 的缩写,直译为“点对点”。不同于之前的“服务器-客户端”模型,“点对点”意味着计算机直接将数据或者资源共享给另外一台计算机。因此,一台计算机可能要同时访问多台计算机。

这种去中心化的方式,使得整个 P2P 网络中某一台或若干台计算机的丢失,不会影响到整个网络的运行。内容在每台计算机上都存有一份副本。这也使得要从整个网络中完全移除某个内容变得困难。

比如,发布者可以轻易从公告栏上撤下公告,而并不能阻止听众之间传播的流言。

BitTorrent

BitTorrent,简称 BT,是一种使用 P2P 方式进行文件传输的协议。BitTorrent 协议使得文件能够在互联网上以一种去中心化的方式传输。由于每一台计算机都同时作为服务器和客户端,即使数据源能够提供的带宽很小,文件也可以非常快速的形式分发:

  • 文件被分割成若干块;
  • 每台计算机会将自己接收到的块传输给其他计算机;

可见,这些处在网络中的计算机充当了分发内容的服务器,因此极大的增大了数据传输的带宽,即充分利用了网络的上行和下行带宽,将自己的上行带宽转化为别人的下行带宽,而不是仅仅依靠服务器的上行带宽。同时下载文件的设备越多,意味着每台设备下载的速度就越快。

具体来说,对于某一局域网内的设备,某台设备从外部接收到一块文件后,可以迅速地分享给其他设备;局域网中的每台设备都可以这样做,那么,假设所有计算机同时下载一份文件,一台计算机下载完成,意味着所有的计算机都能够几乎同时下载完成。

当然,不是所有的计算机都会同时下载一份文件。因此,需要有一些拥有完整文件拷贝的机器处于网络上,为其他设备提供服务,称为“做种”。除了内容发布者,也有许多热心用户会参与到这项工作来。只要网络上有人在提供这份文件,这份文件就可以说一直“存活”在网络上,没有人可以决定它的存在或消失。

关于如何确定到用户需要的是哪一个文件,需要通过一种“哈希散列”的算法,这个算法可以从一个文件得到一串定长的数码,称作哈希值,相同文件经过同一算法(哈希函数)会得到同样的哈希值。可以想象,一定存在两个文件可以得到同样的哈希值。不过,只要哈希值足够长,就能提供足够多的位置以供原象映射;只要哈希算法足够优秀(也就是能尽可能地将不同的原象“散列”在不同的哈希值上),我们就可以保证能够通过一个哈希值唯一确定一个文件。

不过,由于 BitTorrent 的特性,每个用户在下载时也在上传,使用该协议传输受到版权保护的内容是违法的,一般,这些内容会明确表示不允许用户进行“再分发(re-distribute)”。

但另一方面,也有相应的协议和许可来规定和保障用户创作内容的所有权、专利权等权益,以及其他用户使用和再分发的权利。这会在之后进行介绍。

电子邮件

类似于现实生活中的邮件投递系统,用户也可以在互联网上发送信息和文件,这种方式是电子邮件(e-mail 或 email)。一般,有专门的服务器负责接收和发送用户的邮件。即使用户不在线上,其他用户也可以向其发送邮件。用户只需要在需要时查看自己的“电子邮箱”是否有新的邮件即可。用户也可以使用电子邮件应用程序,实现自动化的查询。

用户可以自己在服务器上运行程序实现电子邮件服务。也可以使用现有其他网站提供的电子邮件服务,这需要用户在网站上进行注册(下面介绍)。

电子邮件存在一定的延时,且一般需要用户手动查询。一般,用户会使用电子邮件传输较长的文本和较大的附件,且文本一般会遵循现实社会的行文规范,如同真实的邮件一样。

即时通讯

为了更及时的和用户进行交谈,需要使用一种叫做即时通讯(Instant Messaging)的技术。使用即使通讯需要参与的用户与服务器维持一个长久的链接,用来接收随时可能到来的信息。不过,维持这样的链接比较消耗资源,当多个程序都维持这样的链接则影响更为显著。在移动设备出现之后,“统一推送”的概念变得流行起来。

专营某业务的网站

不过,搜索引擎能查找和处理信息的能力依旧有限,有些个人的网站也可能永远不会被访问,因此出现了专门运营某一类业务的网站。想要发布信息的用户,可以在该网站上发布信息,其他用户只需要访问该网站,就可以获得到相关的信息。于是,就出现了多种类型的网站。

可见,为了使得用户能够上传信息,并且为其他用户所查看,网站不仅仅是提供信息给用户,也要能够接收并存储用户信息,因此需要服务器端具有相应的支持。

在网站上注册账号

用户发布信息的过程可以是匿名的,也可以是署名的。不过,为了方便用户之间能够更好地交流,网站的用户往往需要一个身份,这可以通过在网站注册(Sign up)而得到。而用户在“登入(Sign in 或 Log in)”网站后,便可以对应的身份进行社交——即信息的发布和阅读。

注册往往需要用户提供一个用户名(Username),用来唯一确定用户身份,类似于现实世界中的身份证号,不过更容易记忆;有的网站也会采用用户的联系方式来作为确定用户身份所使用的凭据,比如用户的电子邮箱或者电话号码;也有些网站会采用两者结合的方式。

使用联系方式确定用户的好处是,用户即使忘记自己的用户名,也能通过邮箱找回自己的用户名;当用户忘记了对应的密码,网站也能确定是否是用户本人在寻回自己的密码,而不是其他人尝试盗用用户的身份。

由于用户名一般用来唯一确定用户,网站有一定可能不允许用户在后续修改。因此网站可能还会提供一个用户可以修改的“用户名”的方式,使得用户可以在一定程度上更换自己的身份。

事实上,有些网站可能会使用不同的名字称呼上述的若干概念。比如,使用用户联系方式为唯一确定用户的凭据的网站,可能会用“用户名”来形容上述“昵称”的概念,而为用户分配一串数码 ID,称为用户 ID,方便网站对于用户数据统计的需要(相对于联系方式,ID 具有统一的格式)。

相对于(移动)电话,用户对于电子邮箱的掌控较弱,比如容易被盗取;另一方面,一个用户可能拥有多个电子邮箱。因此,网站或者网站监管方为了更好的关联用户的网络身份和真实身份,会强制要求用户使用电话号码进行注册。

下面提供若干关于选择用户名的建议。主要的目标有三个,好听,好记,便于输入(因为可能会经常用到)。

  • 英文名,如 Jason、Sarah 等,但是很可能会出现重名的问题。可以通过在末尾加数字,如 henry23、jason-79 等。为了输入方便,根据情况可以使用全小写,以及省去表示间隔的下划线或连字符;
  • 发音转写,用户可以使用自己母语或惯用语言中词汇的发音转写为用户名;如果用户使用的语言音节较长,也可使用辅音缩写;
  • 物名,类似英文名,可以是动植物、物品等,如 apple62 等;
  • 组合名之前的外语名和物名都可以和形容词组合,比如 happy-buffalo、CrazyDave。也可以是自造词,如 octocat(octopus 和 cat)。

社交网站中的概念

为了使用户能够更容易获取到希望关注的信息,网站通常会存在一下概念:

  • 档案(profile):用户选择展示给其他用户的信息
  • 喜欢/赞(Like):用户在该网站上看到了觉得有意思的内容,可以“赞”这个内容;
  • 转发(forword):用户可以将看到的内容转发到自己的动态
  • 订阅/关注(subscribe):用户觉得某位用户发布的内容都比较有意思,可以“关注”或者“订阅”这位用户。当一位用户出现新动态时(比如发布新内容),网站会将这些信息推送(push)给这名用户的关注者。这样,关注者便可以及时、优先地获得到内容发布者最新的动态。
  • 收藏(star):用户可以将网站上的内容添加进自己的“收藏夹”。这个“收藏夹”中的数据通常由网站方记录。
  • 动态:用户在网站上的活动,如发布内容、评论、收藏
  • 时间轴(timeline):将用户的动态按照时间顺序排列,显示在页面上
  • 私信(message):也称“站内信”,用户可以发送信息给同一网站上的其他用户。

网络上的内容

用户之间进行社交,总要基于一定的内容,可以是文字、照片、图片、视频等等一切可以以计算机存储并通过网络传输的内容。

理论上,用户发布的内容和用户的社交关系属于用户的知识产权,不过,如今的情况是,一些网站对用户的数据有绝对的控制权,即可以决定用户的数据存留,而用户则无法避免自己的信息和数据被删除或恶意使用。本书会在之后的章节介绍相应的概念和对策。

文字

一般,专营文字的网站称为博客(blog)。用户可以发表自己的散文、议论文,甚至可以为文章加入图片。相对的,为了方便日常生活的分享,有一种“微博客(micro-blog)”的网站,这种网站允许用户发表一定数量内的文字,并且可以辅以如图片甚至短视频等较小的附件。

读者需要留意的是,网络上数据的传输是有成本的,即,网站的运营和使用者都需要向 ISP 付费。另外,在互联网的初期,网络的带宽非常有限,基本只能传输基础的文本和矢量图形。此外,受限于服务器的限制,并不是所有网站都支持用户上传大附件,有些网站(在建立初期)只能让用户将附件以外部链接的形式给出,即用户需要事先将内容上传(托管)在另外的平台上。

图片

有专门针对图片的分享网站,也就是用户分享的内容主要为图片,比如风景、创意设计、插画等。

视频

我们知道,视频占用的数据量是非常大的。最初,用户之间互相传输视频等文件(通过视频社交)只能通过电子邮件或者 BitTorrent 等方式进行。

YouTube 这样一个视频网站由其创始人想到,并且(在收购后)成功做到为用户提供流畅迅速的视频社交体验,并一举称为世界上最大的视频平台。

参考链接:

代码和软件

同样,代码和软件也可以是用户分享的内容。

综合类

也有的网站会同时提供针对以上几种内容的分享功能。

网络硬盘

之前我们提及过“图床”的概念,也介绍过通过邮件或 BitTorrent 传输文件的方法。而随着网络的发展,用户可使用的带宽逐步提高,有些网站开始提供对于文件的托管服务,用户也可以将托管在平台上的文件以链接的形式分享给多个好友。

使用这种中心化的文件分享形式,分享者以及托管文件的平台对于其他用户查看文件的权限具有较高的控制,也能随时停止文件的分享。此外,为了追踪文件的获取情况,比如,平台可能强制要求用户登录才能下载。

社交软件

此外,有些网站可能在分享之外加入私信功能;从另一个角度来说,我们也可以为即时通讯软件加入社交功能。

在线编程

总的来说,我们可以通过网络连接到远程计算机,操作其进行程序的编写、构建等。不过,对于一般用户来说,更为常用和常见的形式的是一些“在线编程网站”。有些读者可能并未使用桌面计算机,但是现代浏览器的功能十分强大,我们可以使用几乎任何设备进行编程,其中就包括现在的智能手机、平板电脑等移动设备。通过网页,就能实现编写、运行程序,进行计算。

  • ideone.com:在线编译、运行包括 C++、Java、Python 在内的多种语言写成的程序
  • onlinegdb.com:和 ideone 类似
  • pythontutor.com:将 Python、C++、Java 等语言的运行过程可视化

进阶用户可以租用“云主机”,即自己专属的远程电脑,并在其上布置开发环境,就能获得更完备的体验。

版权流媒体

我们将在网络上在线传输和观看的音视频称作流媒体。

曾经,歌曲和音乐是以实体唱片的形式发行的,电影、电视剧是以录像带和光盘传输的。但是,得益于数字化技术和互联网,用户可以在网络上传输这些数据。

最初,传统出版商十分抵触数字制品,因为数字产品很容易被复制和盗取。不过其很快发现,互联网带来的利远大于弊,便很快加入了互联网的浪潮。

当然,出版商对于数字产品的加密和保护也从未停止。不过也有一些开发者选择相反的道路,通过提升质量来使用户自愿付费,或者全靠用户的捐赠来实现盈利,其实也不失为一种优秀的方式。

App 和移动设备的兴起

当然,早期的互联网并不是使用现在的这些工具实现“动态”页面。常见的工具为 Adobe 公司开发的 Flash 程序。开发者可以 Flash 程序并嵌入在页面内,向用户提供动态内容。另外,编程语言 Java 曾经也被用来实现动态网页。不过,这些工具被时代所淘汰了。

在当时,由于时代发展的需要,移动设备有着非常广泛的使用场景(如今也是),但是由于科技条件的限制,这些移动设备的电源、存储和运算能力相较桌面计算机(desktop)来说十分孱弱,这些工具对于它们来说,往往过于耗费资源。另一方面,这些工具也时常发生严重的安全问题。

当 Apple 推出划时代的智能手机时,其提出 App 的概念。开发者通过开发原生 App 来使得自己的用户可以访问自己的服务。原生 App 更为安全和节省资源。

App 概念的出现某种程度上加重了互联网的割据。比如,为了吸引用户、获得收入,网站需要用户在自己的应用之中查看内容,URL 的概念被弃之不顾。跨应用之间的分享也变得不那么容易,应用程序可能不能为用户提供可供分享的链接。这也就形成了我们所说的“信息孤岛”。

App 还使应用程序提供商为用户推送信息变得方便。移动设备操作系统的开发商可以提供一个统一的接口供开发者发送通知,这样会消耗更少的资源。

推送功能可以方便用户及时获得到重要信息,但是也可以是应用程序展示广告的好工具。

当然,随着设备和网络技术的发展,比如 HTML5 的应用、移动设备算力和能耗比的提高,使得网页渐进式应用(PWA)也渐渐有了起色。