BitTorrent对等端TCP消息len字段是否包含自身长度?
BitTorrent消息len字段的正确取值方式
正确的取值是1,原因如下:
BitTorrent规范中定义的len字段,指的是消息体的长度——也就是4字节len字段之后的所有内容的字节数,不包含len自身的4字节。
以你提到的interested消息为例:
- 整个消息包总长度是5字节(4字节
len+ 1字节消息ID) - 但
len字段需要填写的是后续内容的长度,也就是仅消息ID的1字节,所以填1。
对等端接收时,会先读取4字节的len值,然后根据这个值读取后续对应长度的内容。如果填成5,对等端会尝试读取5字节的内容,而实际上后续只有1字节,就会导致解析错误。
再比如bitfield消息,len字段的值应该是1 + bitfield数据的字节数(1是bitfield的消息ID,后面跟着实际的bitfield数据),这样对等端才能正确读取完整的消息体。
内容的提问来源于stack exchange,提问作者user13975834
相关产品推荐
相关产品推荐

