【问题标题】:How to understand protocols and their implementations from code? [closed]如何从代码中理解协议及其实现? [关闭]
【发布时间】:2014-08-09 09:21:03
【问题描述】:

美好的一天。

我想了解计算机协议工作的基本方式,如 http、p2p、tcp/ip 等协议。

我发现了许多实现这些协议和 API 的代码,但每个代码都有自己的“独特性”——老实说,很多代码都令人望而生畏。

起初我认为大多数协议可以表示为(相对)简单的伪代码或流程图设计,但(据我在谷歌搜索一段时间后所知)是不正确的。

如果你们中的任何人能指出我正确的道路,和/或为我提供一些有用的提示,我将不胜感激。

  1. 哪个代码更适合学习?
  2. 需要关注哪些关键要素?
  3. 如何判断代码的哪一部分是协议本身的重要部分?

对于你们中的一些人来说,这个问题可能看起来太微不足道了,但这正是我选择在这里发布它的原因。谢谢!

【问题讨论】:

  • 这个问题似乎太宽泛了。有许多协议,虽然所有协议都有一些共同点,但它们之间的差异要大得多。
  • 感谢您的评论。我面临的一个关键问题是难以确定要坚持(并从中学习)哪个实现 - 查看实现的存储库,列表是无穷无尽的,我似乎无法过滤它。至于协议 - 我知道这些协议彼此不同。
  • 在开始选择要探索的协议之前,先选择一个目的。你想写什么样的软件?该软件必须能够实现什么样的协议(如果有的话)?一旦您决定了要研究哪种协议,您就可以更高效地查看该类别。
  • 我暂时不想写任何东西。我只是想学习。

标签: protocols network-protocols


【解决方案1】:

在阅读代码之前,您应该阅读协议规范。相反,在实现您自己的新协议时,您始终应该记录该协议(至少在长注释中)。

HTTP 这样的协议有一个冗长而复杂的规范。例如RFC2616 或更好的 RFC7230 和以下。有几本解释 HTTP 的书。

binary vs textual protocol 是一个常见问题。文本协议更容易调试。例如。 JSON 或上面的东西,例如JSONRPC

实际上,您可能应该使用实现该协议的现有库。对于 C 语言中的 HTTP(在 Linux 和 Posix 系统上),您可以在客户端使用 libcurl,在服务器端使用 libonion,但它们有很多替代方案。

【讨论】:

  • 感谢您的评论。我面临的一个关键问题是难以确定要坚持(并从中学习)哪个实现 - 查看实现的存储库,列表是无穷无尽的,我似乎无法过滤它。至于协议 - 我知道这些协议彼此不同。我会检查这些库。
猜你喜欢
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 2012-05-28
  • 1970-01-01
  • 2011-06-19
相关资源
最近更新 更多