当前位置: 首页 > news >正文

每日八股文7.1

每日八股-7.1

  • 网络
    • 1.能说说 TCP 报文头部都包含哪些关键字段吗?
    • 2.TCP 是如何确保数据传输的可靠性的?你能详细谈谈吗?
    • 3.你能解释一下 TCP 滑动窗口是如何设计的?它主要解决了什么问题?
    • 4.TCP 协议的拥塞控制是如何实现的?你能详细说说它的过程吗?
    • 5.在 IP 地址 10.100.122.2/24 中,斜杠后面的数字 24 代表什么意思?
    • 6.什么是 SQL 注入攻击?应该如何避免?

网络

1.能说说 TCP 报文头部都包含哪些关键字段吗?

在这里插入图片描述

TCP 头部包含了不少重要的字段。主要有源端口号和目的端口号,它们都是 16 位的,用来标识发送方和接收方的应用程序。然后是 32 位的序列号和 32 位的确认应答号,这两个字段对于保证数据的可靠性和顺序性非常关键。还有一些 控制位,比如 SYN 用于发起连接,ACK 用于确认,FIN 用于关闭连接,RST 用于重置连接等等。此外,头部还包括 4 位的首部长度,16 位的窗口大小用于流量控制,16 位的校验和用于数据完整性校验,以及一些可选字段。

2.TCP 是如何确保数据传输的可靠性的?你能详细谈谈吗?

TCP 为了保证数据传输的可靠性,采取了一系列关键措施。首先,在连接建立阶段,TCP 通过三次握手来确保双方都具备正常的发送和接收能力,并且能够防止旧的连接请求被误用。其次,在数据传输阶段,每个 TCP 报文都会被分配一个序列号,接收方可以根据序列号对乱序到达的数据包进行排序。同时,接收方会发送确认应答(ACK)来告知发送方已经成功接收到了哪些数据。

如果发送方在一定时间内没有收到某个数据包的确认应答,就会触发超时重传机制,重新发送丢失的数据包。另外,如果发送方连续收到三个相同的确认应答(冗余 ACK),发送方会立即进行快速重传,而无需等待超时。为了避免发送方发送过快导致接收方处理不过来,TCP 引入了流量控制机制,通过滑动窗口来限制发送方发送数据的速率。最后,为了避免网络出现拥塞,TCP 还实现了拥塞控制机制,通过慢启动、拥塞避免、拥塞发生和快速恢复等算法来动态调整发送速率,确保网络不会过载,从而保证数据的可靠传输。

3.你能解释一下 TCP 滑动窗口是如何设计的?它主要解决了什么问题?

TCP 的滑动窗口机制在发送方和接收方的内核中都维护着一个缓冲区,并且在这个缓冲区上定义了一个窗口。对于发送方来说,发送窗口的大小决定了在没有收到确认应答之前,可以连续发送的最大数据量。有了发送窗口,发送方就不需要每发送一个数据包就等待确认,可以批量发送,从而大大提高了发送效率。

对于接收方来说,接收窗口的大小表示了接收缓冲区当前可用的空间大小。接收方会将这个接收窗口的大小通过 ACK 报文告知发送方。这样,发送方就知道接收方的接收能力,从而可以根据接收方的窗口大小来调整自己的发送速率,避免发送过多的数据导致接收方处理不过来而丢包,这就是流量控制。总的来说,滑动窗口机制主要解决了串行发送-确认方式效率低下的问题,并实现了流量控制,保证了数据传输的可靠性。

4.TCP 协议的拥塞控制是如何实现的?你能详细说说它的过程吗?

TCP 的拥塞控制是通过一系列算法来实现的,主要包括慢启动、拥塞避免、拥塞发生时的处理(超时重传和快速重传)以及快速恢复。

  1. 慢启动: 连接建立初期,发送方以较低的速率发送数据,逐步探测网络的承载能力,指数级地增加发送窗口。

  2. 拥塞避免: 当发送窗口达到慢启动阈值后,发送窗口以线性方式缓慢增长,避免过快地填满网络。

  3. 当网络发生拥塞,可能会出现丢包。TCP 通过两种方式检测丢包:

    • 一是超时重传,这种重传方式系统默认网络已经出现了严重阻塞,如果发送方在一定时间内没有收到 ACK,就会认为发生了拥塞,此时会将慢启动门限设置为当前拥塞窗口的一半,并将拥塞窗口重置为1,然后重新开始慢启动。
    • 二是快速重传,这种方式系统默认网络出现了轻微阻塞,因为接收方还可以发送包,并且发送方还可以接收到;当发送方连续收到三个重复的 ACK 时,会认为发生了丢包,会立即重传丢失的报文,并进入快速恢复阶段。在快速恢复阶段,拥塞窗口会减半,然后每收到一个重复的 ACK,拥塞窗口会增加一个 MSS,当收到被重传的报文的 ACK 后,拥塞窗口会设置为当前的慢启动门限,然后进入拥塞避免阶段,继续线性增长。

这些机制使得 TCP 能够根据网络状况动态调整发送速率,避免网络过载。

5.在 IP 地址 10.100.122.2/24 中,斜杠后面的数字 24 代表什么意思?

在 IP 地址 10.100.122.2/24 中,斜杠后面的数字 24 表示的是子网掩码的位数。在 CIDR(Classless Inter-Domain Routing)表示法中,这个数字说明了子网掩码中前面有多少个连续的“1”。对于 /24 来说,它对应的子网掩码是 255.255.255.0,换算成二进制就是前 24 位是 1,后 8 位是 0。这个子网掩码的作用是用来划分 IP 地址中的网络部分和主机部分。前 24 位(10.100.122)是网络号,用于标识一个特定的网络,而后 8 位(2)是主机号,用于标识该网络中的一个特定设备。通过将 IP 地址和子网掩码进行与运算,就可以得到该 IP 地址所属的网络号。

6.什么是 SQL 注入攻击?应该如何避免?

SQL 注入攻击是指攻击者通过在 HTTP 请求中插入恶意的 SQL 代码,使得后端服务器在构建和执行 SQL 查询语句时,将这些恶意代码也当作正常的 SQL 命令来执行,从而达到窃取数据、修改数据甚至控制服务器的目的。

举个简单的例子,如果一个查询用户信息的接口通过拼接字符串的方式构建 SQL 语句,攻击者可以在传入的用户 ID 参数中加入恶意的 SQL 代码,比如 0 OR 1=1,这样就会导致查询返回所有用户的信息,造成数据泄露。更严重的,攻击者甚至可以注入 DROP TABLE 这样的语句来删除整个数据库。

为了预防 SQL 注入攻击,我认为可以采取以下几个关键措施:

最重要也是最有效的方法是 使用参数化查询或者预编译语句。这种方式会将 SQL 语句的结构和参数分开处理,用户输入的数据会作为参数传递给 SQL 语句,而不是直接拼接在 SQL 语句中。这样可以防止恶意代码被当作 SQL 命令来执行。
其次,需要对 用户输入的数据进行严格的验证和过滤。在后端接收到前端传递的参数后,要对其进行检查,确保输入的数据符合预期的格式和类型,并且移除任何可能包含恶意代码的部分。可以使用白名单机制来限制允许输入的内容。
最后,应该 遵循最小权限原则。在数据库中,应用程序使用的账户应该只被授予完成其工作所需的最小权限。这样即使发生了 SQL 注入攻击,攻击者能够进行的操作也会受到限制,从而减少损失。
总而言之,使用参数化查询或者预编译语句是防止 SQL 注入攻击最根本和最有效的方法。

http://www.lryc.cn/news/578719.html

相关文章:

  • Claude Code 全面指南:从安装到高效开发的实用教程
  • React安装使用教程
  • 「Java流程控制」do……while循环结构
  • 吸烟行为检测数据集介绍-2,108张图片 公共场所禁烟监控 健康行为研究
  • 【Java编程动手学】Java的“三体”世界:JVM、JRE、JDK的共生之道
  • CppCon 2018 学习:EMULATING THE NINTENDO 3DS
  • 手工部署与自动化部署场景模拟及参考项目
  • InnoDB索引
  • 胖喵安初 (azi) Android 应用初始化库 (类似 Termux)
  • android车载开发之HVAC
  • Redis-渐进式遍历
  • 算法-每日一题(DAY12)最长和谐子序列
  • 使用D435i运行ORB-SLAM3时,纯视觉模式与视觉-惯性模式的位姿矩阵定义问题探讨
  • CentOS系统新手指导手册
  • 半导体和PN结
  • JavaEE线程概念
  • 人工智能在人力资源领域的深度变革:从技术适配到价值重构
  • AngularJS 安装使用教程
  • 转录组分析流程(七):GSEA分析
  • CertiK《Hack3d:2025年第二季度及上半年Web3.0安全报告》(附报告全文链接)
  • eNSP实验一:IPv4编址及IPv4路由基础
  • 统计labelme标注的json文件中各类别的标注数量
  • 百度轮岗:任命新CFO,崔珊珊退居业务二线
  • 数据结构:递归:组合数(Combination formula)
  • sqlmap学习ing(2.[第一章 web入门]SQL注入-2(报错,时间,布尔))
  • 【C++】inline的作用
  • 《UE5_C++多人TPS完整教程》学习笔记40 ——《P41 装备(武器)姿势(Equipped Pose)》
  • SQL学习笔记6
  • Linux基本命令篇 —— grep命令
  • python训练day46 通道注意力