WQhuanm
计算机基础学习笔记

计算机基础学习笔记

计网

一、网络分层模型

  1. OSI七层模型与TCP/IP4层模型

  2. 报文、数据报、数据包、帧的区别

二,IP、NAT、ARP

  1. IP的作用:定义数据包的格式、对数据包进行路由和寻址,以便它们可以跨网络传播并到达正确的目的地。
  2. NAT(Network Address Translation,网络地址转换)的作用:在不同网络之间转换 IP 地址。
  3. ARP(Address Resolution Protocol,地址解析协议):解决IP地址和MAC地址的转换

三,TCP/UDP

1. TCP 与 UDP 的区别
  1. TCP是否面向连接的,是可靠传输,是有状态的,UDP不是
  2. TCP传输的时候多了连接、确认、重传等机制,效率低
  3. TCP 是面向字节流的,UDP 是面向报文的。
2. TCP 三次握手和四次挥手
  1. 三次握手(三次确保对方能接受我的信息并回应。1,2步确认服务端可接收客户端消息;2,3步确认客户端可接受服务端消息)

    • 一次握手:客户端发送带有 SYN(SEQ=x) 标志的数据包 -> 服务端,然后客户端进入 SYN_SEND 状态,等待服务端的确认;
    • 二次握手:服务端发送带有 SYN+ACK(SEQ=y,ACK=x+1) 标志的数据包 –> 客户端,然后服务端进入 SYN_RECV 状态;
    • 三次握手:客户端发送带有 ACK(ACK=y+1) 标志的数据包 –> 服务端,然后客户端和服务端都进入ESTABLISHED 状态,完成 TCP 三次握手。
  2. 四次挥手(TCP是全双工的,前2次挥手是说明客户端不会再有消息需要发送,后2次挥手是为了说明服务器不会再有消息发送)

    • 第一次挥手:客户端发送一个 FIN(SEQ=x) 标志的数据包->服务端,用来关闭客户端到服务端的数据传送。然后客户端进入 FIN-WAIT-1 状态
    • 第二次挥手:服务端发送一个 ACK (ACK=x+1)标志的数据包->客户端 。然后服务端进入 CLOSE-WAIT 状态,客户端进入 FIN-WAIT-2 状态。不发送SEQ,是因为服务端可能还有数据未传输完(只是客户端数据传输完了),所以第三次挥手再确认。
    • 第三次挥手:服务端发送一个 FIN (SEQ=y)标志的数据包->客户端,请求关闭连接,然后服务端进入 LAST-ACK 状态(第二次先回复ack,处理完数据再说可以FIN)
    • 第四次挥手:客户端发送 ACK (ACK=y+1)标志的数据包->服务端,然后客户端进入TIME-WAIT状态,服务端在收到 ACK (ACK=y+1)标志的数据包后进入 CLOSE 状态。此时如果客户端等待 2MSL 后依然没有收到回复,就证明服务端已正常关闭,随后客户端也可以关闭连接了。(客户端等待防止server为收到ack持续fin确认)
3. TCP 传输可靠性保障(校验和、重传机制、流量控制、拥塞控制)
  1. 流量控制(滑动窗口实现,控制发送方发送速率,保证接收方来得及接收)
  2. 拥塞控制:慢启动(指数递增)、拥塞避免(线性增长)
  3. 流程
    1. 发送方的窗口大小取决于:接收方允许的窗口和拥塞窗口
    2. 当拥塞窗口(CWND)达到或超过拥塞避免阈值(ssthresh) 时,cwnd改为ssthresh,TCP会从慢启动阶段转入拥塞避免阶段。
    3. 超时或发生网络拥塞时,拥塞避免阈值会重新调整为当前拥塞窗口的一半(即减小),拥塞窗口重新设置为1,进入慢启动
    4. 发生三次重复 ACK,将 ssthresh和CWND调整为当前 CWND 的一半,进入拥塞避免阶段

四、HTTP协议(无状态协议)

1. HTTP
  1. HTTP版本迭代

    • HTTP 1.0 为短连接,HTTP 1.1 支持长连接(TCP 协议的长连接)
    • HTTP/2.0 在同一连接上可以同时传输多个请求和响应(多路复用)
  2. HTTP1.1:默认使用长连接(客户端可以建立tcp连接池来利用tcp长连接的特性)

    1. 单个TCP连接在同一时刻只能处理一个http请求,任意两个 HTTP 请求从开始到结束的时间在同一个 TCP 连接里不能重叠。
      • 在应用层方面存在队头阻塞问题:同一tcp下的http请求,队头阻塞,后面请求都需要等待
      • 流水线(Pipelining)优化(默认不启用,实现复杂且效果不佳):在同一条长连接上发出连续的请求,无需等待响应。服务器需要按接收顺序依次处理请求,响应也必须按顺序返回。
      • http1.1基于文本分割来解析,在遇到分隔符前不能停止解析,不适合划分成基本单位来实现多路复用
    2. 性能优化策略
      • 通常采用连接复用(长连接)和同时建立多个TCP连接的方式提升性能。但浏览器对其访问的host域名可建立的TCP连接数有限制(6~8个)
      • http的长连接长时间空闲一般会断开(长时间空闲浪费服务器资源)
      • 域名分片(加速图片等大资源的获取速度):通过将内容拆分到多个子域来提高网页加载速度的技术,突破浏览器对同一域名host可以使用的tcp限制(从多个子域名获取资源,而这些子域名其实都指向同一台目标服务器,这样能并发使用更多tcp连接)
  3. HTTP2:基于https上实现。基于二进制帧(紧凑的二进制结构)来传输数据,不再是明文传输

    1. 基本概念

      • 帧(frame):最小的数据单位,帧包含数据长度、流标识符、帧类型等信息。http请求报文被拆散成帧
      • 消息(message):即http报文(一个请求/响应),消息由帧组成(由头部帧和数据帧组成)
      • 流(stream):一次完整的请求-响应由对应的流id标识,即流是双向的(含有一对请求消息+响应消息)
        • 流id严格递增,不可复用,具有唯一性,其流id对应了一次请求-响应
        • 一般规定客户端发起的流id奇数,服务端发起的流id偶数,避免冲突
        • 同一个流发送的帧要有顺序,接受端按照收到帧的顺序重新组装成消息(http报文)
    2. 多路复用(Multiplexing,一个TCP段可以存在多条流)

      • 同个域名只需要一个 TCP 连接,使用一个连接并行发送多个请求和响应。
      • 一个tcp段会包含多个stream,一个stream可能会分成非连续多次发送。
      • 不同流的帧之间可以乱序发送,因为会按照各自的流id组装
      • 请求优先级:每个流可以设定优先级
      • 流量控制:设定每个流可以占用一个tcp段多少带宽(接收端通过WINDOW_UPDATE帧控制其对应流的流量窗口大小),基于每一跳进行,而非端到端的控制
      • 服务端推送:服务端响应时也可以使用新流推送(预加载)资源给客户端(可被拒绝),减少请求响应次数
    3. 头部压缩(HPACK)

      • 原因:http1.1只针对body进行压缩,而包含协议内容,cookie等字段的请求头,有很多内容重复却没有压缩
      • HPACK 压缩算法
        • 客户端和服务端共同维护了一份字典表,来跟踪和存储之前发送的键值对
        • 每次发送数据时,相同的数据不再通过每次请求和响应发送;新数据/修改数据要么被追加到当前表的末尾,要么替换表中之前的值
    4. 禁用域名分片

      • 破坏多路复用优势:分片强制使用多个连接,反而增加握手和头部冗余。
      • 加剧头部压缩失效:多个子域名的请求需携带独立头部信息,无法充分复用HPACK字典。
    5. 缺点

      • TCP层面的队头阻塞并没有彻底解决:“超时重传”机制,丢失的包必须重传确认,后面的TCP包必须等待
      • 多路复用没有限制同时请求数,可能导致服务器压力上升
      • 多路复用容易 Timeout: 大批量并行多个流,导致每个流的资源会被稀释,虽然它们开始时间相差更短,但却都可能超时
  4. GET 和 POST 的区别

    1. GET 通常用于获取或查询资源,而 POST 通常用于创建或修改资源。
    2. GET 请求是幂等的,即多次重复执行不会改变资源的状态(该请求可以缓存,无副作用),而 POST 请求是不幂等的,即每次执行可能会产生不同的结果或影响资源的状态。
  5. HTTP 状态码

2. HTTPS(使用 SSL/TLS 协议用作加密和安全认证)
  1. SSL原理
    • 非对称加密:发送方有公匙用于加密,接收方有私匙用于解密。安全性高,但代价高。用于传输对称加密密匙
    • 对称加密:通信双方共享唯一密钥 k,加解密算法已知,双方利用密钥 k 加密/解密。代价低,但保密性差。用于传输数据
    • CA证书:有CA数字签名的服务器合法,其公匙可信,不会被伪造,CA使用CA私匙对服务器的公匙加密附在证书中,把证书颁发给服务器
  2. https传输原理
    1. 客户端先获取服务器证书,使用CA公匙验签后获取服务器公匙(私匙加密,公匙解密用于验签)
    2. 客户端生成对称加密密匙,用服务器公匙加密后发送给服务器(公匙加密,私匙解密,用于传输密匙)
    3. 服务器用服务器私匙解密,获取对称加密密匙,以后双方使用该密匙通讯
3. URL(Uniform Resource Locators,即统一资源定位器)
  1. URL的组成结构

    1. 协议:URL的前缀采用了何种应用层协议:HTTP/HTTPS/FTP等
    2. 域名(DNS解析域名和ip地址的映射),端口, 资源路径
    3. 请求参数:采用键值对的形式key=value,每一个键值对使用&隔开
    4. 锚点:显示该网页页面的位置,锚点以#开头,且不会作为请求的一部分发送给服务端
  2. 从输入 URL 到页面展示的过程

    1. 在浏览器中输入指定网页的 URL
    2. 浏览器通过 DNS 协议,获取域名对应的 IP 地址
    3. 浏览器根据 IP 地址和端口号,向目标服务器发起一个 TCP 连接请求
    4. 浏览器在 TCP 连接上,向服务器发送一个 HTTP 请求报文,请求获取网页的内容
    5. 服务器收到 HTTP 请求报文后,处理请求,并返回 HTTP 响应报文给浏览器
    6. 浏览器收到 HTTP 响应报文后,解析响应体中的 HTML 代码,渲染网页的结构和样式,同时根据 HTML 中的其他资源的 URL(如图片、CSS、JS 等),再次发起 HTTP 请求,获取这些资源的内容,直到网页完全加载显示
    7. 浏览器在不需要和服务器通信时,可以主动关闭 TCP 连接,或者等待服务器的关闭请求。

操作系统

一,进程和线程

进程是资源分配的最小单位,线程是CPU调度的最小单位

  1. 进程间的通信方式

    • 管道/匿名管道(Pipes) :半双工,用于具有亲缘关系的父子进程间或者兄弟进程之间的通信(消息在内核缓冲区)
    • 有名管道(Named Pipes) : 严格遵循先进先出。有名管道以磁盘文件的方式存在,可以实现本机任意两个进程通信。
    • 共享内存:需要依靠某种同步操作,如互斥锁和信号量等。可以说这是最有用的进程间通信方式。
  2. 进程的调度算法

    • 先到先服务调度算法(FCFS,First Come, First Served)
    • 短作业优先的调度算法(SJF,Shortest Job First)
    • 时间片轮转调度算法(RR,Round-Robin)
    • 优先级调度算法(Priority)
    • 多级反馈队列调度算法(MFQ,Multi-level Feedback Queue)
  3. 僵尸进程和孤儿进程

    • 子进程exit结束时,内核会释放该进程的所有资源,但其PCB依然存在于系统中。直到其父进程调用wait()才会被释放,以便让父进程得到子进程的状态信息。
    • 僵尸进程:子进程终止,但父进程没有调用 wait()导致子进程的 PCB 依然存在于系统中,但无法被进一步使用。该子进程被称为“僵尸进程”。
    • 孤儿进程:父进程终止,但子进程仍在运行,未被wait()回收。该子进程为“孤儿进程”。OS会将孤儿进程的父进程设置为 init 进程(进程号为 1),由 init 进程来回收孤儿进程的资源。

二,死锁

  1. 死锁的四个必要条件

    1. 互斥:资源必须处于非共享模式,即一次只有一个进程可以使用。
    2. 占有并等待:一个进程至少应该占有一个资源,并等待另一资源,而该资源被其他进程所占有。
    3. 非抢占:资源不能被抢占。只能在持有资源的进程完成任务后,该资源才会被释放。
    4. 循环等待:进程对资源的等待形成一个环
  2. 死锁的预防

    1. 静态分配策略(破坏占有并等待):进程只有执行前能申请所有资源才执行
    2. 层次分配策略(破坏循环等待):资源分成多个层次,必须申请到低级资源才能申请高级资源,必须释放高级资源才能释放低级资源(单向性使得不存在循环等待,不会有高级资源申请低级资源的情况)
  3. 死锁的避免

    • 将系统的状态分为 安全状态 和 不安全状态 ,在为申请者分配资源前先测试系统状态,若把系统资源分配给申请者会产生死锁,则拒绝分配,否则接受申请,并为它分配资源。(银行家算法)
  4. 死锁的检测:进程-资源分配图

  5. 死锁的解除

    1. 抢占资源:从涉及死锁的一个或几个进程中抢占资源,把夺得的资源再分配给涉及死锁的进程直至死锁解除。
    2. 逐个撤销涉及死锁的进程,回收其资源直至死锁解除。

三,内存管理

  1. 分段机制:每个申请内存的程序分配一个适合它大小的连续物理段,程序的虚拟地址通过段表映射到其分配的段上
    • 缺点:容易产生外部内存碎片(明明内存够分配给进程,但是不存在足够大小的连续内存段
  2. 分页机制:把物理内存分为连续等长的物理页(一般是4KB),虚拟内存也被划分成页。内存页是管理的基本单位
    • 多级页表的映射
      • 局部性原理:大多数进程不会使用到所有页,只使用少部分,一开始就给1024张页表太亏,采用2级页表:永存第一级页表,需要才增加第二级页表
      • 虚拟内存的地址的含义->[一级页表偏移量(10位),二级页表偏移量(10位),页内地址偏移量(12位)]
    • 快表(TLB,Translation Lookaside Buffer):即缓存,避免使用多级页表查询
    • 缺页中断(需要切换内核态,因为每个进程都可以保存一定数量的内存页而不是所有)
      • 硬性页缺失(Hard Page Fault):如果访问页面不在内存,需要产生缺页中断,将该虚拟内存页映射的物理内存页(被置换到磁盘上了)拿到内存
      • 软性页缺失(Soft Page Fault):物理内存中有对应的物理页,但虚拟页还未和物理页建立映射。
    • 页面置换算法(减少缺页中断的产生)
      最佳页面置换算法(OPT,Optimal)
      先进先出页面置换算法(FIFO,First In First Out):存在BeLady现象:分配的页面数增多但缺页率反而提高
      最近最久未使用页面置换算法(LRU ,Least Recently Used):记录页面上次访问时间
      最少使用页面置换算法(LFU,Least Frequently Used) : 记录页面使用次数
  3. 段页机制:把物理内存先分成若干段,每个段又继续分成若干大小相等的页。

四,文件系统

  1. 硬链接和软链接:每个文件和目录都有一个唯一的索引节点(inode)号,用来标识该文件或目录。

    1. 硬链接(Hard Link,ln命令):不能跨文件系统,硬链接通过 inode 节点号建立连接,硬链接和源文件的 inode 节点号相同,两者对文件系统来说是完全平等的
    2. 软链接(Symbolic Link,ln -s命令):能跨文件系统,类似快捷方式,可指向空文件/目录
  2. 磁盘调度算法

    1. 先来先服务算法(First-Come First-Served,FCFS)
    2. 最短寻道时间优先算法(Shortest Seek Time First,SSTF):优先选择距离当前磁头位置最近的请求进行服务
    3. 扫描算法(SCAN):扫描到边界才转向
    4. 边扫描边观察算法(LOOK):改进SCAN,移动方向上无请求,立即改变磁头方向
    5. 循环扫描算法(Circular Scan,C-SCAN):只按照一个方向扫描
    6. 均衡循环扫描算法(C-LOOK):改进C-SCAN,移动方向上无请求,立即让磁头返回

参考文章

HTTP2 协议长文详解 –九卷
深入浅出:HTTP/2

本文作者:WQhuanm
本文链接:https://wqhuanm.github.io/Issue_Blog/2025/03/12/14_计算机基础学习笔记/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可