doutang1946
2017-09-01 17:47
浏览 75
已采纳

如何在L3网络层上收听?

I am creating a chat application backend and want to take into consideration the scalability.

I wanted to create a load balancer but not on the L7 layer where HTTP is located, but on the L3 layer where IP network is located to direct connections to the specific servers where I can then make TCP.

Is net.ListenIP the correct function to use to listen to the packets on the IP layer?

Is it the same as the higher Listen("tcp") for example? Is it the right method that I need to implement the load balancer?

Is there a reference to how the packet is structured so I am able get out from it the source and destination IPs to forward them?

If not tell me which function to use to listen on the L3 network layer to balance the loads to other servers.

图片转代码服务由CSDN问答提供 功能建议

我正在创建聊天应用程序后端,并希望考虑可伸缩性。

我想创建一个负载均衡器,但不是在HTTP所在的L7层上,而是在IP网络所在的L3层上创建一个负载平衡器,以将连接定向到特定的服务器,然后我就可以创建 TCP

net.ListenIP 用于侦听IP层上数据包的正确功能?

与更高的 Listen( 例如“ tcp”) ? 是实现负载均衡器所需的正确方法吗?

是否有关于数据包结构的参考,因此我可以从中获取要转发的源IP和目标IP

如果不告诉我在L3网络层上使用哪个函数来侦听以平衡其他服务器的负载。

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dsf22567 2017-09-01 18:24
    已采纳

    After reading the Docs, yes this function will help you receive IP Packets.

    ListenIP acts like ListenPacket for IP networks.

    ListenIP is similar to ListenPacket("tcp") but for IP packets.

    As for the structure of IP packets, and working with them, the net package doesn't seem to have that.

    There's another package gopacket which looks like it will be able to help you read and modify packets from any layer.

    In gopacket there is a Packet type, which allows working with the network layer.

    Packet.NetworkLayer().LayerContent() and Packet.NetworkLayer().LayerPayload() will each return byte[] which you can interpret by the expected structure of an IP packet.


    Note: Now that I've written this whole thing I have to imagine somebody out there has written a nice overlay/wrapper to make this easier. This is just the result of me Googling for 10 minutes. Maybe somebody else will answer with a better tool/method

    评论
    解决 无用
    打赏 举报
  • 查看更多回答(1条)

相关推荐 更多相似问题