信息安全设计第11周预习报告

embedded/2024/11/24 17:43:58/
aidu_pl">

文章目录

  • 密码系统设计
      • 学习内容
      • AI 对学习内容的总结(1分)
        • 要求
        • 总结
          • 1. 网络基础
          • 2. 套接字(Sockets)
          • 3. 客户端连接
          • 4. 数据传输
          • 5. 并发处理
          • 6. 实例:敲门协议服务器
          • 7. 实例:HTTP客户端
          • 8. 错误处理
      • 9. 端口和协议
          • 10. 工具和函数
      • 对 AI 总结的反思与补充(2分)
        • 要求
        • 反思与补充
      • 1. 网络通信的复杂性
      • 2. 异步编程
      • 3. 安全性
      • 4. 性能优化
      • 5. 实际案例和练习
      • 6. 错误处理的最佳实践
      • 7. 跨平台兼容性
      • 8. 网络协议的深入理解
      • 9. 代码的健壮性和可维护性
      • 学习思维导图(2分)
        • 要求
        • 思维导图
      • 基于 AI 的学习(2分)
        • 要求
        • 学习内容
      • 学习实践过程遇到的问题与解决方式(AI 驱动,优先使用AI工具解决问题)(2分)
      • 作业提交要求(1分)

密码系统设计

推荐VSCode中安装Markdown插件和markdown pdf 插件完成作业

学习内容

  • Head First C 嗨翻 C 语言 第11章
  • 课程 mindmap

AI 对学习内容的总结(1分)

要求
  • 让AI(kimi,元宝等)阅读学习内容并进行总结,教材内容可以使用微信读书或者云班课电子教材
总结

第11章《sockets and networking》(套接字和网络)主要介绍了如何在C语言中使用套接字(sockets)进行网络编程,以及如何创建客户端和服务器程序来通过网络进行通信。以下是本章内容的总结:

1. 网络基础
  • 服务器和客户端:网络通信需要两个程序,一个作为服务器(server),另一个作为客户端(client)。
  • 协议(Protocol):客户端和服务器之间的结构化对话规则,比如HTTP(超文本传输协议)和IKKP(互联网敲门协议)。
2. 套接字(Sockets)
  • 套接字创建:使用socket()函数创建套接字。
  • 绑定(Bind):服务器使用bind()将套接字绑定到一个端口。
  • 监听(Listen):服务器使用listen()开始监听端口,等待客户端连接。
  • 接受(Accept):服务器使用accept()接受客户端的连接请求。
  • 通信(Begin Talking):一旦接受连接,服务器和客户端就可以开始通过套接字进行通信。
3. 客户端连接
  • 连接远程端口:客户端使用服务器的IP地址和端口号创建连接。
  • 域名系统(DNS):客户端可以使用getaddrinfo()函数将域名解析为IP地址。
4. 数据传输
  • 发送数据:使用send()函数通过套接字发送数据。
  • 接收数据:使用recv()函数从套接字接收数据。
5. 并发处理
  • 多客户端处理:服务器可以通过fork()创建子进程来同时处理多个客户端的连接。
6. 实例:敲门协议服务器
  • 本章通过一个敲门笑话服务器(Knock-Knock Server)的例子,展示了如何创建一个简单的服务器,该服务器接受客户端的连接,并按照敲门协议进行交互。
7. 实例:HTTP客户端
  • 介绍了如何编写一个简单的HTTP客户端,用于从Web服务器下载页面内容。
8. 错误处理
  • 强调了在网络编程中检查系统调用返回值的重要性,以便正确处理网络错误。

9. 端口和协议

  • 讨论了端口的使用,包括如何选择端口号以及如何避免与已知服务的端口冲突。
10. 工具和函数
  • 介绍了一些在网络编程中常用的C语言工具和函数,如error()函数用于错误处理,say()函数用于发送数据。

通过本章的学习,读者应该能够理解网络通信的基本原理,掌握如何在C语言中使用套接字进行网络编程,并能够创建简单的客户端和服务器程序。

对 AI 总结的反思与补充(2分)

要求
  • AI总结的问题
  • 自己的补充
反思与补充

总结已经涵盖了第11章的主要内容,但为了确保全面性和深度,以下是一些反思和补充:

1. 网络通信的复杂性

  • 网络编程不仅仅是关于创建套接字和发送/接收数据,还涉及到对网络延迟、断线重连、数据传输的可靠性和安全性等问题的处理。这些内容可能在章节中没有详细讨论,但在实际的网络编程中非常重要。

2. 异步编程

  • 在处理多个客户端时,除了使用fork()创建子进程外,还可以使用异步编程模型,如事件驱动或非阻塞I/O。这些方法可以在不创建新进程的情况下处理多个连接,提高服务器的效率和可扩展性。

3. 安全性

  • 网络安全是一个重要的议题,包括使用SSL/TLS加密通信、防止SQL注入、XSS攻击等。这些安全措施在本章中可能没有提及,但在实际开发中是必不可少的。

4. 性能优化

  • 网络应用的性能优化,包括减少延迟、提高吞吐量和负载均衡,这些内容可能在章节中没有涉及,但在开发高性能网络应用时需要考虑。

5. 实际案例和练习

  • 章节中提供了敲门协议服务器和HTTP客户端的例子,但实际应用中可能需要更复杂的案例来练习和巩固所学知识。例如,可以设计一个聊天服务器、文件传输服务器等。

6. 错误处理的最佳实践

  • 错误处理是网络编程中的一个重要部分,除了检查系统调用的返回值外,还应该包括日志记录、异常处理和优雅地关闭连接等。

7. 跨平台兼容性

  • 在不同的操作系统上进行网络编程时,需要考虑代码的跨平台兼容性。例如,不同系统对套接字API的支持可能有所不同。

8. 网络协议的深入理解

  • 对于网络协议的深入理解,如TCP/IP协议栈的工作原理,可以帮助开发者更好地调试和优化网络应用。

9. 代码的健壮性和可维护性

  • 在编写网络应用时,代码的健壮性和可维护性同样重要。这包括代码的模块化、清晰的接口设计和文档编写。

通过这些反思和补充,可以更全面地理解网络编程的复杂性和挑战,以及在实际开发中可能需要考虑的额外因素。

学习思维导图(2分)

要求
  • Mermaid 代码与截图(参考Mermaid MindMap语法)或者提交思维导图链接(如果使用线上编辑器,推荐processon,xmind,…)
思维导图

下面是个简单mermaid的思维导图,你可以根据你自己的需求修改

aid">mindmaproot((密码系统设计第一周))教材graph TDA[套接字和网络]A -->|1. 网络基础| B[服务器和客户端]A -->|2. 套接字操作| C[套接字操作]A -->|3. 数据传输| D[数据传输]A -->|4. 并发处理| E[并发处理]A -->|5. 实例| F[实例]A -->|6. 错误处理| G[错误处理]A -->|7. 端口和协议| H[端口和协议]A -->|8. 工具和函数| I[工具和函数]A -->|9. 反思与补充| J[反思与补充]B -->|服务器| B1[监听和接受连接]B -->|客户端| B2[发起连接]C -->|1| C1[创建套接字]C -->|2| C2[绑定(Bind)]C -->|3| C3[监听(Listen)]C -->|4| C4[接受(Accept)]C -->|5| C5[通信(Begin Talking)]D -->|1| D1[发送数据:send()]D -->|2| D2[接收数据:recv()]E -->|1| E1[使用fork()处理多个客户端]F -->|1| F1[敲门协议服务器]F -->|2| F2[HTTP客户端]G -->|1| G1[检查系统调用返回值]G -->|2| G2[日志记录和异常处理]H -->|1| H1[选择端口号]H -->|2| H2[避免端口冲突]I -->|1| I1[error()函数]I -->|2| I2[say()函数]J -->|1| J1[网络通信的复杂性]J -->|2| J2[异步编程]J -->|3| J3[安全性]J -->|4| J4[性能优化]J -->|5| J5[实际案例和练习]J -->|6| J6[错误处理的最佳实践]J -->|7| J7[跨平台兼容性]J -->|8| J8[网络协议的深入理解]J -->|9| J9[代码的健壮性和可维护性]课件网络空间安全密码与密码系统法律法规与标准密码应用与密评实践gitee(github)opensslgmssl

上面mermaid实际效果,vscode中可以预览:
在这里插入图片描述

基于 AI 的学习(2分)

要求
  • 至少找到自己理解不是太好 2 个概念,让 AI 对自己进行苏格拉底提问
  • 参考下面提示语或者使用 AI Agent

提示词:“我在学习XXX知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”

  1. 核心是要求AI工具:“请你以苏格拉底的方式对我进行提问”
  2. 然后AI工具就会给你提问,如果不知道问题的答案,可以反问AI:“你的理解(回答)是什么?”
  3. 如果你觉得差不多了,可以先问问AI工具:“针对我XXX知识点,我理解了吗?”
  4. AI工具会给出它的判断,如果你也觉得自己想清楚了,可以最后问AI工具:“我的回答结束了,请对我的回答进行评价总结”,让它帮你总结一下。
学习内容

me

我在学习套接字和网络相关知识,请你以苏格拉底的方式对我进行提问,一次一个问题

ai

当然可以,让我们开始吧。首先,你能告诉我什么是套接字(socket)吗?

me

套接字是网络编程的一个知识点。至于套接字在网络编程中扮演什么角色,不太清楚。

ai

没关系,我们可以一起探讨。套接字是一种通信端点,它允许程序在网络中发送和接收数据。那么,你能想到为什么我们需要在程序中使用套接字吗?

me

通信的过程需要一个支点?

ai

是的,你的比喻很形象。套接字就像是通信过程中的一个“支点”,它提供了一个点对点的通信渠道。那么,你能描述一下在网络通信中,客户端和服务器是如何通过套接字进行对话的吗?

me

通过握手协议吗?

ai

接近了,但“握手协议”通常指的是特定的协议,如TLS/SSL握手,用于在通信双方之间建立安全连接。在网络通信中,客户端和服务器通过套接字使用一系列标准化的协议来对话,这些协议定义了数据如何被发送和接收。你能告诉我,客户端和服务器在开始使用套接字通信之前,需要进行哪些步骤吗?

me

需要先建立连接?

ai

正是如此,客户端和服务器在开始通信之前确实需要建立连接。服务器通常会先监听(listen)某个端口,等待客户端的连接请求。一旦客户端发起连接请求,服务器就接受(accept)这个连接,从而建立起一个通信通道。接下来,我想问问你,你知道这个建立连接的过程通常遵循哪个著名的三步模型吗?

me

建立连接的过程通常遵循的是“三次握手”(Three-way Handshake)模型。这是TCP(传输控制协议)用于在两个网络实体之间建立可靠连接的标准化过程。让我详细解释一下这三次握手:

  1. 第一次握手(SYN)

    • 客户端选择一个初始序列号(ISN,Initial Sequence Number),并将SYN标志位设为1,发送给服务器。
    • 客户端进入SYN_SENT状态,等待服务器确认。
  2. 第二次握手(SYN-ACK)

    • 服务器收到客户端的SYN请求后,需要确认客户端的SYN(即发送ACK),同时自己也发送一个SYN请求。
    • 服务器将ACK标志位和SYN标志位都设为1,并将确认序列号(Acknowledgement Number)设置为客户端的ISN加1,同时选择自己的一个初始序列号,发送给客户端。
    • 服务器进入SYN_RCVD状态。
  3. 第三次握手(ACK)

    • 客户端收到服务器的SYN-ACK包后,会发送一个确认包,ACK标志位设为1,序列号为服务器的ISN加1,确认序列号为服务器的ISN加1。
    • 客户端和服务器进入ESTABLISHED状态,完成三次握手,开始正常通信。

这个过程确保了双方都准备好进行数据传输,并且能够确认对方的接收能力。三次握手完成后,客户端和服务器就可以开始通过套接字发送和接收数据了。

学习实践过程遇到的问题与解决方式(AI 驱动,优先使用AI工具解决问题)(2分)

    1. 理解套接字概念
      问题:套接字的概念可能比较抽象,难以理解其在网络通信中的具体作用。
      解决方案:通过实际的网络通信例子和模拟实验来理解套接字作为通信端点的角色。使用在线教程和视频,观察套接字如何在客户端和服务器之间建立连接。
    1. 三次握手的详细过程
      问题:三次握手的具体细节难以记忆,容易混淆。
      解决方案:制作或打印三次握手的流程图,并通过编写代码实现TCP连接来加深理解。
    1. 套接字编程中的API使用
      问题:套接字编程涉及多个系统调用和API,容易忘记或混淆。
      解决方案:实践是最好的老师。通过编写实际的客户端和服务器程序来熟悉这些API。同时,制作备忘录或使用在线文档作为参考。
    1. 错误处理
      问题:网络编程中错误处理尤为重要,但初学者可能不知道如何处理各种网络错误。
      解决方案:学习如何检查系统调用的返回值,并了解常见的网络错误及其含义。编写代码时,加入错误处理逻辑,并学会使用日志记录错误信息。
    1. 异步编程和并发
      问题:处理多个客户端连接时,如何有效地管理并发和异步操作。
      解决方案:学习多线程和多进程编程,以及事件驱动模型。实践使用select、poll、epoll等I/O多路复用技术。
    1. 网络延迟和不稳定性
      问题:网络通信可能受到延迟和不稳定因素的影响,导致数据传输问题。
      解决方案:学习TCP重传机制、流量控制和拥塞控制等网络协议特性。在代码中实现超时重试和数据确认机制。
    1. 安全性问题
      问题:网络通信容易受到攻击,如中间人攻击、数据泄露等。
      解决方案:学习使用SSL/TLS等加密协议保护数据传输。了解常见的网络安全攻击和防御策略。
    1. 性能优化
      问题:随着用户数量增加,如何提高网络应用的性能和响应速度。
      解决方案:学习性能分析工具,如Wireshark,来监控和优化网络流量。使用负载均衡和缓存技术来提高性能。
    1. 跨平台兼容性
      问题:不同操作系统的网络API可能存在差异。
      解决方案:使用跨平台的网络库,如Boost.Asio,或者仔细阅读文档,了解不同平台之间的差异,并进行适当的代码适配。
    1. 实际应用开发
      问题:理论知识和实际应用之间存在差距。
      解决方案:参与实际项目开发,或者自己动手开发一些小项目,如聊天应用、文件共享服务等,以实践所学知识。

作业提交要求(1分)

  1. 提交Markdown 文件,文档命名“学号姓名《密码系统设计》第X周.md”
  2. 提交Markdown 文件转为 PDF,文档命名“学号姓名《密码系统设计》第 X 周.pdf”
  3. 提交代码托管链接(可选):学号姓名 gitee(github) 链接
  4. 内容质量高有加分

http://www.ppmy.cn/embedded/140166.html

相关文章

现代密码学

概论 计算机安全的最核心三个关键目标(指标)/为:保密性 Confidentiality、完整性 Integrity、可用性 Availability ,三者称为 CIA三元组 数据保密性:确保隐私或是秘密信息不向非授权者泄漏,也不被非授权者使…

信号signal

信号,signal 信号是一种软件中断机制,基于该机制能实现进程间通信,故信号是实现进程通信的一种方式。 信号由内核线程或者用户线程发起生成,例如,SIGINT 信号通常由用户通过按下 CtrlC 产生。 内核中会保存每个进程的…

安宝特方案 | AR助力紧急救援,科技守卫生命每一刻!

在生死时速的紧急救援战场上,每一秒都至关重要!随着科技的发展,增强现实(AR)技术正在逐步渗透到医疗健康领域,改变着传统的医疗服务模式。 安宝特AR远程协助解决方案,凭借其先进的技术支持和创新…

Windows上杀掉指定端口的进程(批处理脚本方式)

前言 在Windows操作系统中,有时我们可能需要停止占用特定端口的程序,例如当您想要启动一个服务却发现所需端口已被其他程序占用时。手动查找并终止这些进程可能既耗时又容易出错。为了简化这一过程,我们可以编写一个批处理脚本来自动完成这项…

性能监控利器:Ubuntu 22.04 上的 Zabbix 安装与配置指南

简介 今天我们来聊聊如何在 Ubuntu 22.04 上安装和配置 Zabbix。我们会用到 PostgreSQL 作为数据库后端,Nginx 作为 Web 服务器,并用 Let’s Encrypt SSL 证书来保驾护航。 什么是 Zabbix? Zabbix 是一个开源的网络监控和管理解决方案&…

MacOS通过VMware Fusion安装windows 11问题汇总

环境 虚拟机,VMware Fusion 13.6.1本地机器,ARM芯片的Mac,系统版本14.5Windows系统镜像,Window11 ARM 64 bit 安装卡在WiFi连接界面 适合我本地环境的解决步骤为: 1、系统设置网络共享 我开启的是en5,这…

ArcGIS 10.2软件安装包下载及安装教程!

今日资源:ArcGIS 适用系统:WINDOWS 软件介绍:ArcGIS是一款专业的电子地图信息编辑和开发软件,提供一种快速并且使用简单的方式浏览地理信息,无论是2D还是3D的信息。软件内置多种编辑工具,可以轻松的完成地…

如何理解 TypeScript 中命名空间与模块?两者都有那些区别?如何更好的应用?

在 TypeScript 中,命名空间(Namespace)和模块(Module)是两种不同的代码组织方式,用于组织和管理代码结构,避免命名冲突和提高可维护性。虽然它们都可以将代码划分为不同的逻辑单元,但…