1、100.0.0.16/28 对应网段的网关地址、广播地址、可分配IP地址范围

打开在线掩码计算网站,比如"https://www.sojson.com/convert/subnetmask.html",即可知
第一可用ip(即通常的网关地址)100.0.0.17
最后一个可用ip   100.0.0.30
广播地址    100.0.0.31

2、使用man手册学习tcpdump的使用

man tcpdump,搜索examples,直接看实例最简单,注意执行时带sudo,因为只有root才有权限,
否则啥也捕获不到,另外测试的时候最好带上-nn啥都不解析,否则捕获后可能要等半天才能看结果不方便调试,
另外其中涉及到的表达式具体含义,如果确实不清楚,根据提示,可以man 7 pcap-filter,
在具体搜索比如gateway host的含义(搜tcp[时注意要tcp\[这么搜),至于tcpdump参数不细说了,自己man,
To print all packets arriving at or departing from sundown:
   tcpdump -nn host 192.168.137.253  
   #显示srchost或desthost是192.168.137.253的所有包
To print traffic between helios and either hot or ace:
   tcpdump -nn host helios and \( hot or ace \)  
   #显示helios跟hot或者ace之间往来的包,注意and和括号用法以及需要的转义
To print all IP packets between ace and any host except helios:
   tcpdump -nn ip host ace and not helios  
   #显示ace与除了helios之外的任意主机间的IP数据包,这里还可以是arp,rarp等协议
To print all traffic between local hosts and hosts at Berkeley:
   tcpdump -nn net 27.128.0.0/16  
   #显示本机与某个网络(段)比如27.128.0.0/16之间的所有主机间的通信
To print all ftp traffic through internet gateway snup: (note that the expression is quoted to prevent the shell from (mis-)interpreting the parentheses):
   tcpdump -nn  port ftp or port ftp-data  
   #显示本地所有ftp通信数据包,不要在意gateway那个,根据man pcap-filter中gateway的解释,
   #ipv6开启的情况这个就用不了,但可以使用等价的ether host ehost and not host host形式
To print traffic neither sourced from nor destined for local hosts (if you gateway to one other net, this stuff should never make it onto your local net).
   tcpdump ip and not net 192.168.137    
   #显示源或目标主机都不是192.168.137.0/24网段的ip包,通常内部多个网段多个网卡筛选数据时可能就用得上了
To print the start and end packets (the SYN and FIN packets) of each TCP conversation that involves a non-local host.
    tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net 192.168.137' 
    #源或目标非本地192.168.137.0/24网段的tcp开始或结束标识为1的包,
    #这里src and dst跟后头的net是一个整体,所以not后无需括号,tpcflags这种方式比位运算更易记,
    #标志位参考https://www.cnblogs.com/Andya/p/7272462.html,涉及到的位运算符与=&,或=|,非=~,异或=^
To print all IPv4 HTTP packets to and from port 80, i.e. print only packets that contain data, not, for example, SYN and FIN packets and ACK-only packets.  (IPv6 is left as an exercise for the reader.)
   tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' 
               #看着很复杂对吧,那还记个毛线,知道只是查有效数据长度不为0的包就行, 一定要了解的话,请自己看tcp/ip报文格式,
               #ip[2:2]表示ip区第2(从0开始数)字节开始2字节长度内容,是总长度,ip[0]是第0字节(包含ip首部长度20),
               #同理tcp[12]就是tcp段第12字节(包含数据偏移*4=tcp头长度20字节),后面的与运算为了取出相应位的值,
               #移位运算为了换算单位成字节,至于如何换算的,就别纠结了都是把32位单位转字节也就是乘4=<<2
To print IP packets longer than 576 bytes sent through gateway snup:
   tcpdump 'ip[2:2] > 576'   
   #同理gateway在ipv6开启的情况下就别试了,这里找出包总大小超过576的包,
   #测试的话可以ping -s 570 www.baidu.com,因为ping的icmp数据包首部长度为8字节(udp也是8)570+8>576
To print IP broadcast or multicast packets that were not sent via Ethernet broadcast or multicast:
   tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'  
   #这个同理,不用记,会查就行
To print all ICMP packets that are not echo requests/replies (i.e., not ping packets):
   tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'  
   #同tcpflags,查找非icmp ping包

3、详细叙述僵尸进程产生的原因以及危害

当一个进程创建了一个子进程时,并且他们的运行是异步的,这一点很重要,即父进程无法预知子进程会在什么时候结束,
unix提供了一种可以保证父进程在子进程已结束的情况下依然可以获取子进程信息的机制:
    在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存,
    但是仍然保留了一些信息(如进程号pid 退出状态 运行时间等),
    这些保留的信息直到进程通过调用wait/waitpid时才会释放。
这样就导致了一个问题,如果没有调用wait/waitpid的话,那么保留的信息就不会释放,
比如进程号就会被一直占用了,但系统所能使用的进程号是有限的,如果产生大量的僵尸进程,
将导致系统没有可用的进程号而导致系统不能创建进程
     #总结起来就是“僵尸肯定有爸爸,而且还是活的,但没帮儿子收尸(wait/waitpid)”,
     其实这样的也为我们提供了一种杀死僵尸进程的方法,就是干死他爸,
     ps -eo ppid,stat|awk '/Z/{print $1}'|xargs kill -9
但如果老子先挂了,儿子("活的死的都行")自然会被init接收,根本不用关心老子是否会帮儿子收尸(wait/waitpid),
    因为每个进程结束时,系统都会扫描当前系统中运行的所有进程,
    看看有没有哪个进程时刚刚结束的这个进程的子进程,如果有,就有init来接管它,成为它的父进程,
    如果接收的儿子已经挂掉了,就顺便替他收尸释放最后一点占用的资源。
    当然如果进程表越大,init发现它接管僵尸进程这个过程就会变得越慢,
    所以在init为发现他们之前,僵尸进程依旧消耗着系统的资源

4、详细说明vmstat输出结果的含义

suse50:~ # vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 178104   1112 1569004    0    0     1    20   32    1  0  0 100  0  0
 #直接man vmstat查找对应模式FIELD DESCRIPTION的解释,
 man vmstat|grep 'FIELD DESCRIPTION FOR VM MODE' -A31
FIELD DESCRIPTION FOR VM MODE
   Procs
       r: The number of runnable processes (running or waiting for run time).
       #可运行进程个数
       b: The number of processes in uninterruptible sleep.
       #不可中断状态进程个数

   Memory
       swpd: the amount of virtual memory used.
       #占用的交换内存
       free: the amount of idle memory.#空闲内存
       buff: the amount of memory used as buffers.
       #buff缓冲大小(保证平稳io)
       cache: the amount of memory used as cache
       .#cache缓存(读写或计算提速)
       inact: the amount of inactive memory.  (-a option)
       #非活动内存
       active: the amount of active memory.  (-a option)
       #活动内存

   Swap
       si: Amount of memory swapped in from disk (/s).
       #从磁盘到swap区的速率
       so: Amount of memory swapped to disk (/s).
       #从swap到磁盘的速率

   IO
       bi: Blocks received from a block device (blocks/s).
       #块读取速度
       bo: Blocks sent to a block device (blocks/s).
       #块写入速度

   System
       in: The number of interrupts per second, including the clock.
       #中断速率
       cs: The number of context switches per second.
       #上下文切换速率

   CPU
       These are percentages of total CPU time.
       #以下都是相应的cpu时间百分比
       us: Time spent running non-kernel code.  (user time, including nice time)
       #用户空间
       sy: Time spent running kernel code.  (system time)
       #系统内核空间
       id: Time spent idle.  Prior to Linux 2.5.41, this includes IO-wait time.
       #空闲时间
       wa: Time spent waiting for IO.  Prior to Linux 2.5.41, included in idle.
       #io等待时间,2.5.41以前的版本包括在idle中
       st: Time stolen from a virtual machine.  Prior to Linux 2.6.11, unknown.
       #虚拟机流失时间,2.6.11前显示unkown