![带宽问题:在我自己的服务器上调用“服务”(从我的服务器)](https://linux22.com/image/503202/%E5%B8%A6%E5%AE%BD%E9%97%AE%E9%A2%98%EF%BC%9A%E5%9C%A8%E6%88%91%E8%87%AA%E5%B7%B1%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E8%B0%83%E7%94%A8%E2%80%9C%E6%9C%8D%E5%8A%A1%E2%80%9D%EF%BC%88%E4%BB%8E%E6%88%91%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%89.png)
我正在运行一个网站,并且我有一些想要调用的 fastcgi 应用程序 - 但是,这些应用程序不能直接供公众访问 - 他们通过 RESTFUL 服务间接访问它们,然后使用 Curl(或其他机制)从 fgci 应用程序中获取数据。
我的问题是带宽问题。假设我使用 Curl 或 PHP 的 readfile(),它涉及指定 URL - 类似于http://localhost/fastcgi-bin/test.fgci
那么“网络”是否足够聪明,知道地址位于本地,因此不需要“到外面”,或者请求是否仍会被发送到外部 DNS,然后由外部 DNS 将该地址解析为我的计算机 IP 地址?
基本上,我想知道采用这种架构是否会增加我的带宽消耗。
答案1
您发送到同一台机器的任何数据包都应通过环回接口发出(并返回)——它们不会通过网络发出。您无需为它们付费。
您可以通过查看路由表来验证这一点。您没有提到您使用的是什么平台,所以我无法给出具体的例子,但从我的笔记本电脑来看:
sveiss@brakiri:~$ route get 192.168.1.1
route to: 192.168.1.1
destination: 192.168.1.1
interface: en1
flags: <UP,HOST,DONE,LLINFO,WASCLONED,IFSCOPE>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
0 0 0 0 0 0 1500 1198
sveiss@brakiri:~$ route get 192.168.1.63
route to: 192.168.1.63
destination: 192.168.1.63
interface: lo0
flags: <UP,HOST,DONE,STATIC>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
49152 49152 0 0 0 0 16384 0
sveiss@brakiri:~$ route get 127.0.0.1
route to: localhost
destination: localhost
interface: lo0
flags: <UP,HOST,DONE,LOCAL>
recvpipe sendpipe ssthresh rtt,msec rttvar hopcount mtu expire
49152 49152 0 0 0 0 16384 0
看一下这些interface:
行:发往机器本地地址(192.168.1.63 和 127.0.01)的流量通过lo0
环回接口发送。发往其他地方的流量将通过接口通过网络发出en1
。
现在,对于名称解析,您说得对,如果您为机器使用 DNS 名称,DNS 查询和响应很可能会超出本地范围。但应用程序流量不会:它将遵循路由表中的规则并使用环回接口,如上所述。
根据您的操作系统和配置(DNS 缓存是否打开?您使用的 DNS 名称是否列在本地主机文件中?),DNS 查询所消耗的带宽量将从零到极小 - 比其余外部流量小几个数量级。
答案2
任何环回数据包都不会进入网络,正如上面的发帖者所说。您不会使用任何带宽来处理本地请求。