tcp 代理会话详细信息包括哪些内容?

What does tcp proxy session details include?

假设TCP代理已经将请求转发回后端服务器。当它收到后端服务器的回复时,它如何知道要回复哪个客户端。代理存储哪些确切的会话信息?

谁能解释一下这个问题

这取决于协议,取决于代理,取决于透明度是否是目标。详尽地解决所有这些问题需要很长时间,所以让我们考虑一个简单的案例。

软件中的网络连接通常由某种句柄表示(无论是文件描述符还是其他资源)。在 POSIX 系统上的 C 程序中,我们可以简单地保持两个文件描述符相互关联:

struct proxy_session {
    int client_fd;
    int server_fd;
}

这是最低要求。

当客户端连接时,我们分配这些结构之一。可能有一个协议让我们知道我们应该使用什么后端,或者我们可能正在做负载平衡和自己选择后端。

一旦我们选择了后端(通过解析协议或通过做出某种形式的路由决定),我们就会启动到它的连接。简单地说,代理(作为中介)只是在客户端和服务器之间转发数据包。

我们可以使用任意数量的接口将这两个东西联系在一起。例如,在 Linux 上,epoll(2) 允许我们将指针关联到文件描述符上的事件。我们可以为客户端和服务器端提供指向我们的 proxy_session 结构的指针。当数据进入这些文件描述符中的任何一个时,我们知道将其映射到哪里。

由于缺少这样的接口,我们必须有一种方法来区分连接句柄(无论它们是文件描述符、指针还是其他一些表示形式)。然后我们可以使用像散列 table 这样的结构来查找句柄的目的地。只需能够区分彼此的连接,并保持将两个连接“粘合”在一起的某种状态,即可找到解决方案。