一、 ping : 查看当前网络是否连通
二、 ifconfig : 用来显示当前系统中的所有网络设备,通俗一点的说,就是网卡列表。
三、 netstat 和 lsof: 对网络状况了如指掌
-
netstat 和 lsof
netstat -alepn
-
netstat 告诉我们 IP 地址和端口使用的情况,以及各个 TCP 连接的状态。还会把所有 IPv4 形态的 TCP,IPV6 形态的 TCP、UDP 以及 UNIX 域的套接字都显示出来。
lsof -i :8080 //定位被占用的8080是那个进程
-
lsof 的常见用途之一是帮助我们找出在指定的 IP 地址或者端口上打开套接字的进程.
netstat Socket -x -alepn 查看端口对应那个文件 lsof /var/run/docker.sock //查看随打开了这个文件
-
Isof 和 netstst 可以结合起来一起使用。
四、 tcpdump: 抓包利器
-
指定网卡:
tcpdump -i eth0
-
指定来源:
tcpdump src host hostname
-
抓的包是 TCP,且端口是 80,包来自 IP 地址为 192.168.1.25 的主机地址。
tcpdump 'tcp and port 80 and src host 192.168.1.25'
-
如果我们对 TCP 协议非常熟悉,还可以写出这样的 tcpdump 命令:
tcpdump 'tcp and port 80 and tcp[13:1]&2 != 0'
这里 tcp[13:1]表示的是 TCP 头部开始处偏移为 13 的字节,如果这个值为 2,说明设置了 SYN 分节,当然,我们也可以设置成其他值来获取希望类型的分节。注意,这里的偏移是从 0 开始算起的,tcp[13]其实是报文里的第 14 个字节。
Flags [ ]是包的标志,[P]表示是数据推送,比较常见的包格式如下:
- [S]:SYN,表示开始连接
- [.]:没有标记,一般是确认
- [P]:PSH,表示数据推送
- [F]:FIN,表示结束连接
- [R] :RST,表示重启连接
我们可以看到最后有几个数据,它们代表的含义如下:
- seq:包序号,就是 TCP 的确认分组
- cksum:校验码
- win:滑动窗口大小
- length:承载的数据(payload)长度 length,如果没有数据则为 0
此外,tcpdump 还可以对每条 TCP 报文的细节进行显示,让我们可以看到每条报文的详细字节信息。这在对报文进行排查的时候很有用。
总结:
- ping 可以用来帮助我们进行网络连通性的探测。
- ifconfig,用来显示当前系统中的所有网络设备。
- netstat(可以用ss 替换) 和 lsof 可以查看活动的连接状况。
- tcpdump 可以对各种奇怪的环境进行抓包,进而帮我们了解报文,排查问题。