我正在研究套接字概念。据我所知,套接字就像在通信设备(或进程)两端创建的电插座。套接字可以永远保持活动状态以侦听某些请求(这可能是制作任何服务器程序的关键概念)。
然而,我好奇地想知道是否有可能在不创建任何套接字(文件描述符)的情况下在两台计算机之间进行通信?
请帮助详细描述,我是该领域的新手。
先感谢您!
答案1
套接字只是一种标准化的编程接口。理论上,可以直接与网卡配合使用(DPDK 等库就是这样做的),但使用套接字 API 会使其变得更容易,并且不受特定硬件和网络设置的约束。
答案2
任何有网卡的计算机只要有二层 Mac 目标地址,就可以接收数据包。因此Is it actually possible to send some data to remote destination over tcp/ip without any socket?
[答案] 是的,发送数据包时将目标 MAC 地址作为所需的计算机 MAC 地址。数据包将在 NIC 上接收而不会丢失。如果远程目标是同一个 LAN,或者可以通过 VLAN 组或对等连接到达,则情况确实如此。
注意:如果问题是Is it actually possible to send some data to remote destination (not in the same LAN network) over tcp/ip without any socket?
[答案] 不,如果目的地(远程目标)不在您的网络中,您无法仅通过 MAC 地址和/或 VLAN 到达目标机器。
有 2 个选项
- 如果机器通过第 2 层隧道(如 MPLS、VxLAN、PPoP)连接,则可以封装原始数据包(以太网 MAC + 有效负载)
- 您可以使用 IP 或 IP 封装,其中路由器将识别 IP 地址到 MAC 的转换并通过正确的部分转发使其到达目的地。
注意:DPDK、PF_RING、Netmap、XDP 是绕过内核堆栈的机制。使用内核绕过,您可以从 NIC 接收或传输数据包。但这将取决于网络交换机或路由器将在网络中发送或转发数据包的 L2/L3 的实际值