URL 路径的概念仅在应用层级别支持?

Concept of URL path is supported only at application layer level?

我正在编写自己的客户端和服务器,它们实现了我自己的应用程序级协议。对于传输层,使用 TCP。对于 Internet 层,使用 IPv4。 TCP header 和 IPv4 header 都不包含有关 URL 路径的任何信息。 TCP header 包含端口,IPv4 包含 IP 地址。谁应该包含路径?

所以,考虑这个 URL - 127.0.0.1:4444/location-path127.0.0.1 应该是 IPv4 的一部分。 4444 应该是 TCP 的一部分。比如在Golang中,使用标准的net.Dial()net.Listen(),我只能使用127.0.0.1:4444。使用 127.0.0.1:4444/location-path 会抛出一个错误,这是意料之中的,因为它只支持 TCP/IP/domain 名称解析,而 /location-path 不属于这三个。

根据RFC 1738

url-path
    The rest of the locator consists of data specific to the
    scheme, and is known as the "url-path". It supplies the
    details of how the specified resource can be accessed. Note
    that the "/" between the host (or port) and the url-path is
    NOT part of the url-path.

The url-path syntax depends on the scheme being used, as does the
manner in which it is interpreted.

那么,我可以为 url-path 实施我自己的规则,客户端和服务器将如何解释它?要传输它,我可以将它作为数据发送吗?

例如,我可以只定义我自己的应用程序级协议 - proto - 将 url-path 放在 TCP 有效负载的前四个字节的规则吗?因此,proto://127.0.0.1:4444/path 将变为 127.0.0.1:4444,TCP 负载 [112 97 116 104]

最简单的比较方法是 HTTP。

http url 可能类似于 http://example:1234/bar

http 客户端理解 URL。 HTTP 客户端(在后台)仍会建立标准的 TCP 连接以到达那里。

它通过获取主机和端口部分并(暂时)丢弃其他所有内容来实现。所以在那个阶段只使用 example1234

TCP连接建立后,会使用路径部分作为第一行发送。

TCP 客户端不知道 URLs,他们知道主机和端口。你对路径部分的处理取决于.