0%

简介

TCP 快速打开(TCP Fast Open,简称TFO)是对计算机网络中传输控制协议(TCP)连接的一种简化握手手续的拓展,用于提高两端点间连接的打开速度。

它通过握手开始时的 SYN 包中的 TFO cookie(一个 TCP 选项)来验证一个之前连接过的客户端。如果验证成功,它可以在三次握手最终的 ACK 包收到之前就开始发送数据,这样便跳过了一个绕路的行为,更在传输开始时就降低了延迟。这个加密的 Cookie 被存储在客户端,在一开始的连接时被设定好。然后每当客户端连接时,这个 Cookie 被重复返回。

最显著的优点是可以利用握手去除一个往返 RTT

开启 TFO

net.ipv4.tcp_fastopenLinux 内核中的一个配置参数,它用于控制 TCP Fast Open 功能。
具体地,net.ipv4.tcp_fastopen 的值可以是以下几种:

  • 0:禁用 TCP Fast Open 功能。
  • 1:在客户端启用 TCP Fast Open 功能。
  • 2:在服务器端启用 TCP Fast Open 功能。
  • 3:在客户端和服务器端都启用 TCP Fast Open 功能。

通过设置这个参数,可以根据实际需求选择是否启用和在哪一端启用 TCP Fast Open,从而优化网络性能。

阅读全文 »

最大传输单元(Maximum Transmission Unit, MTU)

数据链路层传输的帧大小是有限制的,不能把一个太大的包直接塞给链路层,这个限制被称为「最大传输单元(Maximum Transmission Unit, MTU)」

阅读全文 »

Package Type

  • Long Header Packets
    • Version Negotiation Packet
    • Initial Packet
    • 0-RTT Packet
    • Handshake Packet
    • Retry Packet
  • Short Header Packets
    • 1-RTT Packet
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+=====================+=================+==================+
| Packet Type | Encryption Keys | PN Space |
+=====================+=================+==================+
| Initial | Initial secrets | Initial |
+---------------------+-----------------+------------------+
| 0-RTT Protected | 0-RTT | Application data |
+---------------------+-----------------+------------------+
| Handshake | Handshake | Handshake |
+---------------------+-----------------+------------------+
| Retry | N/A | N/A |
+---------------------+-----------------+------------------+
| Version Negotiation | N/A | N/A |
+---------------------+-----------------+------------------+
| Short Header | 1-RTT | Application data |
+---------------------+-----------------+------------------+

最近接触到 SUSE Linux 操作系统,一些命令不一样,这里记录下:

包管理器 zypper

  • 包的安装
1
sudo zypper install 包名
  • 搜索包
1
sudo zypper search 包名

老旧版本系统的包查找

我用的系统是 SUSE 12 SP5 基本没有可用的在线 Repositories, 一些包很难找到了,可以通过SUSE Linux Enterprise Software Development Kit 下载对应的 SDK ISO 安装里面的 rpm

参考资料

Qt QML 简介

QML 是什么?

  • QML 是声明式编程语言
  • QML 模块 类型库
  • 内置了 javascript 运行时环境, 提供逻辑处理: 界面逻辑,业务逻辑

Qt Quick 是什么?

Qt Quick 是类型库,提供了可视化 UI 组件,软件开发框架,用于构建用户界面

阅读全文 »

C++ Class

在类定义中,只有非静态数据声明会增加类对象的大小

Empty Class

一个空类在C++中没有非静态数据成员、没有虚函数,也没有虚基类。这样的类通常被称为“无状态”,因为它们不封装任何状态或数据。然而,即使一个空类没有显式的数据成员,它仍然需要占用一些内存空间。

C++标准规定,不同类型的对象必须具有不同的地址。因此,一个空类对象必须在内存中具有唯一的地址。这确保了即使一个空类对象没有任何可见的数据成员或行为,它也必须占用至少一个字节的内存,以区分它与具有不同类型的其他对象。

阅读全文 »

什么是聚合类型(aggregate)

在 C++03 中的定义

  • 不能有用户声明的构造函数
  • 没有私有或受保护的非静态数据成员,可以拥有任意数量的私有和受保护的成员函数(但不能是构造函数)以及任意数量的私有或受保护的静态数据成员和静态成员函数
  • 可以具有用户声明或用户定义的复制赋值运算符和或析构函数
  • 没有基类
  • 没有虚函数
  • 数组是聚合,即使它是非聚合类类型的数组
阅读全文 »

macOS Monterey 开始,如果应用程序被未由相同开发团队签名且未由 NSUpdateSecurityPolicy 允许的东西修改,macOS 将阻止修改并通知用户应用程序希望管理其他应用程序。点击通知会将用户发送到系统设置,他们可以在那里允许应用程序更新和修改其他应用程序。

appmanager

阅读全文 »