计算机网络
OSI七层模型
-
应用层
-
表现层
-
会话层
-
传输层
-
网络层
-
数据链路层
-
物理层
HTTP
超文本传输协议
-
超文本
-
传输
-
协议
HTTP如何优化
-
减少发送请求
-
缓存
-
懒加载
-
多个资源合并
-
-
减少重定向
- 服务器重定向
-
压缩
-
有损压缩
-
无损压缩
-
键入网址后发生了什么
-
解析URL
-
DNS解析
-
TCP三次握手
-
HTTP请求(可能流水线/长连接等等等等)
-
浏览器解析熏染
POST 和 GET
-
提交 / 获取 资源
-
否/是 安全且幂等
-
否/是 可以缓存,作为书签
-
2 / 1 次 HTTP请求
-
本质上是HTTP的不同方法,区别是人为定义且公认的
TCP / UDP
三次握手
client: closed - - - - -> syn_sent - - - - - - - - - - - -> established
event: - - - - -- - syn - - - - - - - - - - - - - - - ack----------------
event: - - - - - - - - - - - - - - - syn,ack - - - - - -- - - - - --- ---
server: closed -> listening -> syn_recv -> established
四次挥手
client:--ESTABLASHED---FIN_WAIT_1------FIN_WATE_2--------TIME_WATE----CLOSED
event:----------FIN-------------------------ACK----------------------
event:---------------ACK-------------FIN--------------------------
server:ESTABLASHED------CLOSED_WATE-----------LAST_ASK--------CLOSED
UDP与TCP区别
-
面向数据报,面向流
-
不可靠,可靠
-
不需要建立连接,需要建立连接
-
一对一、一对多,一对一
-
首部
-
拥塞控制、流量控制,无
-
都是基于IP
为什么三次握手
-
防止历史连接初始化传输(RFC写的)
-
足够上下文确认自己和对方能发能收
-
同步双方的序列号
为什么四次挥手
-
server收到FIN时可能还有数据要发
-
如果没有数据要发,表现出来也可以是三次
为什么四次挥手后等2MSL
-
确保server能正常关闭,万一最后一个ACK丢失
-
防止旧的数据包造成RST
-
MSL,报文最大生存时间
SYN攻击
-
短时间内发送大量SYN,占满半连接队列
-
丢弃 / cookie作为seq_num
流量控制
-
防止接受方的接受窗口溢出
-
通过维护如下实现:
-
发送窗口
-
接受窗口
-
拥塞控制
-
防止发送方发送的数据报使网络拥塞
-
有如下四种算法
-
慢启动
-
拥塞避免
-
拥塞发生:超时重传,出现超时事件
-
快速恢复:快速重传,出现3个冗余ACK事件
-
IP
IP
-
主机到主机间的通信
-
MAC作用在实现直连的设备,数据链路层
-
IP作用在没有实现直连的设备,网络层
ping
-
ICMP协议:确认IP包是否成功到达,报告被废弃的原因,改善网络设置
-
ICMP报文(查询/差错):类型,序号,时间
操作系统
线程上下文切换
-
是否处于同于进程内
- 否:切换共享资源,如内存,打开的文件,设备等资源
-
CPU上下文等切换
-
寄存器,PC值
-
栈,私有变量等
-
进程,线程
-
资源分配 / 调度 的基本单位
-
一个进程内的线程共享全局变量,共享内存,打开的文件设备等资源
-
线程实现方式:1 : N,1 : 1, M : N
进程间通信方式
-
匿名管道
-
有名管道
-
消息队列
-
共享内存
-
信号量
-
信号
-
Socket
各种算法
进程调度算法
-
FIFO (先来先服务)
-
最短作业优先
-
高响应比优先(响应比 = (等待 + 要求) / 要求)
-
RR时间片
-
最高优先级
-
多级反馈队列
内存调度算法
-
OPT
-
FIFO
-
LRU
-
LFU
-
时钟
磁盘调度算法
-
FCFS(先来先服务)
-
最短巡道时间优先
-
扫描算法
-
循环扫描算法(变化在于:只服务一个方向上的请求)
-
LOCK(和扫描算法的变化在于:不用扫描到最边缘,没有即可返回)
-
CLOCK
锁
-
互斥锁
-
自旋锁
-
读写锁
-
悲观锁
-
乐观锁
-
独占锁
-
共享锁