【问题标题】:Raw Sockets - Internet Protocol Layers原始套接字 - Internet 协议层
【发布时间】:2012-05-19 17:10:12
【问题描述】:

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

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

如果我在无线路由器后面,是否仍应使用我的 LAN 地址 (192.168.1.1) 或路由器的互联网地址 (74.125.226.68) 填写我的 IP 标头的 IP 源地址?

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

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

【问题讨论】:

    标签: c raw-sockets


    【解决方案1】:

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

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

    如果我在无线路由器后面,是否仍应使用我的 LAN 地址 (192.168.1.1) 或路由器的互联网地址 (74.125.226.68) 填写我的 IP 标头的 IP 源地址?

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

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

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

    【讨论】:

    • 谢谢你的澄清,nyi。
    猜你喜欢
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 2013-10-02
    • 2011-01-23
    • 2014-11-24
    • 1970-01-01
    相关资源
    最近更新 更多