自习整理部分面试题
**dns的解析过程**
- 客户机提出请求,并将请求发送给域名服务器,域名服务器接收请求后,会先查找本地缓存,若找到则将结果返回给客户机
- 若在本地缓存中未找到,则服务器会将该请求发送给根域名服务器,根域名服务器接受请求后会返回一个所查询的域名服务器的地址
- 本地域名服务器将请求发送给上一步返回的域名服务器,接收到请求的域名服务器开始查找缓存,若找到则将结果返回给客户,若未找到则会返回一个下级的与之请求相关的域名服务器地址
- 重复上一步的步骤,直到找到为止
- 域名服务器找到后会将结果返回给客户,并进行存储,以便于下一次查找
**dns查询类型**
- A:从dns域名到IP的解析,即正向解析
- PTR:从IP到域名的解析,即逆向解析
- NS:查询解析所使用的DNS域名服务器的名字
- CHAME:DNS域名的别名
- MS:邮箱域名解析
**LVS的四种集群模式**
`NAT `
- NAT:修改请求报文的目标IP,多目标IP的DNAT
- RIP和DIP应在同一个IP网格,且应使用私有网址;RS的网关要指向DIP
- 请求报文和响应报文都必须经由Director转发Director易于成为系统瓶颈
- 支持端口映射,可修改请求报文的目标PORT
- VS必须是Linux系统,RS可以是任意OS系统
`DR`
- DR:操纵封装新的MAC地址
- Director和各RS都配置有VIP
- 确保前端路由器将目标IP和VIP的请求报文发往DIrector
- RS的RIP可以使用私网地址;也可以是公网地址;RIP与DIP在同一IP网格;RIP的网关不能指向DIP,以确保响应报文不会经由Director
- RS和DIrector要在同一个物理网络
- 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
- 不支持端口映射
- 无需开启ip_forward
- RS可使用大多数OS系统
`TUN`
- TUN:在原请求IP报文之外新加一个IP首部
- RIP和DIP可以不处于同一物理网络中,RS的网关一般不能指向DIP,且RIP可以和公网通信。也就是说集群节点可以跨互联网实现。DIP,,VIP,RIP可以是公网地址
- RealServer的tun接口上需要配置VIP地址,以便接收director转发过来的数据包,以及作为响应的报文源IP
- Director转发给RealServer时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP,而RealServer响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP
- 请求报文要经由Director,但响应不经由Director,响应由RealServer自己完成
- 不支持端口映射
- RS的OS须支持隧道功能
`FULLNAT`
- FULLNAT:修改请求报文的源和目标IP
- VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
- RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
- 请求和响应报文都经由Director
- 相对NAT模式,可以更好的实现LVS-RealServer间跨VLAN通讯
- 支持端口映射
**三次握手四次挥手**
参考链接:https://blog.csdn.net/u011074149/article/details/80885697?utm_source=app&app_version=5.4.0&utm_source=app
- SYN泛洪攻击:利用TCP三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击端发出的响应报文永远发送不到目的地,那么被攻击端在等待关闭这个连接的过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的
`三次握手`
- 首先客户机的TCP向服务端的TCP发送请求连接报文,这个报文中不含应用层数据在这个报文首部中标志位SYN=1,随机选择的一个序列号seq=x(此连接报文不携带数据,但要消耗一个序号),此时客户端状态为SYN_SENT状态
- 服务端在接收到客户端的请求连接后,会将确认报文返回给客户端,并为该TCP分配缓存和变量,其中的确认号段ack=x,确认位ACK=1(只有当ACK=1时,确认号段才有效),标志位SYN=1,序号为seq=y(确认报文不携带数据,但也要消耗一个序号),此时服务端从LISTEN状态变为SYN_RCVD
- 当客户端收到确认报文后,还要给服务端发回确认,并且也要为此TCP连接分配缓存和变量,在返回的确认报文中确认位和标志位都为1,确认号段ack=y+1,序列号seq=x+1,该报文可以携带数据,如果不携带,则不消耗序号,此时客户端状态就变为了ESTABLESHED
- 完成以上三步后,TCP连接就建立好了,接下来就可以传送应用层的数据了。TCP提供的是全双工通信,因此通信双方的应用程序在任何时刻都可以互相发送数据。
![img](https://img-blog.csdn.net/20180703083401683?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwNzQxNDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
`四次挥手`
- 当客户机打算关闭连接时,就会发送一个连接释放报文段,在这个报文段中,终止位FIN被置为1,seq=u,并且同时关闭了数据传送。因为TCP连接是全双工的,可以想象为,当客户端发送FIN报文段时,此时发送报文段的这一条数据连接道路就不能再干其他事了,而另一条数据道路对方任然还能发送数据。
- 服务器收到连接释放报文段后发出确认,确认号是ack=u+1,此时,从客户机到服务器这个方向的连接就释放了,TCP处于半关闭状态,但服务器若发送数据,客户机仍要接收,即从服务器到客户机这个房思昂的连接并未关闭,
- 若服务器已经没有要向客户机发送的数据,就通知TCP释放连接,此时就发出FIN=1的连接释放报文段
- 客户机收到连接释放报文段后,必须发出确认。在确认报文段中,ACK字段被置为1,确认号ack=w+1,序号seq=u+1.此时TCP连接还没有释放掉,必须经过时间等待计时器设置的时间2MSL后,才进入到关闭状态。
- 2MSL(Maximum Segment Lifetime):最大报文生存时间
![img](https://img-blog.csdn.net/20180703083424148?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTEwNzQxNDk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
**nginx的restart和reload区别**
- reload是重新加载nginx的配置文件,不会造成服务的中断,并且reload会测试conf的语法等,如果出错了则会用上一次正确的配置文件保持正常运行
- restart是重启,这会使得nginx服务有那么一瞬间的中断,并且如果重启的时候配置文件出现了错误,那么就会重启失败,那么就会导致更长时间的服务中断了
**nginx中reload新worker的创建和旧worker的结束**
`创建新worker`
- 向master进程发送`HUP`信号(`nginx -s reload`)
- master进程校验配置语法是否正确(`nginx -t`也是检查配置文件的命令)
- master进程打开新的监听端口
- master进程用新配置启动新的worker子进程
`结束旧worker`
- master进程向老的worker子进程发送`QUIT`信号
- 老worker进程关闭监听句柄,处理完当前连接后结束进程
相关网页介绍:(https://blog.csdn.net/xixihahalelehehe/article/details/122846766)
**linux启动流程**
- 内核引导
- 启动init程序进入初始化阶段
- 系统初始化
- 建立终端
- 登录系统
`详细过程`
- 通电
- bios初始化
- grub2磁盘引导阶段(mbr)
- 指定boot分区所在分区
- grub2文件引导阶段
- 启动内核,只读挂载/设备
- 启动init程序进入初始化阶段(rhel6)
- 启动systemd初始化进程
- 读取/etc/systemd/中的文件(之后都是并行的)
- 执行/etc/rc.d/rc.local
- 启动程序
- 启动登录环境
*history文件存在**(~/.bash_history)**文件中*
**linux中查看系统内存的命令**
- `free`
linux管理员广泛使用的命令,但它显示的东西较少
- `/proc/meminfo文件`
这是一个拟文件,里面包含有关内存使用情况的各种实时信息显示,内容很多
- `vmstat命令`
vmstat命令是报告虚拟内存统计信息的工具
- `smem命令`
smem也是一个能提供大量linux系统内存使用情况报告的工具
- `top和htop命令`
这两个命令都是可以图形化的显示系统上进程的资源使用情况以及内存使用情况等
**查看硬盘故障命令**
- `smartctl -H 硬盘(如:/dev/sda1)`
使用此命令需要先执行`yum install -y smartmontools`命令
其中 H 表示指定显示目标硬盘的健康状态
**TCP和UDP的区别**
`TCP`
- TCP:传输控制协议
- TCP是面向连接,传输可靠,以字节流的形式传输,传输效率慢,所需资源多
- TCP提供面向连接的服务,在传输数据前要先建立连接,数据传送结束后要释放连接
- TCP协议建立连接的过程进行了三次握手,而释放连接的过程是四次挥手
`UDP`
- UDP:用户数据报协议
- UDP面向无连接,传输不可靠,以数据报文段的形式传输,传输效率快,所需资源少
- UDP在传输前不需要先建立连接,远地主机在收到UDP报文后,不需要给出任何确认
`ping`
- ping命令使用的是*ICMP*即Internet控制报文协议,该协议是TCP/IP协议簇的一个,用于在IP主机、路由器之间传递控制信息
- 控制信息指网络互不通、主机是否可达、路由是否可用等网络本身的信息
**查看linux系统版本/内核版本**
`cat /etc/redhat-release` `cat /etc/issue`
- 查看linux当前操作系统版本信息
`cat /proc/version` `uname -a / -r`
- 查看linux内核版本(core)
- uname命令用于显示当前系统的版本信息。 带有-a选项的uname命令提供有关当前操作系统的所有有用信息。
`hostnamectl`
- 查看状态、修改主机名等,查看状态中包含了系统版本号以及内核版本等相关信息
**CDN**
`原理`
- CDN全称为Content Delivery Network,即内容分发网络
- *原理1*:CDN目的是通过在现有的internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,解决internet网络拥塞状况,提高用户访问网站的响应速度
- *原理2*:它是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户王洛访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术
`组成部分`
- CDN是一种组合技术,其中包括源站、缓存服务器、智能DNS、客户端等几个重要部分
- *源站*:指发布内容的原始站点。添加、修改和更改网站的文件,都是在源站上进行的;另外缓存服务器抓取的对象也全部来自源站
- *缓存服务器*:是直接提供给用户访问的站点资源,由一台或者数台服务器组成;当用户发起访问时,它的访问请求被智能DNS定位到离他较近的缓存服务器。如果用户所请求的内容刚好在缓存里,则直接把内容返还给用户;如果访问所需的内容没有被缓存,则缓存服务器向邻近的缓存服务器或直接向源站抓取内容,然后再返还给用户
- *智能DNS*:它是整个CDN技术的核心,它主要根据用户的来源,将其访问请求指向离用户比较近的缓存服务器,通过DNS智能解析,让用户访问同服务商下的服务器,消除国内南北网络互相访问慢的问题,达到加速作用
- *客户端*:客户端或称为用户端,即发起访问的普通用户,一般的访问方式是浏览器
相关网站:(https://baike.baidu.com/item/CDN技术原理/6214374?fr=aladdin)
(https://baijiahao.baidu.com/s?id=1706310290554711159&wfr=spider&for=pc)
**OSI七层模型**(依次从上往下)
- `应用层`:网络服务与最终用户的一个接口,常见的协议有:HTTP、FTP、SMTP、SNMP、DNS
- `表示层`:数据的表示、安全、压缩。确保一个系统的应用层所发出的信息可以被另一个系统的应用层读取
- `会话层`:建立、管理、终止会话,对应主机进程,指本地主机与远程主机正在进行的会话
- `传输层`:定义传输数据的协议端口号,以及流控和差错校验,协议有TCP、UDP
- `网络层`:建立逻辑地址寻址,实现不同网络之间的路径选择,协议有ICMP、IGMP、IP等
- `数据链路层`:在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路
- `物理层`:建立、维护、断开物理连接
相关网页:(https://blog.csdn.net/m10_2339656216/article/details/119752566)
**当nginx后端一台服务器挂了后**
- 在nginx负载的时候,如果一台服务挂掉了,它会把请求转发到另一个可以提供服务的机器,其中的超时等待默认为60秒
相关网站:(https://blog.csdn.net/Tomwildboar/article/details/115382121)
详细介绍相关网页:(https://www.jianshu.com/p/bb49851282b0)
**访问网站的过程**
- 在浏览器地址栏中输入网址
- 浏览器通过用户在地址栏中输入的URL构建HTTP请求报文
- 浏览器发起DNS解析请求,将域名转换为IP地址
- 浏览器将请求报文发送给服务器
- 服务器接收请求报文,并解析
- 服务器处理用户请求,并将结果封装成HTTP响应报文
- 服务器将HTTP响应报文发送给浏览器
- 浏览器接收服务器响应的HTTP报文,并解析
- 浏览器解析HTML页面并展示,在解析HTML页面时遇到新的资源需要再次发起请求
- 最终浏览器展示出了页面
相关问题:`在浏览器输入回车后发生了什么`
相关网页(https://blog.csdn.net/weixin_44188796/article/details/123423838)
**什么是守护进程**
`定义`
- 守护进程也称为“精灵进程”,是一个在后台运行且不受任何终端控制的特殊进程,用于执行特定的系统任务。
- 守护进程独立于控制终端并且周期性的执行某种发生的事件
- 很多守护进程在系统引导的时候启动,并且一直运行直到系统关闭。另一些只在需要的时候才启动,完成任务后就自动结束
- 这些系统服务进程即守护进程没有控制终端,不能直接和用户交互,也不受用户登录注销的影响
`如何杀死守护进程`
- 首先*ps axj | grep 守护进程名字*,找到相应的守护进程,然后使用kill 命令杀掉
- 利用*ps -ef*命令查找相应的守护进程,再使用kill 命令杀死
- 创建 shell 脚本对进程的启动、关闭、重启自动管理
相关网页:(https://www.php.cn/linux-489291.html)
**网站服务器端口被占用情况**
`查看端口被占用命令`
- *netstat -tulp | grep port*:查看指定端口被占用
- *netstat -tunlp*:查看所有端口使用情况
- lsof:*lsof -i:port*可查看指定端口使用情况,但需要安装isof
`ansible`
**定义**
- ansible是一种自动化运维工具,基于python开发,集合了多种运维工具的优点,实现了批量系统配置、批量程序部署批量运行命令等功能
- ansible是基于模块工作的,本身没有批量部署的能力,真正具有批量部署能力的是ansible运行的模块,ansible只是一个框架
`核心组件`
- *ansible*:核心程序
- *modules*:包括ansible自带的核心模块以及自定义模块
- *plugins*:完成模块功能的补充,包括连接插件,邮箱插件
- *playbooks*:剧本,定义ansible多任务配置文件,由ansible自动执行
- *inventory*:定义ansible管理的主机清单
- *connection plugins*:负责和被监控端实现通信
`docker原理`
- docker利用linux中的核心分离机制,例如linux的核心Namespace(命名空间)来创建独立的容器
- 即docker利用Namespace做资源隔离,用Cgroup做资源限制,利用Union FS做容器文件系统的轻量级虚拟化技术
- docker容器的本质还是一个直接运行在宿主机上面的特殊进程,看到的文件系统是隔离后的,但是操作系统内核还是共享宿主机OS,所以说docker是轻量级的虚拟化技术