11 Mrpre

尚未进行身份认证

Linux Kernel、Network

等级
博文 128
排名 1w+

进程间文件描述符传递原理

进程间文件描述符传递原理进程中文件的管理以及fork每个进程的文件描述符是独立的,即一个进程打开的文件描述符是记录在进程对象上的(task_struct)。task_struct{files_struct*files;}files_struct{structfdtable__rcu*fdt;}fdtable{structfile_...

2019-06-06 13:36:13

raw socket 使用 BPF 过滤报文

rawsocket使用BPF过滤报文抓包使用rawsocket进行网络底层抓包,想必大家都清楚(仔细想想tcpdump原理)。这里不赘述,网上许多资料。注意,网卡需要开启混杂模式、其次程序需要管理员权限。#include<stdlib.h>#include<stdio.h>#include<sys/socket.h>#inclu...

2019-05-07 11:04:05

tcp_tw_reuse对客户端的作用

tcp_tw_reuse对客户端的作用客户端频繁建立连接然后主动关闭连接,会产生大量TIME_WAIT,此时,如何快速利用TIME_WAIT呢?必须满足下面所有条件:客户端:/proc/sys/net/ipv4/tcp_tw_reuse为1/proc/sys/net/ipv4/tcp_timestamps为1TIME_WAITsocket生存时间超过1秒服务端:...

2019-04-16 10:48:56

Nginx 作为反向代理(proxy)时的一些buffer指令

Nginx作为反向代理(ptoxy)时的一些buffer指令Nginx处理请求的行为Nginx只要配置的proxy_pass都会无条件执行ngx_http_read_client_request_body尝试去读client的body。请求不携带body常见于GET/HEAD方法。此时,在ngx_http_read_client_request_body判断Content...

2019-02-28 16:42:25

MQTT v5 (MQTT 5.0) 新特性介绍

MQTTv5(MQTT5.0)的新功能项目中逐步完成了MQTT5.0的开发,这里介绍下MQTT5.0的一些新特性MQTT5.0规范见:http://docs.oasis-open.org/mqtt/mqtt/v5.0/cos01/mqtt-v5.0-cos01.html#_Toc514847900格式首先,协议上,增加了一个Property字段,正是这个字段,使得M...

2019-02-14 13:21:02

Nginx 假性内存泄露

Nginx假性内存泄露Nginx在使用中,发现其使用的VSZ和RSS都在不断变大,查看新增的代码,没有找到内存泄露的地方,ngx_palloc和ngx_pfree都是对称调用的。Nginx内存池机制使用Nginx开发过的都知道,在Nginx里面普遍使用ngx_palloc/ngx_pnalloc申请内存,其中入参有一个pool,它是从ngx_create_pool获得的一个对象,改函数入...

2018-12-27 10:37:58

隐藏动态库so中的符号(函数名)

隐藏动态库so中的符号(函数名)正常的lib库生成1.cintfunc1(){return1;}2.cexternintfunc1(void);intfunc2(){returnfunc1();}编译成动态库libfunc.so:gcc-shared-fPIC-olibfunc.so1.c2.c查看符号:$nmlibf...

2018-11-29 19:35:50

通过代码获取Linux nameserver(域名服务器ip)

通过代码获取Linux域名服务器ip/etc/resolv.conf首先,/etc/resolv.conf定义了机器的域名服务器ip,例如nameserver1.1.1.1nameserver2.2.2.2表示DNS服务器地址有2个。当然,你可以人肉解析改配置文件,这个是没问题的,如果你代码没有BUG的话。glibc对配置文件的处理#ifdef_LIBC if(M...

2018-11-16 19:10:54

调用malloc时发生了什么(3) - 缺页中断

页表的创建kmalloc内存使用了umapped内存,直接对地址偏移即可寻址物理内存,这里不考虑。考虑用户态内存和vmalloc,都用到了虚拟内存,即需要通过页表查询的方式查询都物理内存。例如用户态通过brk申请了一块内存,后续访问这块内存的0x00007F88F16A4690这块地址会发生什么?首先,X64内核是4级页表,根据X64对线性地址的划分,可以计算出0x00007F88F16...

2018-11-02 18:12:47

大页内存 初始化

大页内存初始化hstates所有的大页均放在hstates的全局变量中。mm/hugetlb.cstructhstatehstates[HUGE_MAX_HSTATE];每个hstates数组的元素,均表示一种大小的page,其中HUGE_MAX_HSTATE的值为2,这也就解释了为什么hugepage目前只支持2个pagesize。当前系统有多少个类型的hugepa...

2018-11-02 16:41:37

Linux 大页内存 的使用

Hugepage大页内存的使用系统启用大页内存下述操作,需要重启机器。不建议通过设置echo1G>/proc/sys/vm/nr_hugepages的方式设置,因为系统不一定成功。设置大页内存的PAGESIZECentos下(其他发行版本自行Google)grubby--update-kernel=ALL--args="hugepagesz=1Gdefau...

2018-10-31 16:49:39

perf 统计缺页中断 和TLB miss

perf统计内存相关eventperf可探测的所有event,均可以使用命令perflist获得。本文举几个和内存相关的性能的几个event例子探测进程的缺页中断数(pagefault)perfstat-efaults./mem能够统计./mem执行周期内,引发的缺页中断数。Performancecounterstatsfor'./mem':...

2018-10-30 10:00:48

socket源码分析之accept

socket源码分析之accept()基于kernel3.10之前有分析过TCPaccept()的实现,但是太过于沉浸于代码本身,没有结合应用去分析accept()函数。我们要解决如下几个问题:1:accept()函数的实现,包括从全队列中取出sock。2:accept()函数如何如何被唤醒3:accept()函数如何解决惊群4:多个进程accept(),...

2018-09-12 09:02:04

TCP选项分析 之 SO_REUSEADDR

TCP选项分析之SO_REUSEADDR首先从工程角度考虑如下问题问题:1:Server进行bind(),listen(),accept(),然后进行等待Client连接。2:Client进行连接。即,Server的accept()返回client_fd3:Server程序退出(异常退出,或者)。但是和客户端的连接依旧存在。4:Server重启程序,但...

2018-09-12 08:59:56

MQTT协议 几个重要的属性

MQTT特性MQTT协议其实还是挺简单的,从为数不多的项目中,简单的总结了下MQTT协议某些字段的特性1:will(遗言)包括Willtopic、willmessage、willQos、willretain。一个Client异常断开连接的时候或者Server处理失败的时候,Server会把Client的will信息,当做Publish处理,Publish的to...

2018-09-08 18:21:36

MQTT 3.1.1 规范

http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html2MQTTControlPacketformat1.2StructureofanMQTTControlPacketMQTT协议靠交换不用的控制帧来工作,这节描述了这些帧的格式。一个MQTT控制帧总是有3部分组成,如图2.1...

2018-09-08 18:00:33

TLS 1.3 协议详解

TLS1.3握手流程详解需要的背景知识:(1):对TLS1.2协议有一定程度的了解,包括秘钥交换、会话复用等。第一节TLS1.3的握手概述协议分析的第一步就是看报文。TLS1.3的报文,有个特点,就是通过抓包发现,只能看到明文的ClientHello和ServerHello,其余的握手报文均被加密。1-RTT如图:图1条件:无条...

2018-08-09 10:46:08

签名算法中rsa_pss_pss_*和rsa_pss_rsae_*的区别

rsa_pss_pss_*和rsa_pss_rsae_*的区别对于签名来说首先,对于签名来说,没区别。都是使用PSS流程进行签名。对于公钥来说有区别说先,加签方需要判断自己的publickey什么类型,如果publickey是rsaEncryption类型,则用rsa_pss_rsae_表示对应私钥的签名算法OID;如果自己的publickey是id...

2018-07-19 16:44:19

SSL_write 发生了什么

SSL_write发生了什么以前在设计协议栈的时候,非常随意,因为包括下层的TCP到上层的应用处理,都是自己设计的,怎么样不麻烦这么约定。然而,如果将自己的协议栈放在通用平台,那么问题就显得比较微妙了,不是因为协议栈本身自己的实现的难度,而是使用协议栈的方式多样化导致接口设计需要变得非常复杂。一个简单的SSL_write流程,其实核心内容很简单:1:分段(如果必要的话)2:每段算...

2018-07-16 09:26:24

Nginx源码分析之 HTTP阶段

typedefenum{/*最开始的阶段,貌似Nginx原生没有该阶段的handler*/NGX_HTTP_POST_READ_PHASE=0,/*配置在server块的rewrite指令,则会处理hander,否则,handler进去直接return*/NGX_HTTP_SERVER_REWRITE_PHASE,/*根据URI进行lo...

2018-07-11 15:40:35
CSDN身份
  • 博客专家
奖章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周上午根据用户上周的博文发布情况由系统自动颁发。