gpt4 book ai didi

c - 原始套接字 - Internet 协议(protocol)层

转载 作者:行者123 更新时间:2023-12-04 05:46:06 25 4
gpt4 key购买 nike

我一直在使用 C 语言中的 Raw Berkeley Sockets,它允许程序员访问 Internet 协议(protocol)套件的第 2 层(IP header )。我想知道原始套接字如何处理第 1 层(链路层)上的传输,特别是关于无线局域网。

例如,套接字如何知道将数据包发送到哪个网络接口(interface)(eth0 或 wlan0)?

如果我在无线路由器后面,我是否仍应使用我的 LAN 地址 (192.168.1.1) 或路由器的 Internet 地址 (74.125.226.68) 填充我的 IP header 的 IP 源地址?

如果我用我的 LAN 地址 (192.168.1.1) 填充 IP 源地址,IP header 在通过路由器时是否会更改,还是保持不变,以便数据包的接收端尝试发送响应其网络上的本地主机?

我将不胜感激这方面的任何见解。

最佳答案

For example, how does the socket know which network interface (eth0 or wlan0) to send the packet to?



您可以使用套接字选项 SO_BINDTODEVICE将您的套接字绑定(bind)到特定接口(interface)。否则,操作系统选择一个。

If I am behind a wireless router, should I still fill the IP Source Address of my IP Header with my LAN address (192.168.1.1), or with the internet address (74.125.226.68) of my router?



您应该使用您的 LAN 地址。如有必要,路由器负责处理 NAT(网络地址转换)。

If I do fill the IP Source address with my LAN address (192.168.1.1), does the IP Header get changed when it goes through the router, or does it stay that way, so that the receiving end of the packet attempts to send the response to a local host on its network?



如果在路由器上启用了 NAT,源地址将更改以反射(reflect)路由器的外部地址。否则,您的包很可能会被路由器或防火墙丢弃,因为您的源地址在它们的上下文中是无效的。

关于c - 原始套接字 - Internet 协议(protocol)层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10667273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com