OSI是Open System Interconnection的缩写,意为开放式系统互联。国际标准化组织(ISO)制定了OSI模型,其宗旨是为了定制网络规范,这样各大厂商之间的设备就能实现互联。
OSI模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。每一个分层都具有自己的功能和协议,并实现每个接口之间的通信。
3、各个层的定义解释:
该层是最近接近用户的一层,它为计算机应用程序提供了应用接口,并提供网络服务协议。常见的网络服务协议有:http、ftp、pop3、https等。
通俗的讲就是A向B发一份快递,你选择的快递服务商就是这个应用接口所提供的服务
该层是将传递的数据进行编码转换和加密的功能,确保一方向另一方发送数据时,接收方是可以识别出发送方的数据。一般而言,都会有一种标准的协议来进行相互传输。
通俗来讲就是A的语言为汉语,B的语言为英语,A同B交流时,C充当翻译,将A和B说的话转化为A和B能听懂的语言。而C在这个过程中就是充当表示层的功能。
该层主要是来建立、管理和终止两个计算之间相互传输数据的通信连接
通俗来讲,A寄一份资料给B,A首先与B建立起会话,告知要寄一份资料给B。然后A将资料以某种形式寄出去,等B确定收到资料后。那么此次会话也就会自动终止。
为通信双方建立端到端之间的通信(端指的是端口号)。具备差错恢复、流量控制等功能。以保证数据可以达到目的端。在网络层交换的数据单元的单位是分割和重新组合数据包(packet)如TCP、UDP等
通俗来讲,A需要寄一份快递,A派B去寄快递,B负责将A需要寄出的材料准确无误派送到某地
通过IP寻址来建立两个节点之间的连接,为运输层送来的数据分组,选择合适的路由器以及节点,准确无误的按照地址传送给运输层的目的端。也就是所说IP层。
通俗来讲就是快递运输,每个城市都有收发点,这个收发点就是每一个节点
将物理层上的比特信息封装成帧信息,通过使用硬件的物理寻址来建立两个链路之间的连接。并进行差错控制
数据链路层的两个子层
1》逻辑链路控制 LLC (Logical Link Control)子层(作用已经不大了)
2》媒体接入控制 MAC (Medium Access Control)子层:实现一对一通信是通过地址来实现的
物理层是最重要,最基础的一层,它通过媒体介质建立起各个设备之间物理接口的连接。例如电缆、同轴电缆、中继器等。物理层的数据单位是位。
通俗来讲就是快递在运输时使用的交通工具,如飞机,火车
下图也可以说明各个层的功能:
互联网协议(Internet Protocol Suite)是一个网络通信模型,以及一整个网络传输协议家族,为互联网的基础通信架构。它常被通称为TCP/IP协议族(英语:TCP/IP Protocol Suite,或TCP/IP Protocols),简称TCP/IP。
TCP(传输控制协议)和IP(网际协议),为该家族中最早通过的标准。这些协议最早发源于美国国防部(缩写为DoD)的ARPA网项目,因此也被称作DoD模型(DoD Model)。这个协议族由互联网工程任务组负责维护。
它将软件通信过程抽象化为四个抽象层,采取协议堆栈的方式,分别实现出不同通信协议。协议族下的各种协议,依其功能不同,被分别归属到这四个层次结构之中,常被视为是简化的七层OSI模型。
它主要用于应用程序上,为应用程序提供了各种通信服务。例如:FTP协议、DNS协议、HTTP协议等
传输层(Transport Layer)使源端和目的端机器上的对等实体可以进行会话。在这一层定义了两个端到端的协议:传输控制协议(TCP,Transmission Control Protocol)和用户数据报协议(UDP,User Datagram Protocol)。
TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。
UDP是UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
也被称作为互联网层,网络层主要用来处理网上流动的数据包,数据包是网络传输的最小单位。该层决定了双方进行数据传输时选择怎样的路线到达接收的一方。,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。
用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、NIC(Network Interface Card,网络适配器,即网卡),及光纤等
物理可见部分(还包括连接器等一切传输媒介)。硬件上的范畴均在链路层的作用范围之内。
我们用 HTTP 举例来说明,首先作为发送端的客户端在应用层(HTTP 协议)发出一个想看某个 Web 页面的 HTTP 请求。接着,为了传输方便,在传输层(TCP 协议)把从应用层处收到的数据(HTTP 请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。在网络层(IP 协议),增加作为通信目的地的 MAC 地址后转发给链路层。这样一来,发往网络的通信请求就准备齐全了。接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP请求。发送端在层与层之间传输数据时,每经过一层时必定会被打上一个该层所属的首部信息。反之,接收端在层与层传输数据时,每经过一层时会把对应的首部消去。
TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答
TCP的三次握手
TCP的三次握手
SYN+ACK ,并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。
TCP三次握手的过程如下:
客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。
通俗来讲:A向B说:我要给你传输数据。第一次通话,B说:可以,你什么时候传。第二次通话,A说:我现在就传,你等着接收吧。第三次通话。三次通话之后,数据传输连接建立。
建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。具体过程如下图所示。
TCP连接的终止
TCP连接的终止
(1) 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
(2) 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。
注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
(3) 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
(4) 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。
既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节。
互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),缩写为IP地址(英语:IP Address),是分配给用户上网使用的网际协议(英语:Internet Protocol, IP)的设备的数字标签。常见的IP地址分为IPv4与IPv6两大类。此处只对IPv4说明。
IPv4地址长为32bit,分为四组。8bits.8bits.8bits.8bits
有十进制和二进制两种表示方法。分别是:
点分四组十进制。每一组范围是[0~255],如:255.255.255.255
二进制。如:11111111 11111111 11111111 11111111
A类:第一段为网络,后三段为主机号。对于网络号来说:
第一位0不变,0 000 0000 - 0 111 1111 地址范围:1.0.0.0 - 127.255.255.255
网络数量:126个,127的地址为还回地址,仅做测试用用。
主机数量:2^24-2 全0的表示网络本身,全1的标识本地主机
B类地址:前两段为网络号,后两段为主机号。对于网络号来说:
前两位10不变,10 00 0000 - 10 11 1111 地址范围:128.0.0.0-191.255.255.255
网络数量:2^14
每个网络中的主机数量:2^16 - 2
默认子网掩码:255.255.0.0
C类地址:前三段为网络号,后一段为主机号,对于网络号来说:
前三位110不变, 110 0 0000 - 110 1 1111 地址范围:192.0.0.0-223.255.255.255
网络数:2^21
每个网络中的主机数量:2^8 - 2
默认子网掩码:255.255.255.0
D类:组播通信
1110 0000 - 1110 1111 : 224 - 239
E类:测试实验
240 - 255
3.6 私有ip
在这么多网络IP中,国际规定有一部分IP地址是用于我们的局域网使用,也就
是属于私网IP,不在公网中使用的,它们的范围是:
10.0.0.0~10.255.255.255
172.16.0.0~172.31.255.255
192.168.0.0~192.168.255.255
注意
IP地址127.0.0.1~127.255.255.255用于回路测试,
如:127.0.0.1可以代表本机IP地址,用http://127.0.0.1就可以测试本机中配置的Web服务器
子网掩码——屏蔽一个IP地址的网络部分的“全1”比特模式。对于A类地址来说,默认的子网掩码是255.0.0.0;对于B类地址来说默认的子网掩码是255.255.0.0;对于C类地址来说默认的子网掩码是255.255.255.0。
子网掩码的作用:可以与IP地址进行"与"运算,从而来求出网络地址和广播地址
例如:
C类网址192.168.1.100 子网掩码255.255.255.0
IP网址转换为二进制: 1100000.10101000.00000001.1100100
子网掩码转换为二进制: 11111111.11111111.11111111.00000000
得出网络地址: 11000000.10101000.00000001.00000000 192.168.1.0
广播地址:即将主机位上全部变为1, 11000000.10101000.00000001.11111111 192.168.1.255
练习:1、100.0.0.16/28 对应网段的网络地址、广播地址、可分配IP地址范围
根据提示,100.0.0.16属于A类网址。第一段为网络号,后三段为主机号。
/28对应的子网掩码:255.255.255.240
100.0.0.16转换为二进制: 01100100.00000000.00000000.00010000
子网掩码转换为二进制: 11111111.11111111.11111111.1111||0000
||后面即使本机地址,二进制连续的1之前都是网络地址,之后的是本机地址
网络地址: 01100100.00000000.00000000.00010000 100.0.0.16
广播地址: 01100100.00000000.00000000.00011111 100.0.0.31
有效范围:网络地址+1~广播地址 100.0.0.17-100.0.0.31
传统命名:
以太网:ethX【0,oo】,例如:eth0 , eth1....
ppp网络:pppX【0,oo】 例如 : ppp0,ppp1...
可预测命名方案(Centos):
支持多种不同的命名机制:
Fireware,拓扑结构
1、如果firmware或BIOS为主板上集成的设备提供的索引信息可用,则根据此索引进行命名,如eno1,eno2.....
2、如果firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,如ens1,ens2....
3、如果硬件接口的物理位置信息可用,则根据此信息命名,如enp2s0...
4、如果用户显示启动定义,也可根据mac地址命名,例如:enx122161ab2e10.....
上述均不可用时,则仍使用传统方式命名
命名格式的组成:
en:以太网简写 ethernet
wl:无线局域网 wlan
ww:wwan
名称类型:
o:集成设备的设备索引号
s:扩展槽的索引号
x:基于mac地址的命名
ps:基于总线及槽的拓扑结构进行命名
静态指定:
1、命令指定:
ifcfg家族
ifconfig:配置IP,掩码,网关
route:配置路由
netstat:状态及统计数据查看
iproute2家族:
ip OBJECT:
addr:地址及掩码配置
link:接口
route:路由
ss:状态及数据查看
以上两个家族任何系统都可以使用
Centos7:nm家族
用来修改配置文件的命令
mcli:命令行工具
nmtui: 文本窗口工具
注意:
DNS服务器指定:
配置文件:/etc/resolv.conf
本地主机名指定:
hostname命令,临时有效
配置文件:/etc/sysconfig/network
centos7:hostnamectl命令
2、配置文件:
RedHat及相关发行版:
/etc/sysconfig/network-scripts/ifcfg-NETCARD_NAME
注意:命令设置的网络配置会立即生效,但不会永久有效,文件配置不会立即生效,但是会永久有效
动态分配:
依赖本地网络中有DHCP服务
DHCP服务:动态主机配置服务
ifconfig:用来查看和管理接口及地址。
使用格式:
ifconfig [ITERFACE]
常用选项:
-a:显示所有的接口包括未激活的状态
ifconfig IFACE IP/MASK[up|down]:激活或者禁用某一个接口
[root@bogon ~]# ifconfig ens36
ens36: flags=4099 mtu 1500
ether 00:0c:29:c0:c0:5f txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#显示ens36网卡的状态
[root@bogon ~]# ifconfig ens36 up
ens36: flags=4099 mtu 1500
inet 111.63.112.254 netmask 255.255.255.0 broadcast 111.63.112.255
ether 00:0c:29:c0:c0:5f txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#激活ens36的网卡
路由查看以及管理
路由条目类型:
主机路由:目标地址为单个IP;
网络路由:目标地址为ip网络
默认路由:目标位任意网络主机。0.0.0.0/0.0.0.0
查看路由条目:route -n
[root@bogon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.199.1 0.0.0.0 UG 100 0 0 eno16777736
111.63.112.0 0.0.0.0 255.255.255.0 U 0 0 0 ens36
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.199.0 0.0.0.0 255.255.255.0 U 100 0 0 eno16777736
Destination :target 目标
Gateway:下一跳网关地址
Flags: 路由条目的标志, U 启用状态, G:表示是一个网关
Metric :度量值,
IFace:经过每一个接口
添加:
route add [-net|-host] TARGET [netmask Nm] [gw GW] [[dev] If]
route add default gw 192.168.199.1 : 添加默认网关
[root@bogon ~]# route add -net 10.0.0.0 netmask 255.0.0.0 dev ens36
[root@bogon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.199.1 0.0.0.0 UG 100 0 0 eno16777736
10.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 ens36
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.199.0 0.0.0.0 255.255.255.0 U 100 0 0 eno16777736
删除:
route del [-net|-host] TARGET [netmask Nm] [gw GW] [[dev] If]
[root@bogon ~]# route del -net 10.0.0.0/8 dev ens36
[root@bogon ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.199.1 0.0.0.0 UG 100 0 0 eno16777736
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0
192.168.199.0 0.0.0.0 255.255.255.0 U 100 0 0 eno16777736
用来查看/管理路由,设备,策略路由和隧道
使用格式:
ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT := { link | addr | route | netns }
ip link:管理网络设备配置
子命令:
ip link set: change device attributes 设置设备属性
dev NAME(default):指明要管理的设备,dev关键字可以省略
up and down : 开启或者禁用
multicast on或multicast off:启用或禁用多播功能;
name NAME:重命名接口名称
注意:修改时要先停止接口
mtu NUMBER:设置MTU大小,默认为1500
netns PID:ns为namespace,用于将接口移动到指定的网络名称空间
ip link show: display device attributes 显示设备属性
ip link help- : 显示简要帮助
示例:
#禁用ens34网卡
[root@localhost ~]# ip link set dev ens34 down
#将ens34网卡重命名为ens36
[root@localhost ~]# ip link set dev ens34 name ens36
#注意:重命名时需要将服务先停止
ip netns: 管理网络名称
子命令
ip netns list:列出所有的netns
ip netns add NAME:创建指定的netns
ip netns del NAME:删除指定的netns
ip netns exec NAME COMMAND:在指定的netns中运行命令
示例:
#创建一个netns列表
[root@localhost ~]# ip netns add ens99
#将一个设备移动到netns中,需要使用ip link set
[root@localhost ~]# ip link set dev ens36 netns ens99
#删除netns列表
[root@localhost ~]# ip netns del ens99
删除过后,列表里的设备将被释放
ip address:协议地址管理
子命令:
ip address add - add new protocol address
ip address add IFADDR dev IFACE : 添加一个ip地址
[label NAME]:为额外添加的地址指明接口别名
[root@localhost ~]# ip address add 192.168.199.19 dev ens34 label ens34
[broadcast ADDRESS] : 广播地址,根据IP和NETMASK自动计算得到
[scope SCOPE_VALUE]:指定作用域
global:全局可用
link:接口可用
host:仅本机可用
ip address delete - delete protocol address 删除一个地址
ip addr delete IFADDR dev IFACE
ip address show - look at protocol addresses
ip address show [IFACE]:仅显示接口的ip地址
ip address flush - flush protocol addresses :清空地址
ip address flush dev IFACE
routing table management :路由表管理
子命令:
ip route add:add new route
ip route change: change route
ip route replace:change or add new one
ip route add TYPE PREFIX via GW [dev IFACE] [src SOURCE_IP]
示例:
# ip route add 192.168.0.0/24 via 10.0.0.1 dev eth1 src 10.0.20.100
# ip route add default via GW
ip route delete:delete route 删除路由
ip route del TYPE PERIFIX
示例:
# ip route delete 192.168.1.0/24
ip route show: list routes
ip route flush:flush routing tables
ip route flush TYPE PREFIX
ip route get TYPE PREFIX
示例:ip route get 192.168.0.0/24
ss命令:显示接口的统计数据 取代netstat命令
ss [options] [ FILTER ]
常用选项 | 解释 |
---|---|
-t | TCP协议的相关连接 |
-u | UDP协议的相关连接 |
-w | raw socket的相关连接 |
-l | 监听状态的相关连接 |
-a | 所有状态的相关连接 |
-n | 显示数字格式 |
-p | 相关的程序及其PID |
-e | 扩展格式信息 |
-m | 内存用量 |
-o | 计时器信息 |
常用组合:
-tan,-tanl,-tanlp,-uan
TCP的常见状态:
TCP FSM:
LISTEN:监听
ESTABLISHED:建立的连接
FIN_WAIT_1:等待对方连接
FIN_WAIT_2:等待对方答应
SYN_SENT:
SYN_RECV:
CLOSED:
EXPRESSION:
dport=目标端口
sport=源端口
示例:'( doprt = :22 or sport = :22 )' 括号有空格
语法:
tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]
Linux tcpdump命令用于倾倒网络传输数据。
执行tcpdump指令可列出经过指定网络界面的数据包文件头,在Linux操作系统中,你必须是系统管理员
常用选项:
-a 尝试将网络和广播地址转换成名称。
-c <数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
-e 在每列倾倒资料上显示连接层级的文件头。
-f 用数字显示网际网络地址。
-F <表达文件> 指定内含表达方式的文件。
-i <网络界面> 使用指定的网络截面送出数据包。
-l 使用标准输出列的缓冲区。
-n 不把主机的网络地址转换成名字。
-N 不列出域名。
-O 不将数据包编码最佳化。
-p 不让网络界面进入混杂模式。
-q 快速输出,仅列出少数的传输协议信息。
-r <数据包文件> 从指定的文件读取数据包数据。
-s <数据包大小> 设置每个数据包的大小。
-S 用绝对而非相对数值列出TCP关联数。
-t 在每列倾倒资料上不显示时间戳记。
-tt 在每列倾倒资料上显示未经格式化的时间戳记。
-T <数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
-v 详细显示指令执行过程。
-vv 更详细显示指令执行过程。
-x 用十六进制字码列出数据包资料。
-w <数据包文件> 把数据包数据写入指定的文件。
[root@localhost ~]# tcpdump -c 10 -i ens33
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
17:53:25.734620 IP localhost.localdomain.ssh > ydong.lan.62805: Flags [P.], seq 1488351531:1488351743, ack 3837159095, win 274, length 212
17:53:25.735615 IP localhost.localdomain.57287 > Hiwifi.lan.domain: 54145+ PTR? 212.199.168.192.in-addr.arpa. (46)
17:53:25.736937 IP Hiwifi.lan.domain > localhost.localdomain.57287: 54145* 1/0/0 PTR ydong.lan. (69)
17:53:25.738148 IP localhost.localdomain.58750 > Hiwifi.lan.domain: 59644+ PTR? 215.199.168.192.in-addr.arpa. (46)
17:53:25.739701 IP Hiwifi.lan.domain > localhost.localdomain.58750: 59644 NXDomain* 0/0/0 (46)
17:53:25.744071 IP localhost.localdomain.44279 > Hiwifi.lan.domain: 43554+ PTR? 1.199.168.192.in-addr.arpa. (44)
17:53:25.744967 IP localhost.localdomain.ssh > ydong.lan.62805: Flags [P.], seq 212:408, ack 1, win 274, length 196
17:53:25.745959 IP ydong.lan.62805 > localhost.localdomain.ssh: Flags [.], ack 408, win 602, length 0
17:53:25.748237 IP Hiwifi.lan.domain > localhost.localdomain.44279: 43554* 1/0/0 PTR Hiwifi.lan. (68)
17:53:25.748959 IP localhost.localdomain.ssh > ydong.lan.62805: Flags [P.], seq 408:1340, ack 1, win 274, length 932
10 packets captured
10 packets received by filter
0 packets dropped by kernel
使用命令方式进行的设置都是立即有效,但是重启之后就无效了。如果想让设置一直有效,那么就需要修改配置文件。
hostnamectl命令:
hostnamectl -status:显示当前主机名
hostnamectl -set-hostname:设定主机名,永久有效
配置文件:/etc/sysconfig/network
HOSTNAME=
注意:修改配置文件的方法不会立即生效,但以后会一直有效
配置文件:/etc/resolv.conf
nameserver DNS_SERVER_IP:最多只有三个
主机路由:目标地址为单个IP;
网络路由:目标地址为ip网络
默认路由:目标位任意网络主机。0.0.0.0/0.0.0.0
/etc/sysconfig/network-scripts/ifcfg-IFACE_NAME
ifcfg-IFACE配置文件参数:
DEVICE:此配置文件对应的设备的名称,与NAME保持一致
ONBOOT:在系统引导过程中,是否激活此接口
UUID:设备的唯一标识
IPV6INIT:是否初始化IPv6
BOOTPROTO:激活此接口时使用什么协议来配置接口属性,常用的有dhcp,bootp,static,none
TYPE:接口类型,常见的有Ethernet,Bridge
DNS1:第一个DNS服务器指向
DNS2: 备用DNS服务器指向
DIMAIN:DNS搜索域
DEFROUTE:是否指认默认路由的地址
GETWAY:默认网关
IPADDR:本机IP地址
PREFIX(netmask):子网掩码 ,centos 7支持使用PREFIX长度方式指明子网掩码
USERCTL:是否允许普通用户控制此设备
PEERDNS:如果BOOTPROTO的值为"dhcp",是否允许dhcp server分配的dns服务器指向覆盖本地手动指定的DNS服务器指向,默认为允许
NM_CONTROL:是否使用networkManager服务来控制接口
HWADDR:设备的MAC地址
用到非默认网关路由:/etc/sysconfig/network-scripts/route-IFACE
支持两种配置方式,但不可混用;
1、每行一个路由条目
TARGET via GW
2、每三行一个路由条目
ADDRESS#=TARGET
NETMASK#=MASK
GATEWAY#=NEXTHOP
配置文件设置完成之后,需要重启网络服务:
centos7:
#systemctl restart network.service
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
简单来说就是应用程序放在那里不使用,它是静态的一串串代码,当你要是用它时,它就会一个个进程来保证你的程序运行。它用PID号来表示。
所有的进程都是由父进程来创建的。内核会创建一个init(Centos7上已经变成了systemd)的初始进程,用来管理所有进程。
PID号存储在/proc/目录下以数字命名的目录。对应的是每一个进程pid号
Linux内核存储进程信息的固定格式:任务结构体 task struct,它会被装在到内存里存储进程的相关信息
多个任务的task struct 组件的链表:task list
task_struct的内容分配
标示符: 描述本进程的唯一标示符,用来区别其他进程
状态: 任务状态,退出代码,退出信号等
优先级: 相对于其他进程的优先级
程序计数器: 程序中即将被执行的下一条指令的地址
内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
上下文数据: 进程执行时处理器的寄存器中的数据
I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表
记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等
进程类型分为以下:
守护进程:在系统引导过程中启动的进程,与终端无关
前台进程:用户启动终端的进程,终端结束,进程结束。
注意:前台进程已经被送往后台以守护进程模式来运行
进程状态
运行状态:running
就绪状态:ready 等待内核运行
睡眠状态:
可中断:任何时候都可以运行
不可中断:磁盘睡眠状态
停止状态:暂停与内存中,但不会被调度,除非手动启动它;stopped
僵尸态:zombi
1.僵尸进程怎么产生的?
当一个子进程退出时,为了保持退出状态,它的资源不会全部释放,必须等待父进程来清理子进程的资源。
如果父进程在子进程退出后,并没有清理子进程,那么这个子进程就被称为僵尸进程。
还有一种情况:
父进程在子进程前退出,那么子进程就编程孤儿进程。它会交由init进程来管理。
2、僵尸进程危害?
根据上述所说,子进程退出后还占用大量的内存资源空间。
虽然表面上子进程时退出了,但是它的退出状态也是由数据来维护的。变相的增加了一个维护它自身退出状态的进程。
如果一个父进程创建了很多子进程,可想而知,会造成对内存资源的极大浪费
0-139:总共140个优先级
1-99:实时优先级;数字越大,优先级越高
100-139:静态优先级; 数字越小,优先级越高
Nice值:
-20,19(对应100-139)
最常用的语法:pstree
[root@localhost ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─VGAuthService
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───2*[{at-spi2-registr}]
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─chronyd
├─colord───2*[{colord}]
├─crond
├─cupsd
├─2*[dbus-daemon───{dbus-daemon}]
├─dbus-launch
├─dnsmasq───dnsmasq
├─gdm─┬─X───9*[{X}]
│ ├─gdm-session-wor─┬─gnome-session-b─┬─gnome-settings-───5*[{gnome-settings-}]
│ │ │ ├─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
│ │ │ │ │ ├─ibus-engine-sim───2*[{ibus-engine-sim}]
│ │ │ │ │ └─2*[{ibus-daemon}]
│ │ │ │ └─22*[{gnome-shell}]
│ │ │ └─3*[{gnome-session-b}]
│ │ └─2*[{gdm-session-wor}]
│ └─3*[{gdm}]
├─gssproxy───5*[{gssproxy}]
├─ibus-x11───2*[{ibus-x11}]
├─irqbalance
├─ksmtuned───sleep
├─libvirtd───15*[{libvirtd}]
├─lsmd
├─lvmetad
├─master─┬─pickup
│ └─qmgr
├─packagekitd───2*[{packagekitd}]
├─pcscd───2*[{pcscd}]
├─polkitd───5*[{polkitd}]
├─pulseaudio───{pulseaudio}
├─rngd
├─rsyslogd───2*[{rsyslogd}]
├─rtkit-daemon───2*[{rtkit-daemon}]
├─smartd
├─sshd─┬─sshd───bash───pstree
│ └─sshd───bash
├─systemd-journal
├─systemd-logind
├─systemd-udevd
├─tuned───4*[{tuned}]
├─upowerd───2*[{upowerd}]
├─vmtoolsd───{vmtoolsd}
├─wpa_supplicant
└─xdg-permission-───2*[{xdg-permission-}]
report a snapshot of the current processes. 报告当前进程的状态
常用组合1:
ps [options]
选项三中风格:
1 UNIX options, which may be grouped and must be preceded by a dash. 加“-”号
2 BSD options, which may be grouped and must not be used with a dash. 不加“-”号
3 GNU long options, which are preceded by two dashes. 长选项
a: 所有与终端相关的进程
x: 所有与终端无关的进程
u: 以用户为中心组织进程状态信息显示
三者一同使用
示例:
[root@localhost ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 193964 7128 ? Ss 16:25 0:06 /usr/lib/systemd/systemd --switched-root --system --dese
root 2 0.0 0.0 0 0 ? S 16:25 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 16:25 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< 16:25 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S 16:25 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 16:25 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 16:25 0:03 [rcu_sched]
root 10 0.0 0.0 0 0 ? S 16:25 0:00 [watchdog/0]
root 11 0.0 0.0 0 0 ? S 16:25 0:00 [watchdog/1]
#其中[]内都是内核启动的进程
头部显示:
USER:用户
PID:进程号
%CPU:累计是用CPU时间
%MEM:内存空间占据整个空间的比例
VSZ:虚拟内存集
RSS:常驻内存集
STAT:状态
R:ruuning
S:可中断睡眠
D:不可中断睡眠
T:停止态
Z:僵死态
+:前台进程,
l:多线程进程
N:低优先级进程
<:高优先级进程
s: 会话引领者
常用组合2:
-e:显示所有进程
-f:显示完整格式的进程信息
二者同时使用:-ef
示例:
[root@localhost ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 16:25 ? 00:00:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2 0 0 16:25 ? 00:00:00 [kthreadd]
root 3 2 0 16:25 ? 00:00:00 [ksoftirqd/0]
#头部信息
PPID:父进程
C:CPU的占用百分比
STIME:启动时间
TTY:与其相关的终端
TIME:启动的时间
CMD:启动此进程的命令
常用组合3
-F:显示完整格式的进程信息
PSR:运行在哪个CPU上
-H:以层级结构显示进程的相关信息
常用组合:-eFH
常用组合4:
常用组合:
-eo,axo
o filed1,filed2:自定义要显示的字段列表,各字段以逗号分隔
常用的filed:pid , ni , priority ,psr , pcpu , stat , comm, tty, ppid,rtprio
ni:Nice值
priority:当前进程的优先级数字
rtprio:实时优先级
例如: ps axo pid,command
示例:
[root@localhost ~]# ps axo pid,ni,stat,psr
PID NI STAT PSR
1 0 Ss 1
2 0 S 6
3 0 S 0
top升级版,显示linnux系统的进程信息。
选项:
-d #:指定延迟时间间隔
-u uesrName:仅显示指定用户的进程
-s COLUME:以指定字段进行排序
子命令:
l:显示选定的进程打开的文件列表
s:跟踪选定的进程的系统调用
t:以层级关系显示各进程状态
a:将选定的进程绑定至某指定的cpu核心
Report virtual memory statistics 报告虚拟内存的统计工具
使用语法:vmstat [options] [delay [count]]
[root@localhost ~]# 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 1007964 2120 647076 0 0 6 1 19 15 0 0 100 0 0
头部信息:
procs:进程
r:等待运行的进程的个数;CPU上等待运行的队列长度
b:处于不可中断睡眠态的进程个数,被阻塞的任务队列的长度
memory:
swpd:交换内存使用总量;
free:空闲的物理内存总量
buffer:用于buffer的内存总量
cahe:用于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:用户空间所占据的百分比
sy:内核空间所占据的百分比
ni:用于nice值调整后占据的百分比
id:空闲百分比
cs:切换上下文所消耗
wa:等待io所消耗的时间
hi:硬件中断所占据的百分比
si:软件中断所占据的百分比
st:被偷走的时间百分比