4.8.2 传输参数的衍生时间
ACK_TIMEOUT(应答超时时间)、ACK_RANDOM_FACTOR(应答随机因子) 和MAX_RETRANSMIT(最大重传时间)这三个参数共同影响着重传时间,重传时间反过来也影响着这些参数需要保持的时间长度。为了能够对这些derived时间值有一个明确的参考,这里给出以下名称:
最大传输跨度(MAX_TRANSMIT_SPAN):指的是从CON消息第一次发送到它的上一次重发之间的最大时间间隔。对默认的传输参数,它的值是(2+4+8+16)*1.5 = 45s,或者一般表示为:
ACK_TIMEOUT * ((2 ** MAX_RETRANSMIT) - 1) * ACK_RANDOM_FACTOR
最大传输等待时间(MAX_TRANSMIT_WAIT):是指从第一次传输CON消息到发送方放弃接收ACK者RST响应之间的时间间隔。默认的传输参数的值是93秒,或者表示为:
ACK_TIMEOUT * ((2 ** (MAX_RETRANSMIT + 1)) - 1) *ACK_RANDOM_FACTOR
此外,我们还需要在一些网络和节点的特征上做些假设。
最大时延(MAX_LATENCY):指的是数据包从开始发送到完全接收之间的最大时间 。该常量与[RFC0793](协议中的MSL(最大段周期)相关,一般被设定为2分钟。注意,这并不一定比最大传输等待时间小,最大时延并不是想要描述当协议工作良好的情形,而是确保在最坏的情况下有保障。我们也可以很随意的定义最大时延为100秒。除了大量的配置与以前的TCP接近,这个值也允许Message ID存活时间定时器由8-bit数值表示(单位为秒)。在这些计算中,没有考虑传输方向的影响(假设网络是对称的)。如果不是这种情况,接下来计算将变得稍微复杂一些。
处理延时(PROCESSING_DELAY):指的是CON消息得到ACK响应的时间。我们假设节点恰好在发送端超时之前发送ACK,那么这个时间就等于ACK_TIMEOUT。
MAX_RTT:往返时间的最大值,或者是:
(2 * MAX_LATENCY) + PROCESSING_DELAY
从这些值中,我们可以得到与协议操作相关的下列值:
交换周期(EXCHANGE_LIFETIME):它是指从开始发送CON消息到不再接收ACK之间的时间,即该信息在消息层交换时可以被清除。交换周期包括MAX_TRANSMIT_SPAN、发送过程的MAX_LATENCY、PROCESSING_DELAY和接收过程的MAX_LATENCY。注意,如果最后等待周期(ACK_TIMEOUT (2 * MAX_RETRANSMIT)或MAX_TRANSMIT和MAX_TRANSMIT_WAIT的差)小于MAX_LATENCY,这里就无需考虑MAX_TRANSMIT_WAIT(这种情况一般不可能出现)。在这种情况下,EXCHANGE_LIFETIME简化为:
MAX_TRANSMIT_SPAN + (2 * MAX_LATENCY) + PROCESSING_DELAY
一般缺省值为247秒。
不需确认消息周期(NON_LIFETIME):它指的是从发送NON消息到该Message ID可以被复用之间的时间。如NON消息没有多次发送,那么它的值是MAX_LATENCY或者是100秒。然而,尤其是在多播应用中,一个CoAP发送端可能发送NON消息很多次。Message ID重用超出本文档范围内。接收端希望在MAX_TRANSMIT_SPAN的时间内判断是否是重传包。基于这样的目的,使用缺省值145秒或使用下面的值将会更安全:
MAX_TRANSMIT_SPAN + MAX_LATENCY
对于仅想通过一个超时时间来判断Message ID是否能够重用的应用来说,使用较大的EXCHANGE_LIFETIME更安全。
表3列举了上述一些参数的缺省值
最后更新于
这有帮助吗?