知识点汇总
进程与线程
区别与联系
- 进程是系统资源分配的最小单位
- 线程是程序执行的最小单位
- 进程使用独立的数据空间,线程共享进程的数据空间
线程调度
- 时间片轮转调度
- 先来先服务调度
- 优先级调度
- 多级反馈队列调度
线程切换步骤
- 线程的上下文切换
- 线程切换的代价
Linux下的IPC
- Pipe
- MessageQueue
- 共享内存
- UnixSocket
- Signal
- Semaphore
Linux常用命令
- awk
- top
- netstat
- grep
- less
- tail
死锁
内存分页管理与Swap
任务队列与CPU Load
网络知识
4/7层网络模型
TCP协议
-
建立链接三次握手
- 由于TCP协议是双工传输不区分发送端和接收端,这里我们把主动发起请求的一端称为Client端,被动建立链接的一端端为Server端
- 建立链接之前需要Server端监听端口,所以初始状态为LISTEN
- Client端准备建立链接,向Server端发送SYN同步包,发送完之后Client端的状态就变为SYN_SENT状态
- Server端收到Client端发送的SYN后同意建立链接,会向Client端回复一个ACK。由于TCP是双工传输,所以Server端同时会向Client端发送一个SYN同步请求,申请Server端向Client端建立链接。当发送完SYN和ACK后,Server端的状态就变为SYN_RCVD
- Client端收到Server端的ACK后,Client端的状态就变为ESTABLISHED,同时CLient端向Server发送ACK相应来回复Server端的SYN相应
- Server端收到CLient端的ACK响应后,Server端的链接状态变为ESTABLISHED状态
- 建链完成,双方可以随时传输数据
SYN洪水攻击发生的原因:
Server端收到Client端的SYN请求后,发送了SYN和ACK,可是Client端并不进行回复。导致Server端大量的链接处于SYN_RCVD状态,进而影响其他正常请求的建链。
SYN洪水攻击解决方法:
可以通过设置Linux的TCP参tcp_synack_retries = 0来加快半连接的回收速度或者调大tcp_max_syn_backlog来应对少量的SYN洪水攻击。
-
关闭链接四次挥手
- TCP链接的关闭通讯双方都可以先发起,这里我们把先发起请求的一方称为Client端,另一方为Server端
- Client端向Server端发送了一个FIN包,表示Client端已经没有数据要发送了,然后Client端就进入了FIN_WAIT_1状态,Server端收到Client端的FIN后返回ACK然后进入CLOSE_WAIT状态,此时的Server端属于半关闭的状态,因为此时Client端已经不会再向Server端发送数据了。但是Server端可能还有数据会向Client端进行发送,当Server端数据发送完毕后,会向Client端发送FIN,表示Server端也没有数据发送了。
- Server端进入LAST_ACK状态,只需要等待Client端的应答就可以关闭链接了。
- Client端收到Server端的FIN后回复ACK后进入TIME_WAIT状态,TIME_WAIT状态下需要等待2MSL(两倍最大报文段生存时间)来保证链接的可靠关闭,然后进入CLOSE状态。
- Server端收到Client端的ACK之后直接进入CLOSE状态
为什么需要TIME_WAIT状态:
1、可靠的终止TCP连接
2、保证让迟来的TCP报文段有足够的时间被识别并丢弃
为什么建链需要三次握手,断链需要四次挥手:
建链时Server端的SYN和ACK合并成一个包发送,而断链时两个方向的数据发送的停止时间可能是不同的,所以无法合并FIN和ACK进行发送。
- 报文状态标志与链接状态
- Nagel算法与ACK延迟
- Keepalive
- 滑动窗口与流量控制
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。