不同主机之间网络通信-以太网连接复习

不同主机间以太网通信

(含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. 直连方式(两台主机)

  1. 准备一根Cat5e及以上的网线(千兆网络必须用Cat5e或Cat6)
  2. 一端插入主机A的网口,另一端插入主机B的网口
  3. 观察网口指示灯:
    • 绿灯常亮:物理连接正常
    • 黄灯闪烁:有数据传输
    • 灯不亮:网线损坏、网口损坏或网卡未启用

2. 交换机/路由器连接(多台主机)

  1. 所有主机都用网线连接到交换机或路由器的LAN口
  2. 路由器会自动为所有主机分配IP地址(DHCP)
  3. 所有主机默认处于同一个局域网,可以互相通信

三、第二步:IP地址配置(最关键步骤)

同一局域网内的主机必须满足:网络位相同,主机位不同

例如:子网掩码255.255.255.0时,192.168.1.100192.168.1.101可以通信,192.168.1.100192.168.2.100不能直接通信。

方案A:动态IP(DHCP,路由器连接推荐)

  • 所有主机将IP获取方式设置为"自动获取"
  • 路由器会自动分配同一网段的IP地址
  • 无需手动配置,即插即用

方案B:静态IP(直连或固定地址推荐,开发首选)

1. Windows系统配置静态IP
  1. 按下Win+R,输入ncpa.cpl,回车打开网络连接
  2. 右键点击对应的以太网适配器,选择"属性"
  3. 双击"Internet协议版本4 (TCP/IPv4)"
  4. 选择"使用下面的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)
  5. 点击"确定"保存
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方式)
  1. 编辑Netplan配置文件:

    bash 复制代码
    sudo nano /etc/netplan/00-installer-config.yaml
  2. 写入以下内容:

    yaml 复制代码
    network:
      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
  3. 应用配置:

    bash 复制代码
    sudo 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)
  1. 安装NFS服务器:

    bash 复制代码
    sudo apt install -y nfs-kernel-server
  2. 编辑导出文件:

    bash 复制代码
    sudo nano /etc/exports
  3. 添加以下内容(共享/home/user/nfs_share目录给所有主机):

    复制代码
    /home/user/nfs_share *(rw,sync,no_subtree_check,no_root_squash)
  4. 创建共享目录并设置权限:

    bash 复制代码
    mkdir -p /home/user/nfs_share
    sudo chmod 777 /home/user/nfs_share
  5. 重启NFS服务:

    bash 复制代码
    sudo 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/开发板)
  1. 安装Samba:

    bash 复制代码
    sudo apt install -y samba
  2. 编辑配置文件:

    bash 复制代码
    sudo nano /etc/samba/smb.conf
  3. 在文件末尾添加:

    复制代码
    [share]
    comment = Shared Folder
    path = /home/forlinx/share
    browseable = yes
    writable = yes
    guest ok = yes
    read only = no
  4. 创建共享目录并设置权限:

    bash 复制代码
    mkdir -p /home/forlinx/share
    sudo chmod 777 /home/forlinx/share
  5. 重启Samba服务:

    bash 复制代码
    sudo systemctl restart smbd
客户端(Windows)
  1. 按下Win+R,输入\\192.168.1.102,回车
  2. 即可看到共享的share文件夹,直接拖拽文件进行传输

五、常见问题排查流程(按优先级)

  1. 物理层检查

    • 确认网线插紧,网口指示灯正常
    • 更换网线和网口测试
    • 确认网卡已启用(没有被禁用)
  2. IP配置检查

    • 两台主机的IP地址是否在同一网段
    • 子网掩码是否一致
    • 没有IP地址冲突
  3. 防火墙检查(90%的通信失败都是防火墙导致的)

    • Windows:关闭Windows Defender防火墙或添加例外规则

    • Linux:

      bash 复制代码
      # 查看防火墙状态
      sudo ufw status
      
      # 临时关闭防火墙
      sudo ufw disable
      
      # 开放SSH端口
      sudo ufw allow 22
  4. 服务检查

    • 确认SSH、NFS、Samba等服务已启动
    • 查看服务日志排查错误:journalctl -u ssh
  5. 驱动检查

    • 确认网卡驱动已正确加载:lspci | grep Ethernet
    • 查看网卡状态:ip link show eth0

六、不同场景推荐方案

场景 推荐通信方式
PC远程控制开发板 SSH + SCP
嵌入式开发调试(频繁传输程序) NFS网络挂载
Windows和Linux互传大文件 Samba共享
两台Linux主机快速传文件 SCP
自定义应用程序通信 TCP/UDP Socket编程
相关推荐
山居秋暝LS6 小时前
【无标题】RTX00安装paddle OCR,win11不能装最新的,也不能用GPU
开发语言·r语言
卢锡荣6 小时前
单芯通吃,盲插标杆 —— 乐得瑞 LDR6020,Type‑C 全场景互联 “智慧芯”
c语言·开发语言·计算机外设
Xin_ye100866 小时前
C# 零基础到精通教程 - 第七章:面向对象编程(入门)——类与对象
开发语言·c#
AI科技星7 小时前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
审判长烧鸡7 小时前
【Go工具】go-playground是什么组织?官方的?
开发语言·安全·go
kkeeper~7 小时前
0基础C语言积跬步之字符函数与字符串函数(上)
c语言·开发语言
hhb_6188 小时前
Swift核心技术难点与实战案例解析
开发语言·ios·swift
一楼的猫8 小时前
从工具链视角对比:番茄作家助手 vs 第三方写作辅助方案
java·服务器·开发语言·前端·学习·chatgpt·ai写作
程序leo源8 小时前
Qt窗口详解
开发语言·数据库·c++·qt·青少年编程·c#