Web 服务器如何返回 HTTP 请求?

Web 服务器如何返回 HTTP 请求?

如果这是一个非常愚蠢的问题,我很抱歉;我的网络知识相当匮乏。

因此,用户向某个地址发出 HTTP 请求。该请求来自本地子网上的地址,但路由器知道将请求发送到其默认网关,因为目标 IP 与其路由表中的任何其他内容都不匹配。请求在互联网上跳跃,最终被目标机器(Web 服务器)接收。这一切都说得通。

但是现在,Web 服务器如何设法将请求发送回本地计算机?请求不是来自本地子网上的 IP 地址吗?它从哪里获取本地计算机路由器的 IP 地址?即使它有该路由器的 IP,数据包到达路由器后如何路由到本地计算机?

答案1

如前所述,数据包具有源地址,但也分配有端口号。这在 NAT 环境中尤其需要(其中内部 IP 是私有的,而外部 IP 是恒定的 - 就像共享互联网连接一样)。路由器会分配一个随机未使用的端口号,并保存一个端口号所指的表(用户的计算机)。当路由器收到数据包时,它会查看端口号并进行匹配,然后发送给计算机/用户。

如果发现错误,请随时更新/更正,但这就是它的工作原理。希望这能有所帮助。

答案2

Web 服务器的响应处理方式与客户端的请求相同。它们只是 IP 数据报。

Web 服务器有一个默认网关,它会将响应发送到该网关。响应“在互联网上跳跃,最终被发出请求的客户端接收”。

Web 服务器对请求客户端的路由器一无所知。

编辑:

您的评论暴露了我做出的一个假设。

您正在谈论这样的场景:请求的客户端计算机具有私有 IP 地址,并且连接到具有网络地址解读(NAT)路由器,位于客户端网络边界(该网络连接到互联网的地方)。

在这种情况下,NAT 路由器会将客户端计算机的 IP 地址转换为分配给 NAT 路由器“外部”接口的公共 IP 地址。NAT 路由器会跟踪请求,以便在收到来自互联网的响应后将其路由回客户端。

答案3

答案在于SPI——状态数据包检测。这就是路由器如何跟踪在其子网上发送响应的位置。我自己并不知道所有的细节(我从来不需要知道),但如果你跟踪链接,你会发现你可能需要知道的尽可能多的信息。如果没有,搜索“状态包检测”将填补任何空白。

相关内容