摘要:
几种通过 iproute2 来打通不同节点间容器网络的方式 几种通过 iproute2 来打通不同节点间容器网络的方式 host-gw ipip vxlan 背景 之前由于需要打通不同节点间的容器网络,对 flannel 进行修改增加了网络相关信息的获取逻辑,进而可以完整使用 backend 的功能 阅读全文
摘要:
几十行就能导出博客园文章的 shell 脚本 CNBLOG_USER 和 CNBLOG_TOKEN 不建议粘贴直接放在脚本中,放在环境变量中执行更安全一些,不容易暴露 token。 #!/bin/bash sync_cnblog() { API_URL="https://i.cnblogs.com/ 阅读全文
摘要:
如何完善处理 TCP 代理中连接的关闭 TCP 单工连接(只关闭连接的读或写)在日常使用场景较少,但一个通用的 TCP 代理也需要考虑这个场景。 背景 今天在看老代码的时候,发现一个 TCP 代理的核心函数实现的比较粗糙,收到 EOF 后直接粗暴关闭两条 TCP 连接。 func ConnCat(u 阅读全文
摘要:
如何提升文章的条理性 为避免写的文章没有条理性,总结了一个比较机械的文章结构来进行参考。 最近博客发表了很多文章,只有少数几篇看下来勉强看的过去,细节和整体的平衡把握的不够好,甚至全文写着写着就歪了,回过头一看标题都不知道怎么修改。 这段时间又有一些写文档的需求,由于也没有什么功底,我想着尽量把格式 阅读全文
摘要:
基于性能测试结果对数据包传输协议进行选择和优化 场景:在局域网内,需要将多个机器网卡上抓到的数据包同步到一个机器上。 原有方案:tcpdump -w 写入文件,然后定时调用 rsync 进行同步。 改造方案:使用 Go 重写这个抓包逻辑及同步逻辑,直接将抓到的包通过网络发送至服务端,由服务端写入,这 阅读全文
摘要:
重构服务的一些想法 最近对一个服务进行了大重构(不仅仅是代码的重构,还有构建、部署和单元测试等),之前很多实践的经验都应用上了,实践下来效果比较满意。 模块设计 需要明确服务的核心功能 执行时机(被谁驱动) 执行内容 和非核心功能的关系 从模块话的角度看,这三个部分其实都可以独立实现,这样更利于单元 阅读全文
摘要:
使用原始套接字捕获网卡流量 Go 捕获网卡流量使用最多的库为 github.com/google/gopacket,需要依赖 libpcap 导致必须开启 CGO 才能够进行编译。 为了减少对环境的依赖可以使用原始套接字捕获网卡流量,然后使用 gopacket 的协议解析功能,这样就省去了解析这部分 阅读全文
摘要:
Go 如何对多个网络命令空间中的端口进行监听 需求为 对多个命名空间内的端口进行监听和代理。 刚开始对 netns 的理解不够深刻,以为必须存在一个新的线程然后调用 setns(2) 切换过去,如果有新的 netns 那么需要再新建一个线程切换过去使用,这样带来的问题就是线程数量和 netns 的数 阅读全文
摘要:
如何使用 perf 分析 splice 中 pipe 的容量变化 这个文章为了填上一篇文章的坑的,跟踪内核函数本来是准备使用 ebpf 的,但是涉及到了低内核版本,只能使用 kprobe 了。 恰好,在搜索东西的时候又看到了 perf,可以使用 perf probe 来完成对内核函数的跟踪,使用相对 阅读全文
摘要:
记一次 splice 导致 Go io.Copy 阻塞的排查过程 简而言之,net.TCPConn 的 ReadFrom 零拷贝实现 splice 在 1.21.0 - 1.21.4 删除了 SPLICE_F_NONBLOCK 参数,导致在 CentOS7.9(内核版本 3.10.0.0) 上 sp 阅读全文