2

我几乎得到它 - 但我错过了关键点......

我试图弄清楚如何在 Twisted 中构建“分层”协议栈。我可以理解如何附加单个协议并使用 Defers 处理事件,但是如果我想要传统的 OSI 层模型?假设我在 TCP 连接器的底部有一个面向线路的协议,并且我希望将多个面向线路的协议堆叠在顶部,直到我到达应用程序空间。

(想想我想以扭曲的方式实现 TCP/IP 堆栈本身)

4

1 回答 1

0

OSI 分层模型与 Twisted基本无关(而且,我认为,通常与软件基本无关)。一次查看每一层:

  1. 物理:显然,Twisted 不是以太网电缆或物理交换机,所以它不能这样做。
  2. 数据链接:为了让 Twisted 在网络接口上运行,您的操作系统需要连接到物理网络。数据链路协议通常需要在硬实时设备中实现,通常是在硬件中,因此 Twisted 不适合这种情况。
  3. 网络:这一层,如果它与“传输”层不同,那么它就是 BGP 和路由器之类的东西,它们与您的应用程序不同。
  4. 传输:在这一层,我们有两个接口,IProtocolITransport. 传输将字节传输传递到IProtocolvia dataReceived,应用程序将字节传递到传输 via ITransport.write()。(然后,这种关系在电线的另一端反转。)
  5. 会话:(这隐含地是传输的一部分)
  6. 演示文稿:这就像 CSS 样式表或其他东西
  7. 应用程序:显然 Twisted 不做这部分,你自己做。

然而,协议内分层更具有临时性。现在通常的习惯用法是简单地将 Protocol 子类化,然后将 from 委托dataReceived给特定于您的分层习惯用法的新方法,例如lineReceived,然后将下一层子类化。

如果你真的想要一个使用 Twisted 的 TCP 实现,请看这里

如果你想看到一个改进 Twisted 内部分层的接口提案,请参阅此处

于 2012-10-02T18:50:03.270 回答