network
文章目录
HTTP
协议格式
请求(Request)
首行
- Method(GET、POST、OPTIONS等)
- URL(协议名、登录信息、域名、端口号、文件路径、查询字符串)
- Version
请求头(Header):键值对结构,每个键值对占一行,键和值之间使用冒号空格分隔
- Host
- Content-Length
- Content-Type
- User-Agent
- Referer
- Cookie
空行:Header 结束标志
正文:可有可无
响应(Response)
首行 HTTP/1.1 200 OK
- 版本号 HTTP/1.1
- 状态码 200
- 状态码描述 OK
响应头:键值对结构,每个键值对占一行,键和值之间使用冒号空格分隔
空行:Header的结束标志
正文:可有可无
响应状态码
|
|
浏览器输入一个网址,内部发生了什么?
- DNS解析
- TCP连接:获取到ip地址后,通过tcp协议与服务器建立连接
- HTTP请求:一旦TCP建立成功,浏览器会向服务器发送HTTP请求,包括请求头、请求方法、请求体等信息。
- 服务器处理请求
- HTTP响应
- 页面渲染
- TCP连接断开
三次握手和四次挥手
三次握手,确认双方的发送能力和接收能力正常,指定自己的初始化序列号为后面可靠性传送做准备。
HTTP2比HTTP1.1性能
- 头部压缩
- 二进制格式(帧)
- 并发传输
- 服务器主动推送资源
HTTP3优化
- 无对头阻塞(因为TCP原因换成UDP),某个流阻塞,不影响其他流
- 更快的连接建立
- 连接迁移(通过连接ID来标记通信的断电,不是通过TCP四元组)
HTTPS保证安全
作用
内容加密:建立信息安全通道,保证传输的安全
身份认证:确认网站的真实性
数据完整性:防止内容被篡改
SSL和TLS
SSL 安全套接字层
- 记录协议:建立在可靠的传输协议(如TCP)之上
- 握手协议:建立在记录协议之上,用于在传输数据之前进行身份认证、协商加密算法、交换加密密钥等
TLS 传输层安全协议
建立在SSL3.0规范之上,也分记录协议和握手协议
比SSL优势:
- 消息认证密钥散列法
- 增强伪随机功能
- 改进的已完成消息验证
- 一致证书处理
- 特定报警消息
握手过程
客户端首次请求
客户端提供:
- 支持协议版本,如TLS1.0
- 生成的随机数,用于“对话密钥”
- 支持加密算法,如RSA
- 支持压缩方法
服务端首次回应
服务端提供:
- 协议版本
- 加密算法
- 随机数
- 服务器证书
客户端再次回应
- 再产生一个随机数(第三个)
- ChangeCipherSpec 告知服务端已切换到协商过的加密套件
- 生成一个Session Secret
服务器再次响应
- 对第三个随机数验证
- 发送ChangeCipherSpec 告知已切换到协商过的加密套件
- 使用Session Secret和加密套件加密一段Finish 消息发送给客户端,验证是否成功
SSL握手使用非对称加密(速度慢,耗费资源),传送数据使用非对称加密。
Nginx
全局调优
最多开启8各,8个以上性能就不会再提升了,稳定性会变低
worker_processes 2
cpu有多少个核,就有几位数,1代表内核开启,0代表内核关闭
10101010
表示开启了第2,4,6,8内核,01010101
表示开始了1,3,5,7内核
worker_cpu_affinity 01 10
用于设置一个 worker 进程所能打开的最多文件数量。其默认值与当前 Linux 系统可以打开的最大文件描述符数量相同
worker_rlimit_nofile 65535
events 模块下的调优
worker_connections 1024
accept_mutex on
accept_mutex_delay 500ms
multi_accept on
use epoll
漏桶算法限流
Linux系统排查
网络篇
网路不通
要定位问题,一般不断尝试不可能故障的地方,最终定位问题根源。
- 是否接入到网络
ethtool eth0
- 是否启用了相对应的网卡
|
|
- 是否设置网关
route -n
- DNS故障
有问题在文件 /etc/resolv.conf
查看配置,也可查看 cat /etc/sysconfig/network-scripts/ifcfg-eth0
永久配置
nslookup google.com
- 能否路由到目标主机
使用 traceroute
跟踪 traceroute google.com
- 远程端口是否开放
telnet ip port
telnet 无法判断是没有开放,还是被防火墙拦截了,nmap工具更强大
nmap -p ip prt
查看端口开放
netstat -lnp | grep PORT
在本地查看某个端口是否开放
- 查看防火墙规则
iptables -L
比如 iptables -t nat -n -L PREROUTING
查看转发
网络很慢
- DNS是否是问题的源头
- 路由过程哪些是瓶颈
traceroute
不仅查看路由正确性,还可以查看网络中每一跳的延时
- 查看带宽的使用情况
iftop
工具
tcpdump
工具
|
|
其它思路,鸟哥的Linux私房菜中也提供了一些类似的网络排查思路:
- 网卡是否工作,包括硬件和驱动:lspci,dmesg
- IP参数是否正确设置:ifconfig
- 局域网内通信是否正常:ping
- 路由信息是否正常:route -n
- DNS状态:dig, nslookup
- 路由节点状况与延时:traceroute
- 服务监听端口:netstat -lnp
- 防火墙:iptables, SELinux
CPU篇
uptime查看负载,w查看负载
top查看cpu使用率
us 用户进程占用
sy 内核进程占用
wa 低,id 高,排除cpu资源瓶颈可能
wa高,说明io占用了大量cpu时间,检查交换空间使用,内存充足徐检查那个进程占用大量io资
iostat 查看系统io占用
iotop 也可查看
sysstat 工具与负载历史回放
sar 命令
IO篇
遇到只读的文件系统
重新挂载分区
磁盘满
df -h
磁盘空间
df -i
查看文件节点数
- 删除大量文件
- 移动大量文件
- 压缩大量文件成一个
- 备份当前文件系统的所有文件,重新格式化,获取更多节点,再复制回去(不推荐)
内存篇
内存硬件查看
dmidecode -t memory
内存大体使用
free -m/-h
内核态占用
slabtop
内存动态变化
vmstat
MQTT协议
是一种消息传递模式,它将发送消息的客户端(发布者)与接收消息的客户端(订阅者)解耦。
代理(Broker)的中间角色负责所有消息的路由和分发工作,发布者将带有主题的消息发送给代理,订阅者则向代理订阅主题来接收消息。
主题和订阅者无法被提前注册或创建,不存在任何订阅消息将被丢弃。
发布者
一次只能向一个主题发送数据
订阅者
一次可订阅多个主题。
代理
负责接收发布者的消息,并将消息转发至符合条件的订阅者。代理也需要负责处理客户端发起的连接、断开连接、订阅、取消订阅等请求。
主题
MQTT进行消息路由的基础,类似url路径
Docker
启动服务(构建或重新创建,启动并附加到容器) docker-compose up -d
停止服务 docker-compose down
列出所有运行容器 docker-compose ps
查看服务日志 docker-compose logs
构建 docker-compose build
启动、停止、重启 docker-compose start | stop | restart
容器生命周期管理
- 创建容器
docker create
- 运行容器
docker run
- -d
- -i
- -p
- -P
- -t
- 暂停容器(可选)
docker pause | unpause
- 取消暂停容器(可选)
- 启动容器
docker start | stop | restart
- 停止容器
- 重启容器
- 杀死容器
docker kill
- 销毁容器
docker exec
容器操作
镜像仓库
本地镜像管理
文章作者 小叨
上次更新 2023-04-20