一、简述osi七层模型和TCP/IP五层模型
OSI七层模型:
(图摘自华为官网HCNA教材)
简述:(从下往上)
物理层:在设备之间传输比特流,规定了电平、速度和电缆针脚。————(数据形式:比特流)
数据链路层:将比特组合成字节,再将字节组合成帧,使用链路层地址(以太网使用MAC地址)来访问介质,并进行差错检测。————(数据形式:数据帧)
网络层:提供逻辑地址,供路由器确定路径。 ————(数据形式:数据包)
传输层:提供面向连接或非面向连接的数据传递以及进行重传前的差错检测。————(数据形式:数据段)
会话层:负责建立、管理和终止表示层实体之间的通信会话。该层的通信由不同设备中的应用程序之间的服务请求和响应组成。
表示层:提供各种用于应用层数据的编码和转换功能,确保一个系统的应用层发送的数据能被另一个系统的应用层识别。
应用层:OSI参考模型中最靠近用户的一层,为应用程序提供网络服务。
TCP/IP五层模型:
数据的封装过程:
应用数据需要经过TCP/IP每一层处理之后才能通过网络传输到目的端,每一层上都使用该层的协议数据单元PDU(Protocol Data Unit)彼此交换信息。不同层的PDU中包含有不同的信息,因此PDU在不同层被赋予了不同的名称。
上层数据在传输层添加TCP报头后得到的PDU被称为Segment(数据段 );
数据段被传递给网络层,网络层添加IP报头得到的PDU被称为Packet(数据包);
数据包被传递到数据链路层,封装数据链路层报头得到的PDU被称为Frame(数据帧);
最后,帧被转换为比特,通过网络介质传输。
OSI七层模型和TCP/IP五层模型的对应关系
二、简述iproute家族命令
ip命令
ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT = { link | addr | route | netns }
注:OBJECT的命令可简写,其子命令也可简写。
OBJECT = { link | addr | route | netns }
ip link
ip link show - display device attributes
ip link help - 显示简要使用帮助;
ip link set - change device attributes
dev NAME(default):指明要管理的设备,dev关键字可省略;
up和down:启用和禁用接口
multicast on或multicast off:启用或禁用多播功能;
name NAME:重命名接口
mtu NUMBER:设置MTU的大小,默认为1500;
netns PID:ns为namespace,用于将接口移动到指定的网络名称空间;
示例:
1、查看当前所有网络连接属性
[root@centos7u2 ~]# ip link show
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno16777736: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:d6:cb:13 brd ff:ff:ff:ff:ff:ff
3: eno33554960: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:d6:cb:1d brd ff:ff:ff:ff:ff:ff
2、禁用网络连接及重命名连接:
[root@centos7u2 ~]# ip link set dev eno33554960 name eth1
RTNETLINK answers: Device or resource busy
[root@centos7u2 ~]# ip link set down dev eno33554960
[root@centos7u2 ~]# ip link set dev eno33554960 name eth1
[root@centos7u2 ~]# ip link show
1: lo: mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno16777736: mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:d6:cb:13 brd ff:ff:ff:ff:ff:ff
3: eth1: mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT qlen 1000
link/ether 00:0c:29:d6:cb:1d brd ff:ff:ff:ff:ff:ff
ip netns
ip netns:ip - manage network namespaces
ip netns list:列出所有的netns
ip netns add NAME:创建指定的netns
ip netns del NAME:删除指定的netns
ip netns exec NAME COMMAND:在指定的netns中运行命令
示例:
1、添加并查看网络名称空间
[root@centos7u2 ~]# ip netns add ns1
[root@centos7u2 ~]# ip netns add ns2
[root@centos7u2 ~]# ip netns list
ns2
ns1
2、管理指定网络名称空间中的网络连接
[root@centos7u2 ~]# ip netns exec ns1 ip a
1: lo: mtu 65536 qdisc noop state DOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
[root@centos7u2 ~]# ip link set eth1 netns ns2
[root@centos7u2 ~]# ip netns exec ns2 ip link set up eth1
[root@centos7u2 ~]# ip netns exec ns2 ip addr
1: lo: mtu 65536 qdisc noop state DOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
3: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:d6:cb:1d brd ff:ff:ff:ff:ff:ff
inet6 fe80::20c:29ff:fed6:cb1d/64 scope link
valid_lft forever preferred_lft forever
ip addr
ip address - protocol address management
ip address add IP/MASK dev IFACE
[label NAME]:为额外添加的地址指明接口别名;
[broadcast ADDRESS]:广播地址;会根据IP和netmask自动计算得到;
[scope SCORE_VALUE]:
global:全局可用;
link:接口可用;
host:仅本机可用;
ip address delete IP/MASK dev IFACE
ip address list [IFACE]:显示接口的地址;
ip address flush dev IFACE
示例:
1、查看指定的网络连接的信息
[root@centos7u2 ~]# ip addr list eno33554960
3: eno33554960: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:d6:cb:1d brd ff:ff:ff:ff:ff:ff
inet 192.168.200.142/24 brd 192.168.200.255 scope global dynamic eno33554960
valid_lft 1714sec preferred_lft 1714sec
inet6 fe80::20c:29ff:fed6:cb1d/64 scope link
valid_lft forever preferred_lft forever
2、修改指定网络连接的IP地址
[root@centos7u2 ~]# ip addr delete 192.168.200.142/24 dev eno33554960
[root@centos7u2 ~]# ip addr list eno33554960
3: eno33554960: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:d6:cb:1d brd ff:ff:ff:ff:ff:ff
inet6 fe80::20c:29ff:fed6:cb1d/64 scope link
valid_lft forever preferred_lft forever
[root@centos7u2 ~]# ip addr add 192.168.200.200/24 dev eno33554960
[root@centos7u2 ~]# ip addr list eno33554960
3: eno33554960: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:d6:cb:1d brd ff:ff:ff:ff:ff:ff
inet 192.168.200.200/24 scope global eno33554960
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fed6:cb1d/64 scope link
valid_lft forever preferred_lft forever
ip route
ip route - routing tables management
ip route add - add new route
ip route add TYPE/PREFIX via [dev IFACE] [src SOURCE_IP]
ip route change - change route
ip route replace - change or add new one
ip route delete - delete route
ip route show - list routes
ip route flush - flush routing tables
ip route get - get a single route
示例:
1、添加一条路由条目
[root@centos7u2 ~]# ip route add 192.168.100.0/24 via 192.168.200.2 dev eno33554960 src 192.168.200.200
[root@centos7u2 ~]# ip route show
default via 192.168.2.1 dev eno16777736 proto static metric 100
192.168.2.0/24 dev eno16777736 proto kernel scope link src 192.168.2.104 metric 100
192.168.100.0/24 via 192.168.200.2 dev eno33554960 src 192.168.200.200
192.168.200.0/24 dev eno33554960 proto kernel scope link src 192.168.200.200
ss命令
同netstat作用相同,但功能更为强大和高效,故可用来替换netstat
ss [options] [ FILTER ]
options:
-t:TCP协议的相关连接
-u:UDP协议的相关连接
-w:raw socket相关的连接
-l:监听的连接
-a:所有状态
-n:以数字格式显示IP和Port
-e:扩展格式
-p:显示相关的进程及PID
-m:内存用量
-o:计时器信息
FILTER:= [state TCP-STATE] [EXPRESSION]
TCP的常见状态:
TCP FSM:
LISTEN:监听
ESTABLISHED:建立的连接
FIN_WAIT_1:
FIN_WAIT_2:
SYN_SENT:
SYN_RECV:
CLOSED:
EXPRESSION:
dport=
sport=
示例:
1、查看当前系统侦听了哪些端口
[root@centos7u2 ~]# ss -tunlp
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 *:59355 *:* users:(("dhclient",pid=5047,fd=20))
udp UNCONN 0 0 *:68 *:* users:(("dhclient",pid=5047,fd=6))
udp UNCONN 0 0 *:68 *:* users:(("dhclient",pid=4162,fd=6))
udp UNCONN 0 0 *:37808 *:* users:(("dhclient",pid=4162,fd=20))
udp UNCONN 0 0 :::26566 :::* users:(("dhclient",pid=4162,fd=21))
udp UNCONN 0 0 :::30106 :::* users:(("dhclient",pid=5047,fd=21))
tcp LISTEN 0 128 *:22 *:* users:(("sshd",pid=1791,fd=3))
tcp LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=2940,fd=13))
tcp LISTEN 0 128 :::80 :::* users:(("httpd",pid=2958,fd=4),("httpd",pid=2957,fd=4),("httpd",pid=2956,fd=4),("httpd",pid=2955,fd=4),("httpd",pid=2954,fd=4),("httpd",pid=1792,fd=4))
tcp LISTEN 0 128 :::22 :::* users:(("sshd",pid=1791,fd=4))
tcp LISTEN 0 100 ::1:25 :::* users:(("master",pid=2940,fd=14))
tcp LISTEN 0 128 :::9090 :::* users:(("systemd",pid=1,fd=36))
2、查看指定的源端口或目的端口的侦听状态
[root@centos7u2 ~]# ss -tan '( dport = :22 or sport = :22 )'
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
ESTAB 0 52 192.168.2.104:22 192.168.2.103:49368
ESTAB 0 136 192.168.2.104:22 192.168.2.103:65250
LISTEN 0 128 :::22 :::*
3、查看处于指定的TCP协议状态的端口的相关信息
[root@centos7u2 ~]# ss -tan state ESTABLISHED
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 52 192.168.2.104:22 192.168.2.103:49368
0 136 192.168.2.104:22 192.168.2.103:65250
三、详细说明进程管理工具htop、vmstat等相关命令,并举例
htop命令
选项:
-d #:指定延迟时间间隔;
-u UserName:仅显示指定用户的进程;
-s COLUME:以指定字段进行排序;
子命令:
l:列出选定的进程所占用的文件列表;(需要lsof命令)
s:跟踪选定的进程的系统调用;(需要trace命令)
t:以层级关系显示各进程状态;
a:将选定的进程绑定至指定的CPU核心;
[root@centos7u2 ~]# htop
直接使用htop命令,进入进程管理视图,可动态展示当前系统的进程及资源状态;该界面可使用鼠标点击操作:
按F1可获取相关操作的帮助
常用子命令:
l:列出选定的进程所打开的文件列表
s:跟踪选定的进程的系统调用
t:以层级关系显示各进程状态
a:将选定的进程绑定至指定的CPU核心
vmstat命令
vmstat - Report virtual memory statistics
vmstat [options] [delay [count]]
Options:
-a, --active active/inactive memory
-f, --forks number of forks since boot
-m, --slabs slabinfo
-n, --one-header do not redisplay header
-s, --stats event counter statistics
-d, --disk disk statistics
-D, --disk-sum summarize disk statistics
-p, --partition partition specific statistics
-S, --unit define display unit
-w, --wide wide output
-t, --timestamp show timestamp
状态信息说明:
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 space
id:idle
wa:wait
st:stolen
示例:
1、每隔2s读取一次系统状态,总共读取3次
[root@centos7u2 ~]# 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 3293188 3160 363404 0 0 11 13 36 57 0 0 99 1 0
1 0 0 3293296 3160 363404 0 0 0 7 105 174 0 0 97 3 0
0 0 0 3293296 3160 363404 0 0 0 7 94 145 0 0 100 0 0
[root@centos7u2 ~]#
2、查看当前磁盘IO状态
[root@centos7u2 ~]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 5750 15 440346 89485 28752 911 529907 221277 0 176
sr0 41 0 1848 952 0 0 0 0 0 0
dm-0 4651 0 380269 87044 29154 0 525787 233259 0 175
dm-1 184 0 3040 120 0 0 0 0 0 0
loop0 0 0 0 0 0 0 0 0 0 0
3、查看内存统计数据
[root@centos7u2 ~]# vmstat -s
3866948 K total memory
207236 K used memory
250156 K active memory
152388 K inactive memory
3293044 K free memory
3160 K buffer memory
363508 K swap cache
2097148 K total swap
0 K used swap
2097148 K free swap
807 non-nice user cpu ticks
2 nice user cpu ticks
4831 system cpu ticks
2172135 idle cpu ticks
13302 IO-wait cpu ticks
0 IRQ cpu ticks
70 softirq cpu ticks
0 stolen cpu ticks
221602 pages paged in
279446 pages paged out
0 pages swapped in
0 pages swapped out
787861 interrupts
1241506 CPU context switches
1538640948 boot time
6771 forks
glances命令
glances - A cross-platform curses-based system monitoring tool
常用选项:
-b:以Byte为单位显示网上数据速率;
-d:关闭磁盘I/O模块;
-m:关闭mount模块;
-n:关闭network模块;
-t #:刷新时间间隔;
-1:每个cpu的相关数据单独显示;
-o {HTML|CSV}:输出格式;
-f /PATH/TO/SOMEDIR:设定输出文件的位置;
此时,键入子命令h即可进入帮助界面:
除以上使用外,glances还支持C/S模式,即可获取远端服务器的状态信息,使用方法如下:
C/S模式下运行glances命令:
服务模式:
glances -s -B IPADDR
IPADDR:本机的某地址,用于监听;
客户端模式:
glances -c IPADDR
IPADDR:远程服务器的IP地址
dstat命令
融合了以上所有工具的特点
dstat - versatile tool for generating system resource statistics
dstat [-afv] [options..] [delay [count]]
选项:
-c,--cpu:显示cpu相关信息;
-C#,#,...,total
-d,--disk:显示磁盘的相关信息;
-D sda,sdb,...,total
-g:显示page相关的速率数据;
-m:Memory的相关统计数据;
-n:Interface的相关统计数据;
-p:显示process的相关统计数据;
-r:显示io请求的相关统计数据;
-s:显示swapped的相关统计数据;
--tcp
--udp
--raw
--socket
--ipc
--top-cpu:显示最占用CPU的进程;
--top-io:显示最占用io的进程;
--top-mem:显示最占用内存的进程;
--top-latency:显示延迟最高的进程;
示例:
1、动态展示当前系统状态信息,默认选项:-cdngy
[root@centos7u2 ~]# dstat
You did not select any stats, using -cdngy by default.
----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read writ| recv send| in out | int csw
0 0 99 1 0 0| 37k 48k| 0 0 | 0 0 | 148 229
0 0 100 0 0 0| 0 0 | 162B 948B| 0 0 | 77 128
0 0 100 0 0 0| 0 26k| 162B 420B| 0 0 | 119 186
0 0 100 0 0 0| 0 0 | 162B 420B| 0 0 | 74 128
0 1 99 0 0 0| 0 26k| 162B 420B| 0 0 | 196 297
0 0 96 3 0 0| 0 34k| 530B 494B| 0 0 | 215 336
0 0 100 0 0 0| 0 26k| 346B 420B| 0 0 | 136 216 ^C
[root@centos7u2 ~]#
2、动态展示当前系统的各协议等状态
[root@centos7u2 ~]# dstat --tcp --udp --raw --socket
----tcp-sockets---- --udp-- raw ------sockets------
lis act syn tim clo|lis act|raw|tot tcp udp raw frg
6 1 1 0 1| 6 0| 0|578 5 4 0 0
6 1 2 0 1| 6 0| 0|579 6 4 0 0
6 1 2 0 1| 6 0| 0|579 6 4 0 0
6 1 2 0 1| 6 0| 0|579 6 4 0 0
6 1 2 0 1| 6 0| 0|579 6 4 0 0
6 1 2 0 1| 6 0| 0|579 6 4 0 0^C
3、动态展示当前系统最占用相关资源的进程
[root@centos7u2 ~]# dstat --top-cpu --top-io --top-mem
-most-expensive- ----most-expensive---- --most-expensive-
cpu process | i/o process | memory process
360entclient 0.1|360entclien 74k 31k|360entclient32.0M
360entclient 0.2|360entclien 85k 128k|360entclient32.0M
rcuos/0 0.2|irqbalance 7362B 0 |360entclient32.0M
|360entclien7400B 6692B|360entclient32.0M
rcu_sched 0.2|sshd: root@ 155B 196B|360entclient32.0M
360entclient 0.2|360entclien7400B 7070B|360entclient32.0M
|sshd: root@ 162B 212B|360entclient32.0M
|360entclien7400B 6692B|360entclient32.0M
sshd: [email protected]|360entclien 62k 74B|360entclient32.0M
kworker/2:0 0.2|360entclien 19k 6692B|360entclient32.0Mq
|360entclien 39k 24k|360entclient32.0M
360entclient 0.2|360entclien7400B 6692B|360entclient32.0M
xfsaild/dm-0 0.2|irqbalance 7362B 0 |360entclient32.0M^C
四、使用until和while分别实现192.168.0.0/24网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"
while方式:
[root@centos7u2 ~]# cat while.sh
#!/bin/bash
#
i=1
while [ $i -le 254 ];do
ping -c 2 192.168.0.$i &> /dev/null
if [ $? -eq 0 ];then
echo "success!"
else
echo "fail!"
fi
let i++
done
until方式:
[root@centos7u2 ~]# cat until.sh
#!/bin/bash
#
i=1
until [ $i -gt 254 ];do
ping -c 2 192.168.0.$i &> /dev/null
if [ $? -eq 0 ];then
echo "success!"
else
echo "fail!"
fi
let i++
done