mirror of
https://github.com/Dichgrem/Blog.git
synced 2025-02-23 14:08:37 -05:00
437 lines
38 KiB
HTML
437 lines
38 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
|
||
<head>
|
||
<title>Dich'blog</title>
|
||
|
||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
|
||
<meta name="robots" content="noodp"/>
|
||
|
||
<link rel="stylesheet" href="https://blog.dich.bid/style.css">
|
||
<link rel="stylesheet" href="https://blog.dich.bid/color/blue.css">
|
||
|
||
<link rel="stylesheet" href="https://blog.dich.bid/color/background_dark.css">
|
||
|
||
<link rel="stylesheet" href="https://blog.dich.bid/font-hack-subset.css">
|
||
|
||
<meta name="description" content="">
|
||
|
||
<meta property="og:description" content="">
|
||
<meta property="og:title" content="Dich'blog">
|
||
<meta property="og:type" content="article">
|
||
<meta property="og:url" content="https://blog.dich.bid/network-download-1/">
|
||
|
||
<meta name="twitter:card" content="summary_large_image">
|
||
<meta name="twitter:description" content="">
|
||
<meta name="twitter:title" content="Dich'blog">
|
||
<meta property="twitter:domain" content="blog.dich.bid">
|
||
<meta property="twitter:url" content="https://blog.dich.bid/network-download-1/">
|
||
|
||
<link rel="alternate" type="application/atom+xml" title="Dich'blog Atom Feed" href="https://blog.dich.bid/atom.xml" />
|
||
|
||
|
||
<link rel="icon" type="image/png" href=/dich.webp />
|
||
|
||
</head>
|
||
|
||
<body class="">
|
||
<div class="container">
|
||
|
||
<header class="header">
|
||
<div class="header__inner">
|
||
<div class="header__logo">
|
||
|
||
<a href="https://blog.dich.bid" style="text-decoration: none;">
|
||
<div class="logo">
|
||
|
||
Dich'blog
|
||
|
||
</div>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
|
||
<nav class="menu">
|
||
<ul class="menu__inner">
|
||
<li class="active"><a href="https://blog.dich.bid">blog</a></li>
|
||
|
||
<li><a href="https://blog.dich.bid/tags">tags</a></li>
|
||
|
||
<li><a href="https://blog.dich.bid/archive">archive</a></li>
|
||
|
||
<li><a href="https://blog.dich.bid/about">about me</a></li>
|
||
|
||
<li><a href="https://blog.dich.bid/links">links</a></li>
|
||
|
||
<li><a href="https://blog.dich.bid/search">search</a></li>
|
||
|
||
<li><a href="https://blog.dich.bid/weekly">weekly</a></li>
|
||
|
||
<li><a href="https://github.com/Dichgrem" target="_blank" rel="noopener noreferrer">github</a></li>
|
||
</ul>
|
||
</nav>
|
||
|
||
|
||
|
||
</header>
|
||
|
||
|
||
<div class="content">
|
||
|
||
<div class="post">
|
||
|
||
<h1 class="post-title"><a href="https://blog.dich.bid/network-download-1/">Network的艺术:下载技术的历史</a></h1>
|
||
<div class="post-meta-inline">
|
||
|
||
<span class="post-date">
|
||
2024-02-09
|
||
</span>
|
||
|
||
</div>
|
||
|
||
|
||
<span class="post-tags-inline">
|
||
:: tags:
|
||
<a class="post-tag" href="https://blog.dich.bid/tags/wang-luo-yi-shu/">#网络艺术</a></span>
|
||
|
||
|
||
<div class="post-content">
|
||
<p>前言 下载,就是将我们所需要的文件数据,通过网络从拥有该文件资源的计算机上传输过来并保存到我们的计算机上,供我们使用。本系列将详细讲述各种常见网络下载技术的原理,包括HTTP,FTP,BT等等。</p>
|
||
<span id="continue-reading"></span>
|
||
<p>下载技术的历史可以追溯到计算机网络的早期发展阶段。以下是下载技术的一些历史里程碑:</p>
|
||
<p><strong>早期网络时代(1960s - 1980s)</strong>:
|
||
在计算机网络的早期阶段,下载技术并不像今天这样普及。主要的网络是由军方和学术机构使用的封闭网络,例如阿帕网(ARPANET)。在这个时期,文件通常通过物理介质(如磁带、磁盘或纸带)传输,而不是通过网络进行下载。</p>
|
||
<p><strong>BBS时代(1980s - 1990s)</strong>:
|
||
随着电子通信的发展,出现了电子公告板系统(BBS)。BBS是一种允许用户通过拨号访问的系统,用户可以在BBS上发布和下载文件。下载文件的过程通常是通过模拟调制解调器将文件从BBS服务器下载到个人计算机上。</p>
|
||
<p><strong>Internet时代的起步(1990s)</strong>:
|
||
1990年代初,随着互联网的普及,出现了许多文件下载协议和工具。其中最知名的是FTP(文件传输协议),它允许用户通过网络下载文件到自己的计算机上。FTP是早期互联网上常用的文件传输方式之一,但它需要用户在计算机上安装专用的FTP客户端软件。</p>
|
||
<p><strong>万维网时代的兴起(1990s)</strong>:
|
||
随着万维网(World Wide Web)的诞生,HTTP(超文本传输协议)成为了互联网上最流行的协议之一。HTTP允许用户通过标准的Web浏览器直接从Web服务器上下载文件。这一时期也出现了许多下载管理器和加速器,例如IDM(Internet Download Manager),用于提高文件下载的速度和管理。</p>
|
||
<p><strong>P2P文件共享时代(2000s至今)</strong>:
|
||
P2P(点对点)文件共享技术允许用户直接从其他用户的计算机上下载文件,而不是从中央服务器下载。著名的P2P协议包括BitTorrent和eDonkey等。这些技术使得文件下载更加分布式,并且提供了更高的下载速度和可靠性。</p>
|
||
<p><strong>流媒体下载和订阅服务(2000s至今)</strong>:
|
||
随着互联网带宽的增加,视频和音频流媒体下载成为主流。诸如Netflix、Spotify和Apple Music等订阅服务提供了通过互联网访问大量内容的途径,用户可以通过流媒体服务下载并观看/收听内容,而无需等待完全下载。</p>
|
||
<h2 id="yi-http-xia-zai"><strong>一.HTTP 下载</strong></h2>
|
||
<p>HTTP,全名 <code>HyperText Transfer Protocol</code>,超文本传输协议。
|
||
HTTP协议是一种无状态的、应用层协议,用于传输超文本数据,如HTML、图片、音视频等。</p>
|
||
<p>HTTP下载的基本原理:</p>
|
||
<ol>
|
||
<li>
|
||
<p><strong>浏览器请求</strong>:用户在浏览器中点击下载链接或按钮时,浏览器会向服务器发送HTTP请求,请求下载指定的文件。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>服务器响应</strong>:服务器收到下载请求后,会根据请求中的信息找到对应的文件,并将文件内容打包成HTTP响应发送给客户端。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>传输过程</strong>:一旦浏览器接收到服务器的响应,就开始从服务器下载文件。这个过程可以简单地分为以下几个步骤:</p>
|
||
<ul>
|
||
<li><strong>建立连接</strong>:浏览器与服务器之间建立TCP连接。</li>
|
||
<li><strong>请求文件</strong>:浏览器发送一个GET请求,请求下载文件的内容。</li>
|
||
<li><strong>接收文件</strong>:服务器将文件以HTTP响应的形式发送给浏览器。</li>
|
||
<li><strong>下载文件</strong>:浏览器接收到文件数据,逐步将其存储到本地硬盘中的临时文件中。</li>
|
||
</ul>
|
||
</li>
|
||
<li>
|
||
<p><strong>下载完成</strong>:一旦文件的所有数据都被下载到本地,浏览器就会将临时文件转移到用户指定的下载文件夹中,完成文件的下载过程。</p>
|
||
</li>
|
||
</ol>
|
||
<p>在整个HTTP下载过程中,浏览器会根据服务器返回的HTTP响应头中的一些信息来确定如何处理下载文件,例如文件类型、大小、以及是否支持断点续传等。此外,如果用户使用的是下载管理器或浏览器插件,这些工具还可以提供更多的下载管理功能,如多线程下载、下载加速、断点续传等。</p>
|
||
<p>当我们点击一个链接时,浏览器会检查链接指向的目标是什么类型。如果是浏览器支持的类型,比如一个 HTML 文件,也就是另一个网页,则会跳转到新页面。</p>
|
||
<p>如果是不能直接由浏览器打开的文件类型,比如一个 EXE 格式的软件包,这时就会调用浏览器的下载机制,开始下载。如果装有下载工具的浏览器插件,浏览器则会将下载任务转交给下载工具进行,等待一段时间,下载完成之后,这个文件就会出现在我们的下载文件夹中。这就是最基本的下载,HTTP 下载。</p>
|
||
<h2 id="er-bo-hao-shang-wang"><strong>二.拨号上网</strong></h2>
|
||
<p>上世纪 90 年代,中国互联网的发展初期,在当时计算机上网只能通过电话线路,经由调制解调器来进行,因此称作拨号上网。</p>
|
||
<p>拨号上网的基本原理:</p>
|
||
<ul>
|
||
<li>
|
||
<p><strong>调制解调器(Modem)</strong>:在拨号上网时,计算机通过调制解调器将数字数据转换成模拟信号发送到电话线路上,以及接收从电话线路传来的模拟信号并将其转换成数字数据。调制解调器是连接计算机和电话线路的关键设备。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>拨号过程</strong>:用户在计算机上设置拨号连接,输入拨号号码(通常是ISP提供的拨号号码),计算机通过调制解调器拨号建立连接。拨号过程中,调制解调器会发送一系列信号给拨号接入点,以建立与网络服务提供商(ISP)的连接。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>网络连接</strong>:一旦拨号成功,计算机与ISP的服务器建立起网络连接。在拨号过程中,计算机会获取到一个IP地址,这个IP地址是计算机在网络上的唯一标识符,用于进行数据传输。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>数据传输</strong>:一旦网络连接建立,计算机就可以通过调制解调器在电话线路上发送和接收数据。数据传输可以是双向的,用户可以浏览网页、发送电子邮件、下载文件等。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>电话和上网的冲突</strong>:在拨号上网的过程中,电话线路和上网信号不能同时传输,如果在上网过程中接听电话,网络连接会中断。这是因为电话和上网信号共用同一条电话线路,无法同时传输。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>断线重连</strong>:如果网络连接因为电话中断或其他原因而中断,用户需要重新拨号连接到ISP的服务器,继续上网。这种中断和重连过程是拨号上网时常见的情况。</p>
|
||
</li>
|
||
</ul>
|
||
<p>拨号上网的速度较慢,且容易受到电话和上网信号冲突的影响,因此在宽带互联网普及后逐渐被淘汰。</p>
|
||
<p>当时的网费不是按年收取的,而是与打电话一样按时计费,费用大约为每小时 20 元,而且这还是房地产未爆发之时的 20 元。</p>
|
||
<p>当时最高网速为 56 kbps,也就是 7 KB/s,一首 MP3 音乐大约为 4 M,需要下载 10 分钟。但如果是一个红警 2 的游戏,约 200 M,那就需要下载 8 小时。8 小时的网费 160 元,而一张盗版光盘只需要 5 元。因此,虽然光盘现如今已经被沉入了历史长河,但它依然留存在老一代游戏玩家心中,是他们无法抹去的一份美好记忆。</p>
|
||
<p>下载时间长、网费贵,最要命的是电话信号和上网信号不能并行传输,接听来电会中断网络传输,然后你就必须重新下载。</p>
|
||
<h2 id="san-duan-dian-xu-chuan"><strong>三.断点续传</strong></h2>
|
||
<p>拨号上网的电话和网络不能同时进行的致命问题,在几年后随着 ADSL 宽带技术的出现,得以解决。但这并不是说,下载就不再会被中断了。电话是不怕了,但死机、停电、软件崩溃、服务器当机等等,还有无数种暂停下载的情况。</p>
|
||
<p>断点续传的基本原理:</p>
|
||
<ul>
|
||
<li>
|
||
<p><strong>HTTP Range和Content-Range头字段</strong>:为了支持断点续传,HTTP 1.1标准在1999年引入了Range和Content-Range头字段。这些字段允许客户端指定要请求的文件的特定范围,并且允许服务器指定响应的内容的范围。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>客户端支持</strong>:下载工具需要能够识别并利用HTTP Range头字段。当下载中断时,下载工具会将已经下载的部分保存到本地硬盘上,同时记录下已下载的字节数和文件的URL等信息。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>中断处理</strong>:如果下载过程中出现网络中断或其他原因导致下载中断,下载工具会保存当前已下载的部分,并在下次恢复下载时利用HTTP Range头字段向服务器发出请求,请求从中断处继续下载。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>服务端支持</strong>:服务器需要能够处理带有Range头字段的请求,并能够正确响应所请求的文件的特定范围。服务器根据客户端请求的字节范围返回相应部分的文件内容,并且在响应头中包含Content-Range字段指示所返回的文件部分的范围和总大小。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>续传合并</strong>:一旦下载工具完成对剩余部分的下载,它会将先前保存的部分和新下载的部分合并成完整的文件。这通常涉及到文件操作,如将两个文件的内容按顺序拼接到一起。</p>
|
||
</li>
|
||
</ul>
|
||
<p>然而,要实现断点续传,客户端和服务器双方都必须支持相关的HTTP头字段和逻辑,否则无法进行断点续传。</p>
|
||
<h2 id="si-duo-xian-cheng-xia-zai"><strong>四.多线程下载</strong></h2>
|
||
<p>互联网早期,上网用户少,但内容提供商更少。因此提供下载的网站一般都是满带宽运行的。而且在晚上的高峰期,能分给每个用户的带宽就更少了。因此大多数用户的下载速度都很低,远低于自己的网络带宽,这对于按时计费的上网环境来说,就是一种极大的浪费。因此人们又希望能有一种可以提升下载速度的方法。</p>
|
||
<p>多线程下载<code>Multi-threaded Download</code>是一种通过同时启动多个下载线程来加快文件下载速度的技术。以下是多线程下载的基本原理:</p>
|
||
<ul>
|
||
<li>
|
||
<p><strong>并行下载</strong>:在开始下载任务时,下载工具会同时启动多个下载线程,每个线程负责下载文件的不同部分。例如,如果设定了5个下载线程,那么下载工具会将文件分成5个部分,每个线程负责下载其中的一部分。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>断点续传</strong>:每个下载线程都利用断点续传技术,向服务器发出请求,并在HTTP请求中指定自己要下载的文件的起止位置。服务器根据这些请求返回相应的文件部分,而不是整个文件。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>并行下载过程</strong>:各个下载线程同时下载文件的不同部分,因此可以充分利用网络带宽资源,加快文件的下载速度。由于每个线程独立工作,所以它们之间互不影响,即使某个线程下载中断,其他线程仍然可以继续下载。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>文件合并</strong>:当所有下载线程都完成了各自部分的下载后,下载工具将这些部分按顺序合并成完整的文件。这通常是在本地文件系统中进行的简单文件操作,将各个部分的内容按顺序写入到一个文件中。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>提升下载速度</strong>:多线程下载技术可以有效地提升文件的下载速度,尤其是对于大文件或者带宽较小的网络连接。通过利用多个下载线程同时下载文件的不同部分,可以充分利用网络带宽资源,加快文件的下载速度。</p>
|
||
</li>
|
||
</ul>
|
||
<p>多线程下载技术的出现极大地改善了用户在互联网上下载文件的体验,使得用户可以更快地获取所需的文件内容。许多下载工具如网络蚂蚁、FlashGet、IDM等都采用了多线程下载技术,为用户提供了更高效的下载服务。</p>
|
||
<h2 id="wu-ftp-xia-zai"><strong>五.FTP 下载</strong></h2>
|
||
<p>FTP<code>File Transfer Protocol</code>即文件传输协议是一种用于在计算机之间传输文件的标准网络协议。它提供了一种简单而有效的方式,允许用户从一个主机(FTP服务器)下载文件到另一个主机(客户端)或上传文件到服务器。</p>
|
||
<p>以下是FTP协议及其下载原理的详细说明:</p>
|
||
<h3 id="ftpxie-yi-ji-chu">FTP协议基础</h3>
|
||
<ul>
|
||
<li>
|
||
<p><strong>工作模式</strong>:FTP使用客户端-服务器模式,客户端向服务器发出命令并接收服务器的响应来进行文件传输。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>端口</strong>:FTP使用TCP协议,服务器默认监听端口为21,用于控制连接,数据传输则使用动态端口(通常是20)。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>认证</strong>:用户需要通过用户名和密码进行身份验证才能连接到FTP服务器。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>命令和响应</strong>:FTP客户端通过发送命令到服务器来执行各种操作,例如列出目录、下载文件、上传文件等。服务器接收到命令后,执行相应的操作,并向客户端发送响应。</p>
|
||
</li>
|
||
</ul>
|
||
<h3 id="ftpxia-zai-yuan-li">FTP下载原理</h3>
|
||
<p>FTP下载的基本原理涉及以下几个步骤:</p>
|
||
<ul>
|
||
<li>
|
||
<p><strong>建立连接</strong>:客户端向服务器发送连接请求,服务器响应并建立控制连接。控制连接用于发送FTP命令和接收服务器响应。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>身份验证</strong>:客户端发送用户名和密码进行身份验证。一旦验证通过,客户端可以开始执行FTP命令。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>浏览文件</strong>:客户端可以使用FTP命令浏览服务器上的文件和目录结构,例如<code>LIST</code>命令用于列出目录内容。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>选择文件</strong>:客户端通过FTP命令选择要下载的文件,例如<code>RETR</code>命令用于从服务器下载文件。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>建立数据连接</strong>:在下载文件之前,客户端需要与服务器建立数据连接。数据连接用于实际传输文件内容。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>下载文件</strong>:一旦数据连接建立,服务器开始向客户端发送文件内容。客户端接收文件数据,并将其保存到本地文件系统中。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>关闭连接</strong>:文件传输完成后,客户端关闭数据连接,并向服务器发送命令关闭控制连接。</p>
|
||
</li>
|
||
</ul>
|
||
<h3 id="zhu-dong-mo-shi-he-bei-dong-mo-shi">主动模式和被动模式</h3>
|
||
<p>FTP连接可以使用主动模式(Active Mode)或被动模式(Passive Mode)进行数据传输。</p>
|
||
<ul>
|
||
<li>
|
||
<p><strong>主动模式</strong>:在主动模式下,客户端向服务器的数据端口(通常是端口20)发送连接请求,服务器通过控制端口(端口21)响应,并在数据端口上发送数据。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>被动模式</strong>:在被动模式下,客户端发送连接请求到服务器的控制端口(端口21),服务器响应并在一个随机的高端口打开一个监听,并将这个端口号发送给客户端。然后客户端连接到服务器的高端口上进行数据传输。</p>
|
||
</li>
|
||
</ul>
|
||
<p>被动模式通常用于避免防火墙问题和NAT设备的限制,因为它允许数据连接从服务器向客户端发起,而不是从客户端向服务器发起。</p>
|
||
<h3 id="an-quan-xing">安全性</h3>
|
||
<p>FTP协议最初设计时并没有考虑到安全性,因此在传输过程中文件内容以明文形式传输,存在安全风险。为了解决这个问题,可以通过使用FTP over SSL(FTPS)或FTP over SSH(SFTP)等安全扩展来加密传输数据。</p>
|
||
<h2 id="liu-bt-xia-zai"><strong>六.BT 下载</strong></h2>
|
||
<p>BT 全称 <code>BitTorrent</code>,一般不翻译,非要翻译的话,那就是“比特洪流”。它一般指基于 P2P 下载机制而设计的一个具体协议。BT 三大客户端µTorrent、qBittorrent 和 Transmission,µ是希腊字母,不好输入,所以也常写作 uTorrent。</p>
|
||
<p>BT下载技术的基本原理:</p>
|
||
<ul>
|
||
<li>
|
||
<p><strong>种子文件创建</strong>:一个用户想要共享一个文件时,他会创建一个种子文件。种子是一个很小的,大约几十 kB 的,后缀名为 .torrent 的文件。种子内存储有该资源所包含文件的文件名、哈希值和 Tracker,哈希值是一个长度几十位不等的16进制数字,用于判断一个文件是否因传输过程而损坏或被恶意篡改。其原理可以简单理解为将一个超大数字的每位相加,再求余,这样以来,文件中哪怕有一个字节的变动或增减,都会导致对应哈希值的变化。BT 客户端在文件下载完成后会重新计算其哈希值,并与种子内保存的哈希值进行比较。如果不同,则表示下载过程中出现数据损坏,需要重新下载。BT 协议还会对体积较大的文件进行切片处理,从而减小重新下载所需的数据量。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>分块</strong>:文件会被分成一个个固定大小的块(通常为256KB或512KB),每个块都有一个唯一的标识符。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>连接Tracker服务器</strong>:用户启动BT客户端后,首先需要连接Tracker服务器来获取其他参与文件共享的用户信息。Tracker 是一个服务器地址,与 HTTP 下载服务器不同的是,它不保存文件内容,只保存文件的哈希值,和已下载过该文件的所有用户的 IP 地址。也就是说,当你获得一个种子文件,并添加到 BT 客户端之后,BT 客户端所做的第一步就是,向种子内保存的 Tracker 服务器询问“哪些人已经下载了这个文件?”Tracker 服务器就会将对应的 IP 地址列表,返回给你的 BT 客户端Tracker服务器会返回一份参与文件共享的用户列表,称为peer list。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>连接Peers</strong>:P2P 英文全称 Peer To Peer。一般不翻译,非要翻译的话,那就是“点对点”或“对等”,即这种新型下载方式的运作机制。
|
||
根据Tracker服务器返回的peer list,用户的BT客户端会尝试连接其中的其他用户(也称为peer)。通过这些连接,用户可以请求和发送文件块。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>下载块</strong>:一旦连接到其他用户,用户的客户端就会开始请求文件的不同块。客户端会根据需要的块选择合适的peer,并向其发送请求。其他peer收到请求后,会响应并将相应的块发送给请求者。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>上传块</strong>:用户的BT客户端不仅仅是下载文件,也在上传文件。当用户下载了一个块后,它也会成为一个可供其他用户下载的资源,用户的客户端会将这个块发送给其他请求者。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>分块验证</strong>:一旦下载完成,客户端会验证每个块的完整性。如果发现某个块不完整或者损坏,客户端会请求相同的块,直到下载到一个完整的块。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>做种</strong>:当一个用户完全下载了文件并且保持BT客户端运行时,他就成为了一个seeder(种子),即可供其他用户下载文件的资源。种子会周期性地向Tracker服务器发送自己的信息,以便其他用户找到他并下载文件。</p>
|
||
</li>
|
||
</ul>
|
||
<blockquote>
|
||
<p>迅雷
|
||
迅雷也会从别的 BT 软件那里下载资源,但它拒绝向其共享,它只共享给其他同样使用迅雷的用户。这严重违背 P2P 共享的公平原则,因此迅雷被称为吸血雷。</p>
|
||
</blockquote>
|
||
<blockquote>
|
||
<p>专用下载链接
|
||
最常见的专用下载链接就是迅雷链接 thunder://。其他少见的还有 QQ 旋风的 qqdl:// 和快车的 flashget://。
|
||
这种链接的本质是“加密的 http 链接”,发明这种链接的目的是打击竞争对手,并同时给用户制造障碍,让用户不得不使用他们的产品。本来用浏览器就能直接下载的 http 链接,用户还非得先下载一个迅雷。
|
||
而它们使用的加密手段极其拙劣,均使用 Base64 进行编码。因此网上有大量下载地址的转换工具,而 Base64 发明的目的是为了让二进制文件,得以用纯文本进行表达,以方便搭配 data URL 将小文件嵌入代码,或者让只支持纯文本,不支持二进制传输的地方得以实现二进制文件的传输。而被这三个家伙用于纯文本到纯文本的加密,一定会让 Base64 的发明者气个半死。</p>
|
||
</blockquote>
|
||
<h2 id="qi-pt-xia-zai"><strong>七.PT 下载</strong></h2>
|
||
<p>PT<code>Private Tracker</code>是一种私有的BitTorrent Tracker系统,与公开的BitTorrent网络不同,它需要用户进行注册和认证才能访问和下载文件。下面是PT下载技术的基本原理:</p>
|
||
<ul>
|
||
<li>
|
||
<p><strong>注册和认证</strong>:用户需要注册一个账户,并且经过认证才能够访问PT站点。认证通常包括通过邀请码注册或者通过一定的上传/下载比例限制。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>获取种子文件</strong>:与公开的BitTorrent网络不同,PT站点上的种子文件通常需要用户登录后才能够访问和下载。种子文件包含了文件的元数据信息以及Tracker服务器的地址。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>连接Tracker服务器</strong>:用户启动BT客户端后,首先需要连接PT站点的Tracker服务器来获取其他参与文件共享的用户信息。Tracker服务器会返回一份peer list。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>连接Peers</strong>:与公开的BitTorrent网络类似,用户的BT客户端会根据Tracker服务器返回的peer list,尝试连接其他参与文件共享的用户(peer)。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>下载块</strong>:一旦连接到其他用户,用户的客户端就会开始请求文件的不同块。客户端会根据需要的块选择合适的peer,并向其发送请求。其他peer收到请求后,会响应并将相应的块发送给请求者。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>上传块</strong>:与公开的BitTorrent网络类似,用户的BT客户端在下载文件的同时也会上传文件。下载的块也会被上传给其他用户。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>分块验证</strong>:下载完成后,客户端会验证每个块的完整性。如果发现某个块不完整或者损坏,客户端会请求相同的块,直到下载到一个完整的块。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>保种</strong>:保种是PT站点非常重要的概念。用户需要保持下载的文件在客户端中并继续上传给其他用户,以维持站点的健康和分享比例。保种也是PT站点会设置上传/下载比例限制的原因之一。</p>
|
||
</li>
|
||
</ul>
|
||
<p>PT 与 BT 的一个较大的区别是,PT 会时刻计算每个用户的上传量和下载量,由此来得到每个用户的一个指标“分享率”,分享率过低会被取消使用资格。</p>
|
||
<p>因此与 BT 用户的想法“我要多多下载,然后下完就跑” 相比,PT 用户的想法则是“你们赶紧下载我的资源吧,我还有一季美剧要追呢”。最终结果就是,大多数 BT 种子都下载不动,而 PT 种子则都可以高速下载。</p>
|
||
<h2 id="ba-ed2k-dian-luo-verycd"><strong>八.ed2k/电骡/VeryCD/</strong></h2>
|
||
<p>ed2k 全称 eDonkey2000 即“电驴”,同时也是其协议 ed2k:// 的名称,一般不翻译,非要翻译的话,那就是“电驴链接”。其与 BT 1.0 是同一时期出现,且为技术原理相同的软件。ed2k 与 BT 相比,它不需要种子文件所有必要信息,比如文件名、哈希值、Tracker 地址等信息都编码并保存在这个地址中。唯一的缺点是不能像种子一样保存多个文件,比如用一个种子文件保存整部电视剧的全部剧集或者更夸张的,一个种子保存一万部电影。</p>
|
||
<p>2002 年,一个 eDonkey2000 的程序员用户 ,对当时的 eDonkey2000 客户端不满意,并且相信自己能做出更好的 P2P 软件。因此着手开发,并于同年推出了首个版本,他们的软件名为 eMule,中文名“电骡”。电骡兼容电驴的 ed2k 网络,并在电驴的基础上增加了许多其他功能。电骡也基于 Kademlia 协议算法,开发了自己的的去中心化网络 “Kad 网络”。但最最重要的一点是,它是开源的,这一点为 ed2k 在国内的普及奠定了基础。</p>
|
||
<p>2003 年,国内的两个 P2P 下载爱好者,建立了一个 ed2k 资源分享网站 VeryCD。这个网站一直被认为是国内资源最丰富的网站,各种影视、音乐、游戏、软件等资源应有尽有。</p>
|
||
<p>2005 年,也就是 BT 2.0 元年,在美国唱片协会的状告之下,eDonkey2000关闭了网站,并停止了软件更新。在关闭前夕,其原作者根据 Kademlia 协议算法,开发出了电驴的去中心化 P2P 分享网络 “Overnet”,并更新到了 eDonkey2000 客户端的最后一个版本中。这样使得它的软件在网站关闭之后依然可以使用。</p>
|
||
<p>2007 年,在开源的 eMule 基础上,easyMule诞生了 。对于中文名,他们没有新起,而是尝试强行将自己称作“电驴”。可能是他们觉得电驴已经死了,由他们来继承,或者认为自己是电驴的一个支脉吧。正是这一点,让国内用户对四个英文名 eDonkey、eMule、easyMule、VeryCD 和中文名电驴之间傻傻分不清楚。</p>
|
||
<p>2012 年VeryCD被迫下架了其全部资源的 ed2k 下载链接,此后 VeryCD 也逐渐淡出了人们的视野。</p>
|
||
<h2 id="jiu-ci-li-lian-jie"><strong>九.磁力连接</strong></h2>
|
||
<p>磁力链是协议名为 magnet: 的下载链接。magnet 是“磁铁”的意思,它在原理和用法上与电驴链接 ed2k:// 几乎是一样的。它允许用户通过简单的URL链接来获取到资源的相关信息,而无需下载一个独立的种子文件。</p>
|
||
<p><strong>基于Hash值的标识</strong>:磁力链接是通过资源内容的哈希值来唯一标识的。这个哈希值通常是使用SHA-1算法计算的,并且对应着特定资源的唯一标识符。</p>
|
||
<p><strong>包含元数据信息</strong>:磁力链接中还包含了一些资源的元数据信息,如文件名、文件大小、文件分块信息等。这些信息通常是经过URL编码的,并以一种特定的格式嵌入到磁力链接中。</p>
|
||
<p><strong>无需中心化Tracker</strong>:与传统的Torrent文件不同,磁力链接中并不包含Tracker服务器的地址。这意味着用户可以直接通过磁力链接获取到资源相关的peer列表,无需依赖中心化的Tracker服务器。</p>
|
||
<p><strong>使用DHT网络</strong>:当用户使用磁力链接时,他们的BitTorrent客户端会通过DHT(分布式哈希表)网络来获取资源的相关信息。DHT网络是一个去中心化的网络,允许BitTorrent客户端在没有Tracker服务器的情况下发现其他拥有相同资源的peer。</p>
|
||
<p><strong>动态获取信息</strong>:使用磁力链接下载资源时,用户的BitTorrent客户端会动态地从其他拥有相同资源的peer处获取到资源的元数据信息,如文件列表、文件大小等。这样,用户可以立即开始下载资源,而无需等待种子文件下载完成。</p>
|
||
<p>随着电驴和 VeryCD 的关闭,以后互联网上的各种资源的下载,会逐渐从 ed2k 全部转向 magnet。磁力链还可以与 BT 搭配使用,也就是为多个文件制作好 BT 种子之后,再为种子文件制作一个磁力链接,这样就可以既享受 BT 种子支持多个文件的优点,又可以享受 ed2k 和磁力链只需要链接,不需要文件的优点。</p>
|
||
<h2 id="shi-bt-2-0"><strong>十.BT 2.0</strong></h2>
|
||
<p>BT 的文件虽然是分布式存储的,但它们的联络员 Tracker 依然是中心化的,只需要借助法律手段,端掉一个 Tracker 服务器,即可让所有 BT 下载瘫痪。因此为了实现完全的防封禁,必须实现完全的去中心化。</p>
|
||
<p>2002 年,美国纽约大学的两位学者,发表了他们的研究成果 Kademlia 协议,并且由 BT 发明者 BitTorrent 客户端,率先于 2005 年支持这种基于 Kademlia 协议的,不依赖Tracker 服务器的 BT 技术。随后,其他 BT 客户端也陆续跟进支持,这标志着 BT 进入 BT 2.0 的时代。</p>
|
||
<p><strong>BT 2.0下载原理:</strong></p>
|
||
<ul>
|
||
<li>
|
||
<p><strong>分布式Hash表</strong>:BT 2.0可能会引入分布式Hash表来替代传统的Tracker服务器。DHT 分布式哈希表网络,英文全称 Distributed Hash Table。其原理就是将原来由 Tracker 服务器保存的“文件哈希 - 文件存储位置” 的映射信息分散存储在 DHT 网络的各个节点中,并且留有冗余,即多份,以保证单个节点在关机之后,也不会影响文件的查询。分布式Hash表可以使peer更容易地发现彼此,减少了对中心化Tracker服务器的依赖。当用户想要下载文件时,他们可以通过Hash值查询分布式Hash表,获取与文件相关的peer列表。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>加密和安全性</strong>:BT 2.0引入更强大的加密技术来保护数据传输的安全性和用户的隐私。包括对传输数据进行端到端的加密,以及对用户身份进行更严格的验证和认证。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>内容验证和真实性</strong>:BT 2.0引入更多的内容验证机制,以确保下载的文件的真实性和完整性。包括数字签名、哈希验证和数据完整性检查等技术,以防止文件被篡改或损坏。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>带宽管理和QoS优化</strong>:BT 2.0改进带宽管理算法,以优化数据传输的效率和性能。包括更智能的下载调度、流量控制和质量of服务(QoS)机制,以确保下载过程中的良好用户体验。</p>
|
||
</li>
|
||
<li>
|
||
<p><strong>去中心化和匿名性</strong>:BT 2.0加强去中心化和匿名性方面的功能,以保护用户的隐私和匿名性。包括使用Tor网络、区块链技术和匿名代理等,以确保用户的下载行为不被追踪或监视。</p>
|
||
</li>
|
||
</ul>
|
||
<h2 id="shi-yi-wang-pan"><strong>十一.网盘</strong></h2>
|
||
<p>网盘,即位于网络上的硬盘。云的概念兴起以后也被一些厂商称为“云盘”.</p>
|
||
<p>网盘的概念最早起源于电子邮箱的附件存储.相比本地磁盘有诸多优点,它可以防止重要资料因电脑故障而丢失,可以防止机密数据因电脑丢失而外泄。代替 U 盘和移动硬盘在家里和公司之间共享文件。如果你的网盘是同步盘的话,还免去了频繁的手动上传和下载.</p>
|
||
<p>虽然网盘的几T空间看起来很唬人,但对所有用户来说,填充这几 TB 空间的往往是视频资源,而且绝大多数用户均是视频的消费者,也就是从网上下载视频,而不是自己拍摄视频。因此这些视频资源都是高度重叠的。现实情况就是 1000 个用户使用的 1TB 空间,不是占用了 1000TB 的服务器空间,而是 10TB。</p>
|
||
<h2 id="shi-er-chi-xian-xia-zai"><strong>十二.离线下载</strong></h2>
|
||
<p>准确来说,离线下载其实就是其他人替你挂机下载,下载完成后,再传给你。</p>
|
||
<p><strong>添加下载任务</strong>:用户通过离线下载服务提供的网页或应用程序界面,将需要下载的文件链接或种子链接添加到下载任务列表中。</p>
|
||
<p><strong>解析链接</strong>:离线下载服务会对添加的下载链接进行解析,提取出其中的文件信息和下载地址。</p>
|
||
<p><strong>远程下载</strong>:离线下载服务会以其自身的网络连接,从文件来源服务器下载文件。这个过程完全在服务端进行,用户的设备不直接参与下载过程。</p>
|
||
<p><strong>存储文件</strong>:下载完成后,文件会被保存在离线下载服务的服务器上,而不是用户的本地设备上。用户可以在需要时通过网页或应用程序界面访问和管理这些文件。</p>
|
||
<p><strong>提供下载链接</strong>:一旦文件下载完成,离线下载服务会生成一个新的下载链接或提供直接的文件下载链接给用户。用户可以使用这个链接来下载文件到自己的设备上。</p>
|
||
<p>刚开始使用离线下载的用户,可能会惊叹于离线下载的“秒完成”。这是因为已经有人先于你离线下载过这个资源了,这就是“资源重叠率”。</p>
|
||
|
||
</div>
|
||
|
||
|
||
<div class="pagination">
|
||
<div class="pagination__title">
|
||
<span class="pagination__title-h">Thanks for reading! Read other posts?</span>
|
||
<hr />
|
||
</div>
|
||
<div class="pagination__buttons">
|
||
<span class="button previous">
|
||
<a href="https://blog.dich.bid/about-git/">
|
||
<span class="button__icon">←</span>
|
||
<span class="button__text">乱七八糟:Git使用简明手册</span>
|
||
</a>
|
||
</span>
|
||
|
||
|
||
<span class="button next">
|
||
<a href="https://blog.dich.bid/network-isps/">
|
||
<span class="button__text">Network的艺术:国内至国际骨干ISP线路整理</span>
|
||
<span class="button__icon">→</span>
|
||
</a>
|
||
</span>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
</div>
|
||
|
||
|
||
<footer class="footer">
|
||
<div class="footer__inner">
|
||
<div class="copyright">
|
||
<span>©
|
||
2025
|
||
Dichgrem</span>
|
||
<span class="copyright-theme">
|
||
<span class="copyright-theme-sep">:: </span>
|
||
Theme: <a href="https://github.com/pawroman/zola-theme-terminimal/">Terminimal</a> by pawroman
|
||
</span>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
|
||
</div>
|
||
</body>
|
||
|
||
</html> |