简述osi七层模型和TCP/IP五层模型
osi七层模型
OSI七层协议模型主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data Link)、物理层(Physical)
应用层:OSI 参考模型中最靠近用户的一层,为计算机用户提供应用接口,也为用户直接提供各种网络服务。我们常见应用层的网络服务协议有:HTTP,HTTPS,FTP,POP3、SMTP等。
表示层:这个层级上面主要定义的是网络服务(或程序)之间的数据格式的转换,包括数据的加密,压缩功能,用于将计算机内部的多种数据格式转换成通信中采用的标准表示形式。确保一个主机的应用层发送的数据能被另一个主机的应用层识别。
会话层:负责建立、管理和终止表示层实体之间的通信会话。这个层级当中主要定义了两个地址之间的联机信道之连接与挂断。
传输层:建立了主机之间的端到端的连接。传输层的作用,是为上层协议提供端到端的可靠的透明的数据传输服务,包括差错控制和流量控制等问题。我们通常说的TCP协议、UDP协议就是在这一层。端口号即是这里的“ 端 ”
网络层:网络层定义出计算机之间的联机建立、终止与维持等。通过 IP 寻址来建立两个网络节点之间的连接,为源主机的传输层送来的分组,选择合适的路由和交换节点,数据传输单位是分组。
数据链路层:将比特组合成字节,再将字节组合成帧,使用数据链路层地址 (以太网使用的是 MAC 地址)来访问介质,并进行差错检测。在物理层提供的服务基础之上,负责在通信的实体之间建立数据链路(载波监听多路访问)。传输以帧为单位的数据包。
物理层:实际的最终信号的传输是通过物理层实现的。通过物理介质实现设备间的0-1 比特流传输。常用的设备有(各种物理设备)集线器、中继器、调制解调器、网线、双绞线、同轴电缆。还定义了物理电气特性(如8根网线只有1326传数据)等
TCP/IP五层模型
五层体系结构包括:应用层、运输层、网络层、数据链路层和物理层。
应用层:对应OSI7层模型的应用层,表示层和会话层,为用户提供各种服务,如:FTP,DNS,SMTP等。
传输层:对应OSI7层模型的传输层,为应用层实体提供端到端的通信功能,保证数据包的顺序传送及数据的完整性。有2个主要的协议:传输控制协议(TCP)和用户数据包协议(UDP)。
网络层:对应OSI7层模型的网络层,主要解决主机到主机的通讯问题,所包含的协议设计数据包在整个网络上的逻辑传输包括:路由选择和中继.激活,终止网络连接.差错检测与恢复. 排序,流量控制.服务选择. 网络管理有3个主要协议:网际协议(IP),互联网组管协议(IGMP),互联网控制报文协议(ICMP)。
数据链路层:对应OSI7层模型的数据链路层,为网络层提供数据传送服务的。包括:链路连接的建立,拆除,分离。 帧定界和帧同步。对帧的收发顺序的控制。差错检测和恢复。还有链路标识,流量控制等等
物理层:对应OSI7层模型的物理层,为数据端设备提供传送数据的通路,数据通路可以是一个物理媒体,也可以是多个物理媒体连接而成。一次完整的数据传输,包括激活(在通信的两个数据终端设备间连接起来,形成一条通路)物理连接,传送数据,终止物理连接。
简述iproute家族命令
iproute家族命令有:bridge,ip,ss,tc等等,这里介绍常用的两种命令ip和ss
ip命令:显示和管理路由,设备,策略路由及隧道等功能
ip [ OPTIONS ] OBJECT { COMMAND | help }:
常用的OBJECT(可以简写):
address(addr):地址和掩码;
link(li):连接
route:路由
netns: 名称空间
ip address:管理ip地址
ip address add 添加ip地址
ip addr add IFADDR dev IFACE
dev:指明添加到那个设备中
[label NAME]:为添加的地址指定接口别名
[broadcast ADDRESS]:广播地址;会根据IP和 NETMASK自动计算得到
[scope SCOPE_VALUE]:
global:全局可用
link:接口可用,只能自己ping自己
host:仅本机可用,
[root@localhost ~]# ip addr add 192.168.109.32/24 dev ens32
[root@localhost ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:41:95:b4 brd ff:ff:ff:ff:ff:ff
inet 192.168.109.129/24 brd 192.168.109.255 scope global dynamic ens32
valid_lft 1327sec preferred_lft 1327sec
inet 192.168.109.32/24 scope global secondary ens32
valid_lft forever preferred_lft forever
inet6 fe80::2a81:1ac7:a4c8:2c80/64 scope link
valid_lft forever preferred_lft forever
---------------------------分割线------------------------------------
[root@localhost ~]# ip addr add 10.1.0.10/8 dev ens32 label ens32:0
[root@localhost ~]# ifconfig
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.109.129 netmask 255.255.255.0 broadcast 192.168.109.255
inet6 fe80::2a81:1ac7:a4c8:2c80 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:41:95:b4 txqueuelen 1000 (Ethernet)
RX packets 209182 bytes 308600382 (294.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 93936 bytes 5733197 (5.4 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens32:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.1.0.10 netmask 255.0.0.0 broadcast 0.0.0.0
ether 00:0c:29:41:95:b4 txqueuelen 1000 (Ethernet)
ip address delete 删除ip地址
ip addr delete IFADDR dev IFACE
[root@localhost ~]# ip addr del 192.168.109.32 ens32
Error: either "local" is duplicate, or "ens32" is a garbage.
#因为此处的网卡处在使用状态所以删除不成功
ip address show 显示ip地址的信息
ip addr list [IFACE]:显示接口的地址
[root@localhost ~]# ip addr list ens32
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:41:95:b4 brd ff:ff:ff:ff:ff:ff
inet 192.168.109.129/24 brd 192.168.109.255 scope global dynamic ens32
valid_lft 1541sec preferred_lft 1541sec
inet 10.1.0.10/8 scope global ens32:0
valid_lft forever preferred_lft forever
inet 192.168.109.32/24 scope global secondary ens32
valid_lft forever preferred_lft forever
inet6 fe80::2a81:1ac7:a4c8:2c80/64 scope link
valid_lft forever preferred_lft forever
ip address flush 清空所有ip地址
ip addr flush dev IFACE
此命令会清空所有ip地址,要确保安全的条件下使用
ip link:ip的配置命令
ip link set 修改设备属性
dev NAME (default):指明要管理的设备,dev可省略;
up和down:启用和禁用设备
multicast on或multicast off:启用或禁用多播功能;
name NAME:重命名接口
mtu NUMBER:设置MTU的大小,默认为1500;
netns PID:ns为namespace,用于将接口移动到指定的网络名称空间
[root@localhost ~]# ip link show ens32
2: ens32: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:41:95:b4 brd ff:ff:ff:ff:ff:ff
[root@localhost ~]# ip link set multicast on dev ens32
[root@localhost ~]# ip link show ens32
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:41:95:b4 brd ff:ff:ff:ff:ff:ff
ip link 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: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether 00:0c:29:41:95:b4 brd ff:ff:ff:ff:ff:ff
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT qlen 1000
link/ether 52:54:00:bd:a8:38 brd ff:ff:ff:ff:ff:ff
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN mode DEFAULT qlen 1000
link/ether 52:54:00:bd:a8:38 brd ff:ff:ff:ff:ff:ff
ip route:ip路由管理命令
add: 添加新路由
change : 更改路由
replace: 更改后添加路由
delete: 删除路由
show: 显示路由
flush:清空所有路由
get:获取一个路由信息
[root@localhost ~]# ip route get 192.168.0.0/24
192.168.0.0 via 192.168.109.2 dev ens32 src 192.168.109.129
cache
--------------------分割线---------------------
[root@localhost ~]# ip route show
default via 192.168.109.2 dev ens32 proto static metric 100
192.168.109.0/24 dev ens32 proto kernel scope link src 192.168.109.129 metric 100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
--------------------分割线---------------------
[root@localhost ~]# ip addr add 10.0.10.100/8 dev ens34
[root@localhost ~]# ip addr add 10.0.20.100/8 dev ens34
[root@localhost ~]# ip route add 192.168.0.0/24 via 10.0.0.1 dev ens34
[root@localhost ~]# ip route list
default via 192.168.109.2 dev ens32 proto static metric 100
default via 192.168.109.2 dev ens34 proto static metric 101
10.0.0.0/8 dev ens34 proto kernel scope link src 10.0.10.100
192.168.0.0/24 via 10.0.0.1 dev ens34
192.168.109.0/24 dev ens32 proto kernel scope link src 192.168.109.129 metric 100
192.168.109.0/24 dev ens34 proto kernel scope link src 192.168.109.130 metric 101
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
ip netns:管理网络的名称空间,centos6默认是没有的.
ip [ OPTIONS ] netns { COMMAND | help }
COMMAND:
list:列出所有的netns
add NAME:创建指定的netns
del NAME:删除指定的netns
ip netns exec NAME COMMAND:在指定的netns中运行命令
[root@localhost ~]# ip netns add nte0
[root@localhost ~]# ip netns list
nte0
ss:状态及统计数据查看
ss是另一个用来显示sockets相关数据的工具,自带过滤器功能比netstat强大.
ss [options] [ FILTER ]
选项:
-t:TCP协议的相关连接
-u:UDP相关的连接
-w:raw socket相关的连接
-l:监听状态的连接
-a:所有状态的连接
-n:数字格式
-p:相关的程序及其PID
-e:扩展格式信息
-m:内存用量
-o:计时器信息
FILTER := [ state TCP-STATE ] [ EXPRESSION ] 过滤器
TCP的常见状态:
LISTEN:监听
ESTABLISEHD:已经建立的连接
CLOSED:关闭
EXPRESSION:
dport = 目标端口
sport = 源端口
[root@localhost ~]# ss -tan '( dport = :22 or sport = :22 )'
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
ESTAB 0 100 192.168.109.129:22 192.168.109.1:3728
LISTEN 0 128 :::22 :::*
详细说明进行管理工具htop、vmstat等相关命令,并举例
htop命令:
htop是一款交互式的进程查看工具,支持鼠标操作.要使用EPEL的yum源进行安装才能使用,具体操作可以参照网上教程:
https://www.cnblogs.com/renpingsheng/p/7845096.html
htop [-dChusv]
常用选项:
-d #:指定延迟时间间隔
-u UserName:仅显示指定用户的进程
-s COLUME:以指定字段进行排序
-C:不用颜色显示
-h:显示帮助
-v:显示版本信息
子命令:
l:显示选定的进程打开的文件列表
s:跟踪选定的进程的系统调用
t:以层级关系显示各进程状态
a:将选定的进程绑定至某指定的CPU核心
1-4:cup运行的情况 Mem:物理内存的使用情况 Swp:交换分区的使用情况
Tasks:用户空间进程的个数 thr: 线程的个数 running:正在运行进程的个数
Load average: 平均负载(在1分钟,5分钟,15分钟的等待进程队列的长度) Uptime:系统启动运行的时间
PRI: 进程运行优先级 NI: nice值(19到-20)值越低优先级越高 VIRT: 虚拟内存集
RES: 常驻内存的集(KiB) SHR:共享内存空间 S:进程的状态(R:运行,S:休眠D:不可中断休眠T:阻塞,Z:僵死)
TIME+:进程运行时长 Command:正在运行的命令
vmstat命令:虚拟内存统计数据
vmstat显示系统进程,cup,IO块,物理内存等等相关信息.
vmstat [options] [delay [count]]
选项:
-s:显示内存统计数据
[root@localhost test]# vmstat 2 5
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 1120636 3164 398800 0 0 5 1 20 18 0 0 100 0 0
0 0 0 1120636 3164 398800 0 0 0 0 59 49 0 0 100 0 0
0 0 0 1120636 3164 398800 0 0 0 0 45 42 0 0 100 0 0
0 0 0 1120636 3164 398800 0 0 0 0 65 55 0 0 100 0 0
0 0 0 1121752 3164 398800 0 0 0 0 61 52 0 0 100 0 0
第一个数字代表显示的时间间隔(s),第二个数字代表显示的次数.只给一个数字时会一直以该数字为时间间隔一直显示.
procs
r:等待运行的进程的个数
b:处于不可中断睡眠态的进程个数
memory
swpd:交换内存使用总量
free:空闲的物理内存总量
buffer:用于缓冲区(系统写入硬盘)的内存总量
cache:用于缓存(提高数据读取)的内存总量
swap
si:数据写入交换分区的数据速率(kb/s)
so:从交换分区读取数据的速率(kb/s)
io
bi:从块设备读入数据到系统的速度(kb/s)
bo:保存数据至块设备的速率(kb/s)
system
in:中断速率
cs:上下文切换的速率(进程被系统调换的速率)
cpu
us: 用户空间程序占用cpu的百分百
sy:系统程序占用cpu的百分百
id:空闲cup百分比
wa:等待IO完成占用的cup百分比
st:虚拟化偷走的cup百分比
使用until和while分别实现192.168.0.0/24 网段内,地址是否能够ping通,若ping通则输出"success!",若ping不通则输出"fail!"
因为ip过多脚本对每个ip只ping3次每次间隔0.2秒
使用while实现的方法.
#!/bin/bash
declare -i i=1
while [ $i -lt 255 ]; do
ping -c 3 -i 0.2 192.168.0.$i
let i++
if [ $? -eq 0 ];then
echo "success!"
else
echo "fail!"
fi
done
--------------------分割线---------------------
[root@localhost test]# bash ping.sh
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
From 10.0.10.100 icmp_seq=1 Destination Host Unreachable
From 10.0.10.100 icmp_seq=2 Destination Host Unreachable
From 10.0.10.100 icmp_seq=3 Destination Host Unreachable
--- 192.168.0.1 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 411ms
pipe 3
success!
PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
From 10.0.10.100 icmp_seq=1 Destination Host Unreachable
From 10.0.10.100 icmp_seq=2 Destination Host Unreachable
From 10.0.10.100 icmp_seq=3 Destination Host Unreachable
--- 192.168.0.2 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 407ms
pipe 3
success!
......
使用until实现的方法
#!/bin/bash
declare -i i=1
until [ $i -gt 255 ];do
ping -c3 -i 0.2 192.168.0.$i
let i++
if [ $? -eq 0 ];then
echo "success!"
else
echo "fail!"
fi
done
--------------------分割线---------------------
[root@localhost test]# bash untilping.sh
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
From 10.0.10.100 icmp_seq=1 Destination Host Unreachable
From 10.0.10.100 icmp_seq=2 Destination Host Unreachable
From 10.0.10.100 icmp_seq=3 Destination Host Unreachable
--- 192.168.0.1 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 413ms
pipe 3
success!
PING 192.168.0.2 (192.168.0.2) 56(84) bytes of data.
From 10.0.10.100 icmp_seq=1 Destination Host Unreachable
From 10.0.10.100 icmp_seq=2 Destination Host Unreachable
From 10.0.10.100 icmp_seq=3 Destination Host Unreachable
--- 192.168.0.2 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 414ms
pipe 3
success!
......