进程与线程
区别与联系
进程是系统资源分配的最小单位,线程是程序执行的最小单位,进程使用独立的数据空间,为线程共享进程的数据空间。
线程调度
- 时间片轮转调度
- 先来向服务调度
- 优先级调度
- 多级反馈队列调度
线程切换的步骤
线程的上下文切换,明白线程切换的代价。
进程之间的通信(IPC)面试中间件研发常考
六种进程间通信方式的原理和适用场景。
例如:
- 进程间数据共享的场景:共享内存
- 进程间数据交换的场景:UnixSocket和消息队列
协程
TCP协议
tcp是传输层协议,对应OSI网络模型中的第四层传输层。
TCP协议的特点:
- 基于链接(点对点)
- 双工通信
- 可靠传输
- 拥塞控制
- 基于字节流而非报文(通过ACK确认收到的数据编号)
TCP实现细节:
- 8种报文状态
- 滑动窗口机制——流量控制能力——本质:动态缓冲区
- 拥塞控制:慢启动、拥塞避免、拥塞发生、快速回复四个算法
- KeepAlive 的参数设置
- Nagel算法的规则
三次握手建立连接
三次握手是为了建立Client和Server的双向连接。
SYN洪水攻击发生的原因:Server收到Client的SYN请求并回应SYN和ACK,但是Client却不回应ACK,导致Server端大量的链接处于SYN_RCVD状态,进而影响其他正常请求的建链。
解决办法可以通过设置Linux的参数tcp_synack_retries的数值来加快半连接的回收速度。
net.ipv4.tcp_synack_retries = 2
四次挥手断连
MSL: 最大报文段生存时间
为什么需要等待2MSL再关闭连接?
1、保证TCP协议的全双工连接可靠关闭
2、保证这次连接中的重复数据段能从网络中消失,防止端口重用的时候出现数据混淆
实际应用中出现大量Socket处在TIME_WAIT和CLOSE_WAIT状态的问题
开启Linux的TCP参数tcp_tw_reuse、tcp_tw_recycle 能够加快TIME_WAIT状态的回收
CLOSE_WAIT被动关闭连接的一方代码存在bug,没有正确关闭连接导致