计算机网络
文章平均质量分 88
计算机网络
BeZer0
路漫漫其修远兮,吾将上下而求索
展开
-
Linux 网络编程学习笔记
本文是学习《Linux 高性能服务器编程(游双 著)》时所记录的重点知识。原创 2023-03-20 20:58:05 · 11076 阅读 · 0 评论 -
tinyWebServer 学习笔记——六、注册登录
【代码】tinyWebServer 学习笔记——六、注册登录。原创 2023-06-15 14:04:58 · 374 阅读 · 0 评论 -
tinyWebServer 学习笔记——五、数据库连接池
【代码】tinyWebServer 学习笔记——五、数据库连接池。原创 2023-06-08 19:24:34 · 454 阅读 · 0 评论 -
tinyWebServer 学习笔记——四、日志系统
public :// C++11以后,使用局部变量懒汉不用加锁 static Log * get_instance() {} // 可选择的参数有日志文件、日志缓冲区大小、最大行数以及最长日志条队列 bool init(const char * file_name , int close_log , int log_buf_size = 8192 , int split_lines = 5000000 , int max_queue_size = 0);原创 2023-05-15 10:57:35 · 5787 阅读 · 1 评论 -
tinyWebServer 学习笔记——三、定时器处理非活跃链接
【代码】tinyWebServer 学习笔记——三、定时器处理非活跃链接。原创 2023-05-15 10:56:42 · 1749 阅读 · 0 评论 -
tinyWebServer 学习笔记——二、HTTP 连接处理
从模型的角度来看,从状态机负责通用的操作处理,主状态机负责特定的操作处理,主状态机需要使用从状态机提供的数据,从状态机需要被主状态机调用,每个状态机又是一个有限状态机。有限状态机是一种抽象的理论模型,使用选择语句来实现。模型要求代码存在 n 个状态,使用当前状态。原创 2023-05-15 10:54:54 · 5609 阅读 · 0 评论 -
tinyWebServer 学习笔记——一、半同步半反应堆线程池
public :// 构造函数 // actor_model:工作模式 // connPool:数据库连接池指针 // thread_number:线程池中线程的数量 // max_request:请求队列中最多允许的、等待处理的请求的数量 threadpool(int actor_model , connection_pool * connPool , int thread_number = 8 , int max_request = 10000);// 析构函数 ~ threadpool();原创 2023-05-15 10:49:44 · 5706 阅读 · 1 评论 -
Linux 网络编程学习笔记——一、TCP/IP 协议族
数据链路层实现了网卡接口的网络驱动程序,以处理数据在物理媒介(以太网、令牌环等)上的传输,不同的物理网络具有不同的电气特性,网络驱动程序隐藏了这些细节,为上层协议提供一个统一的接口。最常用的协议是 ARP(Address Resolve Protocol,地址解析协议)和 RARP(Reverse Address Resolve Protocol),它们实现了 IP 地址和机器物理地址(通常是 MAC 地址)之间的相互转换。原创 2023-03-20 20:37:33 · 15086 阅读 · 0 评论 -
Linux 网络编程学习笔记——二、IP 协议详解
由于网络是实时变化的,因此路由表必须能够实时更新。前文中提到,不是发送给本机的 IP 数据报将由数据报转发子模块来处理,这称之为 IP 转发,路由器都能执行数据报转发操作,而主机一般只发送或接受数据报,这是因为 /proc/sys/net/ipv4/ip_forward 内核参数默认被设置为 0 ,将其修改为 1 可使主机具备数据转发功能。IP 模块实现数据报路由的核心数据结构是路由表,此表按照数据报的目标 IP 地址分类,同一类型的 IP 数据报将被发往相同的下一跳路由器。原创 2023-03-21 15:38:46 · 14742 阅读 · 0 评论 -
Linux 网络编程学习笔记——三、TCP 协议详解
传输层协议主要有 TCP 协议和 UDP 协议,前者相对于后者的特点是:面向连接、字节流和可靠传输。使用 TCP 协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP 连接是全双工的,即双方的数据读写可以通过一个连接进行。完成数据交换之后,通信双方都必须断开连接以释放系统资源。原创 2023-03-21 22:47:18 · 16269 阅读 · 0 评论 -
Linux 网络编程学习笔记——四、HTTP 通信
在 HTTP 通信链上,客户端和目标服务器之间通常存在某些中转代 理服务器,它们提供对目标资源的中转访问。一个 HTTP 请求可能被多个代理服务器转发,后面的服务器称为前面服务器的上游服务器。原创 2023-03-22 21:00:15 · 16275 阅读 · 1 评论 -
Linux 网络编程学习笔记——五、Linux 网络编程基础 API
现代 CPU 的累加器一次都能装载(至少)4 字节(下面均考虑 32 位机),即一个整数。那么这 4 字节在内存中排列的顺序将影响它被累加器装载成的整数的值。这就是字节序问题。字节序分为大端字节序(big endian)和小端字节序(little endian)。现在 PC 大多采用小端字节序,因此小端字节序又被称为主机字节序。当格式化的数据(比如 32 bit 整型数和 16 bit 短整型数)在两台使用不同字节序的主机之间直接传递时,接收端必然错误地解释之。原创 2023-03-22 21:50:11 · 14783 阅读 · 0 评论 -
Linux 网络编程学习笔记——六、高级 I/O 函数
pipe 函数的参数是一个包含两个 int 型整数的数组指针。该函数成功时返回 0 ,并将一对打开的文件描述符值填入其参数指向的数组。如果失败,则返回 -1 并设置 errno。通过 pipe 函数创建的这两个文件描述符 fd[0] 和 fd[1] 分别构成管道的两端,往 fd[1] 写入的数据可以从 fd[0] 读出。并且,fd[0] 只能用于从管道读出数据,fd[1] 则只能用于往管道写入数据,而不能反过来使用。如果要实现双向的数据传输,就应该使用两个管道。默认情况下,这一对文件描述符都是阻塞的。原创 2023-03-23 21:53:28 · 14788 阅读 · 0 评论 -
Linux 网络编程学习笔记——七、Linux 服务器程序规范
除了网络通信外,服务器程序通常还必须考虑许多其他细节问题。这些细节问题涉及面广且零碎,而且基本上是模板式的,所以称之为服务器程序规范。原创 2023-03-24 16:02:19 · 14593 阅读 · 0 评论 -
Linux 网络编程学习笔记——八、高性能服务器程序框架
服务器可被解构为 3 个主要模块:TCP/IP 协议在设计和实现上并没有客户端和服务器的概念,在通信过程中所有机器都是对等的。但由于资源(视频、新闻、软件等)都被数据提供者所垄断,所以几乎所有的网络应用程序都很自然地用了客户端/服务器模型,即所有客户端都通过访问服务器来获取所需的资源:C/S 模型的逻辑很简单:P2P(Peer to Peer,点对点)模型比 C/S 模型更符合网络通信的实际情况。它摒弃了以服务器为中心的格局,让网络上所有主机重新回归对等的地位:P2P 模型使得每台机器在消耗服务的原创 2023-03-27 17:11:46 · 14762 阅读 · 1 评论 -
Linux 网络编程学习笔记——九、I/O 复用
I/O 复用使得程序能同时监听多个文件描述符,这对提高程序的性能至关重要。需要指出的是,I/O 复用虽然能同时监听多个文件描述符,但它本身是阻塞的。并且当多个文件描述符同时就绪时,如果不采取额外的措施,程序就只能按顺序依次处理其中的每一个文件描述符,这使服务器程序看起来像是串行工作的。如果要实现并发,只能使用多进程或多线程等编程手段。Linux 下实现 I/O 复用的系统调用主要有 select 、poll 和 epoll。原创 2023-03-27 21:02:20 · 14959 阅读 · 0 评论 -
Linux 网络编程学习笔记——十、信号
Linux 下,一个进程给其他进程发送信号的 API 是 kill 函数。pid 参数含义pid > 0信号发送给 PID 为 pid 的进程pid = 0信号发送给本进程组内的其他进程pid = -1信号发送给除 init 进程外的所有进程,但发送者需要拥有对目标进程发送信号的权限pid < -1信号发送给组 ID 为 -pid 的进程组中的所有成员Linux 定义的信号值都大于 0 ,如果 sig 取值为 0 ,则 kill 函数不发送任何信号。原创 2023-03-30 20:35:40 · 14786 阅读 · 0 评论 -
Linux 网络编程学习笔记——十一、定时器
网络程序需要处理的第三类事件是定时事件,比如定期检测一个客户连接的活动状态。服务器程序通常管理着众多定时事件,因此有效地组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器的性能有着至关重要的影响。为此,要将每个定时事件分别封装成定时器,并使用某种容器类数据结构,比如链表、排序链表和时间轮,将所有定时器串联起来,以实现对定时事件的统一管理。本章主要讨论的就是两种高效的管理定时器的容器:时间轮和时间堆。不过,在讨论如何组织定时器之前,我们先要介绍定时的方法。原创 2023-03-30 20:36:01 · 14693 阅读 · 0 评论 -
Linux 网络编程学习笔记——十二、高性能 I/O 框架库 Libevent
I/O 框架库以库函数的形式,封装了较为底层的系统调用,给应用程序提供了一组更便于使用的接口。这些库函数往往比程序员自己实现的同样功能的函数更合理、更高效,且更健壮。因为它们经受住了真实网络环境下的高压测试,以及时间的考验。各种 I/O 框架库的实现原理基本相似,要么以 Reactor 模式实现,要么以 Proactor 模式实现,要么同时以这两种模式实现。原创 2023-03-30 20:36:16 · 14733 阅读 · 0 评论 -
Linux 网络编程学习笔记——十三、多进程编程
进程是Linux操作系统环境的基础,它控制着系统上几乎所有的活动。原创 2023-03-30 20:38:47 · 16080 阅读 · 0 评论 -
Linux 网络编程学习笔记——十四、多线程编程
线程是程序中完成一个独立任务的完整执行序列,即一个可调度的实体。根据运行环境和调度者的身份,线程可分为内核线程和用户线程。内核线程,在有的系统上也称为 LWP(Light Weight Process,轻量级进程),运行在内核空间,由内核来调度;用户线程运行在用户空间,由线程库来调度。当进程的一个内核线程获得 CPU 的使用权时,它就加载并运行一个用户线程。可见,内核线程相当于用户线程运行的“容器”。一个进程可以拥有 M 个内核线程和 N 个用户线程,其中 M ≤ N。原创 2023-03-30 20:36:43 · 14797 阅读 · 0 评论 -
Linux 网络编程学习笔记——十五、进程池和线程池
在前面的章节中,我们是通过动态创建子进程(或子线程)来实现并发服务器的。这样做有如下缺点:本章将分析这两种“池”的细节,给出它们的通用实现,并分别用进程池和线程池来实现简单的并发服务器。进程池和线程池相似,所以这里我们只以进程池为例进行介绍。如没有特殊声明,下面对进程池的讨论完全适用于线程池。进程池是由服务器预先创建的一组子进程,这些子进程的数目在 3 ~ 10 个之间(典型情况)。比如 httpd 守护进程就是使用包含 7 个子进程的进程池来实现并发的。线程池中的线程数量应该和 CPU 数量差不多。进程池原创 2023-03-30 20:39:15 · 12574 阅读 · 0 评论 -
计算机网络复试问题笔记
目录:点我1. 网络的功能是什么?答:数据通信、资源共享、分布式处理、提高可靠性、负载均衡。2. 根据网络的覆盖范围应把网络分为几类?答:广域网、城域网、局域网。广域网:覆盖地理区域大,常借用公用网络,传输速率比较低,网络拓扑结构复杂。城域网:城市范围内建立的通信网络,传输速率高,用户投入少,接入简单,技术先进安全,大多采用以太网技术。局域网:将小区域内的各种通信设备互联在一起的通信网络,使用广播的技术。3. ISO/OSI 模型各层的功能是什么?答:物理层:传输单位为比特,在物理原创 2021-03-16 15:42:21 · 2264 阅读 · 2 评论