问题标签 [ppp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
7401 浏览

c - 在程序中检查网络状态和控制 PPP

所以我在 linux 下使用蜂窝调制解调器运行 PPP。我正在编写的程序需要在发送任何数据之前知道链接是否处于活动状态。

我有哪些检查选项

  • 如果链接可用
  • 如果它路由到我控制的服务器(它不会像我之前所说的那样进入互联网)

另外,重新启动它的最佳方法是什么 - 我希望程序控制它何时启动和停止,所以我认为 init.d 不合适。usingsystem()似乎没有给出 PID,除了调用fork()的笨拙之外还有其他选择吗?exec??()

C on Linux on ARM(使用 buildroot 的自定义分发)。

0 投票
6 回答
2851 浏览

tdd - 伪代码编程过程与测试驱动开发

对于没有读过 Code Complete 2 的人来说,Pseudocode Programming Process 基本上是一种设计例程的方法,先用通俗的英语描述,然后逐步修改为更详细的伪代码,最后是代码。这样做的主要好处是通过自上而下而不是自下而上构建系统来帮助您保持在正确的抽象级别,从而在不同的层中发展出干净的 API。我发现 TDD 在这方面不太有效,因为它过于关注做最少的事情以使测试通过,并且鼓励很少的前期设计。我还发现必须为不稳定的代码(不断被重构的代码)维护一套单元测试是相当困难的,因为通常情况下,你需要为一个只需要一次或两次的例程进行十几个单元测试。当你进行重构时——例如更改方法签名——你所做的大部分工作是更新测试而不是更新产品代码。我更喜欢在组件的代码稍微稳定后添加单元测试。

我的问题是——在尝试过这两种方法的人中,你更喜欢哪一种?

0 投票
2 回答
1519 浏览

linux - 在 Linux 中使用调制解调器库的 PPP 请求拨号

我有一个带有一组调制解调器的 linux 机器,需要创建到一组非常大的远程机器的按需拨号(出站)PPP 连接。由于我的遥控器比本地调制解调器多得多,因此我想启动一个或多个pppdindemand模式实例,但在请求连接之前不要分配特定的调制解调器。当连接空闲时,我想pppd释放调制解调器,以便它可以用于连接到不同的遥控器。

我已经浏览了这些pppd man页面并了解了callconnect选项的概念,以及options.DEVICE文件和/etc/ppp/peers目录。锁定文件会告诉我哪些调制解调器正在使用或可用。只要我对调制解调器分配进行硬编码,我就可以连接到多个远程对等点。但是我还没有找到一种动态分配它们的方法,比如在需要拨号get_available_modem时调用脚本。pppd谷歌似乎也不知道。

一种解决方法可能是检测是否需要使用外部机制进行请求拨号,然后启动pppd以对其进行服务,但在其内部利用该设施似乎更清洁pppd

任何指针或想法表示赞赏。谢谢你的想法!

0 投票
1 回答
905 浏览

c++ - 可扩展的 PPP 协议。需要有关状态机的帮助

我正在设计可扩展的 PPP [意味着它可以扩展到以太网、HDLC、ATM 等]。我一直在确定状态机是否由 PPP 堆栈处理 [意味着我为 PPPStack 设计了基类,其中存在 FSM、编码、解码等] 或 PPPoE [派生自我的 PPP 基类 PPPStack]。

我正在使用 C++ 设计 PPP,以便它可以扩展到 oE、oATM 等。

PPP 帧编码在 PPP 本身和 PPPoE [其中 PPP 帧在发现和会话开始后添加] 中完成。

这是我第一次写 Scalable,如果任何参与 Scalable Architecture 的人也希望听到他们的观点:)

非常感谢你提前

0 投票
2 回答
202 浏览

linux - 通过调制解调器连接到基于 Linux 的服务器

我有一个带有调制解调器的黑盒设备(我可以向它发送命令),并且希望能够连接以从它向服务器发送数据。我有哪些连接选项,PPP 是我需要使用的协议还是有更好的选择?

0 投票
2 回答
167 浏览

c++ - PPP状态机中关闭和停止状态之间的确切区别是什么

我想知道 PPP 状态机中的关闭状态和停止状态之间的确切区别是什么。

如果有人详细解释,那就太好了。

我正在使用 C++ 设计 ppp 堆栈。

提前非常感谢。

0 投票
3 回答
6224 浏览

java - PPP 的免费 C/C++ 和 Java 实现?

是否有通过串行线路使用的点对点协议 (PPP) 的免费 C/C++ 和 Java 实现?C/C++ 实现将进入嵌入式硬件,因此可移植性是一个问题。我不是在寻找一个完整的 TCP/IP 堆栈,只是提供一个面向连接的基础来构建的东西。

0 投票
4 回答
4169 浏览

error-handling - PPP 或以太网如何从错误中恢复?

查看数据链路级标准,例如 PPP通用帧格式以太网,不清楚如果校验和无效会发生什么。协议如何知道下一帧从哪里开始?

它是否只扫描下一次出现的“标志”(在 PPP 的情况下)?如果是这样,如果数据包有效负载恰好包含“标志”本身会发生什么?我的观点是,无论是使用数据包帧还是“长度”字段,都不清楚如何从“长度”字段可能已损坏或“帧”字节可能恰好是其中的一部分的无效数据包中恢复。数据包有效载荷。

更新:通过查找“基于 GFP CRC 的框架”,我找到了我正在寻找的东西(严格来说,这不是我所问的)。根据通信网络

GFP 接收器通过三态过程与 GFP 帧边界同步。接收器最初处于搜寻状态,它一次检查四个字节,以查看在前两个字节上计算的 CRC 是否等于接下来两个字节的内容。如果未找到匹配项,则 GFP 将向前移动一个字节,因为 GFP 假定物理层给出的八位字节同步传输。当接收器找到匹配时,它会进入同步前状态。在此中间状态下,接收器使用暂定 PLI(有效载荷长度指示符)字段来确定下一帧边界的位置。如果已经实现了成功帧检测的目标数量N ,则接收器进入同步状态. 同步状态是接收器检查每个 PLI、使用 cHEC(核心标头错误检查)对其进行验证、提取有效负载并进入下一帧的正常状态。

简而言之,每个数据包都以“length”和“CRC(length)”开头。无需转义任何字符,并且提前知道数据包长度。

数据包成帧似乎有两种主要方法:

  • 编码方案(位/字节填充、曼彻斯特编码、4b5b、8b10b 等)
  • 未修改数据 + 校验和 (GFP)

前者更安全,后者更高效。如果有效载荷恰好包含有效数据包并且线路损坏导致后续字节包含“帧开始”字节序列,则两者都容易出错,但这听起来非常不可能。很难找到 GFP 稳健性的确切数字,但许多现代协议似乎都在使用它,因此人们可以假设他们知道自己在做什么。

0 投票
2 回答
4404 浏览

linux - 如何从 shell 命令获取 pppd inet 地址

我不确定是在此处发布还是在 ServerFault 发布。无论如何,我正在尝试绕过公司的防火墙以使用我手机的 3g 网络连接到一些媒体共享站点。我想出了一个简单的 ip route 命令,它以 pppd 的 inet 地址作为参数。但是,我想通过直接从脚本中读取 inet 地址来使其更加自动化,而不是通过命令行参数传递它。

这是场景,使其更明显:

  • 截至目前的命令调用:$jumpfirewall xxx.xxx.xxx.xxx

  • 我想要的命令调用:$jumpfirewall

你知道一些我可以用来从命令行读取它的命令或库吗?

0 投票
1 回答
10555 浏览

networking - PPP 和以太网的开销

PPP 和以太网发送 5000 字节的开销是多少?

点对点协议的帧大小:8 字节 MTU:500 字节

以太网帧大小:18 字节 MTU:1500 字节

两者都发送 5000 字节..

我知道这只是一个计算,但我不知道该怎么做。我在任何地方都找不到它。我认为,由于 PPP 帧占用 8 个字节,最大传输单元为 500,因此它可以一次性发送 (500 - 8) 个字节的信息。它发送 10 帧,总共发送 4920 个字节。然后用最后一帧发送最后的 (80+8) 字节。

以太网类似。每帧 (1500 - 18) 字节。发送 3 帧意味着发送了 4446 个字节。在最后一帧发送 (554+18) 个字节。

这显然不能回答“开销”问题。有人有想法么?