网络知识学习路线(实用向)

目标:能够调试机器人网络、抓包分析、配置网络、排查基本网络问题。

适合:网络基础薄弱,以实用为主的学习者。


一、基础概念(先建立认知框架)

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           -> 端口不通,服务未启动
# 无响应/超时                  -> 网络不通或防火墙拦截

退出 telnetCtrl+] 然后输入 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

核心用法

  1. 选择网卡 → 开始抓包
  2. 过滤栏输入过滤条件:
    • ip.addr == 192.168.1.100 --- 过滤某 IP
    • tcp.port == 8080 --- 过滤端口
    • http --- 只看 HTTP
    • icmp --- 只看 ping
  3. 右键包 → 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 查看防火墙状态

九、学习顺序建议

  1. 第一周 :理解 IP、子网、网关、端口概念 → 熟练使用 ip addrpingss
  2. 第二周 :掌握 telnetnccurl 做端口测试 → 学会 ssh 远程登录
  3. 第三周 :学习 tcpdump 基本抓包 → 安装 Wireshark 做图形化分析
  4. 第四周 :学习 nmap 扫描 → traceroute/mtr 路由诊断 → 实战排查机器人网络问题
  5. 持续练习:每次遇到网络问题时,按"连通性 → 端口 → 服务 → 抓包"的顺序排查

十、推荐参考资源

  • man <命令>:任何命令加 man 查官方文档,如 man tcpdump
  • <命令> --help:快速查参数
  • Wireshark 官方文档:过滤语法非常强大
  • ip 命令替代 ifconfig/route,优先学习 ip 系列
相关推荐
Lsir10110_2 小时前
吃透 TCP 核心原理:从握手挥手到滑动窗口与拥塞控制
网络·网络协议·tcp/ip
南境十里·墨染春水2 小时前
linux学习进展 基础命令 vi基础命令
linux·运维·服务器·笔记·学习
Xudde.2 小时前
班级作业笔记报告0x08
笔记·学习·安全·web安全
迷路爸爸1802 小时前
Docker 入门学习笔记 05:卷到底是什么,为什么容器删了数据却还能保留
笔记·学习·docker
chools2 小时前
Java后端拥抱AI开发之个人学习路线 - - Spring AI【第四期】(Tool + MCP)
java·人工智能·学习·spring
世人万千丶3 小时前
Flutter 框架跨平台鸿蒙开发 - 数独游戏应用开发文档
学习·flutter·游戏·华为·harmonyos·鸿蒙
xuhaoyu_cpp_java3 小时前
Maven学习(一)
java·经验分享·笔记·学习·maven
chen_ever3 小时前
从网络基础到吃透 Linux 高并发 I/O 核心(epoll+零拷贝 完整版)
linux·网络·c++·后端
情绪雪3 小时前
TCP/IP 模型
网络·网络协议·tcp/ip