【问题标题】:Layering of protocols in twisted扭曲的协议分层
【发布时间】:2012-09-23 11:26:05
【问题描述】:

我几乎明白了——但我错过了关键点.....

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

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

【问题讨论】:

    标签: python protocols twisted


    【解决方案1】:

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

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

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

    如果你真的想要一个使用 Twisted 的 TCP 实现,look here

    如果您想看到改进 Twisted 内部分层的接口提案,请改用see here

    【讨论】:

    • 我不认为正式的、文档化的、广泛使用的协议和传输接口最好描述为“ad-hoc”,无论您多么喜欢电子管。 :)
    • dataReceivedstringReceiveddataReceivedlineReceived 之间的关系 ad-hoc 的。
    • 好的,更新了答案以描述协议/传输分层的非自组织接口。
    猜你喜欢
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多