- 博客(175)
- 收藏
- 关注
原创 计算机网络 之 【UDP协议】(UDP报文格式及特点、UDP内核实现简介、UDP VS TCP)
UDP协议规定其长度字段为16位,因此单个UDP报文的最大理论长度为64KB(实际数据最多65507字节);但底层以太网的MTU通常为1500字节,超过此大小的报文会在IP层自动分片传输,分片会显著增加丢包风险(任一分片丢失则整个报文无法重组)并降低传输效率。它决定了IP分片的阈值:超过MTU的数据报会被分片或丢弃(若设置了DF标志),直接影响UDP等传输协议的载荷上限(如UDP实际最大数据需扣除IP首部20字节+UDP首部8字节,即1472字节)3.3根据目的端口找到对应的socket,交付给上层。
2026-04-07 22:38:00
457
1
原创 Python学习5 之【字符串】
特性说明定义通过__enter__和__exit__方法管理资源的对象核心语法with语句主要用途自动管理资源(文件、锁、数据库连接等)优势确保资源正确释放,即使发生异常也会清理工作原理阶段触发时机执行操作对应方法进入进入with代码块前获取/打开资源执行运行代码块使用资源退出离开代码块时(正常/异常)释放/关闭资源__exit__()常见使用示例场景传统写法上下文管理器写法文件操作f.close()线程锁# 操作with lock:# 操作数据库连接。
2026-04-07 22:37:47
297
原创 计算机网络之 【TCP协议的启发】(C语言实现多态思想、UDP实现可靠传输思想)
在不同场景中其严重程度不同:TCP按序交付机制导致连接级阻塞(影响较高),HTTP/1.1串行请求也存在类似问题;而在交换机架构中,通过虚拟输出队列(VOQ)等技术可将队头阻塞控制在。(如部分可靠、优先级调度、快速重传),牺牲通用性换取性能。场景1:局域网文件传输(容忍少量丢包,要求简单)场景2:实时游戏状态同步(要求低延迟,可丢旧包),但可以针对特定场景(游戏、视频、RPC)进行。场景3:音视频流媒体(时序优先,可丢帧)(1)为什么需要UDP可靠传输。(2)统一接口,多种实现。(1)数据与行为分离。
2026-04-04 18:11:23
199
原创 计算机网络 之 【TCP协议】(面向字节流、TCP异常情况、保活机制、文件与Socket的关系、网络协议栈的本质)
现代网络协议栈在接收数据时,通过DMA将数据直接写入内存缓冲区,各层(数据链路层、网络层、传输层)的解包操作仅依赖移动指针(如sk_buff中的data指针)和偏移量计算来逐层剥离协议头,从而避免对数据本身的多次拷贝,实现了内核层面的高效处理,但最终通过 read/recvfrom 将数据从内核缓冲区拷贝到用户空间仍需要一次不可避免的 CPU 拷贝。网络保活机制的核心是:在长连接空闲时,主动发送极小探测包来确认对端和中间设备(防火墙、NAT等)的连接状态仍有效,防止因超时而误判连接已死。
2026-04-04 18:11:03
583
1
原创 计算机网络 之 【TCP协议】(确认应答、超时重传、流量控制、三次握手、四次挥手、滑动窗口、快重传、延迟应答、Nagle算法、捎带应答、拥塞控制)
机制是指为了解决一个特定问题,而设计的一套有明确步骤、规则和触发条件的做事方法。
2026-04-04 18:10:47
603
原创 计算机网络 之 【TCP协议】(TCP的核心定位与控制本质、TCP报文结构)
IP网络本身提供的是不可靠传输服务,数据在传输过程中可能出现(同一数据收到多次)、(后发的先到)、(数据中途丢失)等问题,TCP协议正是为了解决这些不可靠问题而设计的,通过序号去重和排序、超时重传、确认应答等机制,在不可靠的IP层之上构建可靠的传输服务。
2026-04-04 18:10:05
358
原创 计算机网络 之 【HTTPS协议】(数字摘要、密钥、数字证书)
客户端首次请求服务器时,中间人截获该请求中间人伪造自己的公钥,冒充服务器公钥发送给客户端客户端使用中间人的公钥加密后续通信数据(如对称密钥或请求内容)中间人用自己的私钥解密客户端发来的数据,获取明文,并可随意篡改中间人再用真正的服务器公钥重新加密篡改后的数据,转发给服务器服务器以为在与客户端通信,实际上全程被中间人监听、劫持数字摘要(又称数据指纹)确定性(相同输入必然产生相同摘要)、单向性(无法从摘要逆推出原始数据)和抗碰撞性(不同数据产生相同摘要的概率极低,可忽略不计)
2026-03-30 15:14:57
466
原创 Python学习4 之 【函数】(函数的相关语法、下划线的使用、global与nonlocal关键字)
模式含义示例_var内部使用(约定)var_避免关键字冲突class___var名称修饰(私有)__var__魔术方法__init__临时变量/忽略值。
2026-03-30 15:14:28
356
原创 计算机网络 之 【HTTP协议】(简易HTTP服务器实现逻辑)
(HTML、CSS、JS、图片等),前端负责编写web根目录下的网页资源,后端负责编写服务器程序处理请求并返回资源,浏览器首次跳转时一定发生了HTTP请求。所有文件如下,下面只展示HttpServer。以短连接为例(好实现)
2026-03-27 18:12:11
357
原创 计算机网络 之 【HTTP协议】(http的无状态性、Cookie与Session的简介)
HTTP 协议默认不记录用户状态,每次请求独立,服务器无法直接识别请求来源的用户身份。
2026-03-27 17:16:29
544
1
原创 计算机网络 之 【HTTP协议】(hppt请求与响应细节、http版本与连接管理)
特性HTTP/1.0HTTP/1.1HTTP/2HTTP/3传输协议TCPTCPTCPUDP(基于QUIC协议)连接模型短连接(每次请求新建TCP连接)持久连接(Keep-Alive默认启用)多路复用(单连接并行请求)多路复用(QUIC连接,无队头阻塞)数据传输格式纯文本纯文本二进制分帧(Frames二进制分帧(优化版QUIC帧)头部压缩不支持不支持HPACK(基于霍夫曼编码)QPACK(动态表优化,抗丢包)服务器推送不支持不支持支持(支持(优化版推送机制)
2026-03-26 08:56:56
693
1
原创 Python学习3 之 【选择与循环结构】(is VS ==、split、map、range、sum与math.fsum)
判断是否是同一个对象(单例、None)判断内容是否相同(如字符串、数值)的第一个参数是函数,第二个参数是。:金融、科学、大数+小数场景。时,遍历的是列表元素。
2026-03-21 17:41:05
393
1
原创 C语言字符串相关函数(strcspn、strspn、strchr、strstr、strtok、isXXX)
函数查找目标返回类型返回内容示例结果strcspn字符集size_t第一个匹配字符的位置3strspn字符集size_t开头连续匹配的数量3strchr单个字符char*指向该字符的指针"llo"strstr子字符串char*指向子串的指针"llo"函数检查内容返回真时的字符常见应用isdigit()数字09验证数字输入isalpha()字母AZaz验证文本输入isupper()大写字母AZ密码复杂度检查islower()小写字母az密码复杂度检查isalnum()字母或数字AZaz09。
2026-03-15 21:28:04
531
1
原创 Python学习2 之 【数据类型、运算及相关函数、math库】
不可变数据类型(如intfloatstrtuple等)一旦创建,其值就不能改变不同的值会创建不同的对象给变量赋值就是让变量成为该对象的引用# 不同的值创建不同的对象a = 100b = 200print(id(a)) # 140736528944512 (不同)print(id(b)) # 140736528948512 (不同)print(id(c)) # 14073652894512 (不同)print(id(d)) # 14073652894812 (不同)
2026-03-15 21:27:52
203
原创 计算机网络 之 【自定义协议、序列化与反序列化】(C++使用JSON示例)
协议的必要性协议是通信双方的约定,它定义了数据的格式和含义只有双方遵循同一协议,才能正确地解析数据自定义协议就是根据特定需求设计的私有协议,通常用于内部系统或专用场景直接发送结构体存在的问题我们使用结构体将数据结构化,但却不推荐通信双方直接发送结构体:不同编译器/平台的对齐规则 可能导致结构体大小不同。字节序(大小端) 不同。版本兼容性:结构体字段增减会导致解析失败。因此,需要将结构化数据序列化为字节流(如字符串、二进制格式)再发送,接收方再反序列化恢复为结构。
2026-03-07 10:17:35
410
原创 Python学习1(print、格式控制、input、类型转换、type、id、random模块)
语言的执行方式Python 是一种解释型语言(实际是先编译成字节码再由虚拟机解释执行),它通过解释器,具有跨平台和开发效率高的优点,但运行速度相对较慢;而 C 语言是典型的编译型语言,需要,其机器码由 CPU 直接运行,因此执行速度极快,但依赖特定平台且编译过程较长第三方库的安装—pip输出print()
2026-03-07 10:17:18
360
原创 计算机网络 之 【TCP套接字编程】(TCP服务器-客户端基本模型、TCP 与 UDP 的缓冲区机制对比、服务器端口复用、信号处理与写失败)
当接收缓冲区为空时读操作会阻塞(除非设置非阻塞),当发送缓冲区满时写操作会阻塞,这种设计实现了全双工通信,使得网络数据的收发可以并发处理,大大提高了通信效率。基于客户端-服务器模型,客户端通过Telnet协议连接到远程服务器,服务器响应客户端请求并执行相应操作。:确保最后一个ACK能够到达对端(客户端),并让网络中剩余的旧连接数据包自然消亡,避免干扰新连接。写操作将用户数据拷贝到内核发送缓冲区等待网络发送,读操作从内核接收缓冲区拷贝数据到用户空间,这。:当对端关闭连接后,继续向该连接写入数据,内核会发送。
2026-02-28 19:43:15
1072
原创 Linux 之 【守护进程】(&、jobs、fg、bg、setsid、/dev/null、deamon、守护进程与孤儿进程的比较)
启动用户Shell(如bash),并将其标准输入/输出/错误绑定到Xshell的伪终端(/dev/pts/X),最终形成。使孙进程继承会话但不再是会话首进程(彻底丧失重新关联终端的权限),最后关闭或重定向标准文件描述符(普通孤儿进程的生命周期由 init 管理,而守护进程主动控制自身行为(如重定向日志、监听端口等)功能:列出当前 Shell 会话中的后台任务(包括暂停和运行中的任务)守护进程的独立性更强,而普通孤儿进程可能仍依赖原会话或进程组。成功返回新会话ID,调用进程成为新会话首进程。
2026-02-28 19:08:27
628
原创 计算机网络 之 【UDP套接字编程的应用】(远程命令执行、popen、pclose、基于多终端的简单群聊)
本系统通过UDP套接字实现远程命令执行,服务器端使用popen函数创建管道执行Shell命令并通过pclose等待子进程结束、获取退出状态,客户端类似Xshell输入指令并显示结果;在执行前必须对指令进行严格的安全检查,通过string::find在命令字符串中查找违禁词(如rm、sudo、shutdown等危险命令和特殊字符),只有通过检查的命令才会被popen执行;
2026-02-26 20:21:02
678
原创 计算机网络 之 【网络套接字编程】(网络字节序、字节序转换函数、套接字编程类型、标准套接字编程的头文件、sockaddr结构、整数IP与字符串IP的转换)
TCP/IP协议强制规定,网络上传输的数据流必须使用大端字节序(低地址存放高位字节)通俗理解:像我们写数字一样,左边(低地址)是高位,右边(高地址)是低位。例如 0x12345678,先发 0x12,最后发 0x78。统一原因互联网由不同架构的机器组成(x86是小端,PowerPC/某些网络设备是大端)网络传输严格遵循从低地址到高地址的顺序发送和接收:发送端将数据在内存中从低地址字节开始依次发出,接收端按收到顺序依次存入本地的低地址到高地址。
2026-02-24 17:10:43
974
原创 计算机网络 之 【网络套接字编程】(固定宽度整数类型、socket常见API、netstat)
操作系统会在首次调用sendto发送数据时,自动从动态端口范围(通常为49152-65535)中随机选择一个未被占用的端口进行绑定,这种机制保证了同一主机上多个客户端进程的端口唯一性,避免了手动绑定可能导致的端口冲突和进程启动失败问题;)用于指定通信协议族,它决定了套接字使用的网络协议类型(IPv4/IPv6/本地IPC等)、地址格式及底层传输方式,是后续地址绑定、数据传输等操作的基础,必须与后续操作匹配且直接影响通信效率和适用场景。TCP/UDP,服务器(客户端通常不需要,系统自动分配临时端口)
2026-02-24 17:10:32
650
原创 计算机网络 之 【网络基础1】(网络的发展、网络协议的简介、OSI七层模型、TCP/IP模型、网络传输流程(封装、解包与分用)的简介、MAC地址与IP地址的简介)
目标:让不同设备互相通信基础:协议(统一的语言/标准)架构:分层模型(TCP/IP五层),各司其职过程:封装(打包) -> 传输(路由/交换)-> 分用(拆包)标识:MAC地址(本地身份) + IP地址(全球/逻辑身份)
2026-02-19 16:47:04
700
原创 计算机网络 之 【网络编程套接字】(局域网通信机制的简介、跨网通信与路由器、端口号、TCP/UDP的简介)
广播特性:局域网内通信时,数据帧会被所有设备接收(物理层广播)MAC地址过滤:设备根据数据帧的目的MAC地址判断是否接收:若与自身MAC一致:接收并上传至上层协议栈;若不一致:直接丢弃交换机作用:交换机通过MAC地址学习构建转发表,实现了数据的按需转发,从而隔离了冲突域。它允许网络内多对节点同时并行通信,这是区别于集线器共享带宽的本质特征,也是以太网从共享介质迈向交换架构的核心飞跃二、跨网通信与路由器传输层(TCP/UDP协议)数据类型:2字节(16位)无符号整数。
2026-02-19 16:47:01
892
原创 C++11 之 【线程库】(Thread、mutex)
std::thread::get_id 是“获取那个线程的ID”,而 std::this_thread::get_id 是“获取我自己的ID”作为线程入口点,支持传递参数、获取线程ID、等待线程完成、分离线程等操作,极大地简化了多线程程序的编写。将other关联的线程所有权转移给当前对象,如果当前对象已关联线程则程序终止。线程对象不可复制,只能移动;获取互斥锁的所有权,如果锁已被其他线程持有,则阻塞当前线程直到获取到锁。返回与线程对象关联的线程ID,若对象无关联线程则返回默认构造的id。
2026-02-15 14:45:55
544
原创 C++11 之 【线程库】(condition_variable、atomic、线程交替打印奇偶数、谓词、线程总结)
接口分类接口名称功能简述存储加载store()原子存储值load()原子加载值隐式转换为 Toperator=赋值操作读写修改exchange()交换并返回旧值弱 CAS(可能虚假失败)强 CAS(无虚假失败)算术运算原子加减,返回旧值operator++operator--前置/后置自增自减operator+=operator-=算术赋值位运算fetch_or()原子位运算,返回旧值operator&=operator|=operator^=位运算赋值问题核心内容什么是线程?
2026-02-15 14:45:37
709
原创 Linux 之 【多线程】(线程池、单例模式)
线程池 = 生产者消费者模型 + 池化技术生产者提交任务,消费者执行任务,队列缓冲任务,池化复用线程——以空间换时间,以控制换稳定构造函数私有化:防止外部创建对象拷贝构造和赋值私有:防止拷贝产生新对象静态成员/静态方法:提供全局访问点延迟加载:懒汉模式的核心优势,优化启动速度线程安全:多线程环境下保证单一实例双重判空:提高性能的关键技术volatile:防止指令重排序和优化问题。
2026-02-15 09:02:30
1028
原创 Linux 之 【多线程】(STL、智能指针与线程安全、读者写者问题)
这种策略确保写操作能及时执行,适合需要数据及时更新的场景,但可能造成读者饥饿——如果写者频繁出现,读者可能长时间无法获取读锁。读者优先策略下,只要存在任何读者正在读取数据,后续到达的读者可以立即获得读锁继续读取,而写者必须等待所有读者释放锁后才能写入。这种策略适合读操作极其频繁、写操作可以延迟的场景,但可能导致写者饥饿——当读者持续不断地到来时,写者可能永远无法获得写锁。写者优先策略下,一旦有写者到达并等待写锁,后续新到达的读者将被阻塞,不能插队读取,直到等待的写者完成写入操作。
2026-02-15 09:02:17
353
原创 Linux 之 【多线程】(死锁、同步与竞态条件、条件变量、pthread_cond_xxx、POSIX信号量、sem_xxx)
如果不配合互斥锁,会出现以下竞态条件:执行流A检查条件发现不满足,在它准备挂起自己之前,执行流B可能已经修改了条件并发送了唤醒信号,这个信号就会被丢失。条件变量是一种“让执行流在条件不满足时智能睡眠、在条件满足时被精准叫醒”的机制,它通过“释放锁+睡眠”的原子操作,解决了传统互斥锁“盲等”导致的CPU浪费等问题。是指在一组执行流中,每个执行流都占有一些资源,同时又在等待其他执行流释放其所占有的资源,从而导致所有执行流都无法继续执行的永久阻塞状态。它不仅保证互斥(数据安全),还保证协作(如条件满足才执行)
2026-02-12 11:47:07
570
原创 Linux 之 【多线程】(pthread_xxx、轻量级进程、原生线程库、线程ID、__thread、线程栈、线程与信号、线程与程序替换)
pthread库正是为了解决这一鸿沟而存在,它将内核的LWP机制封装成标准化的线程API,管理用户空间的线程控制块(TCB)、线程栈和同步原语,同时隐藏了clone()系统调用的复杂性。这些变量的存储空间位于各线程自己的线程控制块(TCB)或专门的TLS段中,生命周期与线程相同,线程结束时自动释放。通常用于存储线程特有的上下文信息,如线程ID、错误状态或线程局部缓存,能有效避免多线程环境下的数据竞争。每一个线程在调用时都必须拥有独立的栈结构,因为每一个线程都会有自己的调用链,保存运行时的临时变量。
2026-02-07 19:35:06
810
原创 Linux 之 【进程信号】(进程地址空间的分区、内核态与用户态、信号的捕获、sigaction、可重入函数、volatile与register、SIGCHLD)
和主程序,共享同一个地址空间(堆、全局变量等),但却没有像线程那样的同步机制(锁、条件变量等)所以需遵循异步信号安全规则:只做最简单、最安全的操作(如设置一个全局 volatile sig_atomic_t 标志),然后将复杂的逻辑留给主程序去检查和处理。
2026-02-04 17:00:49
734
原创 Linux 之 【多线程】(线程的概念、Linux中的线程、页表)
编写多线程需要更全面更深入的考虑,在一个多线程程序里,因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能性是很大的,换句话说。这一洞察,Linux选择复用进程的框架,避免了代码冗余,使得代码维护成本成本降低,不容易出错,所需测试工作较少,系统的整体健壮性较强。实际中任何进程都有页目录,但二级页表稀疏,大部分虚拟地址区域未使用,无需分配所有1024个二级页表,这是虚拟内存节省空间的核心。线程是进程内部的一个执行流(或称执行分支),是操作系统进行CPU调度的基本单位,其执行粒度比进程更细。
2026-02-04 17:00:34
692
原创 Linux 之 【进程信号】(signal、kill、raise、abort、alarm、Core Dump核心转储机制、硬件中断)
SIGKILL(9) 和 SIGSTOP(19)
2026-01-31 18:15:09
732
原创 Linux 之 【进程信号】(sigemptyset、sigfillset、sigaddset、sigdelset、sigismember、sigprocmask、sigpending)
在阻塞信号集中“有效”和“无效”的含义是该信号是否被阻塞,而在未决信号集中“有效”和“无效”的含义是该信号是否处于未决状态。特点:(1)每个信号对应一个位(0/1)(2)1表示阻塞,0表示不阻塞(3)默认情况下,所有信号都不阻塞。内容:(1)SIG_DFL(默认动作)(2)SIG_IGN(忽略)(3)用户自定义函数指针。进程阻塞信号后,信号可以产生并被记录在未决状态,但不会递达执行,直到解除阻塞后才会递达。特点:(1)每个信号对应一个位( 2)1表示有未决信号,0表示没有 (3)内核自动维护。
2026-01-31 18:11:51
728
原创 Linux 之 【进程间通信】(共享内存、ftok、shmget、shmat、shmdt、shctl、IPC相关指令)
因此,key在整个共享内存通信机制中扮演的是进程间“约定地址”的角色,类似于文件系统中的路径名,其唯一性和一致性由使用它的各进程共同维护。(5)当然,共享内存的数据要由用户自己维护,这是因为共享内存没有同步(读端不会阻塞等待写端写入)和互斥(写端未完整写入完数据就被读端读取,导致数据不一致问题)机制。共享内存的键值(key)是用户进程预先约定的一个标识符,它的核心作用是让不同进程能够通过相同的key值找到或创建同一个共享内存对象。(4)显然,使用共享内存进行通信是所有进程间通信方式中最快的,因为它拷贝少。
2026-01-26 20:51:23
1010
原创 Linux 之 【进程间通信】(消息队列与信号量、Systrm VIPC在内核中数据结构设计、临界资源与临界区)
的模拟:例如,IPC_STAT命令在三种IPC类型中具有相同的语义(获取状态),但具体实现会根据对象类型访问不同的特有字段,实现了"同一接口,不同实现"的多态行为,而类型参数在运行时决定具体执行路径。,它通常只占整个程序代码的一小部分(如100行中的5-10行),需通过互斥机制(如锁或信号量)保护,以确保执行流在临界区内的操作具有原子性和隔离性。的机制类似于"资源预订",申请成功表示获得访问权限,这样,信号量就可以通过保证进入共享资源的执行流的数量,有效保护临界资源。
2026-01-26 20:51:04
957
原创 Linux 之 【进程间通信】(匿名管道与命名管道、pipe、进程池、mkfifo、unlink)
管道是Unix/Linux系统中最古老、最简单的进程间通信(IPC) 方式之一管道是基于文件级别的通信方式管道分为匿名管道(亲缘关系间)和命名管道(任意进程间)两种管道本质上是内核维护的内存级缓冲区,可被视作一种内存级文件。与普通磁盘文件最大的不同在于:管道的数据完全存储在内核内存中,既不需要将内存数据刷新到磁盘,也不需要从磁盘加载数据到该缓冲区,从而避免了磁盘I/O的延迟和持久化开销由于该内存文件中的数据只能由写端流向读端,所有被形象的称为管道文件在实现上,管道拥有。
2026-01-24 09:37:27
961
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅