【问题标题】:Tcp level Information on Ec2Tcp 级别 Ec2 上的信息
【发布时间】:2019-03-20 19:15:12
【问题描述】:

我正在尝试从数据包中获取 TCP 时间戳,以便在我的托管在 EC2 上的应用程序上进行时钟偏移。在我的网络中,我有一个 ALB。

所以我的问题是如何在我的应用程序中获取 TCP 级别的数据包信息?由于 ALB 过滤掉了除应用程序级别 (HTTP) 之外的所有 OSI 层

【问题讨论】:

标签: amazon-web-services amazon-ec2 tcp


【解决方案1】:

如果访问 TCP 数据包的唯一原因是检测时间戳和纠正时钟漂移,我建议将您的 EC2 实例配置为使用 NTP 时间服务器。
https://aws.amazon.com/blogs/aws/keeping-time-with-amazon-time-sync-service/

话虽如此,ALB 并未从网络数据包中“删除”TCP 信息。与您的应用程序建立的 HTTP 连接仍通过 IP 和 TCP 传输。如果您需要从应用程序对网络数据包进行低级别访问,我建议您查看 TCPDUMP 和许多其他工具用于捕获接口上的网络流量的 pCAP 库。

https://www.tcpdump.org/

[更新为包括 cmets]

了解客户端和 ALB 之间的 TCP 连接在 ALB 级别终止非常重要。 ALB 创建第二个 TCP 连接以将 HTTP 请求转发到您的 EC2 实例。 ALB 不会从 TCP/IP 中删除信息,它只是创建第二个独立的新连接。通常,您希望从初始 TCP 连接传播的唯一信息是源 IP 地址。与大多数负载平衡器和代理一样,ALB 从原始连接(从客户端接收的连接)中捕获此信息,并将该信息嵌入到名为X-Forwarded-For 的 HTTP 标头中。

这记录在https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x-forwarded-headers.html

如果你想从原始连接中捕获其他信息,恐怕使用 ALB 是不可能的。 (但我也会对用例很好奇,即你想要实现的目标)

【讨论】:

  • 我不这么认为,当我在我的应用程序中查看来自 ALB 的 http 数据包时,Ip 发起者始终是 ALB 的 Ip,而不是客户端的 ip。
  • 这是一个不同的问题。 HTTP 请求不会神奇地到达您的实例,它们是封装在以太网、IP 和 TCP 数据包中的。源 IP 地址当然是负载均衡器本身。如果您想检查原始发件人 IP 地址,您的应用必须查看 X-Forwarded-For HTTP 标头,如 docs.aws.amazon.com/elasticloadbalancing/latest/classic/… 所述
  • 如果你能更准确地描述你想要达到的目标,你会得到更准确的答案。
  • 我只想将原始数据包发送到我的 ALB,有没有办法获取原始 TCP?
  • 谢谢你们,@SébastienStormacq 请以答案格式而不是评论提供您的答案,以便我可以将其作为答案进行检查。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多