在 IGMPv2 中,最大响应时间是一个 8 位值,每个单位编码 0.1 秒。典型的最大响应时间为 100,因此最大响应时间为 10 秒。
在 IGMPv3 中,如果 Max response code < 128,则计算时间相同。但根据https://www.rfc-editor.org/rfc/rfc3376第 4.1.1 节:
If Max Resp Code < 128, Max Resp Time = Max Resp Code
If Max Resp Code >= 128, Max Resp Code represents a floating-point
value as follows:
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|1| exp | mant |
+-+-+-+-+-+-+-+-+
Max Resp Time = (mant | 0x10) << (exp + 3)
https://www.rfc-editor.org/rfc/rfc6636 4.2节举例:
For example, if one wants to set the Max
Response Time to 20.0 seconds, the Max Resp Code should be expressed
as "0b10001001", which is divided into "mant=0b1001" and "exp=0b000".
我看不到 0b10001001 在 20 秒内的结果。如果尾数是 0b1001(十进制 9)并且我们左移 3(指数 0 + 3),结果 0b01001000 = 72 十进制或 7.2 秒。
如何计算最大响应代码值 >= 128 的 IGMPv3 响应时间?
两个 RFC 都没有相关的勘误表。