PPTP 中的 Set-Link-Info 消息的用途是什么?关于此消息,RFC 似乎自相矛盾

网络工程 格雷 公私合营
2022-02-20 21:58:13

PPTP 连接通过将有效负载数据包装到 PPP 中,然后通过先前协商的增强型 GRE 链路发送它来传输有效负载数据。

根据 PPTP RFC,以下情况成立:

封装的 PPP 数据包本质上是 PPP 数据包,没有任何媒体特定的成帧元素。不包括 HDLC 标志、位插入、控制字符或控制字符转义不会通过隧道发送 CRC。

-第 4 节隧道协议操作

因此,PPP 数据中的任何内容都必须进行转义,并且所有字符都被视为普通字符而不是控制字符。

然而,PPTP 也在2.15 节Set-Link-Info中定义了一个消息。Set-Link-Info并且此消息的唯一目的是设置 ACCM,它代表异步控制字符映射。它还定义,除非发送此消息,否则对方应假定0xFFFFFFFF为默认值。

ACCM 的唯一目的是告诉对方哪些控制字符必须转义,但第 4 节禁止转义控制字符,那么设置 ACCM 不是零还有什么目的?如果默认值表示所有低于 ASCII 码 32 的字符都必须转义,但又禁止转义,那么会发生什么行为?

我发现的所有实现都完全忽略了 ACCM,从不逃避任何东西,但这使得Set-Link-Info消息完全没有意义,因为它永远不会产生影响。有人可以阐明这个矛盾吗?

相关的 RFC:

1个回答

封装的 PPP 数据包本质上是 PPP 数据包,没有任何媒体特定的成帧元素。不包括 HDLC 标志、位插入、控制字符或控制字符转义。不会通过隧道发送 CRC。

这意味着 PPTP 本身在传输的 PPP 数据包中不使用任何控制字符。所有的信令都交给 PPTP。

ACCM 用于为底层异步链接启用类似于控制字符的字符序列的透明传输。这些必须转义或链接中断(想想 Hayes ~++++~AT 序列)。