【免费下载链接】mush8A native Mach-O iOS/macOS port of Mario Kart 8 Deluxe, with LAN, online and wireless multiplayer项目地址https://gitcode.com/gh_mirrors/mu/mush8点击查看免费下载Mush8 是《超级马力欧赛车8 豪华版》Mario Kart 8 Deluxe在 Apple Silicon 上的原生 Mach-O 移植支持 iOS/macOS最大亮点是LAN、在线、无线三种联机模式。它的网络核心是 nxhost 里的虚拟网络栈vnet用一个仅含一个send方法的Transport 抽象把「同网段 Wi-Fi」「在线服务器隧道」「设备间 P2P 直连」三条完全不同的链路统一成同一种发 IPv4 数据包的行为让马车8的原始网络代码在 iPhone 上也能找到对手。为什么 iPhone 上跑马车8联机并不容易马车8是为 Switch 编写的它的房间发现依赖局域网里的 UDP 广播和组播。在 iOS/macOS 上直接搬过来会遇到三个问题联机方式难点LANmacOS/iOS 经常静默丢弃广播包组播更受限制在线双方都在 NAT 之后没有公共服务器就根本连不上无线跨设备直连需要走系统级 P2P 通道而不是普通 socketMush8 的思路是不跟真实网络较劲而是在进程内造一张虚拟网卡游戏以为自己在标准以太网里具体数据怎么真正送出去交给可插拔的 Transport 实现。架构总览一张图看懂虚拟网络栈马车8Switch 原生代码几乎未改动 │ BSD socket 系统调用 ▼ bsd.rs —— 拦截 socket / send / recv / poll │ ▼ vnet.rs —— 虚拟网卡10.13.x.x 地址、虚拟 UDP socket、 手动组 IPv4/UDP 包、校验和、MTU 分片与重组 │ Transport::send([u8]) ┌────┴──────────────┬───────────────┐ ▼ ▼ ▼ LAN 模式 在线模式 无线模式 真实 Wi-Fi 直发 UDP 隧道经 Apple Network Bonjour 广播补位 lan-play 服务器 框架 P2P 安全 UDP lanplay.rs wireless.rs整体模式由NX_NET环境变量决定off/lan/lanplay/wireless启动器选择联机方式时设置它见 vnet.rs#L26-L54。Transport 抽象只有一个方法的万能网卡接口整个网络栈的关键抽象只有三行vnet.rs#L9-L11pub trait Transport: Send Sync static { fn send(self, packet: [u8]); }设计取舍非常克制虚拟栈只管组包vnet.rs#L367-L400 里的packets()手工构造 IPv4 头和 UDP 头、计算校验和、按 MTU 1500 分片Transport 只管送货它收到的就是一段完整 IPv4 包至于走 Wi-Fi、走服务器隧道还是走 P2P虚拟栈完全不知道收包统一走receive()vnet.rs#L431-L469 负责解析、校验、分片重组再投递给本机虚拟 socket——三种模式共用同一条接收路径。虚拟网卡给游戏一个 10.13.x.x 的家开启在线或无线模式后每台设备会随机分到一张10.13.x.x的虚拟网卡掩码255.255.0.0网关10.13.37.1见 vnet.rs#L80-L90nifm 服务网络管理服务的模拟器nifm.rs把这套虚拟地址报给游戏马车8因此以为自己接在普通家用网络上bsd 层做接管虚拟模式下游戏创建的每个AF_INET SOCK_DGRAMsocket 都被替换成虚拟 socketbsd.rs#L286-L293bind/connect/sendto/recvfrom/poll全部由 vnet.rs#L151-L307 实现临时端口从 50000 段随机起步对端是本网段内的其他 Mush8 实例——它们其实是分布在世界各处的真实设备只是被隧道拉到了同一个虚拟网段。三种联机模式如何各自落地 在线模式UDP 隧道穿过 NAT实现在 lanplay.rs连接用户指定的host:port默认端口11451每个 IPv4 包外加 1 字节类型头经 UDP 发出lanplay.rs#L24-L33服务器负责把数据包转发给同房间的其他玩家并做服务端的分片重组IPV4_FRAG每 10 秒发一次 KEEPALIVE/PING 测延迟30 秒无回应判定掉线断连后每 5 秒自动重连lanplay.rs#L61-L141。这条链路让全世界任意两台设备都能同场竞技同房间的 Switch 也能加入。无线模式设备之间 P2P 直连实现在 wireless.rs基于 Apple 的 Network 框架用nw_parameters_create_secure_udp建立安全 UDP并开启peer_to_peer不经过任何服务器wireless.rs#L37-L80以 Bonjour 服务_mush8-mp._udp互相发现附近设备wireless.rs#L16send提交到独立 DispatchQueue 异步执行用 512 的 backlog 上限防止拥塞时内存膨胀wireless.rs#L91-L103。适合两台设备不在同一 Wi-Fi、但物理上靠近的场景。LAN 模式真实 Wi-Fi Bonjour 补广播LAN 模式是半虚半实它不走 Transport游戏的 socket 就是宿主机真实 socket直连同网段的 Switch 和手机。唯一的补丁是广播——lan.rs 用 Bonjour_mush8._tcp端口 21420持续发现同网段的其它 Mush8 实例每当游戏发出广播bsd 层就向已知对端逐个补发单播拷贝bsd.rs#L135-L147、lan.rs#L29-L34。三种模式的对照模式数据路径发现机制是否走 TransportLAN真实 Wi-Fi socketBonjour_mush8._tcp否仅广播补位在线UDP 隧道 → 服务器转发服务器房间✅LanPlay无线Network 框架 P2P 安全 UDPBonjour_mush8-mp._udp✅Wireless源码导览5 个文件读懂整个网络栈文件职责crates/nxhost/src/services/vnet.rs虚拟网卡Transporttrait、虚拟 UDP socket、组包与分片重组crates/nxhost/src/services/bsd.rsBSD 系统调用层socket 拦截、poll等待、LAN 广播补发crates/nxhost/src/services/lan.rsLAN 模式Bonjour 浏览/注册对端crates/nxhost/src/services/lanplay.rs在线模式服务器隧道、心跳、重连、分片重组crates/nxhost/src/services/wireless.rs无线模式Network 框架 P2P 安全 UDP更完整的项目背景构建、联机模式入口、游戏文件准备见 README.md。小结Mush8 的虚拟网络栈给出了一个教科书式的答案把网络切成两层——一层稳定的虚拟以太网游戏看得见的部分一层可替换的物理链路Transport。加一种新的联机方式只需要再写一个Transport实现游戏代码和虚拟栈一行都不用动。这正是它能在同一份马车8代码上同时做到局域网对战、全球在线和无线直连的原因。赞分享【免费下载链接】mush8A native Mach-O iOS/macOS port of Mario Kart 8 Deluxe, with LAN, online and wireless multiplayer项目地址https://gitcode.com/gh_mirrors/mu/mush8点击查看免费下载相关推荐Onchain OS DEX Signal 命令全解用 onchainos CLI 追踪聪明钱、KOL 与巨鲸的交易信号和牛人榜Onchain OS DEX Signal 命令全解用 onchainos CLI 追踪聪明钱、KOL 与巨鲸的交易信号和牛人榜 本文是 okx dex 技能React Native DOM 生产部署完全指南从开发到上线的完整流程React Native DOM 生产部署完全指南从开发到上线的完整流程 React Native DOM 作为一个实验性的 React Native Web如何让 Virtual Mac 稳定联网iPadOS 虚拟机网络配置实战如何让 Virtual Mac 稳定联网iPadOS 虚拟机网络配置实战 Virtual Mac 是一款能让 iPad Pro/AirM1、M2 芯片越狱上一篇Subnautica多人联机终极指南Nitrox模组如何让深海冒险不再孤单下一篇探索未来生活伙伴 —— 如何使用 Stephanie 打造你的专属语音虚拟助手创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考