服务端编程
文章平均质量分 86
C/C++/Golang服务端编程,其中涉及网络编程部分会放在计算机网络专栏中,涉及OS部分会放在操作系统专栏中
沉迷单车的追风少年
CSDN博客专家,CSDN商业化专家,官方内容合作伙伴,官方认证“人工智能领域优质创作者”,入选2023年中国开发者影响力年度榜单。
代表专栏《Diffusion Models与深度学习》、《手把手写深度学习》、《深度学习-计算机视觉》、《手把手写C++服务器》等。
展开
-
手把手写C++服务器(37):手撕代码——高并发多线程技术基石之异步connect【万字长文】
本系列文章导航:手把手写C++服务器(0):专栏文章-汇总导航【更新中】前言:connect创建的时候是默认阻塞模式的,但是现实情况里可能会因为网络差、中间代理服务器、网关等因素造成连接速度慢。此时,在阻塞模式下,程序会阻塞在connect中很久。因此,在实际的项目中,我们一般倾向于使用异步connect技术,学习如何利用IO复用技术设置异步connect,不仅能为后面高并发多线程打下基础,也是后端开发面试必知必会的知识点。预备知识1、connect函数2、getsoc...原创 2021-09-29 21:30:00 · 662 阅读 · 4 评论 -
手把手写C++服务器(36):手撕代码——高并发高QPS技术基石之非阻塞recv【万字长文】
本系列文章导航:手把手写C++服务器(0):专栏文章-汇总导航【更新中】前言:没有什么东西是永恒,没有什么方案是万能,阻塞模式和非阻塞模式各有利弊。创建socket是默认阻塞的。但是在高并发多QPS的场景中,阻塞模式会极大程度上影响并发性,使之并发名存实亡。上一讲: 讲了非阻塞send,并进行了实验;这一讲重点讲recv,为后面继续讨论非阻塞connect及与IO复用结合打下基础。目录预备知识1、send/recv的本质2、阻塞模式和非阻塞模式的应用场景3、文件描述...原创 2021-09-27 21:30:00 · 450 阅读 · 4 评论 -
手把手写C++服务器(35):手撕代码——高并发高QPS技术基石之非阻塞send【万字长文】
本系列文章导航:手把手写C++服务器(0):专栏文章-汇总导航【更新中】前言:创建socket是默认阻塞的。但是在高并发多QPS的场景中,阻塞模式会极大程度上影响并发性,使之并发名存实亡。而send函数本质上并不是在网络上发送数据,而是将发送缓冲区的数据拷贝到数据内核中;recv函数的本质是将内核缓冲区中的数据拷贝到应用程序的缓冲区中。因此,当缓冲区满了的时候,阻塞/阻塞会影响send/recv的调用,我们这一篇文章重点讨论这一种情况;后面几讲会继续讨论非阻塞connect及与IO复用结合。...原创 2021-09-24 11:34:35 · 374 阅读 · 3 评论 -
手把手写C++服务器(32):三大事件之信号详解
本系列文章导航: 手把手写C++服务器(0):专栏文章-汇总导航【更新中】前言:信号实际上是一种软中断,信号机制实际上是进程间通信的一种方式。状态改变、系统异常、系统状态的变化等等,这些是信号的来源。信号作为一个异步事件,对维护服务器稳定,避免异常终止有重要的作用。本文从常见的64中Linux信号出发,步步深入,详解信号事件。64种Linux信号使用 kill -l 命令查看Linux信号:kill -l 1) SIGHUP 2) SIGINT 3)..原创 2021-09-02 21:25:51 · 330 阅读 · 10 评论 -
手把手写C++服务器(38):面试必背!Linux网络socket编程必会十问!
本系列文章导航:手把手写C++服务器(0):专栏文章-汇总导航【更新中】目录1、说一下客户端和服务端socket建立连接和关闭连接的过程2、如何将一个 socket设置成非阻塞模式3、什么是socket三大属性?4、阻塞模式下,send和recv函数行为是什么样子的?非阻塞模式下send/recv的返回值分别是什么?5、客户端发起连接时,如何主动指定通过本地某个端囗号去连接?bind函数如果端口号设置为0是什么行为?指定端口号连接bind端口号设置为06、list...原创 2021-10-18 20:35:44 · 392 阅读 · 6 评论 -
手把手写C++服务器(31):服务器性能提升关键——IO复用技术【两万字长文】
本系列文章导航: 手把手写C++服务器(0):专栏文章-汇总导航【更新中】前言: Linux中素有“万物皆文件,一切皆IO”的说法。前面几讲手撕了CGI网关服务器、echo回显服务器、discard服务的代码,但是这几个一次只能监听一个文件描述符,因此性能非常原始、低下。IO复用能使服务器同时监听多个文件描述符,是服务器性能提升的关键。虽然IO复用本身是阻塞的,但是和并发技术结合起来,再加上一点设计模式,一个高性能服务器的基石就基本搭建完成了。目录1、预备知识(1)文件描述符...原创 2021-08-31 11:46:02 · 943 阅读 · 12 评论 -
手把手写C++服务器(30):手撕代码——基于TCP/IP的抛弃服务discard
本系列文章导航: 手把手写C++服务器(0):专栏文章-汇总导航【更新中】前言:前面两讲讲了echo服务器和CGI网关服务器《手把手写C++服务器(29):手撕echo回射服务器代码》《手把手写C++服务器(28):手撕CGI通用网关接口服务器代码》。discard作为做简单的TCP长连接服务,只需要关注“消息/数据到达”的服务。本讲将会手撕discard代码,后面章节讲解C++面向对象风格的封装socket的时候也会以discard举例。目录discard服务的前世今生预备知识...原创 2021-08-29 23:21:16 · 519 阅读 · 10 评论 -
手把手写C++服务器(28):手撕CGI通用网关接口服务器代码
本系列文章导航: 手把手写C++服务器(0):专栏文章-汇总导航【更新中】前言:前文《手把手写C++服务器(26):常用I/O操作、创建文件描述符》《手把手写C++服务器(27):五大文件描述符零拷贝、控制总结》详细学习了I/O操作,这一讲在前面文章的基础之上,手把手实现一个CGI通用网关接口服务器。虽然通用网关接口已经被主流解决方案所抛弃,但是我们手撕源码的过程中,还是能够加深对I/O编程、网络编程的认识,非常具有现实意义。目录预备知识一:什么是CGI通用网关接口?预备知识二:...原创 2021-08-25 11:09:15 · 495 阅读 · 8 评论 -
手把手写C++服务器(27):五大文件描述符零拷贝、fcntl控制总结
本系列文章导航: 手把手写C++服务器(0):专栏文章-汇总导航【更新中】前言:前文《手把手写C++服务器(26):常用I/O操作、创建文件描述符》、《手把手写C++服务器(25):万物皆可文件之socket fd》总结了常见的IO操作和文件描述符的相关知识,这一讲将详解五大数据读写函数:readv/writev、sendfile、mmap/munnmap、splice、tee和控制IO行为和属性的函数fcntl()。目录基本读写函数read()/write()和基本打开关闭函数op...原创 2021-08-22 09:51:44 · 612 阅读 · 12 评论 -
手把手写C++服务器(26):常用I/O操作、创建文件描述符
前言:通过上一篇文章(),Linux万物皆文件的一定深入人心。如何操作这些文件?I/O函数将震撼登场!第一讲会讲解基础的read() 和 write()函数,TCP和UDP读写函数、通用数据读写函数、创建文件描述符的pipe、dup、dup2函数,以及背后的相关知识。温馨提示,如果你还不清楚什么是文件描述符,请看上一讲《手把手写C++服务器(25):万物皆可文件之socket fd》目录基本读写函数:read()和write()参数释义:基本打开关闭函数: open()和close(原创 2021-08-19 20:35:41 · 433 阅读 · 10 评论 -
手把手写C++服务器(25):万物皆可文件之socket fd
前言:大家一定听说过在Linux当中,万物皆是文件,任何客观的存在都是以文件形式呈现。前面讲socket编程的时候(手把手写C++服务器(21):Linux socket网络编程入门基础、手把手写C++服务器(22):Linux socket网络编程进阶第一弹)可以看出,sockfd伴随socket的“生老病死”,这一讲就从Linux文件描述符开始讲起,详细聊一聊socket fd。目录万物皆可文件的Linux服务器最宝贵的资源之一——文件描述符文件描述符最大文件描述符限制系统建.原创 2021-08-17 21:14:58 · 516 阅读 · 10 评论 -
手把手写C++服务器(24):socket请求/响应一般框架、TCP修改缓冲区、内核监听listen最大长度
前言:本系列文章手把手写C++服务器(15):网络编程入门第一个TCP项目以封装好的网络库为例,重点讲解了如何正确的建立TCP连接,如何正确地销毁TCP连接,如何在安全的时机关闭连接,如何处理丢包问题。本文在上一篇文章手把手写C++服务器(21):Linux socket网络编程入门基础的基础上,从原生的socket角度出发,进一步深入玩转TCP编程。.原创 2021-08-15 11:04:32 · 1033 阅读 · 12 评论 -
手把手写C++服务器(23):必知必会!操作系统面试十连问
前言:系列文章手把手写C++服务器(17):自测!TCP协议面试经典十连问受到了大家的收藏和点赞,谢谢读者的支持。操作系统是后端开发工程师的童子功,掌握常见的操作系统基础知识不仅有助于我们日常开发,也是面试过程是必备的技能。本文总结了十道最常见的操作系统面试题。目录问题一:什么是进程?什么是线程?什么是守护进程?进程和线程之间有什么区别?什么是进程?什么是守护进程?什么是线程?进程与线程有什么区别?问题二:并发和并行有什么区别?问题三:大内核和微内核有什么区别?问题四:分原创 2021-08-12 10:01:50 · 325 阅读 · 10 评论 -
手把手写C++服务器(33):Linux常用命令合集
本系列文章导航: 手把手写C++服务器(0):专栏文章-汇总导航【更新中】前言:服务端编程的过程当中,各种常用的命令行也会大量使用;熟悉常用Linux命令不仅仅是运维的基本要求,也是一个主程的基本门槛。这里汇总了总结出常用的命令,由于很多命令只有用的时候才会印象深刻,因此这里持续更新。和windows通信的时候也会经常用到一些windows命令行,这里一并归纳总结。目录常用Linux命令集合目前已经整理过的命令常用Linux命令集合...原创 2021-09-08 16:52:38 · 229 阅读 · 6 评论 -
手把手写C++服务器(21):Linux socket网络编程入门基础
本系列文章导航:手把手写C++服务器(0):专栏文章-汇总导航【更新中】前言:刚开始写C++服务器的时候,我们进行网络编程肯定是使用socket API,等熟练之后,会根据我们自己的需要,封装这些API组成自己的网络编程库。如何优雅地封装?这是一个哲学问题,非常能体现C++程序员的功底。但是首先要熟悉socket的常见用法,这一篇博客带你入门,并用手把手写C++服务器(18):TCP紧急传输的方法——带外数据 (原理与代码示例)这篇文章作为综合应用实例。目录什么是socket?so..原创 2021-08-05 20:20:05 · 765 阅读 · 12 评论 -
手把手写C++服务器(19):序列化数据网络传输解决方案
前言:数据传输是服务器编程必须要面临的问题之一,原始数据传输是非常脆弱的,序列化传输是业界常用的方法,其中谷歌的PB方案广受欢迎,我之前在华为、百度做后台开发时,PB也是项目中主要的解决方案,值得服务器编程者学习。目录C++传输序列化数据解决方案1、二进制方式2、XML3、Boost.Serialization4、Protocol buffersPB使用流程简述详细使用步骤1、定义.proto文件2、定义消息3、标注数据类型4、代码示例原创 2021-07-31 16:02:56 · 1278 阅读 · 8 评论 -
手把手写C++服务器(18):TCP紧急传输的方法——带外数据 (原理与代码示例)
前言:TCP的三次握手四次挥手的面向连接的传输特定,本质上保证了传输的可靠性,此外,还有字节编号机制、滑动窗口机制、超时重传机制、选择性确认机制等,最大程度上保证了其可靠性传输。但是凡事利弊相依,福祸相生,保证可靠性的同时,必然牺牲了其他的特性,紧急数据传输就是其中之一。如果需要传输紧急数据,需要进行什么样的步骤?要在三次握手四次挥手、字节编号机制、滑动窗口机制、超时重传机制、选择性确认机制等等这些框架之下进行,是不是会耽误了紧急的实时性和优先性呢?原创 2021-07-28 18:26:43 · 372 阅读 · 6 评论 -
手把手写C++服务器(17):自测!TCP协议面试经典十连问
前言:前面一篇文章《手把手写C++服务器(15):网络编程入门第一个TCP项目》介绍了一个简单入门级的TCP项目,这一篇文章重点讲一讲面试常见的TCP协议相关的十个问题,都是后端开发程序员必知必会的经典知识点。问题一:讲一下TCP三次握手四次挥手的过程三次握手:四次挥手:问题二:TCP和UDP之间有什么区别?问题三:TCP拥塞控制有哪几种方法?什么是拥塞避免?什么是快速恢复?什么是拥塞发生?拥塞控制常用方法:拥塞窗口拥塞避免快速恢复问题四:什么是慢启动问题五:什么是TCP黏包和拆包问题原创 2021-07-25 15:24:35 · 3116 阅读 · 18 评论 -
手把手写C++服务器(14):基于UDP测量两台机器之间的网络延迟
前言:网络延迟是网络编程中不可避免的话题,特别是直播、聊天等实时性要求高的应用场景,对网络延迟特别敏感。常用的测量网络延迟工具有基于TCP的qperf等,但是手写一个测量网络延迟的工具可以更好地帮助我们理解UDP等知识。目录原理代码逻辑运行效果源代码参考原创 2021-07-07 22:32:47 · 1370 阅读 · 16 评论 -
手把手写C++服务器(13):C++11新特性之静态断言static_assert
前言:我们学过很多断言,动态断言、零宽断言等等,这些在我之前的blog里都有总结。静态断言是C++11中的新技术,在服务端编程中经常使用,这里做一个学习总结。目录语法优点示例参考语法static_assert(常量表达式,提示字符串)如果第一个参数常量表达式的值为真(true或者非零值),那么static_assert不做任何事情,就像它不存在一样,否则会产生一条编译错误,错误位置就是该static_assert语句所在行,错误提示就是第二个参数提示字符串。因为s.原创 2021-07-05 21:40:04 · 892 阅读 · 10 评论 -
手把手写C++服务器(12):TCP自连接原理、Python示例、解决方案
前言:《手把手写C++服务器》系列的第一篇文章:手把手写C++服务器(1):网络编程常见误区,当中就讲解了TCP自连接是网络编程常见的误区之一。这篇blog进一步讨论TCP自连接问题,并给出Python实例代码,以及这类问题的解决方案。目录什么是TCP自连接问题?为什么说是坑?TCP自连接带来的危害?选择端口的范围查看端口号如何解决TCP自连接问题?Python3程序示例参考原创 2021-07-04 16:41:57 · 645 阅读 · 4 评论 -
手把手写C++服务器(11):手撕网络带宽测试工具TTCP
前言:TTCP诞生于1984年,是Unix很流行的网络带宽测试工具,并从中衍生出了著名的网络测试工具Ipref。TTCP手撕的源代码量比较小,是网络编程入门的最佳练习demo。本篇文章参考陈硕的TTCP,进行学习分析。目录1、program_options控制命令行输入2、代码框架3、带宽计算原理4、内存优化5、讲解视频6、源代码参考原创 2021-07-02 16:19:31 · 1418 阅读 · 12 评论 -
手把手写C++服务器(10):结构体struct常用技术之柔性数组、字节对齐、__attribute__
柔性数组:为变长结构体而生数组名不占用内存空间柔性数组的定义方法为什么需要柔性数组?怎样使用柔性数组?结构体中的字节对齐问题__attribute__:进行属性设置1、aligned:指定对选哪个的对齐格式2、packed:取消编译过程中的优化对齐3、at:绝对定位,将变量或函数绝对定位到flash或RAM中4、weak:转换成弱符号类型5、unused:忽略未使用函数的告警6、deprecated:管理过时代码7、may_alias:取消拒绝类型打印指针原创 2021-07-02 11:55:36 · 696 阅读 · 5 评论 -
手把手写C++服务器(6):编译实操——打开gcc/g++世界
前言:前面几篇文章简单介绍了Linux C/C++编译原理、优化方法等(手把手写C++服务器(2):C/C++编译链接模型、函数重载隐患、头文件使用规范)、(手把手写C++服务器(3):C++编译常见问题、编译优化方法、C++库发布方式),这一篇一个简单的功能程序TTCP为例,介绍gcc/g++编译的具体用法和实战操作。GCC和G++有什么区别?https://www.zhihu.com/question/20940822GCC/G++编译步骤https://www.runoob...原创 2021-06-29 14:45:46 · 1147 阅读 · 15 评论 -
手把手写C++服务器(5):《计算机操作系统(西电版)》读后感和一点思考
前言:本科生涯即将进入尾声,还是给自己留下了不少遗憾,其中一个就是没有机会学习计算机三大专业课,反而是在很多永远都不会用到的专业课上(比如空气动力学、量子物理等),花费了太多的时间和精力。现在终于没了GPA和rank的压力,可以静静地在自己的世界里遨游。一提到OS,大部分人想到的可能都是《深入理解操作系统》、《现代操作系统》等机械工业出版社的大块头经典巨著;一直以来,我都非常喜欢西电自己写的书,特别是自己读过的樊昌信老师的《通信原理》、吴大正老师的《信号与系统》等,当年学的时候爱不释手啊,浓浓工程派的书籍很原创 2021-06-28 15:20:33 · 842 阅读 · 10 评论 -
手把手写C++服务器(8):常用boost之program_options命令行参数解析
前言:boost作为C++最重要的扩展库,以其广泛的使用范围,高优的性能,完善的技术氛围,强大的可移植性和开放的源码,是C++编程必不可少的“武器”。手把手写C++服务器这个专题会介绍几个最常用的boost,本篇文章介绍program_options用于命令行参数解析,从常见的argc、argv聊起,一起打开program_options的世界!目录int argc, char *argv[]argc和argv[]含义举个例子program_options优点与官网地址组原创 2021-06-08 11:51:02 · 645 阅读 · 4 评论 -
手把手写C++服务器(9):永远滴神vim(源码安装、插件管理、颜色主题、代码高亮、快捷键设置、搜索替换、环境保护)
前言:工欲善其事必先利其器,vim作为开发利器,是服务端编程必不可少的武器。这篇博文原载于:https://github.com/whuwzp/vim_config,开启vim之旅吧。文章目录vim 学习Table of Contents1. vim源码编译安装2. 源码编译安装llvm clang3. youcompleteme编译安装4. 插件4.1 vundle插件管理器4.2 补全类插件4.2.1 YouCompleteMe语义补全4.2.2 vim-protodef接口实现补全4.2.3.原创 2021-06-03 11:32:49 · 7244 阅读 · 26 评论 -
手把手写C++服务器(7):给C语言程序员看的C++科普
前言:这一篇博客只能算是服务器编程专题的番外篇,在去年的时候,我打算写一个专题,名字就叫做给C语言程序员看的C++科普,这可以后来遇到很多事情耽搁了(全是借口),写了一半的专题也没了恒心再写下去(太懒了难成大器),但是放弃又难(冠冕堂皇),所以才有了这个番外篇。1、类与对象概念2、struct和class3、 设计class时将public放在前面4、 接口与实现分离:一般设计架构5、尽可能使用const代替#define6、const的作用7、static的作用8、this指原创 2021-06-01 22:59:52 · 2133 阅读 · 23 评论 -
手把手写C++服务器(4):Linux四大必备网络分析工具
前言:Linux命令浩如烟海、多如牛毛,但是针对服务器编程,必学的四大网络分析工具:ping、tcpdump、netstat和lsof,为后面编程、调试、分析、运维打下基础。其中ping和netstat是linux、Unix、windows系统所共有的,可以我之前的一篇文章:Windows奇技淫巧之网络命令行1、ping命令格式 应用举例:六步法检查网络连通性2、tcpdump命令格式参数详解表达式中重要关键字应用举例1:截取指定主机所有数据包应用举例2:截取某端口上的包原创 2021-06-01 22:23:04 · 1130 阅读 · 8 评论 -
Linux GCC常用命令总结
指定编译输出的名字gcc编译器最常用的使用格式是: 1 gcc main.c 上面的命令执行完整的编译过程,并且生成一个a.out文件。使用参数-o, 可以指定输出的文件名。 1 gcc main.c -o main 上面的命令会产生输出文件main。为了理解GCC编译器的完整的编译过程,可以阅读Journey of a C Program t...原创 2021-05-29 15:44:45 · 1299 阅读 · 0 评论 -
手把手写C++服务器(3):C++编译常见问题、编译优化方法、C++库发布方式
前言:前文( 手把手写C++服务器(2):C/C++编译链接模型、函数重载隐患、头文件使用规范)研究了一些C++编译链接的基本原理,这篇文章继续探索优化方法,以及C++库的三种发布方式(动态库、静态库、源码库)。C++编译遇到的常见问题(1)每个源文件独立编译,跨编译单元优化困难(2)每个编译单元,都需要独立解析所有包含的头文件(3)虚函数对编译带来的负担如何减少代码编译时间?(1)云编译、编译cache、并行编译等技术(2)仅包含必要头文件,并尽量使用及提供前向声明版本的头文件原创 2021-05-28 17:48:43 · 1328 阅读 · 14 评论 -
手把手写C++服务器(2):C/C++编译链接模型、函数重载隐患、头文件使用规范
前言:C++兼容C,在编译上有明显的体验。有一个流传很久的段子,C/C++程序员逃避工作的正当借口就是:“我的程序正在编译”。对于服务端编程,不管是时间资源还是硬件资源,都非常宝贵,力图做到极致优化。因此了解C/C++编译的前世今生、背后的原理、常见的优化手段,对之后的服务端编程来说非常重要。为什么C/C++编译比Java、Python、golang慢很多?万恶之源:C语言隐式函数声明什么是隐式函数声明?隐式函数声明的原因怎样解决?C语言单遍编译模型函数重载带来的编译歧义函数原创 2021-05-27 22:54:22 · 839 阅读 · 6 评论 -
手把手写C++服务器(42):Git和GitHub使用教程
如图2、如果你git status 查看了当前状态发现有部分文件你不想提交,那么就使用git add xxx(上图中的红色文字的文件链接) 就可以提交部分文件到本地git缓存区。如图1、如果你git status 查看了当前状态发现都是你修改过的文件,都要提交,那么你可以直接使用 git add . 就可以把你的内容全部添加到本地git缓存区中。提交代码第五步:git push 把当前提交到git本地仓库的代码推送到远程主机的某个远程分之上。原创 2021-01-19 16:30:04 · 290 阅读 · 0 评论 -
Windows奇技淫巧之网络命令行
写在前面:Linux老鸟会深度沉迷命令行,各种奇技淫巧心中涨,但是windows上的命令行相当好用,各种骚操作也是眼花缭乱。其中网络操作经常使用,本文做一个简单的总结。目录1、ipconfig:显示当前TCP/IP配置的设置值2、ping:测试目的站是否可达及相关状态3、arp:地址解析协议4、traceroute:路由跟踪5、route:操作路由表6、netstat:显示协议统计信息7、nbtstat:显示协议统计和当前使用NBI的TCP/IP连接原创 2021-05-24 14:22:43 · 1809 阅读 · 7 评论 -
手把手写C++服务器(1):网络编程常见误区
1、业务代码和IO操作混合2、TCP接受数据不完整、不可靠2、TCP是一个流4、直接发送C语言结构体5、TCP自连接原创 2021-05-24 10:55:27 · 1714 阅读 · 20 评论 -
基于brpc构建大规模可用服务教程
原文地址:https://github.com/apache/incubator-brpc/blob/master/docs/en/tutorial_on_building_services.pptx原创 2021-05-08 18:47:08 · 387 阅读 · 0 评论 -
玩转 ProtoBuf C++
C++传输序列化数据解决方案1、二进制方式2、XML3、Boost.Serialization4、Protocol buffersPB使用流程简述详细使用步骤1、定义.proto文件2、定义消息3、标注数据类型4、代码示例5、编译生成类6、使用API官方优化建议:缺点原创 2021-04-28 19:35:06 · 495 阅读 · 2 评论 -
Linux grep正则表达式学习笔记
目录基础参数字符类匹配正则表达式限定符正则序列检测符或逻辑&&和逻辑正则特殊字符正则非打印字符零宽断言正则表达式模式说明参考基础参数-a:将二进制文档以文本方式处理-c:显示匹配次数-i:忽略大小写差异-n:在行首显示行号-o:只显示匹配字符,不显示匹配行-A:After的意思,显示匹配字符串后n行的数据-B:before的意思,显示匹配字符串前n行的数据-E:延伸的正则表达式使用,等价于egrep-v:显示没有匹配行--c原创 2021-04-15 18:59:16 · 344 阅读 · 0 评论 -
Shell从入门到看戏——bash十练
熟悉基本shell操作不仅是运维的基本功,对于开发来说也是有利无害,我在学习的过程中,总结了十个练手的小demo,仅供娱乐。目录1. 多线程ping监控,检查同一网段的IP是否连通2.进度条功能显示3. Linux创建进程的三种方式4. 控制进程数量——文件描述符和命名管道文件描述符命名管道5. 可任意控制进程数量的多线程ping6. sed爬虫批量下载美女图片7. sed随机点名器8.系统性能监控脚本9.监控网络连接状态参考原创 2021-01-28 22:50:03 · 484 阅读 · 0 评论 -
带外数据——从TCP固定头结构聊起
目录从TCP固定头结构聊起紧急数据的必要性带外数据概念TCP带外数据传输流程发送端接收端异常处理socket识别带外数据参考从TCP固定头结构聊起TCP固定头结构如下图所示:本文关注的重点是16位紧急指针部分,其他的部分详解可见:https://xduwq.blog.csdn.net/article/details/105891603紧急指针,一共16位,是一个正偏移量,它和序号字段的值相加表示最后一个紧急数据的下一字节的序号,用于发送端向接收端发原创 2020-08-27 16:20:02 · 385 阅读 · 0 评论