软件工程基础知识

软件工程基础知识

一. 软件工程

1. 软件工程基础

1.1 什么是软件

  1. 软件独立于硬件
  2. 软件是一种工具
  3. 软件以程序代码为核心,由程序、文档、数据三个部分组成
  4. 软件开发远远比编程复杂
  5. 应用软件基于现实又高于现实

1.2 软件工程(2015、2017)

  1. 应用系统的、规范的、可量化的方法来开发、运行和维护软件、即将工程应用到软件。
  2. 对以上各种方法的研究。

1.3 工程和科学的区别(2018)

  1. 科学是关于事务的基本原理和事实的有组织、有系统的知识。
  2. 科学的主要任务是研究世界万物变化的客观规律,他解决“为什么”的问题。
  3. 工程是自然科学或各种专门技术应用到生产部门中而形成的各种学科的总称,其目的在于利用和改造自然来为人类服务。
  4. 通过工程可以生产和开发出对社会有用的产品。
  5. 科学可以作为工程的指导知识,譬如软件工程的指导知识是计算机科学。

2. 项目管理基础

2.1 项目管理的目标

  1. 限定的时间
  2. 限定的成本
  3. 要求的质量水平
  4. 高效资源使用
  5. 客户的认可

2.2 项目管理的五个过程组

  1. 项目启动
  2. 项目计划
  3. 项目执行
  4. 项目跟踪与控制
  5. 项目收尾

2.3 软件过程管理和软件项目管理的区别

  1. 软件过程管理:是对软件的开发过程进程进行管理,积累项目各个环节的实践管理经验,重视对各个子进程的管理。
  2. 软件项目管理:是站在整个项目的高度进行对软件的整体管理,包括项目启动、项目计划、项目执行等。

2.4 质量验证/质量保障的措施(三种手段)(2016、2019)

  1. 评审:由作者之外的其他人来检查产品问题。
  2. 测试:主要包括单元测试、集成测试、系统测试。
  3. 质量度量:用数字量化的方式描述软件产品。

2.5 软件配置管理有哪些活动(2020)

  1. 标识配置项
    首先要确定有哪些配置项需要被保存和管理。其次要给配置项确定标识,设置唯一的ID。最后要详细说明配置项的特征,包括生产者,基线建立时间,使用者等。
  2. 版本管理
    a.变更时更新版本号。b.管理不同的分支
  3. 变更管理:依据变更过程进行配置
  4. 配置审计:确定项目满足需求的功能和物理特征的程度
  5. 状态报告:标识、收集和维持演化中的配置状态信息
  6. 软件发布管理:创建和发布可用的产品、如交付可执行程序、使用文档、注意事项等

2.6 什么是变更控制

变更控制就是以可控、一致的方式进行变更处理。包括对变化的评估、协调、批准或拒绝、实现与验证。变更控制并不是要限制甚至拒绝变化,它是以一直可控制的、严格的方式来执行变更。

3.软件需求基础

3.1 什么是需求(2015)

  1. 需求就是用户的一种期望,用户为了解决问题或达到某些目标所需要的条件或能力
  2. 系统或系统部件为了满足合同、标准、规范或其他正式文档所规定的要求而需要具备的条件或能力
  3. 对上述的一个条件或一种能力的一种文档化表述

3.2 功能性需求与非功能性需求(2018、2022)

功能需求:是软件系统需求中最常见、最主要和最重要的需求,同时它也是最为复杂的需求,是一个软件产品能够解决用户问题和产生价值的基础。

非功能性需求:主要包括性能需求、质量属性、对外接口、约束和数据需求等。其中质量属性是非功能性需求中影响最大的需求。

4.需求分析方法

4.1 请以ATM取款任务为主题,编写取款的用例

编写用例题的模板:
ID:WithDrawProcess
参与人:xxx,目标是xxx
触发条件:xxx将银行卡插入卡槽
前置条件:xxx
后置条件:xxx
正常流程:1.xxx 2.xxx 3.xxx
扩展流程:(异常情况)1.xxx 2.xxx
特殊需求:1.响应时间 2.xxx

5.需求文档化验证

5.1 需求文档的交流对象

  1. 用户需要通过SRS来验证需求是否符合其意图
  2. 项目管理者需要通过SRS来进行估算项目进度和人员分工
  3. 设计人员需要通过SRS来判断是否完成任务
  4. 测试人员需要通过SRS来进行验收软件
  5. 维护人员需要通过理解SRS来进行维护软件

6.软件设计基础

6.1 什么是软件设计

软件设计是关于软件对象的设计,是一种设计活动,具有设计的普遍性。软件设计既指软件对象实现的规格说明,包含软件设计和软件原型,也指产生这个规格说明的过程。即软件设计工程师以对象的目标用户的需求为指引,在一定的客观约束条件下,通过分析、研究、建模等活动进行软件设计。

6.2 软件设计的核心思想(2021)

抽象和分解是软件设计的核心思想,“分而治之”是软件设计解决复杂难题的主要思路分解横向将系统分割为几个相对简单的子系统以及各子系统之间的关系。分解之后只需要关注经过抽象的相对简单的子系统及其相互间的关系,从而降低了复杂度。抽象则是在纵向上聚集各子系统的接口。抽象分为接口与实现过程,让人更好地关注系统本质,降低复杂度。

6.3 常见的设计视角/体系结构视角(2018、2019)

  1. 组合视角:关注功能分解和运行时分解、子系统的构造,构建的复用。
  2. 逻辑视角:关注静态结构,类型和实现的复用。
  3. 依赖视角:关注互联、共享。
  4. 信息视角:关注持久化信息。
  5. 接口视角:关注服务的定义、服务的访问。

7.软件体系结构基础

7.1 软件体系结构

一个软件系统的体系结构规定了系统的计算部件部件之间的交互。由部件+连接件+配置组成。
部件:承载系统的主要功能、包括处理数据
连接件:定义了部件间的交互、是连接的抽象表现。
配置:定义了部件与连接件之间的关联方式

7.2 体系结构视图(4+1视图模型)

  1. 逻辑视图:显示了系统中对象对象类的一些主要抽象
  2. 开发视图:显示了软件如何为了开发而被分解的
  3. 进程视图:显示了在运行时系统是如何组织为一组交互的进程,主要关注非功能系统特征
  4. 物理视图:显示了系统硬件软件组件是如何分布在处理器上
  5. 场景视图:捕获架构需求,与一个或多个特点视图相关

7.3 体系结构风格/模式及其优缺点(2015)

主程序/子程序:该风格是基于部件与连接件建立的高层结构,其部件不同于程序,而是更加粗粒度的模块。主程序是系统的控制器,负责调度子程序的执行,各子程序又是一个局部的控制器,负责调度子子程序的执行。控制从顶部开始向下移动,有层次化分解,单线程控制。
优点:流程清晰,易于理解。强控制性
缺点:程序调用是一种强耦合的连接方式,难以修改和复用。程序调用的连接方式限制了各部件的数据交互。

面向对象式:该风格将系统组织为多个独立的对象,每个对象封装其内部的数据,并基于数据对外提供服务,不同对象之间通过协作机制共同完成系统任务。
优点:内部实现的可修改性。易开发、易理解、易服用的结构组织。
缺点:无法消除接口的耦合标识耦合。面向对象编程中的副作用

分层风格(2014):根据不同的抽象层次将系统组织为层次式结构,每个层次被建立为一个部件,不同部件之间通常用程序调用方式进行连接。
优点:设计机制清晰易于理解。支持并行开发。更好的可复用性内部可修改性
缺点:交互协议难以修改性能损失。难以确定层次数量和粒度。

MVC:该风格以程序调用为连接件,将系统功能组织为模型视图控制三个部件。其中模型封装了系统的数据和状态信息,提供数据服务和执行业务逻辑;视图封装了用户交互,提供业务展现;控制封装了系统控制逻辑,根据用户行为调整系统状态以及业务展现。
优点:易开发性。视图的控制和可修改性。适宜于网络系统开发的特征
缺点:复杂性。模型修改困难。

8.软件体系结构设计与构建

8.1 常见的集成策略/集成测试策略

  1. 大爆炸式:一次性将所有模块组合在一起。
  2. 增量式
    自顶向下集成:先集成和测试上层的模块,下层的模块使用伪装的具有相同接口的,然后不断加入下层模块。
    自底向上集成:先集成和测试下层的模块,上层的模块使用伪装的相同接口的驱动来替换,然后不断加入上层模块。
    持续集成(2017、2020):尽早集成频繁集成,即在开发之初就利用stub 开始集成和每次开发完一些任务后就可以替换 stub 中的相应组件。

8.2 什么是桩Stub和驱动Driver

:主要用于自顶向下集成策略中,即先集成和测试上层的模块,下层的模块使用伪装的具有相同接口的桩,其模拟地实现了模块的简单行为。
驱动:主要用于自底向上集成,从底层的模块集成起,测试的时候上层的模块使用伪装的相同接口的驱动。

9.人机交互设计

9.1 易用性的维度定义(质量模型的易用性)(2018)

人机交互的目标透明(抽象)/易用性(具体)

  1. 易学性(新手):新手用户容易学习,能够很快的使用系统。
  2. 效率(老手):熟练用户使用系统完成任务的速度。
  3. 易记性(旧手):以前使用过软件系统的用户,能够有效记忆或者快速的重新学会使用该系统。
  4. 出错率:用户在使用系统时,会犯多少错,错误有多严重,以及是否能从错误中很容易的恢复。
  5. 主管满意度:让用户有良好的体验。

9.2 人机交互设计原则(界面设计原则/可视化设计原则)

  1. 简洁设计:不要使用太大的菜单,不要在一个窗口中表现过多的信息类别,不要在一个表单中使用太多的颜色和字体作为线索。
  2. 一致性设计:遵循用户已有的精神模型。
  3. 低出错率设计:避免可能用户操作可能引起的错误并且提供简洁的指导帮助用户消除错误。
  4. 易记性设计:减少用户记忆负担。
  5. 导航:提供一个很好的完成任务的入口。
  6. 反馈:提示用户交互行为的结果,但不打断用户工作的意识流。
  7. 不暴露软件系统内部构造机制
  8. 协作式设计:调整计算机因素以更好地适应并帮助用户的设计方式。

10. 详细设计中的模块化与信息隐藏

模块化信息隐藏是软件设计的核心思想之一。
可理解易修改易复用是软件设计三个常见且重要的质量标准

10.1 高内聚低耦合(模块化的原则)

每个模块的内部有最大的关联,模块之间有最小的关联。

10.2 耦合(六种耦合)

描述了两个模型之间关系的复杂程度。

①内容耦合:一个模块直接修改或者依赖于另一个模块的内容。(无法接受)
②公共耦合:模块之间共享全局的数据。(无法接受)
③重复耦合:模块之间有同样逻辑的重复代码。(无法接受)
④控制耦合:一个模块给另一个模块传递控制信息。
⑤印记耦合:共享一个数据结构,但是却只用了其中一部分。
⑥数据耦合:两个模块的所有参数是同类型的数据项。

10.3 内聚(七种内聚)

描述了一个模块内部联系的紧密性。

①偶然内聚:模块执行多个完全不相关的操作。(无法接受)
②逻辑内聚:模块执行一系列相关操作,但是每个操作的调用由其他模块来决定。(无法接受)
③时间内聚:模块执行一系列与时间有关的操作。
④过程内聚:模块执行一系列与步骤顺序有关的操作。
⑤通信内聚:模块执行一系列与步骤有关的操作,并把这些操作在相同的数据上进行。
⑥功能内聚:模块只执行一个操作或者达到一个单一目的。
⑦信息内聚:模块进行许多操作,入口点独立,每个操作的代码独立,但使用相同的数据结构。

10.4 面向对象设计原则

降低访问耦合
① 1.接口分离原则(接口最小化原则ISP):将一个统一的接口匹配为多个更独立的接口。
② 2.迪米特法则(DemeterLaw):一个软件实体应当尽可能少地与其他实体发生相互作用。3.面向接口编程(PTI):定义明确的契约,并按照契约组织和理解软件结构。

降低继承耦合:
③ 1.里氏替换原则(LSP):子类型能够替换基类型并起同样的作用。(最典型的案例:正方形和长方形)
④ 2.组合代替继承(CARP):在不满足 LSP 时,用组合来代替继承实现代码的复用。

提高内聚:
⑤ 1.单一职责原则(SRP):既是信息内聚又是功能内聚。2.集中信息与行为。

方便变更:
⑥ 1.开闭原则(OCP):对扩展开放,对修改关闭。
⑦ 2.依赖倒置原则(DIP):抽象不依赖于细节,高层不依赖底层。都依赖于抽象的接口。

11. 详细设计中面向对象下的信息隐藏

11.1 什么是信息隐藏

①封装类的职责,隐藏职责的实现
②预计将会发生的更变,抽象它的接口,隐藏它的内部机制。

11.2 信息隐藏的目的(2022)

为了做到模块与模块之间尽可能独立,以实现软件的可扩展性和可伸缩性。

11.3 信息隐藏的决策

①职责的实现
②实现的变更

11.4 封装的含义

①集中信息与行为
②分离对外接口和内部实现

11.5 封装的实现细节

①封装数据和行为
②封装内部结构
③封装其他对象的引用
④封装类型信息
⑤封装潜在变更

11.6 抽象、信息隐藏、封装的联系与区别

联系:抽象是最终目的,需要借助信息隐藏来实现。封装是面向对象中信息隐藏的具体手段 区别:见上

12. 软件构造

12.1 重构(2021)

修改软件系统的严谨方法,在不改变代码外部表现(即系统功能)的情况下改进其内部结构
重构的时机:
新功能增加完成之后,用于消除新功能所带来的负面影响。
②发现了缺陷进行修复时。
③进行代码评审时。

12.2 测试驱动开发(测试优先开发)

在编程前,优先完成该段代码的设计用例和测试框架。

12.3 结对编程

两个程序员按着坐在一起共同协作进行软件构造活动。分为Driver(驾驶员)负费上和 Observer(观察员)进行评审。编程控制权可以转换。
好处:提高程序的质量、降低程序缺陷率、减少返工和修复成本。

12.4 代码集体所有权

每个人都对所有的程序负责,每个人都可以更改程序的任意部分。

13.代码设计

13.1 表驱动编程

将复杂决策包装为决策表,通过查表获取表信息的方法进行编程。

13.2 契约式设计(断言式设计)

如果一个函数或方法,在前置条件满足的情况下开始执行,完成后能够满足后置条件,那么这个函数或方法就是正确可靠的。
注:契约式两种编程方式:
异常:在代码开始执行时,检查前置条件是否满足,如果不满足就抛出异常。在代码执行完之后,再检查后置条件是否满足,不满足也抛出异常。
断言:Java 提供了断言语句:assert(Expression1):(Expression2)。
Expression1 为布尔表达式,为true 不拋异常,为 false 抛出"AssertionError: Expression2”异常例:assert(前置条件):(“异常的信息") assert(result > O):(“error! Result:”+result);

13.3 防御式编程

在于外界环境交互时,确保在外界发生错误时,保护方法内部不受损害。
注:异常和断言同上。

14. 软件测试

测试的目标是发现尽可能多的缺陷而不是所有缺陷

14.1 测试的目标

①向开发者和用户展示软件满足需求(有效性测试)②找出软件中的缺陷(缺陷测试)

14.2 三种软件测试的顺序

单元测试—>集成测试—>系统测试。

14.3 缺陷、错误、失败(2020)

缺陷:系统代码中存在的不正确的地方。(例如计算时存在除0可能)
错误:如果系统执行到缺陷代码,就可能使得执行结果不符合预期且无法预测,表现出来不稳定状态就称为错误。(例如对计算时存在除0可能的代码,一旦执行了除0操作,就会发生错误)
失败:错误的发生会使得软件的功能失效。(比如,系统某个功能输出不正确、异常终止、不符合时间或者空间的限制等)
关系:缺陷会一直存在,直到环境条件使得软件执行到了代码缺陷的地方,软件的运行就会出现错误,这个错误反映到整个系统以及与外界的交互上,就是失败。一般由缺陷导致错误导致失败。

14.4 软件测试的层次(依据测试对象划分)(2018、2021)

单元测试(测试一个单元接口):对程序单元进行正确性检验的测试工作。
集成测试(测试多个单元接口):通过大爆炸式的集成策略或者增量集成策略对系统的接口进行正确性检验的测试工作。增量式集成策略又分:
a.自顶向下集成:先集成和测试上层的模块,下层的模块使用伪装的具有相同接口的桩,然后不断加入下层模块。
b.自底向上集成:先集成和测试下层的模块,上层的模块使用伪装的相同接口的驱动来替换,然后不断加入上层模块。
C持续集成:尽早集成和频繁集成,即在开发之初就利用stub 开始集成和每次开发完成一些任务后就可以替换 stub 中的相应组件。
系统测试(测试全部单元接口):发生在集成测试之后,关注整个系统的行为,对整个系统的缺陷进行测试工作。

14.5 单元测试和集成测试的区别

①单元测试主要关注代码段内部的具体逻辑,用例要尽可能的验证代码逻辑的正确性
②集成测试主要关注测试单元间的组合,用例要选择能使单元间交互的用例

14.6 黑盒测试方法(2017)

基于规格的技术,将测试对象看成一个黑盒子,完全基于输入和输出数据来判定测试对象的正确性。

14.7 黑盒测试方法 (2017)

等价类划分:把所有可能的输入域划分成若干子集,然后从每一个子集中选取具有代表性的数据作为测试用例(有效等价类:对于程序的规格说明来说是合理的输入数据构成的集合,可以用于检验程序是否实现了规格说明中所规定的功能和性能。无效等价类:对于程序的规格说明来说是不合理的输入数据构成的集合,用于检验程序能否经受意外的考验。)
边界值分析:对等价类划分的补充,针对边界情况设计测试用例
决策表:用于设计复杂逻辑的测试用例
状态转换:用于处理输入输出与状态相关联的复杂测试对象。

14.8 白盒测试

基于代码的技术,将测试对象看作透明,按照测试对象内部的程序结构来设计测试用例进行测试。

14.9 白盒测试方法

  1. 语句覆盖:确保程序的每一行程序代码都至少执行一次。
  2. 条件覆盖:确保程序中每个判断的每个结果都至少满足一次。
  3. 路径覆盖:确保程序中每条独立的执行路径都至少执行一次。

14.10 白盒和黑盒测试的优缺点(2019)

白盒测试
优:①覆盖率较高 ②发现缺陷的数量较多。
缺:①测试开销大(效率低) ②不能检验需求规格。
黑盒测试
优:①测试效率高 ②可以检验需求规格。
缺:①覆盖率低 ②发现缺陷的数量较少。

14.11 白盒和黑盒测试的异同(2019、2022)

同:都是软件测试技术。
异:①黑白定义 ②黑白的具体方法 ③黑白的优缺点。

15. 软件维护与演化

15.1 软件维护四种类型

完善性维护:为了满足新需求,增加软件功能。
适应性维护:为了使软件适应新环境。
修正性维护:为了排除系统中的缺陷。
预防性维护:为了提高可维护性。
注:完善、适应、修正是基于变更类型而存在的,预防是基于软件维护的规律。

15.2 什么是软件演化生命周期模型(期末)

初始阶段:第一个版本的软件产品开发。
演化:对演化增量进行处理以保持软件产品的持续增值。
服务:用户使用,开发者维护。
逐步淘汰:用户仍使用,开发者不维护。
停止:用户不使用,开发者不维护。

15.3 什么是逆向工程,其作用是什么(期末)

分析目标系统,标识系统的部件及其交互关系,并且使用其他形式或者更高层的抽象(即在需求与设计层面)创建系统表现的过程。其作用是理解遗留软件并对其进行维护。

15.4 什么是再工程,其作用是什么

对遗留软件系统进行分析和重新开发,以利用新技术来改善系统或促进现存系统的再利用。其作用是通过修改软件来处理遗留软件。

15.5 逆向工程与再工程的关系

逆向工程关注点在于理解软件而不是修改软件;再工程关注如何修改软件而不会花费很大力气来理解软件。在处理遗留软件时,再工程之前通常都需要一个前导的逆向工程

16 软件开发过程模型

16.1 什么是软件生命周期模型(2019)

包含了软件从生产到报废的六个阶段:
软件需求工程
软件设计(1.软件体系结构设计 2.软件详细设计 3.人机交互设计)
软件实现/构造
软件测试
软件交付
软件维护

16.2 什么是软件过程模型(2020)

软件过程模型是对软件生命周期模型更为详细准确的描述,即进一步说明了各个阶段的任务对象等信息。同一个软件生命周期可以存在不同的软件过程模型。
注:软件生命周期模型只是界定了软件开发的不同阶段之间的顺序关系。

16.3 瀑布模型(文档驱动)

按照软件生命周期模型将软件开发活动组织为需求开发、软件设计、软件实现、软件测试、软件交付、软件维护等基本活动,并规定了他们自下而上,相互衔接的开发活动次序。
注:瀑布模型允许活动出现反复和迭代,严格线性顺序不是瀑布模型的主要特点。
缺点:
①对文档的期望过高。
②对开发活动的线性顺序假设。
③客户用户参与不够。
④里程碑粒度过粗
适用范围:
①需求非常成熟。
②所需技术非常成熟。
③复杂度适中。

16.4 增量迭代模型(需求驱动)(期末)

在项目早期界定项目的目标和范围,将后续开发活动组织为多个迭代、并行的瀑布式开发活动。
优点
①适用性好
②并行开发缩短了开发时间
③渐进交互加强了用户反馈,开发风险降低
缺点
①迭代的构件必须不破坏已构造好的系统,需要软件具有开放式的体系结构。
②需要完备、清晰的项目前景和范围。
适用范围:成熟稳定领域的大规模软件系统开发

16.5 原型模型(需求驱动)

在真正的产品构造前,通过给用户不完整的系统原型解决需求不确定的问题,并采用逐步求精的思想安排后续开发活动。原型模型分①演化式模型:即原型会成为产品的一部分。②抛弃式模型:原型不会出现在产品中。注:原型模型注重使用抛弃式。
优点:①渐进交互加强了用户反馈。②适用于新颖的领域。
缺点:①开发成本高。②舍不得抛弃原型,导致低质量。
适用范围:存在大量不确定性的新颖领域。

16.6 螺旋模型(风险驱动)

按照风险解决的方式来组织软件开发活动。
优点:降低风险
缺点:①开发成本高。2舍不得抛弃原型,导致低质量。③模型过于复杂,不利于管理
适用范围:高风险的大规模软件系统。

16.7 敏捷模型(2021)

不过度强调纪律,不过度强调计划、文档工具,重视个人能力以及与用户的交互。最为重要的敏捷思想是敏捷联盟宣言所声明的价值观:
个体和互动 高于 流程和工具
工作的软件 高于 详尽的文档
客户合作 高于 合同谈判
响应变化 高于 遵循计划
方法极限编程:极限利用简单、有效的方法解决问题。(就是什么最有效果就做什么)特点:方法众多,各有特点,除了共同的思想和原则之外,很难描述共同点,无法界定优缺点。
适用范围:适用于快速变化或者时间压力较大的项目。

16.8 软件能力成熟模型(CMM 模型)

可定义、评价软件开发过程的成熟度,并提供提高软件质量的指导。分为5 个成熟级别:①初始级 ②可重复级 ③已定义级 ④已管理级 ⑤优化级

16.9 能力成熟度模型集成(CMMI模型)

CMMI成熟度模型是一种综合的过程改善模型、既支持阶段性过程改善也支持连续性过程改善

二. 计算机网络

1. 概述

1.1 服务与协议

协议是“水平的”,即协议是控制对等实体之间通信的规则
服务是“垂直的”,即服务是由下层向上层通过层间接口提供的。并非在一个层内完成的全部功能都称为服务,只有那些能够被高一层看得见的功能才能称之为“服务”。

1.2 服务的三种类型

面向连接的服务和面向无连接的服务
面向连接服务:当通信双方通信时,要事先建立一条通信线路,该线路包括建立连接、使用连接和释放连接三个过程。
面向无连接服务:通信双方不需要事先建立一条通信线路。
②可靠服务和不可靠服务:
可靠服务:具有纠错、检错、应答机制,能保证数据正确、可靠地传送到目的地。
不可靠服务:不能保证数据正确,可靠的传送到目的地。
③应答和无应答服务。

1.3 OSI 七层模型(2021、期末A)

  1. 物理层(传输单位:bit):物理层的任务是透明传输比特流
  2. 数据链路层(传输单位:帧):将网络层传下来的IP数据报组装成帧
    具体功能包括:①组装成帧
    ②差错控制 ③流量控制 ④传输管理。
  3. 网络层(传输单位:数据报/IP分组):为分组交换网上的不同主机提供通信
    具体功能包括:①将传输层产生的报文段用户数据报封装成分组进行传送
    ②:选择合适的路由 ③差错控制 ④流量控制⑤拥塞控制。
  4. 传输层(传输单位:报文段/TCP 或用户数据报/UDP):负责主机中两个进程之间的通信
    具体功能包括:①差错控制 ②流量控制 ③质量服务
    ④数据传输管理。
  5. 会话层:管理主机间的会话进程(即建立、管理、终止会话)。
  6. 表示层:主要处理在两个通信系统交换信息的表现方式
    具体功能包括:①数据格式变换
    ②数据加密解密
    ③数据压缩恢复。
  7. 应用层:提供系统与用户的接口。

1.4 TCP/IP四层模型(2017)

  1. 网络接口层:物理层+数据链路层。将接收到的 IP分组发送到指定的物理网络
  2. 网际层:网络层
  3. 传输层:传输层
  4. 应用层:会话层+表示层+应用层:处理高级协议显示问题,编码和会话控制等问题。

1.5 五层模型(2016)

  1. 物理层:物理层
  2. 数据链路层:数据链路层。
  3. 网络层:网络层
  4. 传输层:传输层
  5. 应用层:会话层+表示层+应用层:处理高级协议,显示问题,编码和会话控制等问题。

1.6 TCP/IP(2018)

传输控制协议/网络协议,是一个协议族,主要由网络层IP协议和传输层TCP 协议组成。

2. 物理层

2.1 三种通信方式

  1. 单工(simple Transmission):单向信号只能在一个方向上传播。(收音机)
  2. 半双工(half-Duplex Transmission):信号可双向传播,但不能同时传播。(对讲机)
  3. 全双工(full-Duplex Transmission)(期末):信号可以同时在两个方向上传播。(电话)

2.2 物理层三种数据传输方式

  1. 电路交换(面向连接):在通信前建立一条被双方独占的物理通路
    优点:①通信时延小 ②实时性高 ③有序传输 ④避免冲突。
    缺点:①建立连接时间长 ②信道利用率低 ③灵活性差。
  2. 报文交换:以报文为数据交换的单位,交换节点采用存储转发的传输方式。
    优点:①无需建立连接 ②动态分配线路 ③线路利用率高。
    缺点:①转发时延 ②需要网络节点有较大的存储缓存空间。
  3. 分组交换(包含:①面向连接的虚电路,②无连接的数据报方式):采用存储转发的传输方式,将一个长报文分割为若干个较短的分组逐个传输。
    优点:①加速传输 ②简化了交换节点存储管理。
    缺点:①传输时延 ②存在失序、丢失、重复等现象。
    报文与分组的区别报文:发送的完整数据。分组:将报文分割成较短的分组。

2.3 面向连接的虚电路和无连接的数据报方式

虚电路的方式:通信前,在源主机和目的主机之间建立一条虚连接,分组通过该路径顺序传送到目的主机。(虚电路不是真的建立一条真实存在的物理连接)
数据报的方式:将报文分割为较短的分组,交换机根据转发表转发分组传送到目的主机。

2.4 物理层设备

①中继器:用于放大数字信号。
②集线器:多端口中继器
特点:物理层设备既不能隔离冲突域也不能隔离广播域。

2.5 物理层传输介质(期末)

①STP(屏蔽双绞线):抗电磁干扰能力强
②UTP(无屏蔽双绞线)

3. 数据链路层(LLC+MAC)

3.1 LLC逻辑链路控制子层(2019)

建立释放数据链路层的逻辑连接
提供与网络层的接口

3.2 MAC媒体访问控制子层

负责控制连接物理层的物理介质

3.3 数据链路层功能

为网络层提供服务
1.无确认的无连接;
2.有确认的无连接(不建立链路连接,但目的主机收到帧后需要袋送确认帧
3.有确认的面向连接(建立数据链路,传输数据,释放数据链路
链路管理
组帧
a.帧定界:确定帧的首部尾部等控制信息的界限。
b.帧同步:确定帧的开始位置和结束位置。
c.透明传输:不管数据是什么样的比特组合,都应该能够在链路上传送。
差错控制;用于确认所发数据帧是否被正确接受。
常见差错控制方式:①奇偶校验码 ②循环冗余码 ③海明码。
流量控制:由接收方控制发送方的数据流。
常见流量控制方式:①停止-等待流量控制 ②滑动窗口流量控制。
可靠传输:ARQ(自动重传请求):通过接收方请求发送方重传出错的数据帧来恢复出错帧
ARQ 本质上就是使用①确认帧②超时重传两种机制 )其中 ARQ 具体分为:
1.停止-等待协议:发送方传输一个帧后,必须等待对方的确认才能发送下一帧,若规定时间内未收到确认,则发送方超时、重传原始帧。
2.GBN(后退N帧协议):发送方发送完一个帧后,不是停下来等待确认帧,而是可以连续再发送若干个数据帧。如果此时收到了接收方的确认帧,那么发送方可以继续发送,如果某个帧出错,则接收方丢弃该帧及其所有的后续帧,发送方超时后重发出错帧及其后续帧。
3.SR(选择重传协议):发送方只重传出现差错的数据帧或者计时器超时的数据帧。接收方加大接收窗口以便接收发送序号不连续但未出现差错的数据帧,等重新收到出错帧的重传帧后一并提交给主机。
介质访问控制:①信道划分 ②随机访问 ③轮询访问。
a.信道划分介质访问控制
1.FDM(频分多路复用):将物理信道划分成多个子信道,每个子信道传输一种信号。
2. TDM(时分多路复用)(2016):将物理信道按时间划分成若干时间片,不同信号轮流使用
3.STDM(统计时分多路复用):根据终端实际需要进行分配时间片的时分多路复用
4. WDM(波分多路复用):光的频分多路复用
5.CDM(码分多路复用):既共享信道频率又共享时间
b.随机访问
1.纯ALOHA协议:不检测直接发送,没收到确认则随机等待一段时间重发
2. 时隙 ALOHA 协议:不检测直接发送,没收到确认则等待下一个时隙重发
3.CSMA 协议(装载侦听多路访问协议):有三种
① 1-坚持CSMA:闲则发送,忙则继续监听。
② p-坚持CSMA:闲则以p概率发送,1-p等待下一个时隙,忙则等待一个随机时间重新监听。
③ 非坚持CSMA:闲则发送,忙则等待一个随机时间重新监听。
4.CSMA/CD 协议(带冲突检测的装载侦听多路访问协议)(2016,2022):先听后发,边听边发,冲突停发,随机重发。发送前先检测总线是否有其他计算机在发送数据,没有则发送数据。并在发送数据的同时检测信道是否有冲突,若有则停发并等待一段时间重发。
5.CSMA/CA 协议(带冲突避免的 )(2019)(用于无线网):发送数据时广播告知其他节点,让其他节点在某段时间内不要发送数据,利用ACK 信号,对信道进行预约,以免出现碰撞。
c.轮询访问:令牌传递协议:在环形网络中,只有得到令牌的主机才能够发送数据。

3.4 WAN广域网

覆盖范围很广的长距离网络,由具有存储转发功能的结点交换机连接链路组成。采用交换技术

3.5 LAN局域网

某一较小区域内由多台计算机相互连成的计算机网络。采用广播技术

3.6 广域网相关协议

PPP(点对点协议)(2016、2020)
面向字节的数据链路层协议,直接连接在两个节点的链路上,用来通过拨号或者专线方式建立点对点连接发送数据。
HDLC(高级数据链路控制协议):面向比特的数据链路层协议。提供了编号和确认机制,能够提供可靠传输。

3.7 数据链路层设备及特点

网桥:用于连接多个以太网(局域网)。
1.透明网桥(选择的不是最佳路由):按照自学习算法填写转发表,按转发表转发。
2.源路由网桥(选择的是最佳路由):先发送发现帧,按返回结果转发。
交换机:多端口网桥
特点:数据链路层设备能够隔离冲突域不能隔离广播域,都按 MAC地址转发

3.8 交换机工作机制(2022)

交换机是一种基于 MAC地址识别,能完成封装转发数据包功能的网络设备。交换机可以“学习”MAC地址,并把其存放在内部地址表中,通过在数据帧的始发者和目标接收者之间建立临时的交换路径,使数据帧直接由源地址到达目的地址。

4. 网络层

4.1 地址类型(2019)

在这里插入图片描述

4.2 路由算法

静态路由:手动配置路由。
2 动态路由:通过路由交换的信息来构造路由表。
a. DVP/距离-向量路由算法(最常用的一种:RIP):所有结点都定期地将他们整个路由选择表传送给所有与之直接相邻的结点。
b.LSP/链路状态路由算法(最常用的一种:OSPF):主动测试所有邻接结点的状态并定期将链路状态传播给所有其他结点。

4.3 DVP 和LSP 的区别(RIP 和 OSPF的区别)(2018、2021)

①RIP 属于距离向量协议,OSPF 属于链路状态协议
②RIP 与相邻路由器交换所有路由信息,OSPF 与所有路由器交换相邻链路信息;
③RIP定时进行信息交换,OSPF 只在有更新时交换更新数据;
④RIP 存在**“坏消息传的慢”,OSPF 不存在此类问题;
⑤使用OSPF,所有路由器都将得到一张
全网拓扑**,RIP 不是。

4.4 IGP(内部网关协议)

自治系统内部使用的网关协议。(包括 RIP 和 OSPF)

4.5 EGP(外部网关协议)

自治系统之间使用的网关协议。(包括 BGP4(BGP))

4.6 RIP(路由信息协议)(2018、2022)

是基于距离向量算法的路由协议,利用跳数来作为计量标准。在整宽、配置和管理方面要求较低,主要适合于规模较小的网络中。

4.7 OSPF(开放式短路径优先)(2019)

基于链路状态路由算法,使用IP,与全部路由器交换相邻节点链路状态。

4.8 OSPF 的基本工作过程(2016)

①OSPF 路由器相互发送 HELLO报文,建立邻居关系
②邻居路由器之间相互通告自身的链路状态信息(LSA)
③经过一段时间的LSA 泛洪后所有路由器形成统一的 LSDB
④路由器根据 SPF 算法,以自己为根计算最短生成树,形成路由转发信息

4.9 BGP(边界网关协议)(2020)

在不同自治系统之间交换路由信息的协议。

4.10 BGP 的基本工作过程

①每一个自治系统都要选择至少一个路由器作为BGP 发言人
②不同自治系统的BGP发言人都过建立 TCP 连接交换不同自治系统之间的路由信息

4.11 静态路由和动态路由算法优缺点

①静态路由:优点:简单,开销小。缺点:不能适应网络状态的变化。
②动态路由:优点:能适应网络状态的变化。缺点:复杂、开销大。

4.12 静态路由的应用场景(2017)

①网络本身结构极为简单,使用静态路由足够应付。
②出于安全性方面的考量,有时会使用静态路由。

4.13 NAT(网络地址转换)(2018、2022)

将网络内部的私有IP地址转换为公有IP地址以节省IP地址的方法。只能一对一映射。

4.14 PAT(端口地址转换)

将本地网上的多个设备映射到单一的公共IP地址

4.15 子网掩码(subnet mask)

通过跟IP地址进行与操作,将IP地址划分成网络地址和主机地址两个部分

4.16 CIDR(无类别域间路由)(20期末)

使用各种长度的网络前缀来代替分类地址中的网络号子网号的一种子网划分方式
例:128.14.32.0/20

4.17 ARP(地址解析协议)(2017)

源主机在向目标主机发送IP包前,通过广播ARP请求包,将目标主机的IP地址映射为 MAC地址

4.18 ARP 协议的工作原理

源主机在向目标主机发送IP 包前,如果源主机不知道目标主机的MAC地址,源主机就广播一个 ARP 请求包,请求包中填有目标主机的IP,以太网中的所有计算机都会接收这个请求,而正常的情况下只有目标主机会给出 ARP 应答包,包中就填充上了目标主机的 MAC地址,并回复给源主机。源主机得到 ARP 应答后,将目标主机的MAC地址存入本机 ARP 高速缓存,便于下次使用。

4.19 RARP(反向地址转换协议)(2016)

用于将局域网中的某个主机的物理地址转换为IP地址。

4.20 RARP协议工作原理

①源主机发送一个本地的 RARP广播,在此广播包中,声明自己的 MAC地址并且请求任何收到此请求的 RARP服务器分配一个IP 地址;
②本地网段上的 RARP服务器收到此请求后,检查其 RARP列表,查找该 MAC地址对应的IP地址;
③如果存在,RARP服务器就给源主机发送一个响应数据包并将此 IP地址提供给源主机使用;如果不存在,RARP服务器对此不做任何的响应
④源主机如果收到从 RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到 RARP服务器的响应信息,表示初始化失败

4.21 DHCP(动态主机配置协议)(2020)

用于给网路中的主机动态分配 IP地址

4.22 DHCP协议工作原理

寻找服务器:DHCP客户端广播"DHCP 发现消息”,寻找网络中的DHCP服务器。
提供IP地址:DHCP 服务器收到“DHCP 发现消息”后,就广播"DHCP 提供消息”,包括提供客户端的IP地址和相关配置信息。
请求分配 IP:DHCP 客户端收到"DHCP 提供消息”,如果接收客户端提供的相关参数,则广播“DHCP 请求消息"向 DHCP服务端请求使用该IP 地址。
确认分配:DHCP 服务端收到”DHCP 请求消息后”,广播"DHCP确认消息”,将IP 地址分配给DHCP 客户端。

4.23 RARP 和DHCP的区别

①RARP只能实现简单的从 MAC地址到IP地址的查询工作,RARP服务器上的MAC地址和IP地址必须事先静态配置好。
②DHCP 可以实现除静态分配以外的动态IP地址分配以及IP地址租期管理等复杂功能。

4.24 ICMP(网络控制报文协议)(2017)

用来给主机或路由器报告差错和异常情况。

4.25 路由聚合

一组路由汇聚为一个单个的路由广播,用于:①缩短路由表尺寸 ②支持不连续子网

4.26 路由环路

用户的数据包不停在网络上循环发送,始终到达不了目的地,严重浪费网络资源。

4.27 路由环路解决方法(2015)

定义最大跳数(Defining a Maximum一般为15),超过最大跳数则抛弃报文。
路由毒害(Route Poisoning):当路由信息的跳数超过定义最大跳数时,不是直接从路由表中删除该路由信息,而是向相邻路由发送相关路由信息,通知其他路由该路径失效。
水平分割 (Split Horizon)(2016):路由器从某个接口接收到的更新信息不允许再从这个接口发回去。
抑制计时器(Hold-Down-Timers):如果一条路由更新的跳数大于路由表已记录的该路由的跳数,启动计时器,在计时器超时前,路由器不再接收关于这条路由的更新信息。

4.28 网络层设备

路由器:既能隔离冲突域又能隔离广播域。

5. 传输层(端到端通信)

5.1 Socket (套接字)(期末)

主机ip地址端口号组成。唯一标识了某台主机上的某个应用进程

5.2 端口(2019)

标识和区分某一台主机上的不同应用进程。

5.3 TCP(2017)

传输控制协议,提供一种面向连接的,可靠的字节流服务

5.4 UDP(15期末)

用户数据报协议,提供面向事务的简单不可靠信息传送服务

5.5 TCP 和UDP 协议的区别(2015)

① TCP:面向连接 UDP:面向无连接
② TCP:可靠交付 UDP:不可靠交付
③ TCP:传输开销大,报文头部大 UDP:传输开销小,报文头部小

5.6 TCP 建立的连接、虚电路建立的连接、电路交换三者区别

①TCP 建立的连接只是在TCP的TCB(传输控制块)中存储了目的地址端口信息
②虚电路建立的连接指:通信前,在源主机和目的主机之间建立一条虚连接分组通过该路径顺序传送到目的主机。
③电路交换是建立真实存在的物理连接。

5.7 TCP 的三种可靠传输机制

①TCP 数据编号:建立连接时协定初始编号,每一个字节对应一个编号,保证数据有序提交应用层;
②TCP 数据确认:对接收到的数据的最高序号表示确认。
③TCP 重传机制:设置计时器超时重传。

5.8 TCP 的拥塞控制四种方法

①慢开始
②拥塞避免
③快重传
④快恢复

5.9 TCP 三次握手过程 (2018、2021)

①客户端向服务端发送请求连接报文段,请求建立 TCP连接。
②服务端收到该请求连接报文段后,发回确认报文段,确认报文段不会携带数据。
③客户端收到确认报文段后,向服务端发送确认报文段,TCP 连接建立完成。

5.10 TCP 三次握手原因 (2018、2021)

①为了保证服务端能够接收到客户端的信息并能做出正确的应答而进行前两次握手;
②为了保证客户端能够接收到服务端的信息并能做出正确的应答而进行后两次握手。

5.10 TCP 四次挥手过程

①客户端向服务端发送一个 FIN 报文释放连接,用来关闭客户端到服务端的数据传送。
②服务端收到这个 FIN,发送ACK确认。客户端到服务端方向的连接释放,TCP 处于半关闭状态。客户端无法向服务端发送数据,但服务端仍然可以向客户端发送数据。
③服务端向客户端发送一个 FIN 报文释放连接,用来关闭服务端到客户端的数据传送。
④客户端发送ACK,并等待2MSL,若客户端在 2MSL 内未收到服务端重发的 FIN 报文,则客户端在 2MSL 后关闭。TCP 连接释放完成。

5.10 TCP 四次挥手原因

当客户端请求释放连接时,服务端发回 ACK 确认,但是服务端并不一定也要关闭 TCP连接,即服务端不一定会马上关闭 Socket,所以会将 ACK 报文和 FIN报文分开发送。

5.11 TCP 最后一次握手客户端要等待2MSL(最长报文寿命)时间的原因

若客户端发送最后一个 ACK 丢失,则服务端会在经过 MSL后重发 FIN 报文,若客户端此时已经关闭,则无法重发 ACK,服务端无法进入关闭状态。

6.应用层

6.1 DNS(域名系统)(2018、2022)

域名转换成 IP 地址

6.2 域名解析过程

主机构造 DNS 请求报文以UDP 的方式发送本地域名服务器,若查询成功则返回对应IP地址,如果主机所询问本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以 DNS客户的身份向其他域名服务器继续发出查询请求报文

6.3 FTP(文本传输协议)(2018)

运行在TCP 之上,用于在异构网络中任意计算机之间传送文件

6.4 TFTP(一般文件传输协议)

运行在UDP之上,用于在客户端服务端之间进行简单文件传输

6.5 SMTP(简单邮件传输协议)(2017)

规定了两个相互通信的SMTP 进程之间如何交换信息

6.6 POP3(邮局版本协议3)

支持客户端远程管理在服务器上的电子邮件,邮件发送到服务器上,客户端调用邮件客户机程序以连接服务器,并下载所有未阅读的电子邮件。

6.7 URL(统一资源定位符)

标识万维网上的各种文档。每个文档都具有唯一的URL。

6.8 HTTP(超文本传输协议)(2017、2019)

使用TCP 连接进行可靠的传输,客户端与服务端交互的协议。

6.9 HTML(超文本标记语言)(2020)

文档结构标记语言,使用约定的标记对页面上的各种信息进行描述。

6.10 SNMP(简单网络管理协议)

支持网络管理系统

7.补充

7.1 STP(生成树协议)(期末)

该协议可应用于计算机网络中树形拓扑结构建立,消除网络中的环路,解决二层交换网络中由于环路引起的广播风暴的问题。

7.2 FDDI 环(光纤分布式数据接口)

令牌环形网络的一种。

7.3 VLAN(虚拟局域网)

网络中的站点不拘泥于所处的物理位置,而可以根据需要灵活地加入不同的逻辑子网中的一种网络技术。

7.4 IPCP(网际协议控制协议)

用于建立、配置和检测数据链路连接的连接控制协议 LCP 以及用于建立和配置不同网络层协议网络控制协议 NCP协议簇

7.5 IGMP(网络组管理协议)

一个组播协议,运行在主机组播路由器之间,用于将一个IP 包拷贝给多个主机。

7.6 ASDL(非对称数字用户线路)(2019)

属于DSL技术的一种,亦可称作非对称数字用户环路。采用频分复用技术把电话线分为电话、上行、下行三个相对独立信道,使得用户可以边打电话边上网。

7.7 ISP(期末)

互联网服务提供商。向广大用户综合提供互联网接入业务、信息业务、和增值业务的电信运营商。

7.8 CHAP(20期末)

挑战握手认证协议

7.9 默认路由配置命令(2020、2021)

格式:
Router(config) #ip route {网络号} {子网掩码}{下一跳 ip/出站接口}
例如:
ip route 0.0.0.0 0.0.0.0 172.28.10.5
作用:默认路由是一种特殊的静态路由,当路由表与数据报目的地址没有匹配的表项时,数据报将根据默认路由条目进行转发。默认路由在某些时候是非常有效的,例如在末梢网络中,默认路由可以大大简化路由器的配置,减轻网络管理员的工作负担。

7.10 拓扑结构

总线型拓扑
优点:建网容易,增减节点方便,节省线路
缺点:重负载时通信效率不高,处处故障敏感
星形网络
优点:便于集中管理
缺点:成本高,中间节点对故障敏感
环形网络:令牌环局域网
网状形网络
优点:可靠性高
缺点:控制复杂,线路成本高

7.11 简述 OSI 模型和 TCP/IP 的相似和不同?(15期末)

相似:
①两者都有层次,网络专业人员都需要知道二者,通过分层方案完成具体实现。
②两个都有应用层,尽管他们有不同的服务。
③两个都有相同的传输层和网络层。
④都采用了分组交换的技术,都是基于报文进行交换的。
不同:
①TCP/IP 只有4层,而OSI 有7层。
②TCP/IP 协议是互联网发展的标准,在实际使用中。而 OSI模型只是作为学习的指南。

7.12 IPv4 和IPv6 的区别(16期末)

① Ipv4 占有4位(32 的地址),Ipv6 占有6位(128位地址)
② Ipv6 的地址空间大于Ipv4
③ Ipv6 的路由表小于 Ipv4
④ Ipv6 的安全性更强

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值