Linux PPP 指南 | ||
---|---|---|
上一页 | 第 8 章. 调试 | 下一页 |
这也有一些变体 - 例如串口线路环回等等,原因可能是一个(或一系列)问题。
为了理解这里发生了什么,有必要了解一点 pppd 内部幕后发生的事情。
当 pppd 启动时,它会向远程计算机发送 LCP(链路控制协议)数据包。如果它收到有效的响应,它将进入下一阶段(使用 IPCP - IP 控制协议数据包),并且只有当此协商完成时,才会启动实际的 IP 层,以便您可以使用 PPP 链接。
如果当您的 PC 发送 lcp 数据包时,远程端没有 ppp 服务器在运行,这些数据包将被远端的登录过程反射回来。由于这些数据包使用 8 位,反射它们会剥离第 8 位(记住,ASCII 是一个 7 位代码)。PPP 看到这一点并相应地报错。
这种反射可能发生有几个原因。
当您的 chat script 完成时,pppd 在您的 PC 上启动。但是,如果您没有完成到服务器的登录过程(包括发送启动服务器上 PPP 所需的任何命令),PPP 将不会启动。
因此,lcp 数据包被反射回来,您会收到此错误。
您需要仔细检查并更正(如有必要)您的 chat script(见上文)。
某些 PPP 服务器要求您在完成登录过程后输入命令和/或 RETURN,远程端才会启动 ppp。
检查您的 chat script(见上文)。
如果您手动登录并发现您需要在此之后发送 RETURN 才能启动 PPP,只需在您的 chat script 的末尾添加一个空白的 expect/send 对(一个空的 send 字符串实际上会发送一个 RETURN)。
这一点有点棘手!
默认情况下,您的 Linux pppd 被编译为最多发送 10 个 lcp 配置请求。如果服务器启动有点慢,则所有 10 个这样的请求都可能在远程 PPP 准备好接收它们之前被发送。
在您的机器上,pppd 看到所有 10 个请求都被反射回来(第 8 位被剥离)并退出。
有两种方法可以解决这个问题:-
添加 "lcp-max-configure 30" 到您的 ppp 选项中。这会增加 pppd 在放弃之前发送的最大 lcp 配置数据包数量。对于非常慢的服务器,您可能需要更多。
或者,您也可以用一点小技巧来应对。您可能已经注意到,当您手动登录到 PPP 服务器并且 PPP 在那里启动时,出现的 ppp 乱码的第一个字符始终是波浪号字符(˜)。
使用这些知识,我们可以添加一个新的expect/send对到 chat script 的末尾,该脚本期望一个波浪号并且不发送任何内容。这将看起来像:-
\~ '' |
注意:由于波浪号字符在 shell 中具有特殊含义,因此必须对其进行转义(因此有前导反斜杠)。