自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MQTT v5.0新特性总结(非规范)

MQTT v5.0添加了以下特性会话过期把清理会话标志拆分成新开始标志(指示会话应该在不使用现有会话的情况下开始)和会话过期间隔标志(指示连接断开之后会话保留的时间)。会话过期间隔时间可以在断开时修改。把新开始标志设置为1且会话过期间隔标志设置为0,等同于在MQTT v3.1.1中把清理会话(CleanSession)设置为1。消息过期允许消息在发布时设置一个过期间隔。所有确认报文原因码更改所有响...

2018-05-25 14:37:38 5834

原创 EMQ进程树/MQTT连接/订阅/发布源码流程分析

写在前面EMQ作为一款优秀的开源MQTT broker,从一些库的使用以及框架的设计,可以看出作者也是非常精通Erlang的大牛!比如说对于集群化,作者自己实现了Ekka库,对于网络并发,作者自己实现了esockd。首先不论这些库性能如何,但敢于自己造轮子,会造轮子,绝对是对Erlang/OTP有着深刻理解才可以做得到的。学习了一下EMQ的一些关键业务代码,总结了连接/订阅/发布的源码,画出来进程...

2018-03-09 12:53:03 1763 1

原创 MQTT简介Mosquitto桥接及集群环境搭建

原创文章如转载,请注明出处(http://blog.csdn.net/hui6075/)。目录:MQTT协议简介Mosquitto桥接模式Mosquitto集群模式MQTT协议简介MQTT是IBM为物联网等环境定义的一套应用层即时通信协议,通过消息中间件,提供订阅/发布方式通过“主题”为不同设备之间的通信提供解耦。类似的协议还有XMPP、COAP等,但MQTT协议由

2018-01-18 10:58:47 12442 4

原创 Linux之epoll族实现分析

epoll_create:epoll_ctl:epoll_wait:

2016-05-18 01:10:28 562

原创 Linux read()实现

sys_read: 通过fd得到对应的file结构,然后调用vfs_read;  vfs_read: 各种权限及文件锁的检查,然后调用file->f_op->read(若不存在则调用do_sync_read)。file->f_op是从对应的inode->i_fop而来,而inode->i_fop是由对应的文件系统类型在生成这个inode时赋予的。file->f_op->read很可能就等同于d

2016-05-12 17:57:02 3922

原创 Linux 协议栈之虚假重传超时恢复F-RTO:Forward RTO-Recovery

虚假重传超时恢复算法能使得TCP发送方从虚假RTO中有效的恢复重传。基本思想:RTO有两种原因,一是网络上确实发生了丢包,二是由于IP层转发路径延迟不同造成的RTO。对于后者,称之为F-RTO,RTO发生之前的ACK应该发生在RTO发生之后到达发送端。如果一直收不到ACK,证明确实是发生了丢包,此时发送端应该执行go-back-N重传算法。根据以上原则,F-RTO发送端应该:如果第一个RTO重传的

2016-04-29 14:27:23 1841 1

原创 Linux 传输层实现

====================================进入传输层(TCP)==============================tcp_v4_rcv(skb){  不是发给本机的报文则丢弃;  取TCP头,检查头部长度,取出完整TCP头,校验;因为每层头部包含选项,所以长度不固定,需要这么多步骤来取完整头。  根据TCP头来设置skb->cb[]控制块中

2016-04-24 22:03:06 563

原创 Linux 网络层实现

netif_receive_skb(skb){  如果开启了netpoll,直接netpoll_rx()然后返回;??????????????  如果使用了bond功能,就把skb->dev设置成设备组中的主设备,skb->realdev还是原来的设备;  入帧计数;  初始化每层协议的raw指针,后续访问都用raw指针;  如果开启了流量控制,且流量控制裁决为TC_NCL

2016-04-24 22:01:46 590

原创 Linux NAPI/非NAPI 网卡驱动部分

NAPI:中断来了,在上半部中把net_device加入poll_list,sk_buff仍然在设备自身队列中,然后下半部软中断过程中轮询所有的设备,用设备的poll函数把自己的sk_buff交给上层。非NAPI:中断来了,在上半部中把sk_buff放到本CPU的多设备共享队列中,然后下半部软中断过程中用默认poll函数(process_backlog)处理共享队列中的包。除了NAPI和非

2016-04-24 21:53:40 1500

原创 Linux e1000网卡驱动流程

对于各种DMA、NAPI、RFS/RPS、SO_REUSEPORT,如果不了解底层,那么对于做应用层优化也只是空中楼阁。本文以e1000驱动为例,试图理清网络驱动层的数据流、逻辑流。关于网卡接收到以太流的DMA过程:网卡DMA引擎在主存中为DMA开辟一段连续空间存放Buffer Descriptor(ptr/length/status),一致性映射(dma_alloc_cohr

2016-04-20 04:01:34 3663

原创 Linux网络协议栈之TCP socket/bind/listen/connect/accept/close/shutdown

本文把Linux-2.6.11.12源码中文注释版中的注释收集出来,整理在下面。如有侵权,请告知。listen()传输层调用tcp_listen_start():tcp_listen_start(){  /* 初始连接队列长度上限 */  /* 初始化传输控制块中与延时发送ACK有关的数据结构 */  /* 为管理连接请求块的散列表分配存储空间,如果失败则退出 */

2016-04-17 23:04:14 727

原创 Linux网络协议栈之TCP 状态机处理函数

本文把Linux-2.6.11.12源码中文注释版中的注释收集出来,整理在下面。如有侵权,请告知。TCP状态有如下11种:enum {  TCP_ESTABLISHED = 1,  //"Established"  TCP_SYN_SENT,         //"Syn Sent"  TCP_SYN_RECV,         //"Syn Recv"  TCP_FIN_

2016-04-17 21:16:26 490

原创 Linux网络协议栈之TCP send/recv

我们平时编写socket程序时调用了一些API,比如send()/sendto()/sendmsg()/write()/writev(),最终都会调用__sock_sendmsg(),而__sock_sendmsg中会调用xxxops->socket_sendmsg(),这是函数指针,对于TCP,这个函数就是tcp_sendmsg(),真正发送tcp报文的函数是tcp_transmit_skb()

2016-04-17 20:13:13 907

原创 Linux 2.6 网络下半部

网络代码之接收下半部:net_dev_init()  //网络设备层初始化,流控、CPU输入队列、注册proc/sys文件系统、网络处理函数数组、注册net_rx_actionnet_rx_action()  //接收数据帧的软中断处理函数{  关闭中断;  遍历设备;  开中断;  对设备调用poll方法(默认process_backlog);}

2016-04-17 17:12:40 620

原创 pthread几个互斥锁和条件变量接口

pthread_cleanup_push/pthread_cleanup_pop:pthread_cleanup_push(pthread_mutex_unlock, (void *) &mut); //可以注册pthread_mutex_unlock,也可以注册自定义的函数pthread_mutex_lock(&mut);//do something。此过程中假如本线程做某些事时异

2016-04-16 17:46:35 1164

原创 初窥x86 SMP CAS

本文试图从底向上说明CAS。#define lock(lock) (*(lock) == x && cas(lock, x, y))#define unlock(lock) *(lock) = xstatic inline int cas(ngx_atomic_t *lock, int old, int set){ char res; __asm__ vo

2016-04-16 09:32:41 616

原创 power平台访问全局变量出现signal11

最近,遇到一个进程crash的CR(跑十来个小时才会crash,且每次都在同一个点crash)。crash本是很正常的事情,但是这次crash却让我莫名其妙,crash的点代码如下:ALA_BpdDstore[0] = ((BT_UPM你告诉我访问一个全局符号如何会产生signal11?扫了眼出事函数的汇编(r24用来保存这个全局符号的地址):3f 00 10 fc

2016-02-03 19:50:04 433

原创 一种高效双端队列(链表)实现方式

本文将介绍一种高效的双端队列(链表),包括数据结构、新建队列、插入头结点、插入尾节点、删除头结点等,所有操作的时间复杂度均为O(1)。为了方便理解,部分函数前面均配了一幅图作为介绍。首先,数据结构定义如下:typedef struct node_s { struct node_s *node_Next; struct node_s *node_Prev; int

2015-10-29 23:14:44 1182

空空如也

空空如也

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

TA关注的人

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