Linux网络配置与进程管理
2018年08月13日 15:30:34 宸粑粑 阅读数 45
1、简述osi七层模型和TCP/IP五层模型
OSI七层参考模型是ISO国际标准化组织提出的关于计算机在世界范围内互联为网络的标准框架;其中包括定义物理设备传输协议的物理层,比如水晶头RJ45标准,以太网网络标准;定义网卡MAC地址寻址的数据链路层,封装解封帧报文;定义IP地址寻址的网络层,封装解封IP报文;定义传输协议TCP,UDP的传输层,封装解封TCP报文;管理进程之间通信的会话层;对上层数据和信息进行格式转换,如压缩,加密等操作的表示层;提供操作系统或网络应用程序的网络接口的应用层。
TCP/IP五层模型也可为四层模型,其中会话层,表示层,应用层合为应用层;传输层即为TCP协议的传输层,网络层即为互联网上通过IP地址寻址的互联网层,数据链路层和物理层可合为网络接入层,即TCP/IP可为五层模型,也可以为四层模型;
OSI七层模型为:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层;
TCP/IP四层模型为:网络接入层,互联网层,传输层,应用层;
2、简述iproute家族命令
iproute家族是网络管理命令的一个新兴家族命令,这里阐述一下ip和ss两个命令的使用,足以支持运维工作了。
ip命令:
语法:ip [options] OBJECT COMMAND (OBJECT,COMMAND均可简写)
OBJECT:link,address,route,netns...众多里面,前面4个基本够用;
ip link COMMAND:网络设备配置命令
link里的命令:add,delete,set,show;
set:修改设备属性;show:显示设备属性:
set常用的选项有:
up and down,网卡设备启动或禁用;
multicast on or multicast off,多播功能启用或禁用;
name,重命名设备名称,如重命名需先禁用接口;
mtu,设置网络设备MTU大小,默认是1500;
netns NETNSNAME | PID,用于将网络接口移动至指定的网络名称空间;
show 直接显示网络设备详细信息;
-
[root@localhost ~]# ip link show
-
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
-
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
-
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
-
link/ether 00:0c:29:b2:e6:ae brd ff:ff:ff:ff:ff:ff
-
[root@localhost ~]#
ip address COMMAND:网络地址管理相关命令
COMMAND有:add,del,show,flush ,list
ip addr add:添加IP地址至网卡设备中,ip addr list可显示网络设备中网卡的地址列表;
-
[root@localhost ~]# ip addr list
-
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
-
link/ether 00:0c:29:b2:e6:ae brd ff:ff:ff:ff:ff:ff
-
inet 10.9.3.72/24 brd 10.9.3.255 scope global dynamic ens33
-
valid_lft 85858sec preferred_lft 85858sec
-
inet6 fe80::ad19:1d60:686:b40b/64 scope link
-
valid_lft forever preferred_lft forever
-
[root@localhost ~]# ip addr add 192.168.1.1/24 dev ens33
-
[root@localhost ~]# ip addr show ens33
-
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
-
link/ether 00:0c:29:b2:e6:ae brd ff:ff:ff:ff:ff:ff
-
inet 10.9.3.72/24 brd 10.9.3.255 scope global dynamic ens33
-
valid_lft 85750sec preferred_lft 85750sec
-
inet 192.168.1.1/24 scope global ens33
-
valid_lft forever preferred_lft forever
我这里简化了命令行,朋友们能看懂就可以了,我的系统是CentOS 7的,识别的网卡是ens33,所以在添加网卡IP地址的时候用ip addr add IP NETMASK dev 网卡名称,即可,不加dev的话就是默认网卡,当然只有一块;
ip addr del:有添加就有删除,直接指明IP即可,也可指明从哪个网卡上删除哪个地址;
-
[root@localhost ~]# ip addr del 192.168.1.1 dev ens33
-
Warning: Executing wildcard deletion to stay compatible with old scripts.
-
Explicitly specify the prefix length (192.168.1.1/32) to avoid this warning.
-
This special behaviour is likely to disappear in further releases,
-
fix your scripts!
-
[root@localhost ~]# ip addr show ens33
-
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
-
link/ether 00:0c:29:b2:e6:ae brd ff:ff:ff:ff:ff:ff
-
inet 10.9.3.72/24 brd 10.9.3.255 scope global dynamic ens33
-
valid_lft 85422sec preferred_lft 85422sec
-
inet6 fe80::ad19:1d60:686:b40b/64 scope link
-
valid_lft forever preferred_lft forever
ip addr flush dev ens33,清空地址网络接口设备的IP地址,我这里就不做实验了,可以添加一块新的网卡做实验;
ip route COMMAND:路由管理命令;
COMMAND有:add,change,replace,del,show,flush,get
ip route add 添加路由
格式:ip route add TYPE PREFIX via[GW] [dev] [src SROUCE IP]
例如:ip route add 192.168.1.0/24 via 10.0.0.1 dev eth0 src 10.0.20.100
ip route add default via GW:添加默认路由
ip route change 更改路由;
ip route replace 替换路由,更改或添加新的路由
ip route del 删除路由
例如:ip route del 192.168.1.0/24
ip route show 显示路由
ip route flush 清空路由表
ip route get 获取单个路由信息
例如:ip route get 192.168.1.0/24
这里需要添加双网卡,添加多IP地址,指定路由,不做实验了。
ip netns 默认在CentOS 7中支持,创建网络名称空间;
ip netns add NAME 创建指定的netns网络名称空间,network name space;
ip netns del NAME 删除指定的网络名称空间;
ip netns list 列出列表;
ip netns exec NAME COMMAND 在指定的netns中运行命令;
ss命令:
类似于netstat命令,其使用方法也差不多;
用法:ss [options] [FILTER]
其选项为:
-t 显示所有TCP协议相关的连接,连接均有状态;
-u 显示所有UDP协议相关的连接;
-w row套接字相关的连接;
-a 表示显示所有状态;
-e 表示支持扩展格式的信息;
-p 显示相关的进程和PID;
-m 显示内存用量;
-o 计时器信息;
-l 显示处于监听状态的连接;
-n 以数字格式显示IP和端口号;
-
[root@localhost ~]#
-
[root@localhost ~]# ss -tnl
-
State Recv-Q Send-Q Local Address:Port Peer Address:Port
-
LISTEN 0 128 *:22 *:*
-
LISTEN 0 100 127.0.0.1:25 *:*
-
[root@localhost ~]# ss -tnlp
-
State Recv-Q Send-Q Local Address:Port Peer Address:Port
-
LISTEN 0 128 *:22 *:* users:(("sshd",pid=1005,fd=3))
-
LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=1110,fd=13))
-
[root@localhost ~]# ss -tnlpm
-
State Recv-Q Send-Q Local Address:Port Peer Address:Port
-
LISTEN 0 128 *:22 *:* users:(("sshd",pid=1005,fd=3))
-
skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
-
LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=1110,fd=13))
-
skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
-
[root@localhost ~]# ss -tnlpmo
-
State Recv-Q Send-Q Local Address:Port Peer Address:Port
-
LISTEN 0 128 *:22 *:* users:(("sshd",pid=1005,fd=3))
-
skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
-
LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=1110,fd=13))
-
skmem:(r0,rb87380,t0,tb16384,f0,w0,o0,bl0)
-
[root@localhost ~]#
3、详细说明进行管理工具htop、vmstat等相关命令,并举例
Linux内核有进程管理的功能,其系统提供的还有查看和管理的工具,top就是查看进程状态的一个实时的工具,一般系统是自带的,如果想更华丽,更好看的就用htop工具,需要自行下载安装,yum就可实现,在epel仓库中;需要查看虚拟内存的使用情况,可用vmstat工具,一般也是系统自带的。
htop工具:
-
[root@localhost ~]# yum info htop
-
Loaded plugins: fastestmirror
-
Loading mirror speeds from cached hostfile
-
* base: mirrors.aliyun.com
-
* epel: mirrors.aliyun.com
-
* extras: ftp.jaist.ac.jp
-
* updates: mirrors.aliyun.com
-
Installed Packages
-
Name : htop
-
Arch : x86_64
-
Version : 2.2.0
-
Release : 1.el7
-
Size : 218 k
-
Repo : installed
-
From repo : epel
-
Summary : Interactive process viewer
-
URL : http://hisham.hm/htop/
-
License : GPLv2+
-
Description : htop is an interactive text-mode process viewer for Linux, similar to
-
: top(1).
-
[root@localhost ~]#
常用选项:
-d #:指定延迟时间间隔,单位为秒;
-u USERNAME:仅显示指定用户的进程;
-s COLUME:以指定字段排序;
运行htop命令,进入界面之后,F1可显示帮助界面,有相应的子命令按键显示所需要显示的信息;注意颜色标识;
l:显示选定的进程打开的文件列表;
s:跟踪选定的进程的系统调用;
t:以层级关系显示各进程的状态;
a:将选定的进程绑定至某指定的CPU核心;
vmstat工具:
vmstat [options] [delay [count]]
-
[root@localhost ~]# vmstat 2 3
-
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
-
r b swpd free buff cache si so bi bo in cs us sy id wa st
-
2 0 0 521500 2108 342812 0 0 23 10 58 49 0 0 100 0 0
-
0 0 0 521484 2108 342812 0 0 0 0 56 44 0 0 100 0 0
-
0 0 0 521484 2108 342812 0 0 0 0 70 50 0 0 100 0 0
-
[root@localhost ~]#
vmstat后面可直接跟数字,2表示刷新的频率为2秒一次,3表示次数,刷新3次;
显示字段信息:
procs:进程;
r:等待运行的进程个数,CPU上等待运行的任务的队列长度;
b:处于不可中断睡眠状态的进程个数,被阻塞的任务队列长度;
memory:内存;
swpd:交换内存的使用总量;
free:空闲的物理内存总量;
buffer:用于buffer的内存总量;
cache:用于cache的内存总量;
swap:交换空间;
si:数据写入swap中的数据速率(kb/s);
so:数据离开swap中的数据速率(kb/s);
io:I/O状态;
bi:从块设备读入数据到系统的速率;
bo:保存数据到块设备的速率;
system:系统级的操作状态;
in:中断速率;
cs:上下文切换速率;
CPU:CPU状态;
us:用户空间所占CPU的百分比;
sy:内核空间所在CPU的百分比;
id:I/O所占CPU的百分比;
wa:等待I/O的CUP百分比;
st:被虚拟机偷走的CPU百分比;
选项:-s 显示内存的统计数据;
-
[root@localhost ~]# vmstat -s
-
999720 K total memory
-
133364 K used memory
-
249264 K active memory
-
97192 K inactive memory
-
521380 K free memory
-
2108 K buffer memory
-
342868 K swap cache
-
2097148 K total swap
-
0 K used swap
-
2097148 K free swap
-
1230 non-nice user cpu ticks
-
5 nice user cpu ticks
-
2523 system cpu ticks
-
1080732 idle cpu ticks
-
943 IO-wait cpu ticks
-
0 IRQ cpu ticks
-
101 softirq cpu ticks
-
0 stolen cpu ticks
-
223890 pages paged in
-
102189 pages paged out
-
0 pages swapped in
-
0 pages swapped out
-
593008 interrupts
-
497953 CPU context switches
-
1534125395 boot time
-
3364 forks
对于进程相关的管理命令还有很多,pstree,ps,pgrep,top,htop,glances,pmap,vmstat,uptime,dstat,kill命令(进程关闭),job(系统作业控制),nice(调整进程nice值)等。
4、使用until和while分别实现192.168.0.0/24
网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"
首先了解下ping命令,通过ICMP协议检查主机之间的连通性;
用法:ping [options] destination
选项:
-c #:发送的ping报文个数;
-w #:ping命令超时时长;
-W #:一次ping操作中,等待对方响应的超时时长;
-s #:指明ping报文的大小;
hping3命令用于发送TCP/IP报文至目标主机,用于压力测试,可跟--fast,--faster,--flood等选项;
while循环:
while CONDITION;do
循环体
循环体控制变量修正表达式
done
进入while循环,条件测试为真时,进入循环;条件测试为假时,退出循环;
until循环:
until CONDITION;do
循环体
循环体控制变量修正表达
done
进入until循环正好与while循环相反,条件测试为假时进入循环,条件测试为真时退出循环;
-
[root@localhost script]# cat ping_while.sh ping_until.sh
-
#!/bin/bash
-
#
-
#Version:0.0.2
-
#Description:while ping 192.168.0.0/24
-
#Author:xiaochao
-
#Date:2018-08-13
-
declare -i i=1
-
while [ $i -lt 255 ] ;do
-
ping -w 1 -c 1 192.168.0.$i >/dev/null
-
if [ $? -eq 0 ];then
-
echo "192.168.0.$i success!"
-
else
-
echo "192.168.0.$i fail!"
-
fi
-
let i++
-
done
-
#!/bin/bash
-
#
-
#Version:0.0.1
-
#Description:until ping 192.168.0.0/24
-
#Author:xiaochao
-
#Date:2018-08-13
-
declare -i i=1
-
until [ $i -ge 255 ] ;do
-
ping -w 1 -c 1 192.168.0.$i >/dev/null
-
if [ $? -eq 0 ];then
-
echo "192.168.0.$i success!"
-
else
-
echo "192.168.0.$i fail!"
-
fi
-
let i++
-
done
-
[root@localhost script]#
这里对于192.168.0这个段里的254个主机,不含0和255主机,在主机位的选择上使用了while和until,然后查看执行状态结果,结合ping命令和let i++进行循环;while里的是小于255开始执行循环,until里的直到大于255退出循环。