networking - 如何区分 TCP/UDP 有效负载中的协议?
问题描述
IP 数据包有一个 8 位标头(Protocol
适用于 v4 和Next Header
v6),它确定有效负载中使用的传输层协议。例如,如果它是 6,则有效负载是一个 TCP 段,如果它是 17,那么这是一个 UDP 段。
但是我们如何找到在 TCP 或 UDP 有效负载中使用了哪个应用层协议呢?没有可用于相同目的的此类标头。我们如何区分封装 HTTP 请求的有效负载和封装 SMTP 邮件的有效负载?是使用的端口吗?如果是这样,如果我在端口 80 而不是 25 上发送 SMTP 邮件,它会被解释为 HTTP 请求而不是 SMTP 邮件吗?
谢谢您的帮助。
解决方案
如果是这样,如果我在端口 80 而不是 25 上发送 SMTP 邮件,它会被解释为 HTTP 请求而不是 SMTP 邮件吗?
通常没有定义应用协议的特定标记。相反,这是一个通信对等方彼此期望什么的问题。
如果您向 SMTP 服务器发送 HTTP 请求,服务器将尝试将信息解释为 SMTP——因为这是它所期望的。由于 HTTP 请求看起来与 SMTP 不同,服务器会以某种方式抱怨,比如简单地关闭连接或发送 SMTP 错误响应 - 因为这是一个 SMTP 服务器,它会说话并期望 SMTP。客户端发送将尝试将服务器 SMTP 响应解释为 HTTP 响应 -因为这是它所期望的。当然,这样做会失败,因为 SMTP 看起来与 HTTP 非常不同。
推荐阅读
- angular - 如何在 Firefox 浏览器中打开检查元素
- reactjs - 如何写入控制台属性数据?
- laravel - 请求在 https 上工作,但由于 cors 而在 http 上被阻止?
- mysql - 如何避免 SQL 中新添加的列标记出现空值?
- sql - 在对象 SQL (Oracle) 中查找有关集合的数据
- javascript - JavaScript 并行调用多个异步调用
- java - 如何设置 JFrame 图标图像?
- java - Java 8 和 Java 7 与类型参数绑定中的泛型方法有什么区别?
- python-3.7 - Python CGAL 中的 2.5D Delaunay 三角剖分
- python - 熊猫数据框中的常见字符串匹配