Linux系统软件管理、磁盘存储和文件系统管理、网络协议和管理配置以及shell脚本进阶

一、自建yum仓库,分别为网络源和本地源

1.本地光盘镜像源:

a) 挂载光盘
mount -r /dev/cdrom /mnt/cdrom
b) 创建配置文件

cat >> /etc/yum.repos.d/centos7.repo <<EOF
[CentOS7]
name=CentOS 7
baseurl=file:///mnt/cdrom
gpgcheck=0
enabled=1
EOF

c) 显示仓库
yum repolist

2.网络源

a) 添加源地址
vim /etc/yum.repos.d/CentOS-Base.repo
将mirrorlist行注释掉;
取消baseurl注释并中添加源地址

baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/$basearch/
	https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
	https://mirrors.cloud.tencent.com/centos/$releasever/os/$basearch/
	https://reps.huaweicloud.com.com/centos/$releasever/os/$basearch/

b)显示仓库

二、编译安装http2.4,实现可以正常访问,并将编译步骤和结果提交。

准备条件:关闭防火墙、关闭SELinux

1.安装补丁包

yum install gcc make autoconf apr-devel apr-util-devel pcre-devel openssl-devel redhat-rpm-config

2.下载安装包并解压

wget https://dlcdn.apache.org/httpd/httpd-2.4.53.tar.bz2
tar xvf httpd-2.4.53 -C /usr/local/src/

3.编译安装

./configure --prefix=/apps/httpd --sysconfdir=/etc/httpd

make && make install

4.环境配置

echo 'PATH=/apps/httpd/bin:$PATH' > /etc/profile.d/httpd.sh
source /etc/profile.d/httpd.sh

5.启动

apachectl start

6.指定apache用户运行

useradd -r -s /sbin/nologin -d /var/www -c Apache -u 48 apache
vim /etc/httpd/httpd.conf

7.配置生效和进程验证

apachectl restart
ps -ef|grep httpd

8.浏览器验证

三、利用sed 取出ifconfig命令中本机的IPv4地址

ifconfig eth0| sed -r -n 's/inet (([0-9]{1,3}.){3}[0-9]{1,3}) .*/\1/p'


ifconfig | sed -r -n 's/inet (([0-9]{1,3}.){3}[0-9]{1,3}) .*/\1/p'|grep -v '127.0.0.1'

四、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

sed -i.bak -r '/^\s*#|^\s*$/d' /etc/fstab

五、处理/etc/fstab路径,使用sed命令取出其目录名和基名

echo '/etc/fstab' | sed -rn 's#^(/.*)/(.*)#\1 \2#p'

六、列出ubuntu软件管理工具apt的一些用法(自由总结)

常用命令 功能
apt install 安装软件包
apt remove 移除软件包
apt purge 移除软件包及配置文件
apt update 刷新存储库索引
apt upgrade 升级所有可升级的软件包
apt autoremove 自动删除不需要的包
apt full-upgrade 在升级软件包时自动处理依赖关系
apt search 搜索应用程序
apt show 显示安装细节
apt list 列出包含条件的包(已安装,可升级等)
apt edit-sources 编辑源列表

七、简述osi七层模型和TCP/IP五层模型

1.OSI七层模型

分为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,具体描述如下:

分层名称 描述
应用层 应用层(Application Layer)提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如: HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3、MySQL等
表示层 表示层(Presentation Layer)把数据转换为能与接收者的系统格式兼容并适合传输的格式
会话层 会话层(Session Layer)负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接。
传输层 传输层(Transport Layer)把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。例如:传输控制协议(TCP)等。
网络层 网络层(Network Layer)决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成报文。网络表头包含了网络数据。例如:互联网协议(IP)等。
数据链路层 数据链路层(Data Link Layer)负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成信息框(Data Frame)。数据链表头(DLH)是包含了物理地址和错误侦测及改错的方法。数据链表尾(DLT)是一串指示数据包末端的字符串。例如以太网、无线局域网(Wi-Fi)和通用分组无线服务(GPRS)等。分为两个子层:逻辑链路控制(logical link control,LLC)子层和介质访问控制(Media access control,MAC)子层
物理层 物理层(Physical Layer)在局部局域网上传送数据帧(Data Frame),它负责管理电脑通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机接口卡等

2.TCP/IP五层模型

分为物理层、数据链路层、网络层、传输层、应用层,主要功能如下:

分层名称 功能
应用层 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telent)等。我们的网络编程主要是针对应用层。
传输层 负责两台主机的数据传输。如传输控制协议(TCP),能够保证数据可靠的从源主机发送到目标主机。
网络层 负责地址管理和路由器选择。例如在 IP 协议中,通过 IP 地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的路线(路由)。路由器(Router)工作在网络层。
数据链路层 负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动发送)、数据差错校验等工作、有以太网、令牌环网、无线LAN等标准。交换机(Switch)工作在数据链路层。
物理层 负责光/电信号的传递方式。比如现在以太网通用的网线(双绞线)、早期以太网采用的是同轴电缆(现在主要应用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大的传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。

3.OSI模型与TCP/IP模型比较

相同点 不同点
两者都是以协议栈的概念为基础 OSI是先有模型;TCP/IP是先有协议,后有模型
协议栈中的协议彼此相互独立 OSI是国际标准,适用于各种协议栈;TCP/IP实际标准,只适用于TCP/IP网络层次数量不同
下层对上层提供服务

八、总结描述TCP三次握手四次挥手

0、TCP报文的头部结构

  1. 序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。

  2. 确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。

  3. 标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:

  • ACK:确认序号有效。
  • FIN:释放一个连接。
  • PSH:接收方应该尽快将这个报文交给应用层。
  • RST:重置连接。
  • SYN:发起一个新连接。
  • URG:紧急指针(urgent pointer)有效。

注意:

  • 不要将确认序号ack与标志位中的ACK搞混了。
  • 确认方ack=发起方seq+1,两端配对。

1、TCP三次握手

  • 第一次握手:客户端要想向服务器端发起连接请求,首先客户端随机生成一个起始序列号ISN(Initial Sequence Number,比如是100),那客户端向服务端发送的报文段包含SYN标志位(SYN=1),序列号seq=100。

  • 第二次握手:服务端收到客户端发过来的报文后,发现SYN=1,知道这是一个连接请求,于是将客户端的ISN=100存起来,并且随机生成一个服务端的起始序列号(如300)。然后给客户端回复一段报文,回复报文包含SYN和ACK标志(也就是SYN=1,ACK=1)、序列号seq=300、确认号ack=101(客户端发过来的序列号+1)。

  • 第三次握手:客户端收到服务端的回复后发现ACK=1并且ack=101,于是知道服务端已收到ISN=100的请求报文;同时发现SYN=1,表示服务端同意这次请求,于是将服务端的ISN=300存下来。
    然后客户端在回复一段报文给服务端,报文包含ACK标志位(ACK=1)、ack=301(服务端ISN+1)、seq=101(第一次发送请求报文seq=100,所以本次seq=100+1;需要注意的是不携带数据的ACK报文是不占序列号的,所以后面第一次正式发送数据时seq还是101)。
    当服务端收到报文后发现ACK=1并且ack=301,知道客户端已收到ISN=300的报文了,因此客户端与服务端就通过TCP建立了连接。

2、TCP四次挥手

比如客户端初始化的序列号ISN=100,服务端初始化的序列号ISN=300。TCP连接成功后客户端总共发送了1000个字节的数据,服务端在客户端发FIN报文前总共回复了2000个字节的数据。

  • 第一次挥手:当客户端的数据都传输完成后,客户端向服务端发出连接释放报文(当然数据没发完时也可以发送连接释放报文并停止发送数据),释放连接报文包含FIN标志位(FIN=1)、序列号seq=1101(100+1+1000,其中的1是建立连接时占的一个序列号)。需要注意的是客户端发出FIN报文段后只是不能发数据了,但是还可以正常收数据;另外FIN报文段即使不携带数据也要占据一个序列号。
  • 第二次挥手:服务端收到客户端发的FIN报文后给客户端回复确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=1102(客户端FIN报文序列号1101+1)、序列号seq=2300(300+2000)。此时服务端处于关闭等待状态,而不是立马给客户端发FIN报文,这个状态还要持续一段时间,因为服务端可能还有数据没发完。
  • 第三次挥手:服务端将最后数据(比如50个字节)发送完毕后就向客户端发出连接释放报文,报文包含FIN和ACK标志位(FIN=1,ACK=1)、确认号和第二次挥手一样ack=1102、序列号seq=2350(2300+50)。
  • 第四次挥手:客户端收到服务端发的FIN报文后,向服务端发出确认报文,确认报文包含ACK标志位(ACK=1)、确认号ack=2351、序列号seq=1102。注意客户端发出确认报文后不是立马释放TCP连接,而是要经过2MSL(最长报文段寿命的2倍时长)后才释放TCP连接。而服务端一旦收到客户端发出的确认报文就会立马释放TCP连接,所以服务端结束TCP连接的时间要比客户端早一些。

3、常见面试题

  • 为什么TCP连接的时候是3次?2次不可以吗?
    因为需要考虑连接时丢包的问题,如果只握手2次,第二次握手时如果服务端发给客户端的确认报文段丢失,此时服务端已经准备好了收发数(可以理解服务端已经连接成功)据,而客户端一直没收到服务端的确认报文,所以客户端就不知道服务端是否已经准备好了(可以理解为客户端未连接成功),这种情况下客户端不会给服务端发数据,也会忽略服务端发过来的数据。
    如果是三次握手,即便发生丢包也不会有问题,比如如果第三次握手客户端发的确认ack报文丢失,服务端在一段时间内没有收到确认ack报文的话就会重新进行第二次握手,也就是服务端会重发SYN报文段,客户端收到重发的报文段后会再次给服务端发送确认ack报文。

  • 为什么TCP连接的时候是3次,关闭的时候却是4次?
    因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。而客户端发出FIN报文时只能保证客户端没有数据发了,服务端还有没有数据发客户端是不知道的。而服务端收到客户端的FIN报文后只能先回复客户端一个确认报文来告诉客户端我服务端已经收到你的FIN报文了,但我服务端还有一些数据没发完,等这些数据发完了服务端才能给客户端发FIN报文(所以不能一次性将确认报文和FIN报文发给客户端,就是这里多出来了一次)。

  • 为什么客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接?
    这里同样是要考虑丢包的问题,如果第四次挥手的报文丢失,服务端没收到确认ack报文就会重发第三次挥手的报文,这样报文一去一回最长时间就是2MSL,所以需要等这么长时间来确认服务端确实已经收到了。

  • 如果已经建立了连接,但是客户端突然出现故障了怎么办?
    TCP设有一个保活计时器,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

九、描述TCP和UDP区别

TCP协议特点

  1. 面向连接
    面向连接,是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”,这样能建立可靠的连接。建立连接,是为数据的可靠传输打下了基础。
  2. 仅支持单播传输
    每条TCP传输连接只能有两个端点,只能进行点对点【又叫端到端】的数据传输,不支持多播和广播传输方式。
  3. 面向字节流
      流,指的是流入到进程或从进程流出的字符序列。简单来说,虽然有时候要传输的数据流太大,TCP报文长度有限制,不能一次传输完,要把它分为好几个数据块,但是由于可靠性保证,接收方可以按顺序接收数据块然后重新组成分块之前的数据流,所以TCP看起来就像直接互相传输字节流一样,面向字节流。
      TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输【分割报文】。
  4. 可靠传输
    对于可靠传输,判断丢包,误码靠的是TCP的段编号以及确认号。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。
  5. 提供拥塞控制
    当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞。【但是UDP在数据传输中始终以稳定的速率传输,不考虑网络堵塞,所以UDP协议没有拥塞控制】
  6. TCP提供全双工通信
    TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。当然,TCP可以立即发送一个数据段,也可以缓存一段时间以便一次发送更多的数据段(最大的数据段大小取决于MSS)

UDP协议特点

  1. 面向无连接
    首先 UDP 是不需要和 TCP一样在发送数据前进行三次握手建立连接的,想发数据就可以开始发送了。并且也只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。就像写信,在信封写上收信人名称、地址就可以交给邮局发送了,至于能不能送到,就要看邮局的送信能力和送信过程的困难程度了。
    具体来说就是:
    • 在发送端,应用层将数据传递给传输层的 UDP 协议,UDP 只会给数据增加一个 UDP 头标识下是 UDP 协议,然后就传递给网络层了。【如果使用TCP协议,TCP会对报文进行分组和重组】
    • 在接收端,网络层将数据传递给传输层,UDP 只去除 IP 报文头就传递给应用层,不会任何拼接操作
  2. 有单播,多播,广播的功能
    UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。
  3. UDP是面向报文的
    发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文。【数据报文,就相当于一个数据包,应用层交给UDP多大的数据包,UDP就照样发送,不会像TCP那样拆分。】
  4. 不可靠性
    首先不可靠性体现在无连接上,通信都不需要建立连接,想发就发,这样的情况肯定不可靠。
    并且收到什么数据就传递什么数据,并且也不会备份数据,发送数据也不会关心对方是否已经正确接收到数据了。
    再者网络环境时好时坏,但是 UDP 因为没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求高的场景(比如电话会议)就需要使用 UDP 而不是 TCP。【因为UDP发出去的数据包发出去就不管了,不管它会不会到达,所以很可能会出现丢包现象,使传输的数据出错。】
  5. 没有拥塞控制
    拥塞,是指到达通信子网中某一部分的分组数量过多【比如报文到达传输层时,TCP协议会将报文分割成一段段的形式发送,在网络不好的情况下会造成拥塞】,使得该部分网络来不及处理,以致引起这部分乃至整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿,即出现死锁现象,就像交通堵塞一样。
    TCP建立连接后如果发送的数据因为信道质量的原因不能到达目的地,它会不断重发,有可能导致越来越塞,所以需要一个复杂的原理来控制拥塞。而UDP就没有这个烦恼,发出去就不管了。

对比

UDP TCP
是否连接 无连接 面向连接
是否可靠 不可靠传输,不使用流量控制和拥塞控制 可靠传输,使用流量控制和拥塞控制
连接对象个数 支持一对一,一对多,多对一和多对多交互通信 只能是一对一通信【端到端通信】
传输方式 面向报文 面向字节流
首部开销 首部开销小,仅8字节 首部最小20字节,最大60字节
适用场景 适用于实时应用(IP电话、视频会议、直播等) 适用于要求可靠传输的应用,例如文件传输

总结如下

  1. TCP提供面向连接的传输,通信前要先建立连接(三次握手机制); UDP提供无连接的传输,通信前不需要建立连接。

  2. TCP提供可靠的传输(数据的顺序有序,数据准确无差错,数据不丢失,数据不重复); UDP提供不可靠的传输(可能丢包,不保证数据顺序)。

  3. TCP面向字节流的传输,因此它能将信息分割成组,并在接收端将其重组; UDP是面向数据报的传输,没有分组开销。

  4. TCP提供拥塞控制和流量控制机制; UDP不提供拥塞控制和流量控制机制。

  5. 对系统资源的要求:TCP较多(TCP头部有20个字节信息包),UDP少(UDP信息包只有8个字节)

  6. 虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为。

  7. 对数据准确性要求高,速度可以相对较慢的,可以选用TCP

十、网卡绑定bond0的实现

  1. 添加bonding接口
    nmcli con add con-name mybond0 ifname bond0 type bond mode active ipv4.method manual ipv4.addresses 192.168.163.141/24
  2. 添加从属接口
    nmcli con add type bond-slave ifname eth0 master bond0
    nmcli con add type bond-slave ifname eth1 master bond0
  3. 启动从属接口
    nmcli con up bond-slave-eth0
    nmcli con up bond-slave-eth1
  4. 启动bond
    nmcli con up mybond0

posted @ 2022-04-16 12:19  areke  阅读(87)  评论(0编辑  收藏  举报