计算机网络
2023-05-05 09:39:51 0 举报
AI智能生成
计算机网络学习笔记。
作者其他创作
大纲/内容
网络管理
网络模型
OSI 七层
TCP/IP 四层
应用层:向用户提供应用程序(HTTP、FTP、DNS)
传输层:端到端的通信(TCP、UDP)
网络层:网络包的封装、寻址和路由(IP、ICMP)
网络接口层:网络包在物理网络中的传输
通信模型(从应用视角)
Socket
TCP/UDP
IP
Device
Driver
网络收发流程
网络包接收
网络包发送
套接字
Socket I/O
阻塞式 I/O
非阻塞式 I/O
I/O 多路复用
select
poll
epoll
水平触发
边缘触发
信号驱动式 I/O
异步 I/O
性能优化
性能分析
性能指标
带宽
吞吐量
延时
传输速率
基本信息
网络配置
套接字信息
协议栈信息
网络质量统计信息
性能测试
基准测试
转发性能
TCP/UDP 性能
HTTP 性能
应用负载性能
应用层优化
I/O 模型优化
使用 I/O 多路复用 epoll 取代 select 和 poll
使用异步 I/O(比较复杂)
工作模型优化
主进程(管理网络连接)+ 多个 worker 子进程(实际的业务处理)
监听多个相同端口的多进程模型
协议优化
使用长连接取代短连接
合理利用使用内存缓存
使用序列化和压缩
使用 DNS 缓存、预取、HTTPDNS 等优化 DNS
传输层优化
TCP
套接字优化
调整缓冲区
增大套接字的缓冲区 net.core.optmem_max
增大套接字接收缓冲区 net.core.rmem_max 和发送缓冲区 net.core.wmem_max
增大 TCP 接收缓冲区 net.ipv4.tcp_rmem 和发送缓冲区 net.ipv4.tcp_wmem
修改网络连接行为
为 TCP 连接设置 TCP_NODELAY 可禁用 Nagle 算法
为 TCP 连接开启 TCP_CORK 可让小包聚合成大包后再发送(会阻塞小包发送)
使用 SO_SNDBUF 和 SO_RCVBUF 分别调整套接字发送缓冲区和接收缓冲区大小
TIME_WAIT 状态
使用 TCP 长连接代替短连接
增大处于 TIME_WAIT 状态的连接数量 net.ipv4.tcp_max_tw_buckets
开启端口复用 net.ipv4.tcp_tw_reuse,被 TIME_WAIT 状态占用的端口还能用到新连接中
减小 TIME_WAIT 时间 net.ipv4.tcp_fin_timeout 和 net.netfilter.nf_conntrack_tcp_timeout_time_wait
增大连接跟踪表的大小 net.netfilter.nf_conntrack_max
增大本地端口的范围 net.ipv4.ip_local_port_range 以支持更多连接、提高整体并发
文件描述符
使用 fs.nr_open 和 fs.file-max 分别增大进程和系统的最大文件描述符数
在应用程序的 systemd 配置中设置应用程序的最大文件描述符数 LimitNOFILE
用户可打开文件的最大数目 ulimit -n 和 /etc/security/limits.conf nofile
用户可开启进程/线程的最大数目 ulimit -u 和 /etc/security/limits.conf noproc
高负载下缓解 SYN FLOOD
二选其一
增大 TCP 半连接最大数量 net.ipv4.tcp_max_syn_backlog
开启 TCP SYN Cookies net.ipv4.tcp_syncookies 绕开半连接数量限制
减少 SYN_RECV 状态连接重传 SYN+ACK 包次数 net.ipv4.tcp_synack_retries
调整客户端主动建立连接时 SYN 重发次数 net.ipv4.tcp_syn_retries
客户端应用层延长 connect 超时时间
增大本地端口的范围 net.ipv4.ip_local_port_range 以支持更多连接、提高整体并发
Keepalive 优化
缩短最后一次数据包到 Keepalive 探测包的间隔时间 net.ipv4.tcp_keepalive_time
缩短发送 Keepalive 探测包的间隔时间 net.ipv4.tcp_keepalive_intvl
减少 Keepalive 探测失败后,一直到通知应用程序前的重试次数 net.ipv4.tcp_keepalive_probes
TFO 提高三次握手性能
开启 TFO 功能 net.ipv4.tcp_fastopen
UDP
增大套接字缓冲区大小以及 UDP 缓冲区范围
增大本地端口号的范围
根据 MTU 大小调整 UDP 数据包大小,减少或避免分片
网络层优化
IP
路由与转发
在转发服务器(网关)中开启 IP 转发,即设置 net.ipv4.ip_forward = 1
调整数据包的生存周期 TTL,比如设置 net.ipv4.ip_default_ttl = 64
开启数据包的反向地址校验,比如设置 net.ipv4.conf.eth0.rp_filter = 1
数据分片
调整 MTU 大小
ICMP
禁止 ICMP 协议,即设置 net.ipv4.icmp_echo_ignore_all = 1
禁止广播 ICMP,即设置 net.ipv4.icmp_echo_ignore_broadcasts = 1
链路层优化
优化中断调度方案
为网卡硬中断配置 CPU 亲和性(smp_affinity),或开启 irqbalance 服务
开启 RPS(Receive Packet Steering)和 RFS(Receive Flow Steering)
利用网卡能力
TSO(TCP Segmentation Offload)和 UFO(UDP Fragmentation Offload)
GSO(Generic Segmentation Offload)
LRO(Large Receive Offload)
GRO(Generic Receive Offload)
RSS(Receive Side Scaling)
VXLAN 卸载:让网卡完成 VXLAN 的组包功能
优化网络接口:可提升网络吞吐量
开启网络接口多队列,每个队列用不同的中断号调度到不同 CPU 上,提升网络吞吐量
增大网络接口的缓冲区以及队列长度等,提升网络吞吐量(可能导致延迟增大)
使用 Traffic Control 工具为不同网络流量配置 QoS
绕过内核协议栈
DPDK
XDP
TLS
TLS 1.2 安全密码套件
密钥交换算法:ECDHE
身份验证算法:RSA
对称加密算法:AES(128 强度、GCM 模式)
签名哈希算法:SHA256
对称加密算法
工作原理
ChildTopic
HTTP
报文格式
请求报文
请求方法、URL、协议版本
请求首部
分隔行
请求主体
响应报文
协议版本、状态码、描述
响应首部
分隔行
响应主体
首部字段
请求方法
状态码
请求参数
HTTPS
基本流程
加密
加密方式
认证
服务端向 CA 提出公钥申请
CA 对公钥做数字签名,分配已签名公钥加入证书后绑定
服务端把证书发给客户端,客户端取得公钥做数字签名验证,通过则开始通信
摘要
基本特性
幂等性
安全性
可缓存
无状态
Cookie-Session
Cookie
Session
安全保证
版本特性
1.1
默认长连接
Cookie
缓存管理
虚拟主机
流水线
同时打开多个 TCP 连接
分块传输编码
2.0
二进制分层帧
服务器推送
首部压缩
3.0
QUIC
IP
TCP
工作任务
主机内进程寻址
创建和管理连接
处理并打包字节流为报文段
传输数据
保持可靠性和传输质量
流量控制和拥塞控制
解决问题
点对点,面向连接
全双工(双向传递)
字节流传输
不维护报文边界
不强求应用使用离散数据块
不限制数据块大小
流量缓冲
可靠传输
拥塞控制
报文格式
首部格式
源端口
目的端口
序号 seq
序号复用
确认号 ack
设计目的
数据偏移
确认 ACK
同步 SYN
终止 FIN
窗口
常用选项
拆分报文段
最大报文段(MSS)
连接管理
三次握手
状态机
客户端
CLOSED
SYN-SENT
ESTABLISHED
服务端
CLOSED
LISTEN
SYN-RECEIVED
ESTABLISHED
SYN 攻击
服务端处理
优化机制
TCP_DEFER_ACCEPT
Fast Open(TFO)
“三次”的原因
四次挥手
状态机
TIME_WAIT
传输机制
可靠传输
重传确认
重传机制(PAR)
往返时间(RTT)
重传超时时间(RTO)
跟踪 RTT 方差
滑动窗口
发送端
1. 已发送且收到确认
发送窗口
2. 已发送未收到确认
3. 未发送且总大小在接收方处理范围内(可用窗口)
4. 未发送且总大小在接收方处理范围外
接收端
1. 已接收且已确认
接收窗口
2. 未接收且可接收
3. 未接收且不可接收
流量控制
操作系统缓冲区
应用层未及时读取缓存
收缩窗口导致的丢包
接收缓存的配置
拥塞控制
慢开始
拥塞避免
快重传
快恢复
控制算法
基于丢包:SACK
基于带宽策略:BBR
基本原理
高效传输
SWS 避免
接收方:David D Clark 算法
发送方:Nagle 算法
粘包、半包
延迟确认
TCP_CORK
多路复用
其它功能
长连接
校验和
带外数据
多路复用
常见问题
如何防止 SYN 攻击
ISN 为何不从 0 开始?
两端同时发送 SYN 的情况
如何防止序列号回绕
如何较少小报文提高网络效率?
传输过程出现严重错误如何快速断开连接?
出现大量 TIME_WAIT 如何解决
UDP
基本特性
首部格式
0 条评论
下一页