UDP
UDP 协议仅仅在提供了复用/分解功能和少量的差错检验
1. UDP 报文结构
1 | // 代码示例,真正报文结构为二进制 |
头部共四个字段,每个字段由两个字节组成,共计 8 个字节
2. UDP 检验和
计算检验和时,加入伪头部
1 | type struct udp_virtual_header { |
将伪头部和报文中所有 16bit 字(2Byte)相加,data 最后不足 16bit 补零。溢出位回卷(回卷:溢出位和 16bit 相加),然后进行反码运算。
在校验时,将伪头部和报文中所有 16bit 字相加,和为 1111111111111111 则校验成功,反之失败,说明报文受损。
3. UDP 相对于 TCP 的优势
- 没有拥塞控制,更适合及时性质的传输
- 无需建立连接,相比于 TCP 有更低的时延
- 无状态连接,无需像 TCP 一般维护连接的参数(例如:接受和发送缓存、拥塞控制参数、序号和确认号等)
- 首部开销更小,UDP 头部 8Byte, TCP 首部 20Byte
http简介
ArchLinux系统代理
1. Linux 系统代理设置
linux 的系统代理是通过设置 http_proxy、https_proxy、all_proxy 等环境变量来实现。本人用过的如下两种。
- 环境变量写入
/etc/environment
- 优点:许多程序都能走代理,不需要额外设置。
- 缺点:所有 HTTP 请求都会走代理,从而导致离你的代理服务器较远的请求会很慢。
- 设置
alias proxy="all_proxy=socks://127.0.0.1:1080"
- 优点:在终端中需要代理时,在命令前加上
proxy
即可。 - 缺点:许多程序无法使用代理,例如 steam。浏览器也需要安装代理管理插件,像 SwitchyOmega。
- 优点:在终端中需要代理时,在命令前加上
Tips: 建议自行设置DNS服务器,根据不同的网络管理,在不同的配置文件中配置DNS服务器
- NetworkManager: 在
/etc/resolv.conf
中添加nameserver 8.8.8.8
或nameserver 8.8.4.4
- systemd-resolved: 在
/etc/systemd/resolved.conf
中添加或修改
1
2 [Resolve]
DNS=8.8.8.8
2. Privoxy
privoxy 是一个 HTTP 协议过滤代理。这里不作赘述。想要了解的可以到Archwiki。
我们的目的是用过 privoxy 实现 PAC 代理的效果。
Go Debug
1. pprof
1 | package main |
1.1 web
http 访问http://localhost:8080/debug/pprof
可以查看到如下内容
- 内存分配
- goroutine数量
- 堆分配
- 资源竞争
- 线程创建
- 等
1.2 go tool
1 | $ go tool pprof -http=:8000 http://127.0.0.1:8080/debug/pprof/profile |
开启另一个web服务分析获取的信息,浏览器打开http://localhost:8000
即可查看到如下页面
并包含有火焰图
Golang笺言
本篇文章是学习go-advice时所写,包含了大部分写 go 需要注意的点
1. 谏言
- 不要通过共享内存进行通信,通过通信共享内存
- 并发不是并行 ✔
- 管道用于协调;互斥量(锁)用于同步 ✔
- 接口越大,抽象越弱 ✔
- 利用好零值
- 空结构
interface{}
即any
没有任何类型约束 ✔ - gofmt 的风格不是人们最喜欢的,但 gofmt 是每个人的最爱
- 一点点重复比引入一点点依赖更好
- 始终使用构建标记保护系统调用和 cgo
- cgo 不是 go
- 使用
unsafe
不能保证能如期运行 - 清晰比聪明更好
- 反射永远不清晰
- 错误是值
- 不要只检查错误,还要优雅的处理它们
- 设计架构,命名组件,文档记录细节
- 文档是供用户使用的
- 不要(在生产环境)使用
panic()
Arch旅行第一集-安装Arch
前言
安装 ArchLinux,起因是因为我的这台 XiaoMI Air13 老古董,在 windows 环境下跑个 IDEA 卡的不行,严重影响编程效率,而且只有 8G 内存,实在是不想把内存分配给一些无用的程序。
起初对于系统的了解是皮毛的皮毛,所以没有选择裸机安装。当然,我也没有用虚拟机测试,因为我的硬盘也不够用,所以我起初选择的是Manjaro + i3wm 的组合安装镜像,不用输入命令,有安装引导界面,很适合新手使用。当然还有跟多炫酷桌面管理,比如 GNOME、PLASMA、XFCE 等,我选择 i3 的理由是内存占用小。慢慢的我也喜欢上了平铺式窗口管理器。有需要的进入后面的链接观看。🔗
Manjaro 的配置可以说相当完善,相对于 Arch 稳定了不少(插句嘴,Manjaro 是 Arch 的衍生版),我也用了一段时间,但是后面就会有些小问题,Manjaro 的 Wiki 相对于 Arch 比较差,所以每次有问题就会去 ArchWiki 中寻找解决方法,但是许多相同的问题并不能得到结局。半年后我还是选择重装了 Arch 系统。
不想听我逼逼赖赖的同学可以去最全 Arch Linux 安装教程——打造真正属于你的操作系统,这个老哥的视频相当到位,配合弹幕食用更佳。