TrueType 字体与贝塞尔曲线

Photo by Çağdaş Ermiş on Unsplash

TrueType字体中的字符(或字形)轮廓由直线和二次贝塞尔曲线(bézier)片段构成 —— 维基百科。当我们使用 ttf.js 来解析 TTF 字体的时候,可以得到每个文字所包含的轮廓点的信息。这个轮廓点信息由直线和贝塞尔曲线构成。

我们可以利用这些轮廓点来生成 SVG 图片。图中 Q 开头的坐标都是二阶贝塞尔曲线的控制点。通过控制点信息,依据二次贝塞尔曲线公式就可以渲染出轮廓线条。对其进行填充后,就能得到一个实心的字体或者说是图标。

继续阅读TrueType 字体与贝塞尔曲线

网络协议栈

Photo by Jonatan Pie on Unsplash

参考前面文章中利用思科模拟器模拟的抓包实验,可以清楚的看到网络协议栈的封装层次与报文结构。这边摘录如下。

数据链路层——数据帧

这里数据长度最大为 1500 字节。这也决定了上层协议所能封装的数据大小。交换机拆解数据帧,根据数据帧上记录的目标 MAC 地址转发给响应的端口。需要指出的是,IEEE 802.1Q 标准在 IEEE 802.3 帧的基础上可以支持 VLAN。这也给交换机了更强大的局域网规划功能。

继续阅读网络协议栈

源码角度理解 CORS

Photo by Museums Victoria on Unsplash

Cross-Origin Resource Sharing (CORS) 也叫做跨域资源共享。浏览器会自动判别一个 HTTP 请求是否跨域,并自动与后端服务协商。由后端服务来决定是否接受此跨域请求。学习 CORS 中协商过程需要两步,一是通过跨域资源共享 CORS 详解MDN 上的手册,二是通过源码。

koa 中有个中间件就叫做 @koa/cors。此中间件根据 CORS 协议规范,创建了一个与浏览器交互的 CORS 处理函数。本文从此中间件入手,结合手册详细讲述 CORS 的后端实现。

继续阅读源码角度理解 CORS

虚拟小机 MariaDB 配置

Photo by K. Mitch Hodge on Unsplash

当虚拟主机内存小于 1G 或者更小时,往往会遇到 MariaDB 数据库挂掉后不能由守护进程再次拉起,后台日志显往往如下所示显示内存不足的提示。这也是 WordPress 在小型虚拟机上部署会遇到最大的问题。

InnoDB: Fatal error: cannot allocate memory for the buffer pool

这种现象在分配虚拟内存之后故障发生率会明显降低,但仍偶发。目前最好的解决方法是在 MariaDB 配置文件中,在字段中 [mysqld] 块中关闭一个模式。

[mysqld]  
performance_schema = off
继续阅读虚拟小机 MariaDB 配置

使用 Node 原生方法处理 HTTP 请求

Photo by frdm . on Unsplash

koa 和 express 两种框架都对原生的 HTTP 进行了封装方便用户快速地开发 Web 应用。但是对于 HTTP 请求体的解析都没有提供内置的处理。

在 Node 中 HTTP 请求对象被分装成了一个流对象,因此需要使用读取流的方法去处理。当然,开源社区为这两种框架都提供了 body-parser 中间件,极大了简化了 HTTP 请求体解析的流程。但是 Node 原生方法是 body-parser 中间件的基础,让我们一起来探索吧。

继续阅读使用 Node 原生方法处理 HTTP 请求

VLAN INT VLAN 与 交换机与网关

交换机配置中 VLAN 和 INT VLAN 是两种完全不同的概念。

VLAN 是交换机用于隔离广播域、同时方便管理的一种方式内网划分技术。所谓虚拟,就是指网络管理员无需加上路由设备,就能在一个交换机上划分出多个网段,实现各个网段的隔离。不同 VLAN 间通信仍需通过三层(路由)。

INT VLAN 相当于虚拟的 VLAN 网关。一般可以通过 SHOW IP INT 来查看虚拟接口的 IP 地址(网关地址)。配置完成之后,我们可以在三层交换机上做一个路由(IP ROUTING),通过路由实现跨 VLAN 通信。

参考链接

“VLAN” Command vs “INT VLAN” Command

理解交换机与路由器工作方式(下)

Photo by Ehud Neuhaus on Unsplash

用语约定

路由表——路由器用来存放路由地址与对应接口的表。

路由器发出请求

承接上文。当路由器 Gig0/1 口得到交换机 A 发来的消息后,首先会确认消息中的目标 IP 是否在于路由表中,若存在,则将此消息交由对应的接口处理,否则就丢弃。本例中,此消息会继续交由 Gig0/2 接口处理。需要注意的是,IP 报文不需要修改,只需将数据帧上目的 MAC 地址修改成主机 B 的 MAC 地址。

查询 MAC 地址,没错,又是用到 ARP 。路由器会查询 ARP 表,若发现没有主机 B 的 MAC 地址信息,就会把这个消息丢弃,并向 Gig0/2 所在的局域网发起 ARP 请求广播,得到主机 MAC 地址之后会存放在本机的 ARP 表中。ARP 原理和前文一样,不再赘述。

继续阅读理解交换机与路由器工作方式(下)

理解交换机与路由器工作方式(上)

实验目的

本文中我要实验的是,当一根网线配置好 IP 后,接入交换机,然后 ping 另一个网段的主机后,数据报的流动方向以及各个设备在此过程中到底做了什么。

实验环境

Cisco Packet Tracer 是思科研发的一款网络实验模拟器。在这个软件中可以很轻松的观察数据包的流动、实验交换机和路由器的配置。

为了更好的研究数据在路由过程中做了什么,我做了一个简单的实验环境。其中包含两个网段共四台机器,两台交换机和一个路由器,并在 Tracer 中通过模拟方式来跟踪数据传递的过程。其示意图如下所示。

继续阅读理解交换机与路由器工作方式(上)