运维课程第四周小结

运维课程第四周小结

第十天:网络协议和通信

在这里插入图片描述

10.1 网络协议基础知识

计算机网络范围分类

  • 局域网 LAN:小区域内
  • 城域网 MAN:大号局域网
  • 广域网 WAN:长距离传输

网络分层

  • OSI七层模型

在这里插入图片描述

  • TCP/IP四层模型

    网络接口层 网络层 传输层 应用层

在这里插入图片描述

通信机制:单工通信机制、半双工通信机制、全双工通信机制

在这里插入图片描述

单工:只能水管单向流

半双工:只能单向,但可以从左到右,或从右到左

全双工:可以双向同时传输

10.2 局域网

在这里插入图片描述

链路层包含源mac和目标mac

网络层包含源ip和目标ip

传输层包含源port和目标port

数据包从A主机到B主机,要识别mac

网络设备

  • 交换机 从每个口去找人 里面维护着mac地址表
  • 路由器 定向找人 记录网段信息 有网关

在这里插入图片描述

网络适配器,也称网卡

以太网:边发边听,有冲突就冲突停止,并尝试延迟重发

  • mac地址:网卡唯一的身份标识(全球唯一)

分层网络:一般分2层,细分3层

在这里插入图片描述

10.3 TCP/IP

TCP:面向连接的、可靠的、基于字节流的传输层协议

UDP:无连接、不可靠、基于报文

传输层协议:把两个程序进行传递输出(端口到端口)

报文:数据封装后的产物就是报文,就是数据包裹,类似于一层一层洋葱

TCP报文

在这里插入图片描述

  • 需要关心的是:源端口 目的端口 FIN SYN ACK
    在这里插入图片描述

TCP端口:

  • 知名端口(范围0~1023):HTTP80,SSH22,

  • 动态端口(范围1024~65535):MySQL3306

重点

TCP的三次握手和四次断开

在这里插入图片描述

  • 见面的时候才能握手(断开时)
  • 客户端发出请求(第一次握手):标志位SYN的值标记为1(表示客户端到服务端建立连接的第一次请求),服务端接收信息
  • 服务端确认信息建立连接,发出请求建立连接(第二次握手):标志位ACK和SYN的值都标记为1(ACK标记1表示确认收到消息了)
  • 客户端收到确认,确认建立连接(第三次握手):标志位ACK标记为1(确认收到消息了)
  • 最终双方都处于连接状态

传完消息,需要断开了

在这里插入图片描述

  • 前提:双方都处于连接状态
  • 客户端发起断开请求(第一次断开):FIN标记为1(中断连接)
  • 服务端接收断开请求,发送确认(第二次断开):ACK标记为1 ,此时客户端单方面与服务端断开
  • 服务端发起断开请求(第三次断开):FIN标记为1(中断连接)
  • 客户端接收断开请求,发送确认(第四次断开):ACK标记为1 ,此时双方彻底断开

但是问题来了,这么多ack等的状态,谁知道哪个是第几次呢?

解决方案:有限状态机

在这里插入图片描述

UDP报文:只需要源端口和目标端口

进程间通信:cpu执行程序放到队列里按照顺序执行

在这里插入图片描述

IP报文:源IP和目标IP

网络层协议:IP协议,ICMP协议,ARP协议

10.4 IP

IP是互联网协议地址,互联网上唯一的身份标识

  • ipv4:32位二进制数字表示IP地址
    在这里插入图片描述

分为网络位(掩码)和主机位

掩码的长度变化:长度变短=主机位长度增加=该网段可容纳主机数增加

​ 长度变长=主机位长度缩短=该网段可容纳主机数减少

在这里插入图片描述

长度每+n,拆分成2n个子网

在这里插入图片描述

长度每-n,合并2n个子网

IP地址分为公网和私网,一共分为5类(A,B,C,D,E)

在这里插入图片描述

用自己的掩码分别和自己IP和别人IP比对,相同则同一网段可以访问,不同则不可访问

所以会出现我可以访问你,但你不可以访问我的情况

在这里插入图片描述

10.5 VM网络

VM网络:桥接、NAT、仅主机

在这里插入图片描述

bridge:动态分配ip地址,但是不好的是ip地址太多

NAT模式:网络地址转换,虚拟机数据离开主机时候,使用主机的ip地址上网

mobaxterm,通过生成的虚拟网卡10.0.0.1来连接虚拟机(属于主机),用10.0.0.1上网(w命令)

仅主机:自己玩,但是上不了网

在这里插入图片描述

网卡名字

在这里插入图片描述

需要改成eth0之类的

/etc/netplan/
ls
rm -rf 50和01
mv 90 50
ls
改成eth0
修改grub文件(立即生效)
reboot
完成操作

在这里插入图片描述

第十一天 网络配置管理和进程基础

11.1 网卡属性定制

要定制,首先得知道配置文件在什么地方?

在这里插入图片描述

这里将展示openeuler的网卡属性定制方法

在这里插入图片描述

在这里插入图片描述

  • 为主机添加一块新网卡,使用nat网络

  • 进入配置文件

     cp ifcfg-ens160 ifcfg-ens224
     sed -i 's/ens160/ens224/g' ifcfg-ens224
     vim ifcfg-ens224
     删UUID,更改ip至10.0.0.114
     systemctl restart NetworkManager
     ####如果上述命令不管用####
     nmcli connection down ens224
     systemctl restart NetworkManager
    

这里将展示rocky9的网卡属性定制方法

在这里插入图片描述

nmcli是NetworkManager的客户端配套工具,该工具离不开NM服务

但NWM的作用只能重载配置文件,断开不了之前的连接

解决方法:上图中总结出来的两条命令

  • 依旧是增加网卡

  •   cd /etc/NetworkManager/system-connections/
      生成配置文件:
      场景1 -- 网卡处于未连接状态
      	nmcli device up 就可以生成配套网卡配置文件
      场景2 -- 网卡处于连接状态
      	断开网卡的连接状态
      	nmcli con reload -- 重载网卡连接配置
      	nmcli device up
      
      进行配置:
      删除uuid
    

在这里插入图片描述

  •   nmcli connection down ens224
      systemctl restart NetworkManager
    
  • 生效

这里将展示Ubuntu的网卡属性定制方法

  • 添加网卡

  • 在这里插入图片描述

  • 添加新网卡名,addresses和routes

  •   netplan apply -- 使网卡生效
    
11.2 网络命令解读
hostname命令
hostnamectl set-hostname 主机名 --- 更改主机名字
hostnamectl -- 查看主机名(只要记忆这个就可以)


ifconfig命令
ifconfig -- 看ip地址
ifconfig down ens37 -- 关闭设备
ifconfig up ens37 -- 启用设备

ifconfig eth1 10.0.0.55 netmask 255.255.255.0 -- 临时更改ip地址


route命令
route -n -- 显示路由
route add -net 11.0.0.0/8 gw 10.0.0.2 -- 增加网关为10.0.0.2,目标为11.0.0.0/8的路由
route del -net 11.0.0.0/8 -- 删除路由


netstat命令
netstat -tnulp -- tcp,number,udp,listen,port


nmcli命令
nmcli con -- 看网络连接状态
nmcli con show ens160 -- 看具体连接状态
nmcli dev show ens224 -- 看设备连接状态
nmcli connection up ens224 -- 建立连接
nmcli connection down ens224 -- 取消连接
***
要使得修改生效
先断开连接
再修改
重启服务
再连接

在这里插入图片描述

在这里插入图片描述

注意:网关定制要选择距离目标网段最近,且ip地址和我同网段的ip地址

11.3 网络进阶

网卡绑定

在这里插入图片描述

流量来了之后从网卡交给主机,但如果网卡坏了,就出现单点故障

解决方法:增加一个网卡

出现情况:服务器是给程序用的,程序不知道网卡有没有坏

解决方法:把网卡绑定,提供唯一的入口,生成vip(虚拟ip) 必须在同一网段,是同网络模型

同样的,在服务器级别上,坏了一台服务器称为单点故障,也通过vip绑定两台,叫高可用。

在这里插入图片描述

  • 轮询:外部流量过来,交替交给不同的网卡,也称RR
  • 主备:外部流量过来。先找老大(主),如果主网卡坏了,再给备网卡
  • 平衡策略:根据源端口

网卡绑定实践

modprobe -- first-time bonding
其余见pdf

在这里插入图片描述

如果流量切换的时候有数据进来,流量会丢失,叫网络抖动

网络组:不多介绍,了解即可

流程:设定team0检测流程,检测状态。把两个网卡绑定在team0上,给team0流量

11.4 软路由实践

配ip地址很重要,占比95%!!!

在这里插入图片描述

软路由:用主机来模拟路由器,达到流量转发的效果

  • 注意,网关的选择是距离目标最近的ip地址,且与我同网段

  • 分别配置ip

  •   对于ubuntu:
      
      修改后netplan apply
      对于rocky:
      address=
      method=manual
      修改后systemctl restart NetworkManager
    
  • 发现15主机居然能ping通172.24.100.7???

    原因:没从规划好的路线走,172.24.100.7的流量从nat模型自动生成的vmnet8出去了(vmnet8和vmnet1都属于Windows,可以互相通信)

    解决办法:

    route del default
    

在这里插入图片描述

  • 接下来定制路由

    对于路由器主机rocky:
    route add -net 192.168.8.0/24 gw 10.0.0.15 -- 设置路由
    开启转发能力:
    echo 1 > /proc/sys/net/ipv4/ip_forward
    
    对于客户端主机ubuntu:
    route add default gw 172.24.100.6 -- 设置路由,即流量唯一出口
    
11.5 网桥实践

在这里插入图片描述

在这里插入图片描述

小结:在这里插入图片描述

11.6 网络工具解读

tcpdump命令
yum install tcpdump -y
tcpdump -D -- 显示所有可以用来抓包的接口
tcpdump -nn -- ip和port都用数字形式展示
tcpdump -vv -- 显示更细的内容

tcpdump -nn host ip -- 抓特定主机的双向包
tcpdump -nn src host ip -- 抓特定主机的单向包
tcpdump -nn dst host ip -- 同上

tcpdump +
ip host -- 抓ip报文
tcp port -- 抓port报文


多条件:使用and进行层层过滤
tcpdump ip host 10.0.0.12 and host 10.0.0.1 -- 就抓两台特定节点之间的数据包
nmap -- 安全方面的命令,用的比较少(安全审核工具)
nmap 10.0.0.13/24
11.6 进程基础知识

在这里插入图片描述

我们知道,对于一个程序:

  • 文件在硬件中,若要执行程序,我们把数据加载到内核空间

  • 内存划分为两个区域,彼此隔离,通过复制把内容放到用户空间,从而让程序使用

  • 旁边有cpu,cpu有多核来执行操作

  • 为了方便cpu更快执行操作,里面又分为了L1,L2,L3等缓存

  • 程序在运行时,会把所需要的数据提前加载到缓存中

  • 之后程序执行

  • 执行完的内容原路返回(回到用户空间)

  • 用户空间再复制一份到内核空间

  • 内核空间复制到硬件

但是程序有很多很多个,假如有10000个程序给双核cpu执行,每个cpu中分5000个

  • cpu会提供一个队列,挨个执行,维护执行顺序
  • cpu内部把时间进行分片(每个程序存活并执行一定时间,然后去别的队列里)
  • 让程序实现“同时运行”的效果

这里衍生出并发和并行的关系:

在这里插入图片描述

并行要求有多个cpu,可以一起执行

对于程序而言,进程是正在进行中的程序

表现样式:

  • 程序唯一的身份标识:PID
  • 如果有网络通信需求,则还会有port
  • 每个程序内部划分资源,内存资源来源于文件,文件是否允许读?与权限有关

进程运行方式分类:

守护进程:后台运行,不占用终端

前台进程:前台运行,会占用终端

在这里插入图片描述

  • 进程文件来源于存储设备(有大量文件)
  • 向操作系统申请一块内存空间
  • 把数据加载到内存空间
  • 为内存空间中的进程设定用户属性,操作权限,身份标识等

进程的创建:

  • 为进程分配唯一的PID可通过 ls /proc/查看

  • 里面的东西都是操作系统分配的

  • 为进程分配空间

  • 初始化模块(搬到新家需要初始化环境)目的:方便cpu调度

  • 设置准确连接(队列来连接程序,决定执行顺序)

  • 如果程序结束,自动消失

父进程和子进程

在这里插入图片描述

为子进程分配新空间,生成后里面就有相应数据

查看进程关系
pstree -p 

列表形式查看进程
ps aux

进程由程序,数据(生成的数据)和进程控制块(PID等)三部分组成

第十二天:进程基础和shell编程进阶

12.1 进程基础知识
12.1.1 进程与线程

上图为进程的梳理:

在这里插入图片描述

  • 操作系统上开启了一个独立的进程

  • 进程运行时,把程序加载到运行环境,运行的文件都放在内存里

  • 进程中由负责运行的程序代码,运行中的数据和控制器PCB构成

进程是操作系统资源分配的基本单位

线程

在这里插入图片描述

已知进程在CPU上执行,但cpu上有很多程序在运行,里面的缓存是很有限的

所以它维持了一个队列,里面有链接,到谁了就把数据加载到cpu里,到点了就释放出去

  • 但是很多程序都使用共同的数据,没必要每次都扔了再拿
  • 所以把共性的数据放在一起,让其他的东西单独运行就可以了
  • 每个小进程(线程)只要自己加载自己的东西就可以

线程是程序调度和分配的基础单位

相当于一个总控中心,把东西带来,让不同服务员帮忙来处理就行了

不然就得自己一家一家跑

所有线程共享进程内的数据,脱离进程,线程不复存在

12.1.2 进程查看
pstree -p
查看线程:
grep -i threads /proc/PID/status -- 在status的threads里

在这里插入图片描述

  • 大括号括起来的是线程

    以796为例,它是单进程多线程的工作模式

  • 没有大括号的就是进程

    有分支就代表多进程

12.1.3 进程状态

在这里插入图片描述

有多个状态:

  • 创建时是创建状态
  • 等待执行是就绪状态
  • cpu的队列轮到我了,运行时是执行状态
  • 如果cpu有别的事情,就把自己放在一边,处于阻塞状态
  • 从阻塞状态出来后,还是要等到cpu准备好才能操作,又进入就绪状态
  • 执行完就是终止状态

在这里插入图片描述

这里的stat就表示状态

12.2 进程管理基础知识
12.2.1 僵尸进程和孤儿进程

在这里插入图片描述

僵尸进程:父进程stop了,子进程依然在运行,没人管,什么信息都不接收,就处于僵尸进程了

孤儿进程:有一个中间进程切断父进程和子进程。父进程断掉时,按道理来说子进程应该也断掉,但它被中间进程控制着,变成孤儿进程了

12.2.2 内存清理策略

内存是有限的,一共就这么多,总有一天会满,需要清理

在这里插入图片描述

FIFO:先进先出

LRU:最近最少使用 – 记录的是时间值

LFU:最不经常使用 – 记录的是数量

每一种思路都是一种算法,每种算法不一样

如何选择最优算法呢?

我们就要考虑算法复杂度

12.2.3 进程间通信

其中有一个,是消息队列解决方案

在这里插入图片描述

不同主机直接通信,也会像cpu一样维护消息队列(用kafka之类的软件维护)

12.3 梳理

进程的结构,进程在运行过程中演变出线程,在进程中生成很多“小弟”,在运行程序时可以调用线程到cpu上,这样资源消耗就少很多

在cpu运行过程中,为了知道进程是什么情况,引入进程状态

进程运行时,会有优先级(高优先级进程来了,需要清理之前的内存),这时候就引入了进程的清理(算法复杂度)

进程之间还需要通信,方法很多(套接字,共享字符等)

12.4 进程优先级

cpu中有时间分块,进程优先级高的进程所占有的cpu时间更长

在这里插入图片描述

Linux中,把进程优先级进行了划分:系统优先级(无法控制,0 - 99)和实时优先级(可控,100 - 139)

但是可以控制的优先级中,理论层面为100 - 139 , 用nice或renice命令调整为-20 - 19 , 用top命令查看为0 - 39

12.5 进程管理命令解读

在这里插入图片描述

pstree命令
pstree -p 
pstree -sp 1909 -- -s:跟踪溯源,可以用pstree -p | grep ssh来代替


ps命令
ps aux -- 查看进程
ps auxf -- 显示进程树形关系


kill命令
kill -9 pid -- 结束进程
killall 进程名
pkill 进程名 -- 这两个二选一
kill -l 查看所有命令
12.6 进程命令解读
top命令解读:
top -- 实时显示系统的运行情况(默认三秒刷新一次)
top -n1 -- 刷新一次后退出
htop -- 更炫酷的界面(其实功能和top一样)

在这里插入图片描述

在这里插入图片描述

注意swap交换分区:如果内存不够的话,就会开始用swap空间

交换分区尽量不要使用

内存使用率再高也无所谓,因为数据在内存里速度更快

系统负载:cpu在5分钟;10分钟;15分钟的负载

在这里插入图片描述

free命令
free -h  -- 查看内存

里面的swap分区如果不想要:
vim /etc/fstab -- 把swap的行删除

其中:buffer/cache都是在内存当中

在这里插入图片描述

  • buffer:缓冲

    程序要把数据放到文件里,先写到用户空间的内存中,这就是写缓冲

  • cache:缓存

    文件要从磁盘被程序读取,先加载到缓存里,在内核空间中的状态就是读缓存

vmstat命令:
vmstat -- 快速获取系统负载
procs:
r -- 可运行(正运行或等待运行)进程的个数,和核心数有关
b -- 处于不可中断睡眠态的进程个数(被阻塞的队列的长度)
memory:
free -- 空闲物理内存总量
swap:
si -- 从磁盘交换进内存的数据速率
so -- 从内存交换进磁盘的数据速率
io:(input output)
bi -- 从块设备读取数据到内存的速率
bo -- 保存数据至块设备的速率(文件数据保存到具体磁盘文件)
system:
in -- 中断速率
cs -- 进程切换速率

在这里插入图片描述

lsof命令:
lsof -Pti:80 -- 查看指定端口的进程
其实和ps aux |grep nginx 显示内容中的一部分差不多
也和pidof -f nginx也差不多

lsof命令用的最多的地方:
kill -9 $(lsof -Pti:80)
作业管理:
command & -- 放到后台去运行
jobs -- 查看终端作业
fg 编号 -- 把后台的内容调到前台
bg 编号 -- 让送往后台的作业继续在后台运行
nohup -- 就算中止终端也不影响后台运行
12.7 计划任务实践

计划任务:at计划任务和cron计划任务

at计划任务:一次性的执行任务

依赖atd服务

把计划放到一个文件里:

  • 红帽:/var/spool/at/
  • ubuntu:/var/spool/cron
交互方式定制:
at 时间
命令
ctrl + D

查看定制的命令:
at -l

免交互方式定制:
echo reboot | at now+5min

cron计划任务:周期性任务

在这里插入图片描述

命令运行时会有两种情况:

  • root用户 编辑的是系统级别的
  • 普通用户 编辑的是用户级别的,放在同名文件中

记住:分 时 日 月 周

,:表示离散的时间
-:连续的时间
/:表示步长
用户级别:
crontab -e
写的时候就确定作者了,不加用户(加了会当成命令,比如root)
但是不放进/etc/crontab

系统级别:
vim /etc/crontab
但是系统级别不代表root用户写的就是系统级别
必须加上root
12.8 循环语法解读

在这里插入图片描述

for 循环,条件可以是{1…10},$(seq 10) 等

在这里插入图片描述

while 条件:

永真:while true 死循环,永远不退出

for输出12345:
for i in {1..5}
do
	echo $i
done
while输出12345
a=1 -- 设定初始值
while [ $a -lt 6 ]
do
	echo $a
	let a+=1
done

在这里插入图片描述

until输出12345(条件不成立的时候走循环)
a=1
until [ $a -gt 5 ]
do
	echo $a
done

在这里插入图片描述

12.9 循环控制语法解读

在这里插入图片描述

a=1 -- 设定初始值
while [ $a -lt 6 ]
do
	if [ $a -eq 3 ]
	then
		exit -- 直接退出整体程序,结果输出1和2
	fi
	echo $a
	let a+=1
done
a=1 -- 设定初始值
while [ $a -lt 6 ]
do
	if [ $a -eq 3 ]
	then
		exit -- 直接退出整体程序,结果输出1和2
	fi
	echo $a
	let a+=1
done

在这里插入图片描述

对于break:如果只有一个循环,那么就退出这个循环,效果和exit一样

如果有两个while循环,退出break所在循环,进入外层循环

a=1 -- 设定初始值
while [ $a -lt 6 ]
do
	if [ $a -eq 3 ]
	then
		break -- 就一层循环,退出即直接退出整体程序,结果依然输出1和2
	fi
	echo $a
	let a+=1
done
a=1 -- 设定初始值
while [ $a -lt 6 ]
do
	if [ $a -eq 3 ]
	then
		continue -- 跳出当前循环,直接进入下一个循环 跳出循环后a=a+1不生效了,所以输出1和2
	fi
	echo $a
	let a+=1
done

a=0 -- 设定初始值
while [ $a -lt 6 ]
do
	let a=a+1
	if [ $a -eq 3 ]
	then
		continue -- 跳出当前循环,直接进入下一个循环 跳出循环后a=a+1不生效了,所以输出1和2
	fi
	echo $a
done

在这里插入图片描述

for var1 in {1..5}
do
	for var2 in {a..d}
	do
		if [ $var1 -eq 2 -o "$var2" == "c" ]
		then
			break
		else
			echo "$var1 - $var2"
		fi
	done
done

在这里插入图片描述

for var1 in {1..5}
do
	for var2 in {a..d}
	do
		if [ $var1 -eq 2 -o "$var2" == "c" ]
		then
			continue
		else
			echo "$var1 - $var2"
		fi
	done
done

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值