我想了解,一旦数据包到达 WireGuard 接口(wg0
),它会如何发送到 UDP 端口,然后从那里发送到接收对等体。
我读过 WireGuard 白皮书,上面写着
接口本身有一个私钥和一个它监听的 UDP 端口(稍后会详细介绍),后面跟着一个对等点列表
我对网络只有基本的了解,但我认为进程在端口上监听,那么网络接口在 UDP 端口上监听意味着什么?
如果网络接口有某种方式可以监听端口,那么在接收方,数据包同样可以从 UDP 端口在 WireGuard 接口上接收。这是正确的理解吗?
答案1
WireGuard 确实会创建一个 UDP 套接字,并将其绑定到具有特殊内核功能的地址:sock_create_kern
和kernel_bind
。
这是 WireGuard 的源代码用于创建 IPv4 套接字。IPv6 套接字也有类似的代码。
setup_upd_tunnel
WireGuard也将套接字通过调用绑定到 UDP 隧道。