【问题标题】:How to distinguish protocols in a TCP/UDP payload?如何区分 TCP/UDP 有效负载中的协议?
【发布时间】:2020-07-31 21:23:01
【问题描述】:

IP 数据包有一个 8 位标头(Protocol 用于 v4,Next Header 用于 v6),它决定了负载中使用的传输层协议。例如,如果是 6,则有效负载是 TCP 段,如果是 17,则这是 UDP 段。

但是我们如何找到在 TCP 或 UDP 负载中使用的应用层协议呢?没有可用于相同目的的此类标头。我们如何区分封装 HTTP 请求的有效负载和封装 SMTP 邮件的有效负载?是使用的端口吗?如果是这样,如果我在端口 80 而不是 25 上发送 SMTP 邮件,它会被解释为 HTTP 请求而不是 SMTP 邮件吗?

感谢您的帮助。

【问题讨论】:

  • 如果您确实为多个应用程序协议使用相同的连接,请将其放入有效负载中。我建议这是相当罕见的。更常见的是,您只需区分同一整体应用协议中的不同消息类型。
  • 有时根本没有协议,只有实际数据,例如文件的内容。

标签: networking tcp udp ip


【解决方案1】:

如果是这样,如果我在端口 80 而不是 25 上发送 SMTP 邮件,它会被解释为 HTTP 请求而不是 SMTP 邮件吗?

通常没有定义应用协议的特定标记。相反,这是一个通信对等方对彼此的期望的问题。

如果您向 SMTP 服务器发送 HTTP 请求,服务器将尝试将信息解释为 SMTP - 因为这是它所期望的。由于 HTTP 请求看起来与 SMTP 不同,服务器会以某种方式抱怨,比如简单地关闭连接或发送 SMTP 错误响应 - 因为这是一个 SMTP 服务器,它会说话并期望 SMTP。客户端发送将尝试将服务器 SMTP 响应解释为 HTTP 响应 - 因为这是它所期望的。当然,这样做会失败,因为 SMTP 看起来与 HTTP 非常不同。

【讨论】:

  • 好的,但是如果一个数据块可以在 2 个不同的协议中解释,并且它可以完美匹配 len 标头等等,那么这个数据可以被解释为一个有效的数据包两种协议的通信对等体,对吧?
  • @JacopoStanchi:再次,这完全符合预期。如果接收者得到的与它期望的匹配,它将被解释为属于预期的协议。当然,发送者的意图可能完全不同。
猜你喜欢
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-20
  • 2017-01-05
  • 1970-01-01
  • 2013-10-05
  • 2021-02-02
相关资源
最近更新 更多