OSI七层模型分别是哪七层?简述TCP三次握手和四次挥手
首先OSI七层模型从上到下依次是:
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
TCP三次握手是用来建立可靠连接:
第一次握手:客户端给服务端发SYN报文,请求建立连接;
第二次握手:服务端返回SYN+ACK,同意连接并确认客户端;
第三次握手:客户端再发ACK确认,双方正式建立TCP连接。
TCP四次挥手是用来断开连接,因为TCP是全双工通信,收发通道要分开断开:
第一次挥手:客户端发FIN,表示自己没有数据要发送了,请求关闭;
第二次挥手:服务端回ACK,确认收到关闭请求;
第三次挥手:服务端数据传输完成后,也发FIN告知客户端;
第四次挥手:客户端回ACK确认,双方连接彻底断开。
容器化和虚拟化有什么区别?Docker 和 K8s 是什么关系
首先容器化和虚拟化核心区别:
虚拟化是虚拟机,拥有独立完整操作系统,占用资源大、启动慢、隔离粒度粗;
容器化共享宿主机Linux内核,只打包应用和依赖,轻量、秒级启动、资源消耗小、部署灵活。
Docker 和 K8s 的关系:
Docker 是容器运行工具,负责把应用打包成镜像、创建并运行单个容器;
K8s 是容器编排管理平台,用来批量管理成千上百个Docker容器,实现自动调度、自愈、扩缩容、滚动更新。
Docker负责跑容器,K8s负责管容器。
K8s中Deployment和StatefulSet区别?为什么MySQL要用StatefulSet
Deployment 管理无状态应用:
Pod名称、IP都是随机的,重建后标识会变,存储不固定,适合Nginx、前端、普通微服务这类无状态业务。
StatefulSet 管理有状态应用**:
Pod名称、网络标识、存储都是固定有序的,重建后身份不变、数据存储不丢失。
MySQL 必须用StatefulSet的原因:
数据库属于有状态应用,需要固定Pod身份、稳定网络访问、数据持久化不丢失、主从节点有序,不能像普通Pod随意漂移重建,所以要用StatefulSet。
Linux 查看CPU、内存、磁盘、日志常用命令有哪些
查看CPU:top、htop、mpstat
查看内存:free -h、top
查看磁盘:df -h 看磁盘使用率,du -sh 看目录占用大小,iostat 看磁盘IO性能
查看日志:tail -f 实时跟踪日志,cat、less 查看全量日志,grep 过滤关键字日志。
软链接和硬链接的区别?
软链接和硬链接:
软链接相当于Windows快捷方式,可以跨分区、支持目录,源文件删除后链接失效;
硬链接是同一个文件的多个入口,不能跨分区、不支持目录,删除源文件依然可以通过硬链接访问。
HTTP 和 HTTPS 区别,301和302重定向有什么不同
HTTP和HTTPS区别:
HTTP 明文传输,端口80,不安全、容易被抓包篡改;
HTTPS 是HTTP加上SSL/TLS加密,端口443,传输加密、身份可信,生产环境网站基本都用HTTPS。
301和302重定向:
301是永久重定向,浏览器会缓存跳转规则,永久生效;
302是临时重定向,不缓存,每次访问都会重新跳转,适合临时业务切换。
线上应用延迟高、接口响应慢,你的完整排查思路是什么
遵循从底层到应用、从硬件到业务的排查顺序:
第一步,先看服务器资源:CPU、内存、磁盘IO、网卡带宽有没有打满瓶颈;
第二步,排查网络:有没有丢包、DNS解析慢、TCP连接超时;
第三步,查看应用日志,看有没有报错、超时、线程阻塞;
第四步,排查中间件和数据库:MySQL慢查询、Redis压力、消息队列堆积;
最后再排查代码逻辑、服务间调用链路问题。
Docker 容器网络异常、无法访问外部服务,排查步骤有哪些
按从内到外逐层排查:
第一,进入容器内部,ping外网、测试DNS解析是否正常;
第二,检查容器网络模式、端口映射配置是否正确;
第三,查看宿主机网络、防火墙、iptables规则有没有拦截请求;
第四,使用tcpdump抓包,查看请求有没有发出、有没有回包;
最后检查Docker网桥、虚拟路由配置是否出现异常。