不同主机间以太网通信
(含PC↔PC、PC↔RK3588开发板、开发板↔开发板全场景,从物理连接到应用层通信全覆盖)
一、核心基础概念
以太网是目前最通用的有线局域网技术,主机间通信本质是数据帧通过物理介质在MAC层传输,IP层负责寻址,传输层负责端到端连接。
1. 关键术语
| 术语 | 作用 | 示例 |
|---|---|---|
| MAC地址 | 网卡的全球唯一物理地址,二层寻址用 | 00:1A:2B:3C:4D:5E |
| IP地址 | 三层网络逻辑地址,标识主机在网络中的位置 | 192.168.1.100 |
| 子网掩码 | 区分IP地址中的网络位和主机位 | 255.255.255.0(/24) |
| 网关 | 不同网段之间通信的转发节点 | 192.168.1.1 |
| 端口 | 传输层标识主机上的具体应用进程 | SSH:22, HTTP:80 |
2. 两种连接拓扑
| 拓扑 | 适用场景 | 特点 |
|---|---|---|
| 直连 | 两台主机一对一通信(如PC调试开发板) | 无需交换机,速度最快,配置最简单 |
| 交换机/路由器连接 | 多台主机组网 | 可扩展,支持多设备同时通信,可访问外网 |
✅ 重要提示:现在所有网卡都支持自动翻转(Auto-MDIX),直连无需使用交叉线,普通直通网线即可。
二、第一步:物理连接
1. 直连方式(两台主机)
- 准备一根Cat5e及以上的网线(千兆网络必须用Cat5e或Cat6)
- 一端插入主机A的网口,另一端插入主机B的网口
- 观察网口指示灯:
- 绿灯常亮:物理连接正常
- 黄灯闪烁:有数据传输
- 灯不亮:网线损坏、网口损坏或网卡未启用
2. 交换机/路由器连接(多台主机)
- 所有主机都用网线连接到交换机或路由器的LAN口
- 路由器会自动为所有主机分配IP地址(DHCP)
- 所有主机默认处于同一个局域网,可以互相通信
三、第二步:IP地址配置(最关键步骤)
同一局域网内的主机必须满足:网络位相同,主机位不同 。
例如:子网掩码255.255.255.0时,192.168.1.100和192.168.1.101可以通信,192.168.1.100和192.168.2.100不能直接通信。
方案A:动态IP(DHCP,路由器连接推荐)
- 所有主机将IP获取方式设置为"自动获取"
- 路由器会自动分配同一网段的IP地址
- 无需手动配置,即插即用
方案B:静态IP(直连或固定地址推荐,开发首选)
1. Windows系统配置静态IP
- 按下
Win+R,输入ncpa.cpl,回车打开网络连接 - 右键点击对应的以太网适配器,选择"属性"
- 双击"Internet协议版本4 (TCP/IPv4)"
- 选择"使用下面的IP地址",填写:
- IP地址:
192.168.1.100(示例) - 子网掩码:
255.255.255.0 - 默认网关:
192.168.1.1(直连时可以不填,路由器连接填路由器IP) - DNS服务器:
8.8.8.8(谷歌DNS)或114.114.114.114(国内DNS)
- IP地址:
- 点击"确定"保存
2. Linux PC(Ubuntu)配置静态IP
临时生效(重启丢失)
bash
# 查看网卡名称(通常是eth0或ens33)
ip addr
# 设置IP地址和子网掩码
sudo ip addr add 192.168.1.101/24 dev eth0
# 启用网卡
sudo ip link set eth0 up
永久生效(Ubuntu 22.04+,Netplan方式)
-
编辑Netplan配置文件:
bashsudo nano /etc/netplan/00-installer-config.yaml -
写入以下内容:
yamlnetwork: ethernets: eth0: # 替换为你的网卡名称 addresses: [192.168.1.101/24] gateway4: 192.168.1.1 # 直连时注释此行 nameservers: addresses: [8.8.8.8, 114.114.114.114] version: 2 -
应用配置:
bashsudo netplan apply
3. 飞凌RK3588开发板(Linux)配置静态IP
临时生效
bash
# 飞凌ELF2开发板默认网卡名称是eth0
sudo ip addr add 192.168.1.102/24 dev eth0
sudo ip link set eth0 up
永久生效
编辑/etc/network/interfaces文件:
bash
sudo nano /etc/network/interfaces
添加以下内容:
auto eth0
iface eth0 inet static
address 192.168.1.102
netmask 255.255.255.0
gateway 192.168.1.1 # 直连时注释此行
dns-nameservers 8.8.8.8 114.114.114.114
保存后重启网络服务:
bash
sudo systemctl restart networking
四、第三步:连通性测试
1. 基础连通性测试(ping命令)
在主机A上ping主机B的IP地址:
bash
# Windows
ping 192.168.1.102
# Linux
ping 192.168.1.102
- ✅ 成功:显示来自目标IP的回复,延迟稳定
- ❌ 失败:显示"请求超时"或"目标主机不可达"
2. 二层连通性测试(arp命令)
查看ARP缓存,确认是否能解析到对方的MAC地址:
bash
# Windows
arp -a
# Linux
ip neigh
如果能看到对方IP对应的MAC地址,说明物理层和数据链路层正常,问题出在三层及以上。
3. 路由跟踪测试
如果跨网段通信失败,使用以下命令排查路由:
bash
# Windows
tracert 192.168.2.100
# Linux
traceroute 192.168.2.100
四、常用主机间通信方式(开发必备)
1. SSH远程登录(最常用,命令行控制)
用于从PC远程登录到开发板或另一台Linux主机,执行命令和调试程序。
服务器端(开发板/Linux PC)
bash
# 安装SSH服务器(飞凌SDK默认已安装)
sudo apt update && sudo apt install -y openssh-server
# 启动SSH服务
sudo systemctl start ssh
# 设置开机自启
sudo systemctl enable ssh
客户端(PC)
- Windows:使用PuTTY、Xshell或Windows Terminal
- Linux/macOS:使用原生ssh命令
bash
# 语法:ssh 用户名@IP地址
ssh forlinx@192.168.1.102
输入密码后即可登录到远程主机的命令行。
2. SCP/SFTP文件传输
用于在主机之间传输文件,基于SSH协议,安全可靠。
SCP命令行传输
bash
# 从PC上传文件到开发板
scp /path/to/local/file forlinx@192.168.1.102:/path/to/remote/directory
# 从开发板下载文件到PC
scp forlinx@192.168.1.102:/path/to/remote/file /path/to/local/directory
# 上传整个文件夹(加-r参数)
scp -r /path/to/local/folder forlinx@192.168.1.102:/path/to/remote/directory
SFTP图形化传输
推荐使用FileZilla、WinSCP等工具,支持拖拽式文件传输,操作更直观。
3. NFS网络文件系统(嵌入式开发首选)
开发板挂载PC上的共享目录,程序编译后直接在开发板上运行,无需反复烧写或传输文件,极大提高开发效率。
服务器端(PC,Ubuntu)
-
安装NFS服务器:
bashsudo apt install -y nfs-kernel-server -
编辑导出文件:
bashsudo nano /etc/exports -
添加以下内容(共享
/home/user/nfs_share目录给所有主机):/home/user/nfs_share *(rw,sync,no_subtree_check,no_root_squash) -
创建共享目录并设置权限:
bashmkdir -p /home/user/nfs_share sudo chmod 777 /home/user/nfs_share -
重启NFS服务:
bashsudo systemctl restart nfs-kernel-server
客户端(RK3588开发板)
bash
# 安装NFS客户端
sudo apt install -y nfs-common
# 创建挂载点
sudo mkdir -p /mnt/nfs
# 挂载PC的共享目录
sudo mount -t nfs 192.168.1.100:/home/user/nfs_share /mnt/nfs -o nolock
# 测试:在PC的共享目录创建文件,开发板的/mnt/nfs目录下会同步出现
4. Samba文件共享(Windows↔Linux互传)
用于Windows和Linux主机之间的文件共享,支持Windows网络邻居访问。
服务器端(Linux/开发板)
-
安装Samba:
bashsudo apt install -y samba -
编辑配置文件:
bashsudo nano /etc/samba/smb.conf -
在文件末尾添加:
[share] comment = Shared Folder path = /home/forlinx/share browseable = yes writable = yes guest ok = yes read only = no -
创建共享目录并设置权限:
bashmkdir -p /home/forlinx/share sudo chmod 777 /home/forlinx/share -
重启Samba服务:
bashsudo systemctl restart smbd
客户端(Windows)
- 按下
Win+R,输入\\192.168.1.102,回车 - 即可看到共享的
share文件夹,直接拖拽文件进行传输
五、常见问题排查流程(按优先级)
-
物理层检查
- 确认网线插紧,网口指示灯正常
- 更换网线和网口测试
- 确认网卡已启用(没有被禁用)
-
IP配置检查
- 两台主机的IP地址是否在同一网段
- 子网掩码是否一致
- 没有IP地址冲突
-
防火墙检查(90%的通信失败都是防火墙导致的)
-
Windows:关闭Windows Defender防火墙或添加例外规则
-
Linux:
bash# 查看防火墙状态 sudo ufw status # 临时关闭防火墙 sudo ufw disable # 开放SSH端口 sudo ufw allow 22
-
-
服务检查
- 确认SSH、NFS、Samba等服务已启动
- 查看服务日志排查错误:
journalctl -u ssh
-
驱动检查
- 确认网卡驱动已正确加载:
lspci | grep Ethernet - 查看网卡状态:
ip link show eth0
- 确认网卡驱动已正确加载:
六、不同场景推荐方案
| 场景 | 推荐通信方式 |
|---|---|
| PC远程控制开发板 | SSH + SCP |
| 嵌入式开发调试(频繁传输程序) | NFS网络挂载 |
| Windows和Linux互传大文件 | Samba共享 |
| 两台Linux主机快速传文件 | SCP |
| 自定义应用程序通信 | TCP/UDP Socket编程 |