一篇文章快速解决网络调试问题

一、 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: 抓包利器

  1. 指定网卡:

    tcpdump -i eth0
    
  2. 指定来源:

    tcpdump src host hostname
    
  3. 抓的包是 TCP,且端口是 80,包来自 IP 地址为 192.168.1.25 的主机地址。

    tcpdump 'tcp and port 80 and src host 192.168.1.25' 
    
  4. 如果我们对 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 可以对各种奇怪的环境进行抓包,进而帮我们了解报文,排查问题。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章