C 原始套接字-Internet协议层
我一直在使用C语言中的原始Berkeley套接字,它允许程序员访问Internet协议套件的第2层(IP头)。我想知道原始套接字如何处理第1层(链路层)上的传输,特别是关于无线局域网 例如,套接字如何知道将数据包发送到哪个网络接口(eth0或wlan0) 如果我在无线路由器后面,我应该仍然用我的LAN地址(192.168.1.1)或路由器的internet地址(74.125.226.68)填充我的IP报头的IP源地址吗 如果我用我的LAN地址(192.168.1.1)填充IP源地址,那么IP报头在通过路由器时会发生变化吗?还是会保持这种状态,以便数据包的接收端尝试将响应发送到其网络上的本地主机 我希望在这方面有任何见解 例如,套接字如何知道将数据包发送到哪个网络接口(eth0或wlan0) 您可以使用套接字选项C 原始套接字-Internet协议层,c,raw-sockets,C,Raw Sockets,我一直在使用C语言中的原始Berkeley套接字,它允许程序员访问Internet协议套件的第2层(IP头)。我想知道原始套接字如何处理第1层(链路层)上的传输,特别是关于无线局域网 例如,套接字如何知道将数据包发送到哪个网络接口(eth0或wlan0) 如果我在无线路由器后面,我应该仍然用我的LAN地址(192.168.1.1)或路由器的internet地址(74.125.226.68)填充我的IP报头的IP源地址吗 如果我用我的LAN地址(192.168.1.1)填充IP源地址,那么IP报头
SO\u BINDTODEVICE
将套接字绑定到特定接口。否则,操作系统将选择一个
如果我在无线路由器后面,我应该仍然用我的LAN地址(192.168.1.1)或路由器的internet地址(74.125.226.68)填充我的IP报头的IP源地址吗
你应该使用你的局域网地址。如有必要,路由器负责NAT(网络地址转换)
如果我用我的LAN地址(192.168.1.1)填充IP源地址,那么IP报头在通过路由器时会发生变化吗?还是会保持这种状态,以便数据包的接收端尝试将响应发送到其网络上的本地主机
如果在路由器上启用NAT,则源地址将更改以反映路由器的外部地址。否则,您的包可能会被路由器或防火墙丢弃,因为您的源地址在其上下文中无效。谢谢您的澄清,nyi。