技术说明¶
本文档描述了aria2的附加技术信息。预期的读者是开发者。
控制文件(*.aria2)格式¶
控制文件使用二进制格式来存储下载的进度信息。下面是每个字段的图示:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---+-------+-------+-------------------------------------------+
|VER| EXT |INFO |INFO HASH ... |
|(2)| (4) |HASH | (INFO HASH LENGTH) |
| | |LENGTH | |
| | | (4) | |
+---+---+---+-------+---+---------------+-------+---------------+
|PIECE |TOTAL LENGTH |UPLOAD LENGTH |BIT- |BITFIELD ... |
|LENGTH | (8) | (8) |FIELD | (BITFIELD |
| (4) | | |LENGTH | LENGTH) |
| | | | (4) | |
+-------+-------+-------+-------+-------+-------+---------------+
|NUM |INDEX |LENGTH |PIECE |PIECE BITFIELD ... |
|IN- | (4) | (4) |BIT- | (PIECE BITFIELD LENGTH) |
|FLIGHT | | |FIELD | |
|PIECE | | |LENGTH | |
| (4) | | | (4) | |
+-------+-------+-------+-------+-------------------------------+
^ ^
| |
+-------------------------------------------------------+
重复 (NUM IN-FLIGHT) PIECE 次数
VER
(版本): 2 bytes应为版本0(0x0000)或版本1(0x0001)。在版本1中,所有多字节整数以网络字节顺序(大端)保存。在版本0中,所有多字节整数以主机字节顺序保存。aria2 1.4.1可以读取这两个版本,但只以版本1格式写控制文件。版本0的支持将在未来版本中消失。
EXT
(扩展): 4 bytes如果最低有效位为1(即``EXT[3]&1 == 1``),aria2会检查保存的InfoHash和当前下载的InfoHash是否相同。如果它们不相同,则抛出异常。这称为”infoHashCheck”扩展。
INFO HASH LENGTH
: 4 bytesInfoHash长度,位于此字段之后。如果启用了”infoHashCheck”扩展,且此值为0,则会抛出异常。对于http/ftp下载,此值应为0。
INFO HASH
:(INFO HASH LENGTH)
bytesBitTorrent InfoHash。
PIECE LENGTH
: 4 bytes片段的长度。
TOTAL LENGTH
: 8 bytes下载的总长度。
UPLOAD LENGTH
: 8 bytes本次下载的上传长度。
BITFIELD LENGTH
: 4 bytes位字段的长度。
BITFIELD
:(BITFIELD LENGTH)
bytes表示当前下载进度的位字段。
NUM IN-FLIGHT PIECE
: 4 bytes飞行中片段的数量。这些片段在位字段中没有标记为’已下载’,但至少有一个已下载的块。
以下4个字段重复 (NUM IN-FLIGHT PIECE)
次数。
INDEX
: 4 bytes片段的索引。
LENGTH
: 4 bytes片段的长度。
PIECE BITFIELD LENGTH
: 4 bytes此片段的位字段长度。
PIECE BITFIELD
:(PIECE BITFIELD LENGTH)
bytes此片段的位字段。每个位代表16KiB的块。
DHT路由表文件格式¶
aria2默认情况下在 ${XDG_CACHE_HOME}/aria2/dht.dat
保存IPv4 DHT路由表,以及在 ${XDG_CACHE_HOME}/aria2/dht6.dat
保存IPv6 DHT路由表,除非 ${HOME}/.aria2/dht.dat
和 ${HOME}/.aria2/dht.dat
存在。
dht.dat
和 dht6.dat
文件使用相同的二进制编码,并具有以下字段。所有多字节整数均以网络字节顺序保存。RSV
(保留)字段用于未来使用。目前应全部为零:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---+-+-----+---+---------------+---------------+---------------+
|MGC|F| RSV |VER| MTIME | RSV |LOCAL NODE ID :
|(2)|M| (3) |(2)| (8) | (8) | (20) :
| |T| | | | | :
+---+-+---+-----+-------+-------+-------+-------+---------------+
:LOCAL NODE ID | RSV | NUM | RSV |
: (continued) | (4) | NODE | (4) |
: | | (4) | |
+-+-------------+-------+-------+-+-----+-------+---------------+
|P| RSV |COMPACT PEER INFO| RSV | <-+
|L| (7) | (PLEN) | (24 - PLEN) | |
|E| | | | |
|N| | | | |
+-+-------------+-----------------+-----+-------+---------------+ |
| NODE ID | RSV | |
| (20) | (4) | <-----------------+
+---------------------------------------+-------+ 重复 (NUM NODE) 次数
MGC
(魔法): 2 bytes必须为
0xa1 0xa2
。FMT
(格式ID): 1 byte格式ID应为
0x02
。VER
(版本): 2 bytes版本号应为
0x00 0x03
。MTIME
: 8 bytes这是aria2保存文件的时间。该值是自纪元(1970/1/1 00:00:00)以来的时间,以64位整数表示。
LOCALNODE ID
: 20 bytes客户端的节点ID。
NUM NODE
: 4 bytes路由表中的节点数量。
NUM NODE
节点信息随后。
NUM NODE
节点的数据将随后。节点信息存储在以下字段中。它们重复 NUM NODE
次数。
PLEN
(紧凑对等信息长度): 1 byte紧凑对等信息的长度。对于IPv4 DHT,必须为6。对于IPv6 DHT,必须为18。
COMPACT PEER INFO
:(PLEN)
bytes对等方的地址和端口的紧凑对等格式。
NODE ID
: 20 bytes该节点的节点ID。