📄 gnutella协议中文版.htm
字号:
<span lang="EN-US" style="font-size: 9pt"> </span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<span lang="EN-US"><font size="3"> </font></span></p>
<p class="MsoNormal" style="text-indent: 21pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span style="font-family: 宋体">一个</span><span lang="EN-US">Gnutella</span><span style="font-family: 宋体">客户机通过与另一个当前在网络中的客户机建立连接来使自己与网络相连。获取另一个客户机的地址不在这个协议的定义中,这里将不作描述(客户机地址缓冲保存是当前用强制方式自动获得</span><span lang="EN-US">Gnutella</span><span style="font-family: 宋体">客户机地址的方式)。</span></font></p>
<p class="MsoNormal" style="text-indent: 21pt; margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span style="font-family: 宋体">一旦网络上的另一个客户机的地址被获取,一个与该客户机的</span><span lang="EN-US">TCP/IP</span><span style="font-family: 宋体">连接将被创建,以下的</span><span lang="EN-US">Gnutella</span><span style="font-family: 宋体">连接请求字符串(</span><span lang="EN-US">ASCII</span><span style="font-family: 宋体">编码)将被发送:</span></font></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<b><span lang="EN-US" style="font-size: 10pt">GNUTELLA CONNECT/<protocol version
string>\n\n</span></b></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span lang="EN-US"><protocol version string></span><span style="font-family: 宋体">在当前版本中定义文</span><span lang="EN-US">ASCII</span><span style="font-family: 宋体">字符串“</span><span lang="EN-US">0.4</span><span style="font-family: 宋体">”(或者,同样可以是</span><span lang="EN-US">”
\x30\x2e\x34”</span><span style="font-family: 宋体">)是指当前的协议规范的版本。</span></font></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span style="font-family: 宋体">注明:</span></font></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span lang="EN-US">1.</span><span style="font-family: 宋体">这份文件代表事实的标准的</span><span lang="EN-US">Gnutella0.4</span><span style="font-family: 宋体">协议,然而,有些协议的实现方案扩展了组成协议的描述符并在</span><span lang="EN-US">Gnutella</span><span style="font-family: 宋体">网络上传送描述符时附加了额外的规则。已知的协议扩展列在本文件末尾的附录中,但可能有些在实际应用中出现的变量没有在文件中说明。</span></font></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span lang="EN-US">2.Gnutella</span><span style="font-family: 宋体">的发音是</span><span lang="EN-US">new-tella</span></font></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<span style="font-family: 宋体"><font size="3">一个客户机愿意接受连接的话必须回应</font></span></p>
<h1 style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="2"><span lang="EN-US">GNUTELLA OK\n\n</span></font></h1>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<span style="font-family: 宋体"><font size="3">
任何其它的回应表示客户机不愿意接受连接。一个客户机拒绝连接可能有以下几种原因-一个客户机的连接缓冲池已经满了,或者他不支持同样版本的协议来作为一个响应客户机。仅此举例。</font></span></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<span lang="EN-US"><font size="3"> </font></span></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span style="font-family: 宋体">一旦一个客户机成功连接到网络上,他与其它客户机通讯通过发送和接收</span><span lang="EN-US">Gnutella</span><span style="font-family: 宋体">协议描述字。每一个描述符前都有一个以下字节结构的描述头,如下所示:</span></font></p>
<pre><font face="黑体" size="2">注意:</font><span lang="EN-US" style="font-size: 10.5pt; font-family: 宋体">1.以下所有结构内字符次序都是在低位在后,除非另作说明。</span></pre>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span lang="EN-US">2.</span><span style="font-family: 宋体">所有的地址都是</span><span lang="EN-US">IP4</span><span style="font-family: 宋体">格式</span></font></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<span style="font-family: 宋体"><font size="3">例如:</font></span></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span lang="EN-US"> </span><span style="font-family: 宋体">
表示的</span><span lang="EN-US">IP</span><span style="font-family: 宋体">地址为:</span><span lang="EN-US">208.17.50.4</span></font></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<b><span lang="EN-US"><font size="3">Descriptor Header</font></span></b><span lang="EN-US" style="font-size: 9pt"><br>
<br>
</span></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<span lang="EN-US"><font size="3"> </font></span></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span lang="EN-US"> </span></font></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<b><span lang="EN-US" style="font-size: 9pt">DescriptorID</span><span style="font-size: 9pt; font-family: 宋体">网络描述符:</span></b><span lang="EN-US" style="font-size: 9pt">16</span><span style="font-size: 9pt; font-family: 宋体">个字节的字符串唯一标示网络的描述符号。</span><span lang="EN-US" style="font-size: 9pt"><br>
</span><b><span lang="EN-US" style="font-size: 9pt">Payload Descriptor</span><span style="font-size: 9pt; font-family: 宋体">负载描述符:</span></b></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<i><span lang="EN-US" style="font-size: 9pt">0x00 = Ping<br>
0x01 = Pong<br>
0x40 = Push<br>
0x80 = Query<br>
0x81 = QueryHit</span></i><span lang="EN-US" style="font-size: 9pt"><br>
<b>TTL</b></span><b><span style="font-size: 9pt; font-family: 宋体">生存期:</span></b><span style="font-size: 9pt; font-family: 宋体">描述字符在删除前在</span><span lang="EN-US" style="font-size: 9pt">Gnutella</span><span style="font-size: 9pt; font-family: 宋体">网络中向前传递的次数。每个客户端在将包向前传递前将</span><span lang="EN-US" style="font-size: 9pt">TTL</span><span style="font-size: 9pt; font-family: 宋体">减一。当</span><span lang="EN-US" style="font-size: 9pt">TTL</span><span style="font-size: 9pt; font-family: 宋体">等于</span><span lang="EN-US" style="font-size: 9pt">0</span><span style="font-size: 9pt; font-family: 宋体">,描述符将不再被向前传递。</span></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<b><span lang="EN-US" style="font-size: 9pt">Hops</span><span style="font-size: 9pt; font-family: 宋体">描述符被向前传递的次数:</span></b><span style="font-size: 9pt; font-family: 宋体">作为一个描述符向前传递,头部的</span><span lang="EN-US" style="font-size: 9pt">TTL</span><span style="font-size: 9pt; font-family: 宋体">和</span><span lang="EN-US" style="font-size: 9pt">Hops</span><span style="font-size: 9pt; font-family: 宋体">字必须满足以下条件:</span></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<span lang="EN-US" style="font-size: 9pt">TTL(0) = TTL(i) + Hops(i)</span></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<b><span lang="EN-US" style="font-size: 9pt">Payload Length</span><span style="font-size: 9pt; font-family: 宋体">负载长度:</span></b><span style="font-size: 9pt; font-family: 宋体">表示紧接着头部后面的描述符部分的长度。下一个描述符头后的从头部算起的</span><b><span lang="EN-US" style="font-size: 9pt">Payload
Length</span></b><span style="font-size: 9pt; font-family: 宋体">字节数,也就是没有间隔或保留字在</span><span lang="EN-US" style="font-size: 9pt">Gnutella</span><span style="font-size: 9pt; font-family: 宋体">的数据流中。</span></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<span lang="EN-US" style="font-size: 9pt"> </span></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<span lang="EN-US"><font size="3"> </font></span></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span lang="EN-US">TTL</span><span style="font-family: 宋体">是网络中唯一的描述过期的机制。客户机应该仔细检查收到的描述符的</span><span lang="EN-US">TTL</span><span style="font-family: 宋体">区并必要时减少它的值。滥用</span><span lang="EN-US">TTL</span><span style="font-family: 宋体">区将会导致没有必要的网络阻塞和差劲的网络性能。</span></font></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span lang="EN-US">Payload Length</span><span style="font-family: 宋体">区是客户机查找输入流中下一个描述符的唯一可靠方式。</span><span lang="EN-US">Gnutella</span><span style="font-family: 宋体">协议不提供一个“监视”字符串或任何其它的描述符同步的方式。因此,客户机应该严格保证每一个收到的描述符的</span><span lang="EN-US">Payload
Length</span><span style="font-family: 宋体">区的有效性(至少为固定长度的描述符)。如果一个客户机不能和输入的流同步,它应该断掉与这个输入流有关的来自发送方的客户机,不管是产生这个流还是向前传递这个流的无效的客户机。紧接着描述头的是一个有效装载包含以下之一的描述符:</span></font></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<b><span lang="EN-US"><font size="3">Ping (0x00)</font></span></b></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span lang="EN-US">Ping</span><span style="font-family: 宋体">描述符没有相关的有效装载和数据长度为</span><span lang="EN-US">0</span><span style="font-family: 宋体">。一个</span><span lang="EN-US">Ping</span><span style="font-family: 宋体">只是简单地有一个描述头表述,它的有效装载区是</span><span lang="EN-US">0x00</span><span style="font-family: 宋体">和装载长度区为</span><span lang="EN-US">0x00000000</span><span style="font-family: 宋体">。</span></font></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span style="font-family: 宋体">一个客户机用</span><span lang="EN-US">Ping</span><span style="font-family: 宋体">描述符</span></font><span lang="EN-US"><br>
</span><font size="3"><b><span lang="EN-US">Pong (0x01)</span></b></font></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<span lang="EN-US"><font size="3">Port</font></span></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span lang="EN-US"> </span></font></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span lang="EN-US">Port</span><span style="font-family: 宋体">:同意接收响应的客户机的端口</span></font></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span lang="EN-US">IP Address</span><span style="font-family: 宋体">:响应的客户机的地址(此数据区高位字节在后)</span></font></p>
<p class="MsoNormal" style="margin-left: 0cm; margin-right: 0cm; margin-top: 0cm; margin-bottom: 0pt">
<font size="3"><span lang="EN-US">Number of Files Shared</span><span style="font-family: 宋体">:本机共享文件的数量</span></font></p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -