目标:能够调试机器人网络、抓包分析、配置网络、排查基本网络问题。
适合:网络基础薄弱,以实用为主的学习者。
一、基础概念(先建立认知框架)
1.1 网络模型简介
不需要死记 OSI 七层,记住 TCP/IP 四层即可:
| 层次 | 作用 | 典型协议/工具 |
|---|---|---|
| 应用层 | 程序直接使用 | HTTP、ROS、SSH、Telnet |
| 传输层 | 端口、可靠性 | TCP、UDP |
| 网络层 | IP 寻址、路由 | IP、ICMP(ping 用的) |
| 链路层 | 物理网卡、MAC 地址 | Ethernet、WiFi |
1.2 必须理解的核心概念
- IP 地址 :设备在网络中的地址,如
192.168.1.100 - 子网掩码 :决定哪些 IP 在同一个局域网,如
255.255.255.0(即/24) - 网关 :局域网出口,通常是路由器 IP,如
192.168.1.1 - 端口:一个 IP 上区分不同服务的编号(0-65535),如 HTTP=80,SSH=22
- MAC 地址 :网卡硬件地址,局域网内唯一标识,如
aa:bb:cc:dd:ee:ff - DNS :域名解析,把
www.google.com转成 IP
机器人场景理解:机器人和上位机通常在同一局域网,通过 IP+端口通信(ROS 用 11311 端口,各种服务各有端口)。
二、查看网络状态(诊断第一步)
2.1 查看本机网络配置
bash
# 查看所有网卡的 IP、MAC 地址
ip addr
# 或简写
ip a
# 旧版命令(部分系统)
ifconfig
重点看:
inet:IPv4 地址和子网掩码(如192.168.1.100/24)ether:MAC 地址state UP/DOWN:网卡是否启用
bash
# 查看路由表(知道数据包往哪走)
ip route
# 或
route -n
# 输出示例:
# default via 192.168.1.1 dev eth0 <- 默认网关
# 192.168.1.0/24 dev eth0 <- 本地局域网段
2.2 ping ------ 测试连通性
bash
# 基本用法
ping 192.168.1.1
# 指定发送次数
ping -c 4 192.168.1.1
# 指定间隔(秒)
ping -i 0.5 192.168.1.1
# 测试 DNS 是否正常
ping www.baidu.com
看什么:
time=xxx ms:延迟,局域网通常 <1ms,异常则说明链路有问题Request timeout:对方不通或防火墙拦截Destination Host Unreachable:路由不通,检查网关和 IP 配置
机器人场景:上位机 ping 不通机器人 → 先检查 IP 配置,再检查网线/WiFi 连接。
2.3 netstat / ss ------ 查看端口和连接
bash
# 查看所有监听的端口(哪些服务在等待连接)
netstat -tlnp
# 或用更快的 ss
ss -tlnp
# 参数说明:
# -t TCP连接 -u UDP连接 -l 监听状态 -n 显示数字端口 -p 显示进程名
# 查看所有已建立的 TCP 连接
netstat -tnp
ss -tnp
# 查看某个端口是否被占用
netstat -tlnp | grep 8080
ss -tlnp | grep 8080
# 查看 UDP 端口
ss -ulnp
输出解读:
Proto Local Address Foreign Address State PID/Program
tcp 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd
tcp 192.168.1.10:22 192.168.1.5:54321 ESTABLISHED 5678/sshd
LISTEN:服务正在监听,等待连接ESTABLISHED:已建立连接TIME_WAIT:连接正在关闭
2.4 查看 ARP 表(局域网设备发现)
bash
# 查看 ARP 缓存(IP 对应的 MAC)
arp -n
# 或
ip neigh
# 扫描局域网内存活的设备
arp-scan -l
# 或
nmap -sn 192.168.1.0/24
三、连接测试工具
3.1 telnet ------ 测试 TCP 端口连通性
bash
# 安装(Ubuntu)
sudo apt install telnet
# 测试某个 IP 的端口是否可达
telnet 192.168.1.100 8080
# 输出:
# Connected to 192.168.1.100. -> 端口通,服务在运行
# Connection refused -> 端口不通,服务未启动
# 无响应/超时 -> 网络不通或防火墙拦截
退出 telnet :Ctrl+] 然后输入 quit
机器人场景 :机器人开了一个 9090 端口的 WebSocket Bridge,用 telnet 机器人IP 9090 快速验证端口是否开放。
3.2 nc(netcat)------ 更强的端口测试
bash
# 测试 TCP 端口
nc -zv 192.168.1.100 8080
# 测试 UDP 端口
nc -zuv 192.168.1.100 9090
# 扫描一段端口
nc -zv 192.168.1.100 8000-9000
# 参数:-z 扫描不发数据 -v 详细输出
3.3 curl ------ 测试 HTTP 接口
bash
# 测试 HTTP 服务是否正常
curl http://192.168.1.100:8080/
# 显示响应头
curl -I http://192.168.1.100:8080/
# POST 请求
curl -X POST -d '{"cmd":"stop"}' http://192.168.1.100:8080/api
# 带超时时间
curl --connect-timeout 5 http://192.168.1.100:8080/
3.4 ssh ------ 远程登录机器人
bash
# 登录
ssh user@192.168.1.100
# 指定端口
ssh -p 2222 user@192.168.1.100
# 免密登录配置
ssh-keygen -t rsa # 生成密钥对
ssh-copy-id user@192.168.1.100 # 把公钥复制到目标机器
# 测试 SSH 连通性(不登录)
ssh -o ConnectTimeout=5 user@192.168.1.100 exit
四、抓包分析
4.1 tcpdump ------ 命令行抓包
bash
# 安装
sudo apt install tcpdump
# 抓取指定网卡的所有包
sudo tcpdump -i eth0
# 抓取指定 IP 的包
sudo tcpdump -i eth0 host 192.168.1.100
# 抓取指定端口
sudo tcpdump -i eth0 port 8080
# 抓取并保存到文件(用 Wireshark 分析)
sudo tcpdump -i eth0 -w capture.pcap
# 只抓 100 个包
sudo tcpdump -i eth0 -c 100
# 组合过滤:某 IP 的某端口
sudo tcpdump -i eth0 host 192.168.1.100 and port 8080
# 显示详细内容(ASCII)
sudo tcpdump -i eth0 -A port 80
# 查看所有可用网卡
sudo tcpdump -D
常用过滤语法:
bash
# TCP 包
tcpdump tcp
# UDP 包
tcpdump udp
# 来自某 IP
tcpdump src 192.168.1.100
# 发往某 IP
tcpdump dst 192.168.1.100
# 某网段
tcpdump net 192.168.1.0/24
4.2 Wireshark ------ 图形化抓包分析
bash
# 安装
sudo apt install wireshark
# 启动
wireshark
核心用法:
- 选择网卡 → 开始抓包
- 过滤栏输入过滤条件:
ip.addr == 192.168.1.100--- 过滤某 IPtcp.port == 8080--- 过滤端口http--- 只看 HTTPicmp--- 只看 ping
- 右键包 →
Follow TCP Stream--- 看完整会话内容
打开 tcpdump 保存的文件:
bash
wireshark capture.pcap
机器人场景:抓取机器人和上位机之间的通信,分析 ROS topic 数据是否按预期发送。
五、网络配置
5.1 临时配置 IP(重启失效)
bash
# 设置 IP 和子网掩码
sudo ip addr add 192.168.1.100/24 dev eth0
# 删除 IP
sudo ip addr del 192.168.1.100/24 dev eth0
# 启用/禁用网卡
sudo ip link set eth0 up
sudo ip link set eth0 down
# 设置默认网关
sudo ip route add default via 192.168.1.1
5.2 永久配置 IP(Ubuntu/Debian)
使用 Netplan(Ubuntu 18.04+):
bash
# 查看配置文件
ls /etc/netplan/
# 编辑配置(文件名可能不同)
sudo nano /etc/netplan/01-netcfg.yaml
静态 IP 配置示例:
yaml
network:
version: 2
ethernets:
eth0:
dhcp4: false
addresses:
- 192.168.1.100/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 114.114.114.114]
DHCP 自动获取配置:
yaml
network:
version: 2
ethernets:
eth0:
dhcp4: true
bash
# 应用配置
sudo netplan apply
5.3 DNS 配置
bash
# 临时修改 DNS
sudo nano /etc/resolv.conf
# 添加:
# nameserver 8.8.8.8
# nameserver 114.114.114.114
# 测试 DNS 解析
nslookup www.baidu.com
dig www.baidu.com
5.4 防火墙(UFW)
bash
# 查看状态
sudo ufw status
# 允许某端口
sudo ufw allow 8080
sudo ufw allow 8080/tcp
# 拒绝某端口
sudo ufw deny 8080
# 允许某 IP 访问
sudo ufw allow from 192.168.1.0/24
# 开启/关闭防火墙
sudo ufw enable
sudo ufw disable
六、路由与网络诊断进阶
6.1 traceroute ------ 追踪路由路径
bash
# 安装
sudo apt install traceroute
# 追踪到目标的路由路径
traceroute 192.168.1.100
traceroute www.baidu.com
# 使用 TCP(穿透防火墙更好)
sudo traceroute -T -p 80 www.baidu.com
看什么 :每一跳是一个路由器,延迟突然变大的那一跳就是问题所在。* * * 表示该路由器不响应。
6.2 mtr ------ ping + traceroute 合体
bash
sudo apt install mtr
sudo mtr 192.168.1.100
实时显示每一跳的延迟和丢包率,比 traceroute 更直观。
6.3 nmap ------ 网络扫描
bash
sudo apt install nmap
# 扫描局域网存活主机
nmap -sn 192.168.1.0/24
# 扫描某主机开放的端口
nmap 192.168.1.100
# 扫描指定端口范围
nmap -p 1-10000 192.168.1.100
# 扫描常见服务版本
nmap -sV 192.168.1.100
七、机器人网络调试实战场景
场景 1:上位机连不上机器人
排查步骤:
bash
# Step 1: 检查自己的 IP 是否正确
ip addr
# Step 2: ping 机器人 IP
ping 192.168.1.100
# Step 3: 如果 ping 通但服务不通,检查端口
telnet 192.168.1.100 9090
# 或
nc -zv 192.168.1.100 9090
# Step 4: 在机器人上检查服务是否在运行
ssh user@192.168.1.100
ss -tlnp | grep 9090
# Step 5: 检查防火墙
sudo ufw status
场景 2:ROS 通信异常
bash
# 检查 ROS_MASTER_URI 和 ROS_IP 是否设置正确
echo $ROS_MASTER_URI
echo $ROS_IP
# 检查 11311 端口是否开放
telnet 机器人IP 11311
# 抓包看 ROS 通信
sudo tcpdump -i eth0 host 机器人IP -w ros_debug.pcap
场景 3:网络延迟高/丢包
bash
# 持续 ping 看丢包率
ping -c 100 192.168.1.100 | tail -5
# 用 mtr 定位哪一跳有问题
mtr 192.168.1.100
# 检查网卡错误统计
ip -s link show eth0
# 看 errors 和 dropped 数量
场景 4:不知道机器人 IP
bash
# 扫描局域网
nmap -sn 192.168.1.0/24
# 或者
arp-scan -l
# 查看 ARP 表(需先 ping 广播)
ping -b 192.168.1.255
arp -n
八、常用命令速查表
| 命令 | 用途 |
|---|---|
ip addr |
查看本机 IP 和网卡信息 |
ip route |
查看路由表 |
ping <IP> |
测试连通性 |
ping -c 4 <IP> |
ping 4 次 |
telnet <IP> <端口> |
测试 TCP 端口连通 |
nc -zv <IP> <端口> |
测试端口(更快) |
ss -tlnp |
查看监听中的端口 |
ss -tnp |
查看已建立的连接 |
netstat -tlnp |
同上(旧版) |
curl http://IP:端口/ |
测试 HTTP 服务 |
ssh user@IP |
远程登录 |
nmap -sn 192.168.1.0/24 |
扫描局域网主机 |
nmap IP |
扫描主机开放端口 |
tcpdump -i eth0 host IP |
抓取指定 IP 的包 |
tcpdump -i eth0 -w a.pcap |
抓包保存文件 |
wireshark |
图形化抓包分析 |
traceroute IP |
追踪路由路径 |
mtr IP |
实时路由+丢包分析 |
arp -n |
查看 ARP 表(局域网 IP-MAC) |
nslookup 域名 |
测试 DNS 解析 |
sudo ufw status |
查看防火墙状态 |
九、学习顺序建议
- 第一周 :理解 IP、子网、网关、端口概念 → 熟练使用
ip addr、ping、ss - 第二周 :掌握
telnet、nc、curl做端口测试 → 学会ssh远程登录 - 第三周 :学习
tcpdump基本抓包 → 安装 Wireshark 做图形化分析 - 第四周 :学习
nmap扫描 →traceroute/mtr路由诊断 → 实战排查机器人网络问题 - 持续练习:每次遇到网络问题时,按"连通性 → 端口 → 服务 → 抓包"的顺序排查
十、推荐参考资源
man <命令>:任何命令加 man 查官方文档,如man tcpdump<命令> --help:快速查参数- Wireshark 官方文档:过滤语法非常强大
ip命令替代ifconfig/route,优先学习ip系列