Computer_Fundamentals

本文最后更新于:2023年11月16日 下午

计算机基础

计算机网络

  • 计算机网络体系结构
    • 5KpnqU.png
    • 应用层
      • 应用层用来规定应用进程在通信时所遵循的协议,应用层的许多协议都是基于客户服务器方式。
      • 涉及到的协议:
        • 域名系统DNS:将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
        • HTTP协议:超文本传输协议,所有的万维网文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
        • 邮件传输协议:SMTP
    • 运输层
      • 只有位于网络边缘部分的主机的协议栈才有运输层,和网络层不同,网络层是为主机之间提供逻辑通信,而运输层为应用程序之间提供通用的数据传输服务(端到端服务)。运输层拥有流量控制(防止过载,即过多的数据注入到网络中),拥塞控制(抑制数据的传输速率)等功能。为上层协议提供端到端的可靠和透明的数据传输服务,上层服务用户不必关心通信子网的实现细节。
      • 运输层主要使用以下两种协议
        • 传输控制协议TCP:面向连接的协议,提供可靠的数据传输服务。
        • 用户数据报协议UDP:无连接的协议,不提供可靠交付。
      • 运行在TCP上的协议
        • HTTP协议(超文本传输协议):web服务器传输超文本到本地浏览器的传送协议。端口:80
        • HTTPS(安全超文本传输协议),HTTP协议的安全版本。端口:443
        • FTP(文件传输协议),用于文件传输,端口:21
        • SMTP(简单邮件传输协议),用来发送电子邮件。端口:25
        • SSH,用于加密安全登录用
      • 运行在UDP上的协议
        • DNS(域名服务),用于完成地址查找,邮件转发等工作
        • SNMP(简单网络管理协议),用于网络信息的收集和网络管理
        • NTP(网络时间协议),用于网络同步。
        • DHCP(动态主机配置协议),动态配置IP地址。
    • 网络层
      • 网络层采用了IP数据报服务:通过IP寻址来建立两个节点之间的连接,之后把运输层产生的报文段或用户数据报封装成分组和包进行传送,在发送分组时不需要先建立连接,每一个分组独立发送,与其前后的分组无关,在这个过程中网络层不提供端到端的可靠传输服务,尽最大努力进行交付(由网络的主机中的运输层复杂可靠交付)
      • 相关协议:
        • 与IP协议配套使用的地址解析协议ARP
        • ARP协议完成了IP地址与物理地址的映射,用于动态解析以太网硬件的地址。(IP地址到MAC地址之间的映射)
      • IP地址部分参考博客IP地址详解
      • IP地址:整个得因特网就是一个单一的,抽象的网络。IP地址就是给因特网上的每一个主机(或路由器)的每一个接口分配一个在全世界范围内唯一的32位的标识符。
      • 所谓分类的IP地址,就是将IP地址划分为若干固定类,每一类地址都由两个固定长度的字段组成,其中一个字段是网络号 net-id,它标志主机(或路由器)所连接到的网络,一个网络号在整个因特网范围内必须是唯一的。而另一个字段则是主机号 host-id,它标志该主机(或路由器),一个主机号在它前面的网络号所指明的网络范围内必须是唯一的。由此可见,一个IP地址在整个因特网范围内是唯一的。
        • 5QkpZt.png
        • 地址划分
        • 5QkNe1.png
        • 5QkjYT.png
        • 子网掩码
          • 路由器会把子网掩码和收到的数据报地址的目的IP地址145.13.310进行按位与操作,得出所要找的子网网络地址
    • 数据链路层
      • 数据链路层:两台设备之间的数据传输,可以看成是在一条管道上进行的,传送的数据单位是帧(每一帧包括数据和必要的控制信息),数据链路层保证传输数据的正确性。
    • 物理层
      • 物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流。
  • TCP与UDP
    • TCP/IP即传输控制协议,是面向连接的协议,发送数据前要先建立连接,TCP提供可靠的服务,也就是说,通过TCP连接传输的数据不会丢失,没有重复,并且按顺序到达。
      • 其传送的运输协议数据单元是TCP报文
      • 支持点对点单播,不支持多播。广播
      • 提供可靠服务
      • 复杂。用于大多数应用。如:万维网,电子邮件,文件传送等。
    • UDP它是属于TCP/IP协议族中的一种,是无连接的协议,发送数据之前不需要建立连接,是没有可靠性的协议,因为不需要建立连接所以可以在网络上以任何可能的路径传输,因此,能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。
      • 无连接的协议,提供无连接服务
      • 其传送的运输协议数据单元TPDU是UDP报文或用户数据报
      • 支持单播,多播,广播
      • 不提供可靠交付
      • 简单,适用于很多应用。
  • 三次握手,四次挥手
    • 三次握手:TCP建立连接的过程
    • 客户端向服务器发送SYN—》服务端返回SYN,ACK—》客户端发送ACK
    • 三次握手的目的是建立可靠的通信信道,主要目的就是双方确认自己与对方的发送与接收正常。
    • 四次挥手:数据传输结束后,通信双方都可释放连接,我们将释放连接的过程称为四次挥手。
      • 客户端对服务器发送关闭连接的请求
      • 服务器收到客户端的关闭连接请求后,回复一个确认收到的消息
      • 服务器确定不会再给客户发消息后,对客户端发送,准备关闭连接的消息
      • 客户端收到服务器要关闭连接的消息后,给服务器发送:已收到关闭连接的消息
  • HTTP协议
    • HTTP是一个基于TCP/IP通信协议来传输数据的协议。HTTP协议工作于客户端-服务器端架构之上,实现可靠性的传输文字,图片,音频,视频等超文本数据的规范,格式简称为“超文本传输协议”。HTTP协议属于应用层,用户访问的第一层就是HTTP
      • 简单快速:客户端向服务器发送请求时,只需要传送请求方法和路径即可。
      • 灵活:HTTP允许传输任意类型的数据对象。
      • 无连接:限制每次连接只处理一个请求。服务器处理完客户请求,并收到客户应答后,即断开连接。
      • 无状态:协议对于事务处理没有记忆能力。
  • HTTPS于HTTP
    • 端口不同,HTTP是80,HTTPS是443
    • 安全性:HTTP是超文本传输协议,信息是明文传输,HTTPS是通过SSL加密处理的传输协议,更加安全。
    • HTTPS需要拿到CA证书,需要付费
  • 一次完整的HTTP请求
    • HTTP协议采用请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求方法,URL,协议版本,请求头部和请求数据。服务器以一个状态作为响应,响应内容包括协议版本,成功或者错误的代码,服务器信息,响应头部和响应数据。
    • Web浏览器与Web服务器之间将完成下列7个步骤:
      • 建立TCP连接,三次握手
      • Web浏览器向Web服务器发送请求行
      • Web浏览器发送请求头,浏览器发送请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。
      • Web服务器应答:客户机向服务器发出请求后,服务器会向客户机回送应答,(HTTP/1.1 200 OK)应答的第一部分是协议的版本号和应答状态码
      • Web服务器发送应答头:正如客户端会随同请求发送关于自身的信息一样,服务器也会随应答向用户发送关于它自己的数据及被请求的文档。
      • Web服务器向浏览器发送数据:Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为止,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据。
      • Web服务器关闭TCP连接,四次挥手。
  • 输入网址到获取页面的过程
    • 浏览器搜索自身的DNS缓存,搜索操作系统的DNS缓存,读取本地Host文件和向本地DNS服务器进行查询等。
    • 浏览器获得域名对应的IP地址之后,浏览器向服务器请求建立连接,发起三次握手
    • TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求
    • 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果以及相应的视图返回给浏览器
    • 浏览器解析并渲染视图,若遇到js文件,css文件,图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源。
    • 浏览器根据其请求到的资源,数据渲染页面,最终向用户呈现一个完整的页面。
  • HTTP版本对比
    • HTTP1.0
      • 是一种无状态,无连接的应用层协议(短连接)
      • 浏览器的每次请求都需要与服务器建立一个TCP连接,服务器处理完成后立即断开TCP连接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无状态)
    • HTTP1.1(长连接)
      • 默认持久连接节省通信量,只要客户端服务端任意一端没有明确提出断开TCP连接,就一直保持连接。(长连接).
    • HTTP2.0
      • 服务器推送(就是服务器可以对一个客户端请求发送多个响应。服务器向客户端推送资源无需客户端明确的请求)
  • GET方法和POST方法(HTTP协议中的请求方式)
    • GET:用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
    • POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式
    • GET方法与POST方法的区别:
      • 功能上:GET一般用来从服务器获取资源,POST一般用来更新服务器上的资源
      • 安全性:GET是不安全的,因为GET请求提交的数据将明文出现在URL上(请求头上),可能会泄露私密信息;POST请求参数则被包装到请求体中,相对更安全。
      • 数据量:GET传输的数据量小,因为受URL长度限制,但效率较高;POST可以传输大量数据,所以上传文件只能用POST方式。
  • Session和Cookie的对比
    • Cookie是由Web服务器保存在用户浏览器上的文件(key-value格式),可以包含用户相关的信息。客户端向服务器发起请求时,会携带服务器端之前创建的cookie,服务器端通过cookie中携带的数据区分不同的用户。
    • Session:session是浏览器和服务器对话过程中,服务器会分配一块存储空间给session。服务器默认会为客户浏览器的cookie中设置 sessionid,这个sessionid就和cookie对应,浏览器在向服务器请求过程中传输的cookie 包含 sessionid ,服务器根据传输cookie 中的 sessionid 获取出会话中存储的信息,然后确定会话的身份信息。
    • 区别:
      • 安全性:cookie数据存放在客户端上,安全性较差,session数据放在服务器上,安全性相对更高
      • 大小限制:cookie有大小限制,单个cookie保存的数据不能超过4K,session无此限制,理论上只与服务器的内存大小有关
      • 服务器资源消耗:session是保存在服务器端上会存在一段时间才会消失,当访问增多,对服务器性能有影响。
      • 实现机制:session的实现常常依赖于Cookie机制,通过Cookie机制回传SessionID。

操作系统

  • 进程与线程
    • 进程是资源分配的基本单位。线程是独立调度的基本单位。一个进程中可以有多个线程,他们共享进程资源。
    • 区别:
      • 拥有资源:进程是资源分配的基本单位,但是线程不拥有资源,线程可以访问隶属进程的资源。
      • 调度:线程是独立调度的基本单位,在同一进程中,线程的切换不会引起进程的切换,从一个进程的线程切换到另一个进程的线程时,会引起进程切换。
      • 系统开销:由于创建或撤销进程时,系统都要为之分配或回收资源,所付出的开销远大于创建或撤销线程时的开销。线程切换时只需保存和设置少量寄存器内容,开销很小。
      • 通信方面:线程间可以通过直接读写同一进程中的数据进行通信,但是进程通信需要借助IPC(进程间通信)
  • 进程通信
    • 进程通信:进程间传输信息。进程同步:控制多个进程按一定顺序执行
    • 通信方式:
      • 管道
        • 管道是通过pipe函数创建的。
        • 支持单向交替传输
        • 只能在父子进程或者兄弟进程中使用
      • FIFO
      • 消息队列
      • 信息量
        • 它是一个计数器,用于为多个进程提供对共享数据对象的访问。
      • 共享存储
        • 允许多个进程共享一个给定的存储区。因为数据不需要在进程间复制,所以这是最快的一种IPC。
      • 套接字
        • 它可以用于不同机器之间的进程通信
  • 死锁
    • 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象,若无外力作用,它们都将无法推进下去。
    • 产生死锁的必要条件
      • 互斥
      • 占有和等待
      • 不可抢占
      • 环路等待
  • 虚拟内存
    • 虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。
    • 页面置换算法

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!