第六周作业
1、子网划分
- 100.0.0.16/28 对应网段的网络地址、广播地址、可分配IP地址范围
100.0.0.16/28-->100.0.0.16/255.255.255.240
可用地址:2^4=16或256-240=16
即可用地址段:100.0.0.16-100.0.0.31
网络地址:100.0.0.16
广播地址:100.0.0.31
可分配IP地址范围:100.0.0.17-100.0.0.30
2、tcpdump
tcpdump [options] [ expression ]
options
- -A:以ASCII格式打印每个数据包(减去其链路级头部)。方便抓取网页。
- -a:将网络地址和广播地址转换成名称
- -b:已ASDOT符号打印BGP包中的AS号
- -B buffer_size:设置缓冲区大小,单位为KiB
- -c count:抓取的数据包个数
- -C file_size:判断-w指定的文件大小是否超过指定大小值,超过则新建文件(文件名后缀为1、2、3依次增加)
- d: 汇编格式输出
- -dd:c格式输出
- -ddd:十进制格式输出
- -D:列出当前主机的所有网卡编号和名称,可用于选项-i
- -e:打印出数据链路层的头部信息,包括源mac和目的mac,以及网络层的协议
- -E spi@ipaddr algo:secret,...:抓取IPsec ESP报文
- -f:以数字形式显示internet地址
- -F file:从指定文件中读取表达式,忽略其他的表达式
- -G rotate_seconds:每隔指定时间旋转一次-w指定的文件
- -h:获取tcpdump帮助信息
- -H:检测802.11s协议的报文
- -i interface:指定要抓包的接口,如-i ens33
- -I:将接口设置为监控模式,仅在IEEE 802.11 wifi接口和某些操作系统支持
- -l:输出结果至标准输出,使用缓冲区
- -m module:加载模块
- -n:显示ip地址而不是主机名
- -nn:显示协议端口而不是协议名称
- -N:显示短格式主机名称
- -O:不将数据包编码最佳化
- -p:网络接口不进入混杂模式
- -P:指定流量方向,可选in、out、inout
- -q:简略输出
- -r:从指定文件读取包(由-w file生成)
- -S:打印绝对而非相对的TCP序列号
- -s snaplen:显示一行的宽度,-s 0 表示显示完整的包,常与-A一起用,默认截取60个字节
- -T:指定包的类型,常见的类型有rpc、snmp、tftp、vxlan等
- -t:不打印时间戳
- -tt:显示未经格式化的时间戳
- -u:打印未编码的NFS句柄
- -v:输出稍微详细的信息
- -vv:输出详细的信息
- -vvv:输出更详细的信息
- -w file:将输出保存至文件中
- -x/-xx/-X/-XX:以十六进制的方式输出信息
expression
表达式用于筛选输出哪些类型的数据包,如果没有给定表达式,所有的数据包都将输出,否则只输出表达式为true的包。在表达式中出现的shell元字符建议使用单引号包围。
tcpdump的表达式由一个或多个"单元"组成,每个单元一般包含ID的修饰符和一个ID(数字或名称)。有三种修饰符:
(1)type:指定ID的类型。
- 可以给定的值有host/net/port/portrange。例如"host foo","net 128.3","port 20","portrange 6000-6008"。默认的type为host。
(2)dir:指定ID的方向。
- 可以给定的值包括src/dst/src or dst/src and dst,默认为src or dst。例如,"src foo"表示源主机为foo的数据包,"dst net 128.3"表示目标网络为128.3的数据包,"src or dst port 22"表示源或目的端口为22的数据包。
(3)proto:通过给定协议限定匹配的数据包类型。
- 常用的协议有tcp/udp/arp/ip/ether/icmp等,若未给定协议类型,则匹配所有可能的类型。例如"tcp port 21","udp portrange 7000-7009"。
所以,一个基本的表达式单元格式为"proto dir type ID"
除了使用修饰符和ID组成的表达式单元,还有关键字表达式单元:gateway,broadcast,less,greater以及算术表达式。
表达式单元之间可以使用操作符" and、&&、or、||、not、! "进行连接,从而组成复杂的条件表达式。
e.g.
- 抓取lo口的http的报文,显示ip地址和端口
[root@node01 ~]# tcpdump -i lo -nn tcp port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lo, link-type EN10MB (Ethernet), capture size 65535 bytes
15:20:25.771911 IP 172.16.0.6.50942 > 172.16.0.6.80: Flags [S], seq 1124948803, win 43690, options [mss 65495,sackOK,TS val 16485111 ecr 0,nop,wscale 7], length 0
15:20:25.771929 IP 172.16.0.6.80 > 172.16.0.6.50942: Flags [S.], seq 1370294178, ack 1124948804, win 43690, options [mss 65495,sackOK,TS val 16485111 ecr 16485111,nop,wsc
ale 7], length 015:20:25.771937 IP 172.16.0.6.50942 > 172.16.0.6.80: Flags [.], ack 1, win 342, options [nop,nop,TS val 16485111 ecr 16485111], length 0
15:20:25.771984 IP 172.16.0.6.50942 > 172.16.0.6.80: Flags [P.], seq 1:75, ack 1, win 342, options [nop,nop,TS val 16485111 ecr 16485111], length 74
...
- 抓取ens33口的icmp报文,显示ip地址
[root@node01 ~]# tcpdump -i ens33 -nn icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes
15:22:02.597870 IP 172.16.0.1 > 172.16.0.6: ICMP echo request, id 1, seq 82, length 40
15:22:02.597889 IP 172.16.0.6 > 172.16.0.1: ICMP echo reply, id 1, seq 82, length 40
15:22:03.600208 IP 172.16.0.1 > 172.16.0.6: ICMP echo request, id 1, seq 83, length 40
15:22:03.600223 IP 172.16.0.6 > 172.16.0.1: ICMP echo reply, id 1, seq 83, length 40
...
- 抓取ens33口的tcp协议,目的端口为22的报文,显示ip地址和端口
[root@node01 ~]# tcpdump -i ens33 -nn tcp dst port 22
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 65535 bytes
15:26:02.262733 IP 172.16.0.1.54113 > 172.16.0.6.22: Flags [.], ack 734756394, win 4104, length 0
15:26:02.304820 IP 172.16.0.1.54113 > 172.16.0.6.22: Flags [.], ack 149, win 4104, length 0
...
3、僵尸进程
一个进程在调用exit命令结束自己的生命的时候,其实他并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,他的作用是使进程退出,但是也仅仅限于一个正常的进程变成了一个僵尸进程,并不能完全将其销毁)。在linux进程的状态中,僵尸进程是非常特殊的一种,它已经放弃了几乎所有的内存空间,没有任何可执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态信息供其他进程收集,除此之外,僵尸进程不再占有任何存储空间。
产生原因:
- 在子进程终止后到父进程调用wait()前的时间里,子进程被称为zombie;
危害:
- 僵尸进程会占用系统资源,如果很多,将因为没有可用的进程号而导致系统不能产生新的进程,严重影响服务器的性能;
如何防止僵尸进程
- (1) 让僵尸进程成为孤儿进程,由init进程回收;(手动杀死父进程)
- (2) 调用fork()两次;
- (3) 捕捉SIGCHLD信号,并在信号处理函数中调用wait函数;
- (4) 用waitpid等待子进程返回。
4、vmstat
vmstat [options] [delay [count]]
[root@node01 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 1583256 3140 174896 0 0 4 0 14 19 0 0 100 0 0
字段含义:
procs:
- r:等待运行的进程的个数;CPU上等待运行的任务的队列长度;
- b:处于不可中断睡眠态的进程个数;被阻塞的任务队列的长度;
memory:
- swpd:交换内存使用总量;
- free:空闲的物理内存总量;
- buffer:用于buffer的内存总量;
- cache:用于cache的内存总量;
swap
- si:数据进入swap中的数据速率(kb/s)
- so:数据离开swap的速率(kb/s)
- io
- bi:从块设备读入数据到系统的速度(kb/s)
- bo:保存数据至块设备的速率(kb/s)
system
- in:interrupts,中断速率;
- cs:context switch, 上下文 切换的速率;
cpu
- us: user space
- sy:system
- id:idle
- wa:wait
- st: stolen
转载于:https://blog.51cto.com/zengshao/2389356