![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络编程
文章平均质量分 90
RzBu11d023r
这个作者很懒,什么都没留下…
展开
-
A记录 CNAME记录是什么 | DNS 查询的过程 | DNS 根服务器是什么 | 配置域名 CNAME 原理
全球共有 13 个根服务器, 然后近到本地 Isp 会配置多个缓存服务器(DHCP分配的 dns 就是 isp 提供的缓存服务器).终端设备进行 DNS 查询的时候, 首先是本机缓存,然后是 host文件原创 2022-10-29 17:40:15 · 936 阅读 · 0 评论 -
io_uring 使用教程| io_uring 完全指南 | io_uring 实践指导 | io_uring 资料参考
io_uring 完全指南地图背景io_uring 是 2019 年做的,与 kernel 5.1 发布。后续打了很多补丁,比较重要的在 2020年5月之后基本达到了一个很好的可用性。学习这个东西和学习 epoll 系列的、学习 UNP 和 linux 网络编程其实没有什么区别,都是利用已有的工具解决问题,其实不涉及像学 OS、DBMS、分布式系统等这种系统方向技术上的东西,但是有一些惯常做法还是需要记录一下,如何利用工具,以及在工具的限制下解决问题也是一门形式化技术。本文只是提供一个使用 io_uri原创 2022-04-03 00:02:35 · 8719 阅读 · 2 评论 -
基于协程io_uring 异步网络库系列 VIII: 异步 task 的线程池 | CPU bound task 使用线程池 | Reactor 多线程 v.s. Proactor 多线程
主要讨论一下一些异步的投递的实现,第二部分是 CPU bound 的 task 的线程池,因为 proactor 对线程池的要求和 reactor 的不一样。原创 2022-03-06 16:37:22 · 432 阅读 · 0 评论 -
基于协程io_uring 异步网络库系列 VII(资料): io_uring 和 NONBLOCK | short read 问题 | io_uring blocking io 资料
这里其实我之前有一个问题的,对于普通的非阻塞read write 来说可能每次读到写到的 n 都不等于我们请求的 nbytes,然后最好情况也最多是 64kb,不可能够传输长(相对)连接大文件的,这个问题 io_uring 提交的时候是否能支持更大的 nbytes 呢? 当然 manual 的说法是Each I/O operation is, in essence, the equivalent of a system call you would have made otherwise, ...原创 2022-03-06 16:30:44 · 1757 阅读 · 0 评论 -
基于协程io_uring 异步网络库系列 VI: io_uring v.s. epoll | proactor v.s. reactor | io_uring Proactor 模型
本文讲解 io_uring 如果编写 proactor 编程模型,同时对比 Reactor 模型。主要涉及的是模型中的 IO 部分,比如 short read。原创 2022-03-06 16:28:10 · 547 阅读 · 0 评论 -
基于协程io_uring 异步网络库系列 V: executor 和线程池 thread pool
这是一个系列文章,目录:cppcoro 源码级使用教程系列: 概述 | C++20 coroutine 教程 | io_uring 异步IO 网络框架 系列笔记_我说我谁呢 --CSDN博客很遗憾的是,虽然本身学习服务器应该把 socket 编程、缓存处理、linux 系统调用信号机制等这些为重点,但是对于要用 coroutine 来做的话,其实是优点舍近求远的,因为你必须理解异步和 coroutine 本质上的状态机,所以这里的非关键因素的篇幅和绕程度可能会大一些。我属实没搞明白他们是怎么学这部分的内..原创 2022-03-06 16:25:00 · 1084 阅读 · 0 评论 -
基于协程io_uring 异步网络库系列 IV: Proactor 与 asynchronous operation | C++20 coroutine | io_uring 异步IO 网络框架
本系列通过结合 linux 的 io_uring 和 cppcoro (源码需要进行部分修改以适配 linux 下的 g++-11)在网络中的使用学习 C++20 coroutine。值得注意的是,cppcoro 目前已经暂停维护,仍然为 TS 版本的支持,同时其真异步底层支持只支持了 win32 的 IOCP(本身 cppcoro 兼容 MSVC),但是本系列不想涉及 IOCP 和 windows 的部分因为除了跨平台外,没有太大意义(如果采用 windows 的话,C# 是足够好的语言,但是目前...原创 2022-03-04 05:54:55 · 520 阅读 · 0 评论 -
基于协程io_uring 异步网络库系列 III: Proactor、异步与协程 | C++20 coroutine 教程 | io_uring 异步IO 网络框架 系列笔记
本系列通过结合 linux 的 io_uring 和 cppcoro (源码需要进行部分修改以适配 linux 下的 g++-11)在网络中的使用学习 C++20 coroutine。值得注意的是,cppcoro 目前已经暂停维护,仍然为 TS 版本的支持,同时其真异步底层支持只支持了 win32 的 IOCP(本身 cppcoro 兼容 MSVC),但是本系列不想涉及 IOCP 和 windows 的部分因为除了跨平台外,没有太大意义(如果采用 windows 的话,C# 是足够好的语言,但是目前广泛的.原创 2022-03-04 05:52:17 · 785 阅读 · 0 评论 -
基于协程io_uring 异步网络库系列 I: 异步和协程复习 | C++20 coroutine 教程 | io_uring 异步IO 网络框架 系列笔记
首先复习协程的部分先(对照 C++20 coroutine 探索 系列笔记, 建议对着第二篇的查阅备用来复习)。这可能是因为编写 awaiter 是如何的是很重要的(如果要支持用 co_await 写程序的话),所以还是要搞明白协程和 cppcoro 提供的协程包装(是C#早有的成熟系列)的执行过程。其实下面我会一直强化这个协程状态机的运行走向,就当作是复习巩固记忆了。一个协程的返回值 task 是一个 R 类型兼 Awaiter 类型,他的 promise_type 的 initial_susp...原创 2022-03-04 05:44:12 · 749 阅读 · 0 评论 -
基于协程io_uring 异步网络库系列: 概述 | C++20 coroutine 教程 | io_uring 异步IO 网络框架 系列笔记
很遗憾的是,虽然本身学习服务器应该把 socket 编程、缓存处理、linux 系统调用信号机制等这些为重点,但是对于要用 coroutine 来做的话,其实是优点舍近求远的,因为你必须理解异步和 coroutine 本质上的状态机,所以这里的非关键因素的篇幅和绕程度可能会大一些。我属实没搞明白他们是怎么学这部分的内容的?是因为学过 call/cc? 是从 ts 开始就跟踪这个协程的点?还是本身研究理解过 javascript 的异步、C# 的异步、还是其他语言像 golang 的 coroutine...原创 2022-03-04 05:41:52 · 2018 阅读 · 0 评论 -
负载均衡一致性哈希算法实现 | nginx 负载均衡一致性哈希源码分析 | ngx_http_upstream_consistent_hash_module 源码分析
理解七层反向代理的负载均衡 Nginx 中使用的的一致性哈希算法。开头只是讲一些没用的东西,后面主要是分析 Nginx 的 O(1) 时间复杂度的一致性哈希负载均衡的模块源代码实现,顺便了解一下 nginx 模块开发(参考Development guide (nginx.org) 中的 load balancing 部分)的大致样子。原创 2022-02-23 02:57:05 · 1933 阅读 · 0 评论 -
网络编程 高性能定时器数据结构分析 | 时间轮 红黑树定时器性能分析 | 为什么要做用户态定时器
本篇仍然是编写一个网络库、框架(类似muduo、libev、nodejs)的网络编程系列。原文和11月的另一篇笔记的第二部分附录基本内容一致,属于是一稿多投,主要补充了一些分析内容,实际本文技术含量不高,完全是空想臆测的流水账。原创 2022-02-19 00:37:44 · 3472 阅读 · 0 评论 -
epoll LT ET 区别 | Nginx epoll 原理 listend 用 LT
最近学 muduo 和 nginx 写网络库,总结一下 epoll 上遇到的一些问题和学习的笔记,主要是对 LT、ET 和平滑升级里的一些点理解一下。原创 2022-01-30 00:59:11 · 2828 阅读 · 0 评论 -
负载均衡比较 | dpdk 和 lvs 对比 | Nginx 反向代理负载均衡实验
参考资料Using nginx as HTTP load balancerMaglev: A Fast and Reliable Software Network Load Balancer, Google Inc. UCLA SpaceXMGW——美团点评高性能四层负载均衡 - 美团技术团队 (meituan.com)Open-sourcing Katran, a scalable network load balancer - Engineering at Meta (fb.com)..原创 2022-01-19 12:46:26 · 4118 阅读 · 0 评论 -
什么是高并发高可用一致性?| 现代网站架构发展 | C 语言实现布隆过滤器
Lab: Bloom Filter提要这是一个简单的数小时可以完成的 C 语言学习编程练习,读者将学习编写一个布隆过滤器 (Bloom Filter), 谁是当前网络应用中广泛应用的一环。本文假定读者是对网络编程零基础的。参与者应当具备良好的 C 语言编程基本知识,包括但不仅限于以下知识点:基本的编程(分支循环等)整数数据类型位运算结构体指针堆上内存分配 (malloc 和 free)以下将提供足够的必要前置知识(不够清楚的地方可以在网络进行信息检索)关于布隆过滤器帮助完成练习。本文原创 2021-10-16 20:53:15 · 354 阅读 · 2 评论 -
io_uring 用法分析 III :liburing 接口及高性能 Polling 机制
Interrupt 方案是节约 CPU ,但是延迟高,因为用户态正在休眠,调度到他需要花费一定时间(Linux 调度算法是用红黑树的完全公平调度 CFS,和以前看 APUE 的函数调用有关,然后主要优先级依据是通过 virtual runtime 归一化比较的,同等物理时间下高优先级的虚拟时间过得慢,所以能调度多一些)。鉴于 NAPI 已经要求网卡驱动实现本身提供 poll 接口给 trap handler,这样应用层也可以用这个(而 poll 接口也用在 select poll 上原创 2021-11-18 11:23:59 · 3588 阅读 · 0 评论 -
io_uring 用法分析 II :io_uring 原理和系统调用初步介绍
这个为了方便,之后还要总结一下这个全部的用法摘要,方便查阅。所以分为 3 篇内容(其实前面还有一篇讲异步 IO 的也算吧),第一个是 io_uring 的简单原理分析和 raw interfaces,第二篇是讲 liburing 以及高性能 polling 机制,第三篇是接口以及各选项的总结摘要(这之前先参考 manual 和 liburing 的头文件吧,liburing 也自带了 system call 的 manual)。主要的 io_uring 的资料有这些:io_uring.pdf ...原创 2021-11-18 11:22:39 · 3117 阅读 · 0 评论 -
io_uring 用法分析 I :异步 IO ,Windows IOCP 接口与 Proactor 模式
在具体研究 io_uring 之前,有必要了解之前的 aio,包括 glib 实现的 POSIX aio 和 Linux 后来提供的只支持 O_DIRECT 的 Linux aio (不支持 socket 因为 socket 不能 O_DIRECT)。不然我实在看不懂 io_uring 目前的资料(和 epoll 铺天盖地的资料实在是没法比啊)。首先是基本的情况,由于 Linux 早期不支持 Posix ais,所以实际 glib 是在用户态模拟了一个的,实际原理是通过多线程后台同步读写,然...原创 2021-11-18 11:19:53 · 1762 阅读 · 0 评论 -
Linux 高性能服务器开发笔记:Reactor 模型定时器 | 网络编程定时器
本文主要根据游双书本 Linux 高性能服务器开发 学习分析 linux 网络编程常用到的定时器模型,配备详细理解和分析,同时分析了 Linux 内核中定时器的低精度时间轮和高精度定时器实现思路还有 了解 kafka 的时间轮,提供必要的资料进一步理解。sigalarm 方面讲解通过定时器实现心跳包的原理。定时器基础socket 选项和 I/O 复用 timeout首先第一个,这个正如前面讲的要用 setsockopt 而且不同的东西要用不同的结构体传进去,还要传一个 len然..原创 2021-11-15 17:55:04 · 1292 阅读 · 0 评论 -
基础服务器 IO 模型 Proactor 模型 Reactor 模型 IO 多路复用 异步 IO 模型 Linux 服务器开发 网络编程服务器模型
本文主要记录服务器的 IO 模型的类型(从多路复用,异步 IO 讲到 Proactor Reactor 模型),包括 Real World nginx 和 apache ,kafka 等分析,配备自洽的所有知识点方便自己复习。先把 APUE 第八章进程控制过一遍吧Linux 进程的控制启动与复制首先是他说的 swapper pid==0 的进程,就如在 xv6 里面的那样,init 做的就是 wait 到子进程(shell)退出然后就退出而已。scheduler 的部分是另外的,由于他的..原创 2021-11-11 22:47:12 · 2045 阅读 · 0 评论 -
多人网络游戏服务器开发基础学习笔记 I:基本知识 | 游戏设计模式 | 网游服务器层次结构 | 游戏对象序列化 | 游戏 RPC 框架 | 帧同步和状态同步
今天继续开新坑,尽管过了很多 Unix 套接字编程的坑,但是实际还是有很多不同场景和性能的需求,以及最服务器架构的内容也就接触过 preforking 和 master 带 worker 而已。所以有必要持续阅读一些内容。本文的笔记主干是基于书本的内容的个人理解,然后补充很多网络上的资料作为额外的内容希望能把概念和方法都讲明白,然后会收集一些 realworld 案例加深理解。主要跟的书本是 Joshua Glazer 的 multiplayer game 网络多人游戏架构与编程,这本书也是好评如.原创 2021-11-11 21:51:25 · 7404 阅读 · 0 评论 -
EPOLL 原理分析线索 SELECT POLL 原理
首先复习一下 select,poll,和 pselect 先吧。select 是传一个 set 给他,内核收到动静返回,我们再检查 set 有谁可用。 pselect 是为了解决信号缺失的问题他保证在睡觉之前检查一下 mask (需要配合 sigprocmask)如果有马上返回。 poll 的主要解决问题只是 ns 的超时而已。linux 也提供了 ppoll 实现 pselect 相似的功能。还有一个要点是 pselect 只用了 bitset ,而 poll 用的是fd结构体数组。由于一个...原创 2021-11-10 20:00:39 · 428 阅读 · 0 评论 -
UNP 学习笔记 5:高级 IO 与 IO 复用
可惜 UNP 和 APUE 不讲 EPOLL,UNP 的重点内容可能快看完了,之后 UNPv1 就做参考书了,然后之后的 Linux 服务器编程就全是搞 APUE 和 Linux 编程的书了,看来之后还得持续。以下基本是 APUE 十四章内容非阻塞IO — 使用选项打开文件通过 O_NONBLOCK 选项作为 flag 调用 open 函数 通过 fcntl 设置同样的选项(本质是一个 flag、mask) 如果不能完成,将会返回错误。(错误的语义是正确的,因为我们希望不block,不能..原创 2021-10-17 21:17:08 · 289 阅读 · 0 评论 -
UNP 学习笔记 4:网络API的边界问题
端口号well known 是 1024 以前(UNIX 保留端口,权限限制) 临时端口用 45152 到 65535 1024到5000 以前是 BSD 用来当临时端口的,现在可能不用避免,但是他们也会被 IANA 用来登记一些应用,不是必须避免使用的。 临时端口可以进行尝试,或者直接让操作系统分配进行了。fork首先 child 应该关闭 listen fd,防止一些边界情况 然后 parent 应该关闭 connfd 这样 child exit 之后处理文件就把他关闭了。如果父...原创 2021-10-17 21:13:06 · 163 阅读 · 0 评论 -
UNP 学习笔记 3:基本套接字编程
为了方便起见,我直接用 python 来学这一章(因为 Cpython 这方面接口基本一致),编写方便!这一章和之前的套接字与传输层的笔记的区别是讲的更多是怎么使用他们,同时配备部分函数对应的 TCP 行为,主要是涉及错误的部分。socket 这里一般 family 和 type 就决定了 protocol,所以 arg3 直接留 0 就可以自动匹配。但是比如你可能可以用 INET + STREAM 来选用 SCTP 但是我们默认是匹配 TCP,SCTP 的首选是 INET+SEQPAC..原创 2021-10-17 21:11:57 · 406 阅读 · 0 评论 -
基本网站架构 网络编程基础
整理一些网络编程的基础知识。摘录一下方便理理解。基本服务器就是一个服务器,蕴含数据库了。数据库分离web server 和 database server,client 请求 web server web server 请求 database server 完成 OLTP (online transaction processing,增删改查等事务)或者 OLAP (online analytical ,分析处理)活。web server 动静分离动态请求比如 http 网页的静...原创 2021-10-17 21:07:29 · 95 阅读 · 0 评论 -
UNP 学习笔记 2:socket 编程简介
单个地址结构体一个 TCP 套接字是用一对 ip:port 的四元组构成的,我们使用结构体保存一个 ip:port, 这个结构体是 sockaddr_in 和 sockaddr_in6. 对于数据链路层的套接字,这个结构体是 sockaddr_dl, 地址则是和 (ip:port) 相呼应的链路层地址。 我们为了支援所有结构体,提供通用的 connect 和 socket 函数调用,历史由于没有 void* (前 ANSI C 时期),所有的函数调用都带有第三个参数,which is 用来传结...原创 2021-09-26 21:05:52 · 135 阅读 · 0 评论 -
UNP 学习笔记 2:协议概述与传输层对应 socket 函数行为
OS ,应用以及他们用的协议首先明确所有的 IP 层及以上都需要操作系统内核网络栈处理。所以底层 OS 实际接触到的层次是数据链路层。tcpdump 能实现的原理即字节访问数据链路层, 这里涉及 BSD packet filter 和 datalink provider interface 两种方法直接访问底层。 ICMP 是独立于 TCP,UDP,SCTP 的一个基于 IP 上的网际控制报文协议,ping 和 traceroute 都会用。这里 traceroute 实际是用发送没用的 UDP...原创 2021-09-26 15:25:06 · 282 阅读 · 0 评论 -
UNP 学习笔记 1:Socket 编程基础
学习一下 UNP,这里做一些笔记以及结合计网学习对一些点给出自己的理解,方便之后自己复习。资料是 UNPv13e 书本,UNP 课本源码。同时参考的还有 APUE 以及 linuxmanual。UNP ch1 简介daytime 客户端程序 socket 套接字,支持网络层到其更上层的各种连接。 其中 UNIX域 specify the network layer protocal such as x.25/ipv4/ipv6 etc. the type spe...原创 2021-09-26 10:10:13 · 258 阅读 · 0 评论