Linux

TL; DR:本文主要从 socket 的关闭方式谈到 socket 的 SO_LINGER 属性,进一步分析 nginx 关于 lingering 的配置和源码,浅谈如何避免 socket 关闭时可能出现的一些问题。

socket 的关闭

在 Unix 上,一个连接实际上对应的是内核里的一个 fd, sockfd = socket(int socket_family, int socket_type, int protocol) ,因此 socket 的关闭实际上是使用 close() 调用将其当作一个普通 fd 进行关闭;但是对于 TCP 连接,可以使用 shutdown() 系统调用,将其当作一个全双工连接进行关闭后再使用 close()[……]

Read more

nf_conntrack 的数据结构和相关参数调优

首先需要明确的是,nf_conntrack 模块并不是所有 Linux 内核都会加载,最常见的导致加载该模块的原因是使用了 iptables、lvs 等内核态 NAT/防火墙导致内核需要对连接表进行追踪,iptable_nat、ip_vs 等多个内核模块都依赖 nf_conntrack, 但是 nf_conntrack 的存在会影响高并发下的内核收包性能。

在内核中,连接跟踪表是一个二维数组结构的哈希表(hash table),哈希表的大小记作 HASHSIZE,哈希表的每一项(hash table entry)称作bucket,因此[……]

Read more

Homelab 建设笔记

Index

  • 什么是 homelab,为什么建设 homelab
  • 平台和 CPU 的选型
  • 服务器的选型和购买
  • 带外管理和风扇控制
  • 外部访问和内网基础服务
  • 消费级显卡 pass through 的一些问题

 

什么是 Homelab & 为什么建设 Homelab

Homelab [hom-læb](n): a laboratory of (usually slightly outdated) awesome in the domicile

可能很多人不知道 homelab 是什么,甚至知道这个东西是什么之后也不理解为什么要折腾这种东西,没关系,毕竟人与人终究是不能相互理[……]

Read more

TL;DR

本文主要讨论了 bash 数组和利用 Shell Expansion 语法对数组进行操作,由于写了一个很蛋疼的 bash 工具故想把 bash 坑爹的数组语法吐槽一下。

bash 的语法确实反人类,如果有选择余地,尽量不要用 bash 实现超过10行的功能,即使用 Python 写一万个 subprocess 也好过和 bash 的奇妙语法斗智斗勇。

bash 数组基本语法

虽然 bash 没有真正的变量和引用,但是他真的有数组(也许很多人并不知道 bash 其实是有数组的?)

本质上 bash 中的变量都可以认为是字符串而不存在数值类型变量,数值计算实际上也是通过[……]

Read more

基于 OpenSSL 1.1.1 构建支持 TLS 1.3 的 Nginx 1.15 安装包

前言

UPDATE. 2018.08.31

TLS 的 RFC 已经正式更新,编号为 RFC 8446

注意:TLS 1.3 目前虽已定稿,但仍处于未被正式确立为 Internet standard 的草案标准阶段,其周边软件的支持可能发生快速的改变,本文所描述内容截止至2018年6月7日。

3月21日,TLS 1.3 草案正式定稿,最终版本为 draft28,详情见 Protocol Action: ‘The Transport Layer Security (TLS) Protocol Version 1.3’ to Proposed Standard (draft-ietf-[……]

Read more