TCP如何识别应用层协议?

How does TCP identify the application level protocol?

IP 协议数据报 header 包含一个 Protocol 字段来定义 IP 数据报数据部分中使用的协议。

TCP 数据包如何识别其应用层协议?我在 TCP header 格式中没有看到类似的字段。所以这一切都取决于 port number?

如果是这样,是否意味着我可以在同一端口上静默切换应用程序协议,就像 WebSocket 使用 HTTP 格式的握手请求告诉服务器从 HTTP 切换时发生的情况到 WebSocket 协议?

TCP本身并不关心使用的应用层协议。最接近的是端口号。端口号用于区分同一主机上的不同连接。当收到一个数据包时,操作系统使用端口号来确定它属于哪个程序。虽然很多协议都有标准的端口号,但并不一定要使用。

是的,您可以在同一个端口上切换协议。