Web 缓存
Web 缓存 (Web cache) 也叫做代理服务器缓存,它是代表 HTTP 服务器来满足用户需求的网络实体。Web 缓存器有自己的磁盘存储空间,并会在存储空间内保存最近请求过的对象,如下图所示

Web 缓存可以在用户的浏览器中进行配置,一旦配置后,用户首先访问的就不是初始服务器了,需要先访问代理服务器判断请求的对象是否存在,如果代理服务器没有,再由代理服务器来请求初始服务器把对象返回给客户,同时在自己的磁盘空间保存对象。
这里需要注意,客户和初始服务器的架构是客户-服务器模式,而代理服务器不仅能当服务器使用,也可以当作客户端使用。
代理服务器一般由ISP (Internet Service Provider),提供。ISP 也就是我们常说的运营商。
那么为什么需要代理服务器的存在呢?相信你看完上面的描述应该能大致猜到它的作用。
-
首先代理服务器可以大大减少对客户请求的响应时间,能够更快给用户响应。
-
其次代理服务器可以减少一个机构接入链路到网络的通信量,降低网络带宽,降低运营商成本。
-
然后代理服务器可以分担初始服务器的压力,改善应用程序的性能。
DASH
现在我们知道了 HTTP 是可以传输普通文件、音频、视频的,这些传输的信息统称为 MIME 类型。HTTP 在传输视频的过程中,也会把视频当做一个对象,而一个对象其实就是一个文件,一个文件都在 HTTP 中都可以用 URL 来表示。当用户在看视频时,客户与服务器建立一个 TCP 连接并发送对该 URL 的 GET 请求,然后服务器响应给客户端时,客户端会缓存一定量的字节数据,当数据超过预先设定的门限时,客户应用程序就开始播放视频。
这种方式有一种局限性就是对每个客户端来说,尽管每个客户端可用的带宽量不同,但所有客户端都收到相同的视频编码。这就造成带宽浪费。这就相当我是一个 2M 的网络和 50M 的光纤都能收到相同的视频编码,以几乎相同的等待时间开始播放视频,那么我为什么还要花 50 兆光纤的钱呢?
为了改善这一现象,出现了 HTTP 的 DASH 动态适应流。它的理念是针对不同流量的网络来说,所能够传输的比特数据也不相同。DASH 允许客户使用不同的因特网传输速率可以播放不同编码速率的视频。对于 3G 用户和光纤用户自然会选择以不同的速率传输比特数据,从而最大限度的使用带宽。
CDN
随着互联网的接入用户变得越来越多,视频逐渐成为了比特传输的瓶颈和用户的强烈需求。作为一个因特网视频公司,最一开始提供流式服务最直接的方式是建立单一的大规模数据中心。在数据中心内缓存所有视频,并直接从数据中心向世界范围内传播视频。但是这种方式存在三种问题
-
如果客户远离数据中心,那么服务器到客户分组会跨越许多通信链路并且可能通过许多 ISP,这样你的视频播放能快到哪去?
-
每次视频数据都会重新传递给客户端,这样会严重浪费网络带宽,而且视频公司会支付重复的带宽费用
-
单点故障问题,只要视频数据中心宕机或者其他事故,直接导致全球范围内的视频无法播放。
为了应对能够向全世界的用户 24 小时不间断的分发视频,几乎所有的主流视频公司都会使用内容分发网。CDN 管理分布在多个地理位置上的服务器,在每个服务器上缓存各种视频、音频、文件等。
CDN 内容选择策略
CDN 管理分布在多个地理位置上的服务器,在它的服务器上存储视频副本,并且所有试图将每个用户请求定向到一个提供最好用户体验的 CDN 位置。那么服务器如何选址呢?事实上有两种服务器安置原则:
-
深入:它的主要目标是靠近用户,通过减少端用户和 CDN 集群之间链路和路由器的数量,从而改善了用户感受的时延和吞吐量。
-
邀请做客:这个原则是通过在少量(例如 10 个)关键位置建造大集群来邀请 ISP 来做客,与深入设计原则相比,邀请做客设计通常产生较低的维护和管理开销。
CDN 工作流程
CDN 可以是专用 CDN,即它由内容提供商自己所拥有;另一种 CDN 是 第三方 CDN,它代表多个内容提供商分发内容。下面我们来聊一下 CDN 工作流程,如下图所示:

-
用户想要访问指定网站的内容。
-
用户首先发起对本地 DNS,LDNS 的查询,LDNS 会将请求中继到网站 DNS 服务器,网站的 DNS 服务器会返回给 LDNS 一个网站 CDN 权威服务器的地址。
-
LDNS 服务器会发送第二个请求给网站 CDN 权威服务器,希望获取网站内容分发服务器的地址,网站 CDN 会把 CDN 内容分发服务器的地址发送给本地 DNS 服务器。
-
本地 DNS 服务器会把网站 CDN 内容分发服务器的地址发送给用户。
-
用户知道网站 CDN 内容分发服务器的地址后,无需额外操作,直接和网站 CDN 内容分发服务器建立 TCP 连接,并且发出 HTTP GET 请求,如果使用了 DASH 流,会根据不同 URL 的版本选择不同速率的块发送给用户。
CDN 集群选择策略
任何 CDN 的部署,其核心是集群选择策略 (cluster selection strategy) ,即动态的将客户定向到 CDN 中某个服务器集群或数据中心的机制。一种简单的策略是指派客户到地理上最为临近 (geographically closest) 的集群。这种选择策略忽略了时延和可用带宽随因特网路径时间而变化,总是为特定的客户指派相同的集群;还有一种选择策略是实时测量 (real-time measurement) 。该机制是基于集群和客户之间的时延和丢包性能执行周期性检查。
DNS 域名解析协议
试想一个问题,我们人类可以有多少种识别自己的方式?可以通过身份证来识别,可以通过社保卡号来识别,也可以通过驾驶证来识别,尽管我们有多种识别方式,但在特定的环境下,某种识别方法可能比另一种方法更为适合。因特网上的主机和人类一样,可以使用多种识别方式进行标识。互联网上主机的一种标识方法是使用它的主机名,如 www.facebook.com、 www.google.com 等。但是这是我们人类的记忆方式,路由器不会这么理解,路由器喜欢定长的、有层次结构的 IP 地址,还记得什么是 IP 地址吗?
IP 地址现在简单表述一下,就是一个由 4 字节组成,并有着严格的层次结构。例如 121.7.106.83 这样一个 IP 地址,其中的每个字节都可以用 . 进行分割,表示了 0 - 255 的十进制数字。
然而,路由器喜欢的是 IP 地址进行解析,我们人类却便于记忆的是网址,那么路由器如何把 IP 地址解析为我们熟悉的网址地址呢?这时候就需要 DNS 出现了。

DNS 是一个由分层的 DNS 服务器 (DNS server) 实现的分布式数据库;它还是一个使得主机能够查询分布式数据库的应用层协议。DNS 服务器通常是运行 BIND (Berkeley Internet Name Domain) 软件的 UNIX 机器。DNS 协议运行在 UDP 上,使用 53 端口。
P2P 文件分发
我们上面探讨的协议 HTTP、SMTP、DNS 都采用了客户-服务器模式,这种模式会极大依赖总是打开的基础设施服务器。而 P2P 是客户端与客户端模式,对总是打开的基础设施服务器有最小的依赖。
P2P 的全称是 Peer-to-peer, P2P,是一种分布式体系结构的计算机网络。在 P2P 体系中,所有的计算机和设备都被称为对等体,他们互相交换工作。对等网络中的每个对等方都等于其他对等方。网络中没有特权对等体,也没有主管理员设备。

从某种意义上说,对等网络是计算机世界中最平等的网络。每个对等方都相等,并且每个对等方具有与其他对等方相同的权利和义务。对等体同时是客户端和服务器。
实际上,对等网络中可用的每个资源都是在对等之间共享的,而无需任何中央服务器。P2P 网络中的共享资源可以是诸如处理器使用率,磁盘存储容量或网络带宽等。
P2P 用来做什么
P2P 的主要目标是共享资源并帮助计算机和设备协同工作,提供特定服务或执行特定任务。如前面说到的,P2P 用于共享各种计算资源,例如网络带宽或磁盘存储空间。 但是,对等网络最常见的例子是 Internet 上的文件共享。 对等网络非常适合文件共享,因为它们允许连接到它们计算机等同时接收文件和发送文件。BitTorrent 是 P2P 使用的主要协议。
P2P 网络的作用
P2P 网络具有一些使它们有用的特征:
-
很难完全掉线,即使其中的一个对等方掉线,其他对等方仍在运行并进行通信。 为了使 P2P(对等)网络停止工作,你必须关闭所有对等网络。对等网络具有很强的可扩展性。 添加新的对等节点很容易,因为你无需在中央服务器上进行任何中央配置。
-
当涉及到文件共享时,对等网络越大,速度越快。 在 P2P 网络中的许多对等点上存储相同的文件意味着当某人需要下载文件时,该文件会同时从多个位置下载。
TELNET
TELNET 又称为远程登录,是一种应用层协议,它为用户提供了在本地机器上就能够操控远程主机工作的能力。例如下面这幅图所示。

主机 A 可以直接通过 TELNET 协议访问主机 B。
TELNET 利用 TCP 的一条连接,通过一条连接向主机发送文字命令并在主机上执行。
使用 TELNET 协议进行远程登录时需要满足一下几个条件:
-
必须知道远程主机的 IP 地址或者域名。
-
必须知道登录标识和口令。
TELNET 远程登录一般使用 23 端口。
TELNET 的工作过程如下:
-
本地主机与远程主机建立连接,这个连接其实是 TCP 连接,用户需要知道指定主机的 IP 地址或者域名
-
与远程主机建立连接后,在本地主机终端上输入的字符都会以 NVT (Net Virtual Terminal) 的形式发送至远程主机,这个过程实际上是发送一个数据包到远程主机。
-
远程主机接受数据包后,产生的输出会以 NVT 的格式发送给本地主机一个数据包,包括输入命令回显和命令执行结果
-
最后,本地主机终端对远程主机撤销链接,这个过程实际上就是 TCP 断开连接的过程。
SSH
TELNET 有一个非常明显的缺点,那就是在主机和远程主机的发送数据包的过程中是明文传输,未经任何安全加密,这样的后果是容易被互联网上不法分子嗅探到数据包来搞一些坏事,为了数据的安全性,我们一般使用 SSH 进行远程登录。
SSH 是加密的远程登录系统。使用 SSH 可以加密通信内容,即时数据包被嗅探和抓取也无法破解所包含的信息,除此之外,SSH 还有一些其他功能:
-
SSH 可以使用更强的认证机制。
-
SSH 可以转发文件。
-
SSH 可以使用端口转发功能。
端口转发是 SSH 为网络安全通信使用的一种方法。SSH 可以利用端口转发技术来传输其他 TCP/IP 协议的报文,当使用这种方式时,SSH 就为其他服务在客户端和服务器端建立了一条安全的传输管道端口转发是指将特定端口号所收到的消息转发到指定 IP 地址和端口号的一种机制。
FTP
FTP (File Transfer Protocol,文件传输协议)是应用层协议之一,它是计算机网络上用处最广的文件传输协议。
FTP 协议包括两个组成部分,分为 FTP 服务器和 FTP 客户端。其中 FTP 服务器用来存储文件,用户可以使用 FTP 客户端通过 FTP 协议访问位于 FTP 服务器上的资源。
由于 FTP 传输效率非常高,一般用来在网络上传输大的文件。

默认情况下 FTP 协议使用 TCP 端口中的 20 和 21 这两个端口,其中 20 用于传输数据,21 用于传输控制信息。FTP TCP 21 号端口上进行文件传输时,每次都会建立一个用于数据传输的 TCP 连接,数据传输完毕后,传输数据的这条连接也会被断开,在控制用的连接上继续进行命令或应答的处理。

简单文件传输协议 TFTP
TCP/IP 协议簇中还有一个简单文件传输协议(TFTP,Trivial File Transfer Protocol),它是一个很小且易于实现的文件传输协议。TFTP 也使用的是客户 - 服务器方式,只不过 TFTP 是基于 UDP 来传输报文的。由于 UDP 没有差错检测这一系列对报文完整性的要求,所以 TFTP 需要自己实现差错检测以及错误修改的动作,TFTP 的端口号默认为 69。
由于 TFTP 使用 UDP 来传输,所以当需要很多客户端下载文件时往往考虑这种方式;而且 TFTP 代码所占内存空间小,这对某些小型机或一些特殊设备比较重要,特殊设备比如某种小容量的只读存储器。当设备通电时,会执行只读存储器中的代码,然后在网络上广播一个 TFTP 请求,网络上的 TFTP 服务器会发送响应,响应中包括可执行的二进制程序,设备收到后会把程序放入内存中并开始执行。
TFTP 的主要特点是:
-
每次会传输 512 字节的数据,最后不足 512 字节的可作为结束标志位
-
报文按序号排序,从 1 开始
-
支持 ASCII 和二进制传输
-
可对文件进行读写
TFTP 工作时,每当发送完数据块时对等待对方确认,确认时应该指明所确认的块编号。如果规定时间内没有收到确认就会重发数据 PDU。
DHCP
DHCP 协议的全称是 Dynamic Host Configuration Protocol ,动态主机配置协议。简单来讲一句就是:这个协议能够让我们自动配置 IP 连接网络。
我们知道,在互联网中 IP 地址是标识网络上主机的一种方式,这个 IP 地址的配置方法有两种:一种是通过手动来设置 IP 地址,设置完成后不管你走到哪里这个 IP 地址不会改变,这会导致一个问题:你可能离开某个区域内就会导致无法连接网络;还有一种方式是自动配置 IP 地址,这样不管你走到哪里,你的网卡都会帮你连接上网。
DHCP 的前身是 BOOTP 协议,BOOTP 协议是一种引导协议,需要人工手动干预进行协议配置,非常不方便。于是 BOOTP 被淘汰了出现了 DHCP,根据上面的描述我们可以得出一个结论:DHCP 是一种即插即用式的协议。即插即用的意思就是插上就能用,不需要再手动设置 IP ,这一系列过程都由操作系统和网卡直接分配并设置好。如果你仔细观察过 IP 地址就会发现,当你在不同的地点时,你的 IP 地址会不断变化。
这一切的背后我会在后面详细聊 DHCP 的时候做全面的阐述。
SMTP
提供电子邮件服务的协议叫做SMTP (Simple Mail Transfer Protocol),SMTP 在传输层也是用了 TCP 协议。
早期电子邮件是在发送端主机和接收端主机之间直接建立 TCP 连接。发送方编写好邮件之后会将邮件保存在磁盘中,然后与接受主机建立 TCP 连接,将邮件发送到接受主机的磁盘中。当发送方把邮件发送后,再从本地磁盘中删除邮件。如果接受主机因为特殊情况无法接收,发送端将等待一段时间后重新发送。
这种方法虽然能够保证电子邮件的完整性和有效性,但却不适合当今的互联网,因为早期的电子邮件只能在线发送,这种方式显然不够成熟。


针对于此,提出了邮件服务器的概念。邮件服务器构成了整个邮件系统的核心。每个接收方在其中的邮件服务器上会有一个邮箱 (mailbox)存在。用户的邮箱管理和维护发送给他的报文。
一个典型的邮件发送过程是:从发送方的用户代理开始,传输到发送方的邮件服务器,再传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱中。用接收方的用户想要从邮箱中读取邮件时,他的邮件服务器会对用户进行认证。如果发送方发送的邮件无法正确交付给接收方的服务器,那么发送方的用户代理会把邮件存储在一个报文队列中,并在以后尝试再次发送。通常每 30 分钟发送一次,如果一段时间后还发送不成功,服务器就会删除报文队列中的邮件并以电子邮件的方式通知发送方。

现在你知道了两台邮件服务器邮件发送的大体过程,那么,SMTP 是如何将邮件从 Alice 邮件服务器发送到 Bob 的邮件服务器的呢?主要分为下面三个阶段
-
建立连接:在这一阶段,SMTP 客户请求与服务器的25端口建立一个 TCP 连接。一旦连接建立,SMTP 服务器和客户就开始相互通告自己的域名,同时确认对方的域名。
-
邮件传送:一旦连接建立后,就开始邮件传输。SMTP 依靠 TCP 能够将邮件准确无误地传输到接收方的邮件服务器中。SMTP 客户将邮件的源地址、目的地址和邮件的具体内容传递给 SMTP 服务器,SMTP 服务器进行相应的响应并接收邮件。
-
连接释放:SMTP 客户发出退出命令,服务器在处理命令后进行响应,随后关闭 TCP 连接。
MIME 类型
最一开始,互联网中的电子邮件只能处理文本格式,后来也逐渐扩展为 MIME 类型,我们上面也简单提到了一句 MIME 类型,MIME (Multipurpose Internet Mail Extensions)是用途互联网邮件扩展类型。
它是一个互联网标准,扩展了电子邮件标准,使其能够支持很多格式,这些格式如下:
- 超文本标记语言文本 .html text/html
- xml文档 .xml text/xml
- 普通文本 .txt text/plain
- PNG图像 .png image/png
- GIF图形 .gif image/gif
- JPEG图形 .jpeg,.jpg image/jpeg
- AVI 文件 .avi video/x-msvideo 等。