TCP如何识别应用层协议?

Posted

技术标签:

【中文标题】TCP如何识别应用层协议?【英文标题】:How does TCP identify the application level protocol? 【发布时间】:2015-02-15 03:46:27 【问题描述】:

IP 协议数据报头包含一个Protocol 字段,用于定义在 IP 数据报的数据部分中使用的协议。

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

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

【问题讨论】:

根据这里(en.wikipedia.org/wiki/HTTP/1.1_Upgrade_header),似乎确实存在通过同一TCP端口切换的应用程序级协议。 还有一个参考:协议升级机制,developer.mozilla.org/en-US/docs/Web/HTTP/… 您的两个链接都是关于 HTTP 协议升级机制,而不是 TCP。 @EJP 我添加这两个链接只是为了表明应用程序级协议可以在不更改底层 TCP 端口的情况下启动协议切换。这与我原来问题的最后一部分有关。 没错,所以TCP和它无关,所以你的问题没有意义。 【参考方案1】:

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

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

【讨论】:

以上是关于TCP如何识别应用层协议?的主要内容,如果未能解决你的问题,请参考以下文章

http协议

TCP/IPHttp大纲

(转)复习TCP/IP协议与Http协议的区别

TCP/IPHTTP的区别

TCP/UDP HTTP

TCP/IPHttp的区别