自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(223)
  • 收藏
  • 关注

原创 【Linux网络】多路转接poll

poll 是 Linux 网络编程中的一种 I/O 多路复用机制,用于在单线程内同时监视多个文件描述符的状态变化,适用于处理多个并发连接。与 select 相比,poll 优化了文件描述符数量限制和参数设置问题,使用 pollfd 结构体数组来指定监视的文件描述符及其事件。poll 函数通过阻塞等待事件发生,支持超时控制和信号中断,返回后通过检查 revents 字段确定事件类型。尽管 poll 在灵活性和超时控制上具有优势,但其在处理大规模连接时存在性能瓶颈,建议在高并发场景下使用更高效的 epoll

2025-05-18 17:17:23 420

原创 【Linux网络】多路转接select

多路转接(多路复用)是一种用于监视多个文件描述符(fd)状态变化的机制,常见的实现方式包括select、poll和epoll。select是其中一种系统调用,允许程序等待多个fd的状态变化,直到其中一个或多个fd就绪。select函数原型包括参数nfds(最大fd值+1)、readfds、writefds、exceptfds(分别表示可读、可写和异常fd集合)以及timeout(超时时间)。fd_set结构用于表示fd集合,通过位图操作来管理fd。select的返回值表示就绪的fd数量,0表示超时,-1表示

2025-05-18 16:12:26 574

原创 【Linux网络】五种IO模型与阻塞IO

在Linux网络环境中,IO(输入/输出)是网络数据传输的核心,涉及数据从网络到系统再到应用程序的传输过程。IO模型主要分为阻塞IO、非阻塞IO、IO多路复用、信号驱动IO和异步IO。阻塞IO在数据未就绪时会阻塞进程,而非阻塞IO则通过轮询检查数据状态,避免长时间阻塞。IO多路复用通过select、poll、epoll等系统调用,允许单线程处理多个连接,提升性能。信号驱动IO通过信号通知应用程序数据就绪,而异步IO则完全由内核处理数据传输,通知应用程序结果。同步与异步通信的区别在于调用者是否主动等待结果,而

2025-05-18 15:02:30 576

原创 【Linux网络】DNS与ICMP

如上图所示,域名结构是树状结构,树的最顶端代表根服务器,根的下一层就是由我们所熟知的.com、.net、.cn等通用域和.cn、.uk等国家域组成,称为顶级域。网上注册的域名基本上是二级域名,比如http://baidu.com、http://taobao.com等等二级域名,它们基本上是归企业和运维人员管理。ping命令基于ICMP,是在网络层,而端口号,是传输层的内容。至今,我们的计算机上仍然保留了hosts文件,在域名解析的过程中仍然会优先查找hosts文件的内容。ICMP协议是一个网络层协议。

2025-05-17 20:18:04 551

原创 【Linux网络】内网穿透

内网穿透是连接内网与公网的桥梁,通过合理选择工具和配置,可以在远程办公、个人服务搭建、开发测试等场景中发挥重要作用。但需注意安全风险,优先选择加密传输和权限控制功能完善的方案。随着云计算和边缘计算的发展,未来内网穿透技术可能进一步集成到云服务中,变得更加便捷和安全。内网打洞是P2P通信的核心技术,通过巧妙利用NAT设备的特性,实现了内网设备间的直接通信,在实时交互场景中具有不可替代的优势。尽管受限于NAT类型和防火墙策略,但其与STUN/TURN/ICE的结合已成为现代网络通信的基础设施。

2025-05-17 17:58:20 634

原创 【Linux网络】NAT和代理服务

正向代理(Forward Proxy)是一种常见的网络代理方式,它位于客户端和目标服务器之间,

2025-05-17 16:11:09 591

原创 【Linux网络】ARP协议

ARP协议(地址解析协议)是介于数据链路层和网络层之间的协议,用于建立IP地址与MAC地址的映射关系。其工作流程包括发送ARP请求(广播)、接收并响应ARP请求(单播)以及更新ARP缓存表。ARP缓存表存储IP-MAC映射,具有时效性,可通过命令手动管理。ARP协议的扩展包括免费ARP、ARP代理和ARP欺骗,其中ARP欺骗是一种常见的网络攻击手段。此外,ARP与RARP(反向地址解析协议)的区别在于前者已知IP求MAC,后者已知MAC求IP。理解ARP协议有助于排查网络问题并防范安全威胁。

2025-05-17 14:52:51 710

原创 【Linux网络】数据链路层

数据链路层是网络通信中用于设备间数据传输的关键层,以太网作为其核心技术标准,涵盖了数据链路层和物理层的内容,规定了网络拓扑、访问控制方式和传输速率等。以太网帧格式包括源地址、目的地址(MAC地址)、帧协议类型和CRC校验码。MAC地址是识别数据链路层节点的唯一标识,长度为48位。MTU(最大传输单元)是数据链路层对数据包大小的限制,以太网的MTU为1500字节。MTU对IP、UDP和TCP协议有重要影响,可能导致数据包分片和重组失败。MSS(最大段大小)是TCP协议中单个数据报的最大长度,受MTU限制。通过

2025-05-16 21:33:09 989

原创 【Linux网络】IP 分片和组装

16标识 001 0。

2025-05-16 21:04:30 627

原创 【Linux网络】网络层

网络层负责在复杂的网络环境中确定合适的路径,核心协议是IP协议。IP协议通过IP地址(IPv4和IPv6)标识网络中的主机和路由器,并将数据包跨网络转发到目标主机。IP地址分为网络号和主机号,网络号标识不同的子网,主机号标识子网内的具体设备。子网划分通过子网掩码实现,提高了IP地址的利用率。IP协议头部包含版本号、服务类型、总长度、生存时间等字段,用于控制数据包的传输。路由过程通过逐跳转发实现,路由器根据目标地址选择最佳路径。IP地址数量有限,通过动态分配、NAT技术和IPv6缓解地址不足问题。私有IP地址

2025-05-14 17:34:20 1141

原创 【Linux网络】TCP全连接队列

本文通过实验和源码分析探讨了TCP协议中的一些关键概念。首先,通过测试代码验证了listen函数的第二个参数对全连接队列长度的影响,发现当全连接队列满时,新的连接请求会进入SYN_RECV状态而非ESTABLISHED状态。接着,介绍了使用tcpdump工具进行网络数据包捕获和分析的常见方法,包括捕获特定接口、IP地址和端口的数据包,以及保存和读取数据包文件。最后,通过分析socket结构体源码,探讨了socket与文件描述符的关联机制,进一步理解了Linux系统中“一切皆文件”的设计理念。这些内容有助于深

2025-05-14 15:38:05 906

原创 【Linux网络】传输层协议TCP

TCP协议是一种传输控制协议,旨在确保数据传输的可靠性。其核心机制包括确认应答(ACK)和超时重传,通过序列号和确认序号来保证数据的有序性和完整性。TCP还通过三次握手和四次挥手来管理连接的建立和关闭,确保通信双方的全双工通信。在连接关闭时,主动关闭的一方会进入TIME_WAIT状态,等待2MSL(最大报文生存时间)以确保网络中残留的报文消散,避免端口冲突。TCP的这些机制共同保障了数据传输的可靠性和高效性。

2025-05-14 14:29:07 964

原创 【Linux网络】传输层协议UDP

传输层协议UDP(用户数据报协议)是一种无连接、不可靠的传输协议,适用于不需要建立连接或确认机制的应用场景。UDP通过端口号标识不同的应用程序,端口号分为知名端口号(0-1023)和动态分配端口号(1024-65535)。UDP协议的特点包括无连接、不可靠和面向数据报,即数据报在传输过程中不会被拆分或合并。UDP的缓冲区机制简单,接收缓冲区不保证数据报的顺序,且缓冲区满时新数据会被丢弃。UDP协议首部中的16位长度限制了单个UDP数据报的最大长度为64K,超过此限制的数据需要在应用层进行分包处理。基于UDP

2025-05-13 17:45:27 729

原创 【Linux网络】HTTPS

HTTPS协议是在HTTP基础上引入加密层,通过加密技术保障数据传输的安全性。HTTP协议明文传输易被篡改,而HTTPS通过对称加密和非对称加密结合的方式,确保数据在传输过程中不被窃取或篡改。对称加密使用同一密钥进行加密和解密,效率高但密钥传输存在风险;非对称加密使用公钥和私钥配对,安全性高但效率较低。HTTPS采用非对称加密传输对称密钥,后续通信使用对称加密,兼顾安全与效率。为防止中间人攻击,HTTPS引入数字证书,由CA机构验证服务器身份,确保证书中的公钥真实可靠。数字签名基于非对称加密,用于验证数据完

2025-05-13 17:10:37 1067

原创 【Linux网络】 HTTP cookie与session

HTTP Cookie是服务器发送到用户浏览器并保存的一小块数据,用于在后续请求中识别用户。Cookie分为会话Cookie(浏览器关闭时失效)和持久Cookie(有明确过期时间)。服务器通过Set-Cookie字段设置Cookie,浏览器在后续请求中自动携带。Cookie的格式包括名称、值、过期时间、路径、域名等属性,可通过secure和HttpOnly标志增强安全性。Cookie常用于用户认证、会话管理、跟踪用户行为等场景。测试中,Cookie的写入、自动提交、过期时间和路径设置均通过代码实现,确保其功

2025-05-12 16:57:02 742

原创 【Linux网络】HTTP

在这两个状态码的HTTP响应头部,用于告诉浏览器应该将请求重定向到哪个新的URL地址。(HyperText Transfer Protocol,超文本传输协议)是一个至关重要的协议。但实际上,已经有大佬们定义了一些现成的,又非常好用的应用层协议,供我们直接参考使用。将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。HTTP中的Connection字段是HTTP报文头的一部分,它主要用于控制和管理客户端与服务器之间的连接状态。

2025-05-11 19:14:51 1022

原创 【Linux系统】进程间关系与守护进程

本文介绍了进程间关系与守护进程的相关概念,主要包括进程组、会话、控制终端和作业控制。进程组是一个或多个进程的集合,每个进程组有一个组长进程,其ID等于进程ID。会话是一个或多个进程组的集合,每个会话有一个会话ID。控制终端是用户通过终端登录系统后得到的Shell进程的终端,进程的标准输入、输出和错误都指向控制终端。作业控制涉及前台和后台作业的管理,用户可以通过命令将作业挂起或切回,并查看后台执行或挂起的作业状态。这些概念对于理解和管理UNIX系统中的进程和作业至关重要。

2025-05-11 15:38:32 1299

原创 【Linux网络】应用层自定义协议与序列化

你可以用toStyledString、StreamWriter和FastWriter提供了不同的序列化选项,它们提供强大的错误处理机制。Json::Reader和parseFromString函数是Jsoncpp中主要的反序列化工具,在进行序列化和反序列化时,请确保处理所有可能的错误情况,并验证输入和输出的有效性。

2025-05-09 17:06:03 1077

原创 【Linux网络】Socket-TCP相关函数

这些函数是C++ 中实现Socket - TCP编程的基础,通过组合使用它们,可以创建可靠的网络应用程序,实现客户端与服务器之间的通信。

2025-05-09 16:35:42 495

原创 【Linux网络】网络命令

netstat可以提供关于网络连接、路由表、网络接口状态以及网络协议统计等多方面的信息,帮助用户了解系统的网络活动情况,诊断网络问题,监控网络性能等。

2025-05-08 21:32:47 1085

原创 【Linux网络】Socket-UDP相关函数

是一个用于接收数据报(datagram)的系统调用函数,在网络编程里应用广泛,特别是在使用 UDP 协议通信时。是网络编程里用于发送数据报(datagram)的系统调用函数,主要用于 UDP 协议通信。与 TCP 不同,UDP 是无连接的协议,这个函数的作用是创建一个 Socket 文件描述符,在客户端和服务器都可以使用。此函数用于把一个本地地址和端口号绑定到 Socket 上,一般在服务器端使用。是在网络编程中用于表示 IPv4 地址信息的结构体,它在。这个结构体是网络编程的基础组件,在使用。

2025-05-08 18:01:48 1045

原创 【Linux网络】Socket 编程预备

本文介绍了Socket编程的基础知识,包括IP地址和端口号的作用、传输层协议(TCP和UDP)的特点、网络字节序的概念以及Socket编程接口。IP地址用于标识网络中的主机,而端口号用于标识主机中的进程,两者结合可以唯一标识网络中的一个进程。传输层协议中,TCP提供可靠的有连接通信,而UDP则提供无连接的不可靠通信。网络字节序规定了大端字节序作为标准,确保不同主机间的数据一致性。最后,文章详细介绍了Socket API,包括创建、绑定、监听、接收请求和建立连接等操作,并解释了sockaddr和sockadd

2025-05-08 16:43:47 769

原创 【Linux网络】网络传输基本流程

IP网络层存在的意义:提供网络虚拟层,让世界的所有网络都是IP网络,屏蔽最底层网络的差异。• 局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标mac地址判定。初步明白了局域网通信原理,再来看同一个网段内的两台主机进行发送消息的过程。. 我们整个的课程,凡是提到IP协议,没有特殊说明的,默认都是指。而其中每层都有协议,所以当我进行进行上述传输流程的时候,要进行。在网络传输的过程中,数据不是直接发送给对方主机的,而是先要。,最后由底层发送,然后由对方主机的底层来进行接受,再。

2025-05-08 00:45:18 884

原创 【Linux网络】网络协议基础

本文介绍了计算机网络的基础知识,包括计算机网络的背景、协议的概念、协议分层的重要性以及OSI七层模型和TCP/IP五层(或四层)模型。文章首先描述了计算机网络从独立模式到网络互联、局域网和广域网的发展过程,强调了协议在计算机通信中的关键作用。接着,文章详细解释了协议分层的优势,如解耦合和降低维护成本,并介绍了OSI七层模型的理论框架及其在实际应用中的局限性。最后,文章重点讲解了TCP/IP五层模型,包括物理层、数据链路层、网络层、传输层和应用层的功能,并指出协议的本质是通信双方共同认识的结构化数据类型。通过

2025-05-08 00:13:03 734

原创 【Linux系统】自旋锁

自旋锁是一种多线程同步机制,用于保护共享资源免受并发访问的影响。在多个线程尝试获取锁时,它们会持续自旋(即在一个循环中不断检查锁是否可用)而不是立即进入休眠状态等待锁的释放。这种机制减少了线程切换的开销,适用于短时间内锁的竞争情况。但是不合理的使用,可能会造成 CPU 的浪费。

2025-05-06 19:01:09 447

原创 【Linux系统】读写锁

写者优先策略可以减少写者等待的时间,但可能会导致读者饥饿(即读者长时间无法获得读取权限),特别是当写者频繁到达时。这意味着当有读者正在读取时,新到达的读者会立即被允许进入,而写者会被阻塞。当写者请求写入权限时,系统会尽快地让写者获得机会,但会导致写者饥饿(即写者长时间无法获得写入权限),特别是当读者频繁到达时。在编写多线程的时候,有一种情况是十分常见的。读者写者问题是并发编程中的经典问题,主要研究多个进程或线程对共享数据进行读和写操作时如何实现同步和互斥,以保证数据的一致性和操作的正确性。

2025-05-06 18:09:15 463

原创 【Linux系统】线程安全

原因是,STL 的设计初衷是将性能挖掘到极致,而一旦涉及到加锁保证线程安全,会对性能造成巨大的影响。如果需要在多线程环境下使用,往往需要调用者自行保证线程安全。对于 shared_ptr,多个对象需要共用一个引用计数变量,所以会存在线程安全问题。对于 unique_ptr,由于只是在当前代码块范围内生效,因此不涉及线程安全问题。而且对于不同的容器,加锁方式的不同,性能可能也不同(例如hash表的锁表和锁桶)。不要被上面绕口令式的话语唬住,你只要仔细观察,其实对应概念说的都是一回事。

2025-05-06 15:55:12 886

原创 【Linux系统】线程池

线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。中获取任务对象,获取到任务对象后,执行任务对象中的任务接口。此处,我们选择固定线程个数的线程池。a. 创建固定数量线程池,循环从。b. 浮动线程池,其他同上。

2025-05-05 19:28:25 380

原创 【Linux系统】生产者消费者模型

生产者和消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。

2025-05-05 17:04:04 831

原创 【Linux系统】条件变量

条件变量是用来进行线程同步的特性,内部要维护调度队列。

2025-05-04 20:54:19 358

原创 【Linux系统】互斥量mutex

要做到这三点,本质上就是需要一把锁。Linux上提供的这把锁叫。线程在访问临界区代码时,可以切换至其他线程吗?锁本身就是一个全局变量,那谁来确保锁的安全?若申请锁的时候,都被别的线程拿走,怎么办?

2025-05-04 20:04:17 838

原创 【Linux系统】线程

在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是“一个进程内部的一个控制序列”。一切进程至少都有一个执行线程。线程在进程内部运行,本质是在进程地址空间内运行。在Linux系统中,在CPU眼中,看到的PCB都要比传统的进程更加轻量化。透过进程虚拟地址空间,可以看到进程的大部分资源,将进程资源合理分配给每个执行流,就形成了线程执行流。

2025-05-02 19:37:49 1099

原创 【Linux系统】进程间信号(捕捉信号)

系统调用也是通过中断完成的。

2025-05-02 14:49:09 733

原创 【Linux系统】Linux进程信号(产生,保存信号)

sigset_t类型对于每种信号用一个bit表示“有效”或“无效”状态,至于这个类型内部如何存储这些bit则依赖于系统实现,从使用者的角度是不必关心的,使用者只能调用以下函数来操作sigset_t变量,而不应该对它的内部数据做任何解释,比如用printf直接打印sigset_t变量是没有意义的。称为信号集,这个类型可以表示每个信号的“有效”或“无效”状态,在阻塞信号集中“有效”和“无效”的含义是该信号是否被阻塞,而在未决信号集中“有效”和“无效”的含义是该信号是否处于未决状态。

2025-05-01 16:32:20 977

原创 【Linux系统】System V 信号量

System V信号量是Linux系统中一种重要的进程间通信(IPC)机制。主要用于协调各个进程对共享资源的访问,以避免竞争条件(多个进程同时访问和修改共享资源导致数据不一致的情况)。信号量本质上是一个非负整数计数器,用于记录可用资源的数量。进程在访问共享数据之前,需要对信号量进行操作,以获取对资源的访问权。

2025-05-01 12:25:57 265

原创 【Linux系统】System消息队列

在Linux系统中,System V消息队列是一种进程间通信(IPC)机制。它允许不同的进程通过发送和接收消息来进行通信,这种通信方式是的,消息是一个有类型的数据块,进程可以。消息队列提供了一种异步通信的方式,发送进程将消息发送到消息队列后可继续执行,而接收进程可以在合适的时候从消息队列中获取消息。

2025-05-01 12:07:57 374

原创 【Linux系统】systemV共享内存

在Linux系统中,共享内存是一种高效的进程间通信(IPC)机制,它允许两个或者多个进程共享同一块,这些进程可以将这块区域映射到自己的虚拟地址空间中。共享内存区是最快的IPC形式。一旦这样的,这些进程间数据传递不再涉及到内核,换句话说进程不再通过执行进入内核的系统调用来传递彼此的数据。

2025-04-29 23:38:03 864

原创 【Linux系统】进程间通信(管道)

让各个进程看到同一份资源。

2025-04-28 16:34:17 587

原创 【Linux系统】ELF文件

静态链接的出现,提高了程序的模块化水平。对于一个大的项目,不同的人可以独立地测试和开发自己的模块。通过静态链接,生成最终的可执行文件。我们知道静态链接会将编译产生的所有目标文件,和用到的各种库合并成一个独立的可执行文件,其中我们会去修正模块间函数的跳转地址,也被叫做编译重定位(也叫做静态重定位)。而动态链接实际上将链接的整个过程推迟到了程序加载的时候。

2025-04-27 15:38:24 927

原创 【Linux系统】静态库与动态库

库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。预备工作1024012。

2025-04-27 12:55:42 561

大连理工大学经济学原理复习笔记

期末经济学原理笔记

2024-11-23

大学计算机导论专业课知识点

大学计算机导论专业课知识点

2024-10-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除