![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络编程
文章平均质量分 84
谢白羽
无论东西
展开
-
服务器正文22:linux内核网络模块笔记:收包、发包、内核如何与用户进程协同合作(上)
linux内核模块1)收包2)发包3)网络内核调参优化4)容器网络虚拟化原创 2022-08-02 15:52:23 · 1455 阅读 · 3 评论 -
服务器正文16:缓冲区设计(ringbuffer、用libevent配合ringbuffer做无锁队列)
文章目录一、为什么用户层需要设计网络缓冲区二、寿司ringbuffer以及多线程换将下数据安全思考三、libevent中event buffer的设计一、为什么用户层需要设计网络缓冲区二、寿司ringbuffer以及多线程换将下数据安全思考三、libevent中event buffer的设计https://www.bilibili.com/video/BV1ZL411M7Qz?spm_id_from=333.337.search-card.all.click...............原创 2022-06-06 01:14:38 · 849 阅读 · 0 评论 -
pthread_create内存泄漏分析
文章目录一、内存泄漏的原因1)背景原因二、内存泄漏的症状三、内存泄漏的分析1)分析一:内存不够用2)分析二:pthread_create创建线程后,系统并未回收其资源,从而导致了泄漏四、内存泄漏原因1)背景2)线程分离状态分类(1)主线程和子线程非分离状态(2)主线程和子线程有分离状态(3)总结五、解决办法1)法一:pthread_join()函数回收相关内存区域2)法二:调用ptread_detach()函数分离线程3)法三:使用线程属性一、内存泄漏的原因1)背景原因①线程默认堆栈大小是1MB,系统原创 2022-05-25 00:19:46 · 940 阅读 · 0 评论 -
协程的学习四:X86-64寄存器和栈帧浅谈(协程铺垫,未完待续12/09)
文章目录一、x86-64来源历史二、x86-64的两种工作模式1)模式一2)模式二三、寄存器介绍1)64位相对于32位做的让步和x86-64寄存器的介绍一、x86-64来源历史1)说到x86-64,总不免要说说AMD的牛逼,x86-64是x86系列中集大成者,继承了向后兼容的优良传统,最早由AMD公司提出,代号AMD64;正是由于能向后兼容,AMD公司打了一场漂亮翻身战。导致Intel不得不转而生产兼容AMD64的CPU。这是IT行业以弱胜强的经典战役。不过,大家为了名称延续性,更习惯称这种系统结原创 2021-12-08 01:53:13 · 605 阅读 · 0 评论 -
协程的学习三:C风格写的协程二(以NtyCo协程为例子讲解,解读汇编代码,未完待续12/14)
文章目录一、协程的出现历史1)同步操作(1)解释:(2)代码举例(3)IO同步操作特点2)异步操作(1)解释:(2)代码举例:(3)异步操作特点一、协程的出现历史1)同步操作(1)解释:对客户端传过来的数据进行读写操作都是一个循环里面结束(2)代码举例//数据接取while (1) { int nready = epoll_wait(epfd, events, EVENT_SIZE, -1); for (i = 0;i < nready;i ++) {原创 2021-12-06 21:33:04 · 2050 阅读 · 1 评论 -
protobuf使用系列详解三:补充四种API的使用:mutable_*、ParseFrom*、set_allocated_*
文章目录一、补充API说明1)protobuf mutable_* 函数2)bool ParseFromString(const string& data)和bool SerializeToString(string* output) const3)ParseFromArray4)set_allocated_*的使用一、补充API说明1)protobuf mutable_* 函数作用:若该对象存在,则直接返回该对象,若不存在则新new 一个。使用://protomessag原创 2021-12-06 14:41:07 · 8155 阅读 · 1 评论 -
协程的学习二:C风格写的协程(以云凤协程为例),顺便记录ucontex使用
文章目录一、测试代码讲解1)main函数主流程2)main测试代码示例二、协程头文件coroutine.h1)代码作用讲解①协程执行函数②创建协程调度器③关闭协程调度器④创建协程⑤协程堆栈恢复⑥判断协程yield出去后是否准备resume回来⑦coroutine_running(struct schedule *)不知道什么作用⑧协程让出CPU占用(yield)2)代码实体三、协程函数实现文件coroutine.c0)备注背景知识1)错误码及结构体①struct args②struct coroutine③原创 2021-11-20 20:50:56 · 1450 阅读 · 0 评论 -
跨平台平台编译libevent源码(32位)
文章目录1.环境准备2.编译zlib3.编译openssl4.编译libevent5.填写第一个libevent1.环境准备2.编译zlib3.编译openssl4.编译libevent5.填写第一个libevent原创 2021-09-18 21:17:11 · 413 阅读 · 0 评论 -
网络协议栈一:网络协议栈的实现前瞻
文章目录1.如何自己实现一个协议栈?2.网络协议栈结构展示(自己实现协议栈就是封装传输层、网络层和数据链路层)3.举例udo数据的发送4.各层的消息头5.柔性数组的使用条件6.如何获取网卡原始数据1.如何自己实现一个协议栈?①协议栈的数据如何封装②如何抓取网络原始数据(以太网网卡)2.网络协议栈结构展示(自己实现协议栈就是封装传输层、网络层和数据链路层)3.举例udo数据的发送①客户端调用sendto函数,把数据从用户空间copy到内核空间,也就是copy到内核协议栈里面,但是数据原创 2021-09-16 02:05:25 · 610 阅读 · 0 评论 -
协程学习一:nty协程的设计原理及效率分析
文章目录1.协程的库golang的libgo(使用非常简单,C++实现)腾讯的libco(非常好用的,C++实现)ntyco(纯C的代码写)2.为什么会有协程?协程解决了什么问题?1)同步的方式实现异步的效率,建立1000条连接,同步需要5400毫秒,异步需要1400毫秒2)...原创 2021-09-03 00:55:08 · 716 阅读 · 4 评论 -
protobuf使用系列详解二
文章目录一、准备操作流程1)准备数据2)创建一个新文件夹 xxx.proto3)将我们要序列化的数据-》写入到proto文件4)通过一个命令 protoc,将xxx.proto文件生成一个C++类5)直接使用这个类二、实际序列化流程1.创建Person对象2.将person对象序列化-》字符串3.数据传输4.接受数据,解析-》解码5.处理原始数据-》打印信数据信息自己之前总结的比较杂,所以另外开一篇文章来总结一、准备操作流程1)准备数据①复合类型:结构体/类②基础类型//Person.p原创 2021-08-28 21:02:51 · 1062 阅读 · 0 评论 -
通信协议以及protobuf使用、语法指南一
文章目录1.设计通信协议2.协议设计范例范例一 IM即时通讯协议范例二 云平台节点服务器1.设计通信协议为了能让对端知道如何给包分界,⽬前⼀般有以下做法:以固定⼤⼩字节数⽬来分界,如每个包100个字节,对端每收⻬100个字节,就当成⼀个包来解析;以特定符号来分界,如每个包都以特定的字符来结尾(如\r\n),当在字节流中读取到该字符时,则表明上⼀个包到此为⽌ ;固定包头+包体结构,这种结构中⼀般包头部分是⼀个固定字节⻓度的结构,并且包头中会有⼀个特定的字段指定包体的⼤⼩。收包时,先接收固定字节原创 2021-08-20 21:11:21 · 1219 阅读 · 0 评论 -
TCP数据发送问题整理
文章目录1.背景2.原理(TCP/IP发送数据原理):3.第一次修改:选择将缓存区加大4.Nagle算法讲解(Nagle原理)5.第二次修改:由于前面发送结构体1300倍不方便,故选择屏蔽Nagle算法1.背景项目里有一个TCP相关的发送,刚开始还没什么问题,后来发送的数量上来了就发现数据有时候会发送失败,一开始我们选择多发几次,后来数据上千之后就发现一千多条只能接收到几百条,2.原理(TCP/IP发送数据原理):百度之后发现是因为TCP的发送的原理是,当两次发送的数据时间间隔很小的时候TCP原创 2021-08-01 16:18:02 · 1091 阅读 · 0 评论 -
epoll的过程:epoll_create、epoll_ctl、epoll_wait、内核往双向链表增加节点
文章目录1.int epoll_create(int size) //size: >0(size大于0就行)①创建了一个eventpoll结构对象,被系统保存到某个位置;②rbr成员被初始化成指向一颗红黑树的根,有了这个根,就可以向红黑树中插入节点,或者说插入数据了【有了一个红黑树】;③rdlist成员被初始化成指向一个双向链表的根【有了这个根,就可以向双向链表中插入节点,或者说插入数据了】;2.int epoll_ctl(int efpd,int op,int sockid,struct epoll原创 2021-07-07 00:16:08 · 849 阅读 · 2 评论 -
网络通信故障排查常用命令
文章目录1.ifconfig2.ping3.telnet4.netstat5.lsof1.基本用法2.用lsof命令恢复被删除的文件6.nc7.curl8.tcpdump1.ifconfig查看当前系统的网卡和IP地址信息的常用命令没有的话可以用命令安装yum install net-toolsifconfig,说明我这里有eth0和lo两个网卡分别显示了IPv4和IPv6、子网掩码、广播地址等信息ifconfig -s显示网卡信息的精简列表ifconfig -a显示所有网卡信息原创 2021-07-02 12:46:46 · 3223 阅读 · 0 评论 -
网络序和字节序
文章目录1.为什么要进行网络序和字节序的转换?2.网络序和字节序相互转换的函数3.测试主机的大小端1.为什么要进行网络序和字节序的转换?1)基本知识大端字节序:最高有效位(MSB:Most Significant Bit)存储于最低内存地址处,最低有效位(LSB:Lowest Significant Bit)存储于最高内存地址处。小端字节序:最高有效位(MSB:Most Significant Bit)存储于最高内存地址处,最低有效位(LSB:Lowest Significant Bit)存储于最原创 2021-06-23 14:05:59 · 966 阅读 · 0 评论 -
番外9-reactor于单台服务器百万并发的学习
文章目录1.服务器的并发量:2.服务器的并发量条件3.reactor怎么样才能同时承载100W的fd呢?1)第一个问题:linux操作系统的限制,2) 可以修改限定fd的值3)端口的问题,限制fd只能到达4W附近先膜拜王博经大佬1.服务器的并发量:1)服务器同时能够承载的客户端数量,这个选项才是并发量2)服务器处理客户端请求的数量,这个答案没什么意义,没时间限制3)单位时间内,能够处理请求数量,这是每秒的吞吐量,QPS2.服务器的并发量条件:里面能够承载这些fd是最基本的条件,其他条件:原创 2021-06-18 23:16:15 · 162 阅读 · 2 评论 -
网络编程相关(未整理,未完待续6/15)
0 )1)TCP报文头结构TCP首部20个字节IP首部20个字节MSS(最长1460字节):MTU(1500字节)SACK确认重传算法标志位右边的窗口:告诉对方接受缓冲区还有多少空间,16位,2个字节,2的16次幂=65535,若超过256,就乘以256得到真正的对端,我这列的接受缓冲区还有多少空间校验和:紧急指针:一般不怎么使用它udp报文头连接3)为什么要引入第三次握手?三次握手还原成两次握手,ACK没有或SYN被延迟,造成服务器资源的浪费,彼此对对方有确认原创 2021-06-15 12:23:40 · 101 阅读 · 0 评论