面试系列 - 操作系统与计算机网络

知识点汇总

进程与线程

区别与联系

  1. 进程是系统资源分配的最小单位
  2. 线程是程序执行的最小单位
  3. 进程使用独立的数据空间,线程共享进程的数据空间

线程调度

  1. 时间片轮转调度
  2. 先来先服务调度
  3. 优先级调度
  4. 多级反馈队列调度

线程切换步骤

  1. 线程的上下文切换
  2. 线程切换的代价

Linux下的IPC

  1. Pipe
  2. MessageQueue
  3. 共享内存
  4. UnixSocket
  5. Signal
  6. Semaphore

Linux常用命令

  1. awk
  2. top
  3. netstat
  4. grep
  5. less
  6. tail

死锁

内存分页管理与Swap

任务队列与CPU Load

网络知识

4/7层网络模型

TCP协议

  1. 建立链接三次握手

    • 由于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状态
    • 建链完成,双方可以随时传输数据

面试系列 - 操作系统与计算机网络_第1张图片

SYN洪水攻击发生的原因:
    Server端收到Client端的SYN请求后,发送了SYN和ACK,可是Client端并不进行回复。导致Server端大量的链接处于SYN_RCVD状态,进而影响其他正常请求的建链。
SYN洪水攻击解决方法:
    可以通过设置Linux的TCP参tcp_synack_retries = 0来加快半连接的回收速度或者调大tcp_max_syn_backlog来应对少量的SYN洪水攻击。
  1. 关闭链接四次挥手

    • 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状态

面试系列 - 操作系统与计算机网络_第2张图片

为什么需要TIME_WAIT状态:
    1、可靠的终止TCP连接
    2、保证让迟来的TCP报文段有足够的时间被识别并丢弃
为什么建链需要三次握手,断链需要四次挥手:
    建链时Server端的SYN和ACK合并成一个包发送,而断链时两个方向的数据发送的停止时间可能是不同的,所以无法合并FIN和ACK进行发送。
  1. 报文状态标志与链接状态
  2. Nagel算法与ACK延迟
  3. Keepalive
  4. 滑动窗口与流量控制

你可能感兴趣的:(java)