- 博客(18)
- 收藏
- 关注
原创 MQTT v5.0新特性总结(非规范)
MQTT v5.0添加了以下特性会话过期把清理会话标志拆分成新开始标志(指示会话应该在不使用现有会话的情况下开始)和会话过期间隔标志(指示连接断开之后会话保留的时间)。会话过期间隔时间可以在断开时修改。把新开始标志设置为1且会话过期间隔标志设置为0,等同于在MQTT v3.1.1中把清理会话(CleanSession)设置为1。消息过期允许消息在发布时设置一个过期间隔。所有确认报文原因码更改所有响...
2018-05-25 14:37:38
5900
原创 EMQ进程树/MQTT连接/订阅/发布源码流程分析
写在前面EMQ作为一款优秀的开源MQTT broker,从一些库的使用以及框架的设计,可以看出作者也是非常精通Erlang的大牛!比如说对于集群化,作者自己实现了Ekka库,对于网络并发,作者自己实现了esockd。首先不论这些库性能如何,但敢于自己造轮子,会造轮子,绝对是对Erlang/OTP有着深刻理解才可以做得到的。学习了一下EMQ的一些关键业务代码,总结了连接/订阅/发布的源码,画出来进程...
2018-03-09 12:53:03
1799
1
原创 MQTT简介Mosquitto桥接及集群环境搭建
原创文章如转载,请注明出处(http://blog.youkuaiyun.com/hui6075/)。目录:MQTT协议简介Mosquitto桥接模式Mosquitto集群模式MQTT协议简介MQTT是IBM为物联网等环境定义的一套应用层即时通信协议,通过消息中间件,提供订阅/发布方式通过“主题”为不同设备之间的通信提供解耦。类似的协议还有XMPP、COAP等,但MQTT协议由
2018-01-18 10:58:47
12570
4
原创 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
3972
原创 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
1903
1
原创 Linux 传输层实现
====================================进入传输层(TCP)==============================tcp_v4_rcv(skb){ 不是发给本机的报文则丢弃; 取TCP头,检查头部长度,取出完整TCP头,校验;因为每层头部包含选项,所以长度不固定,需要这么多步骤来取完整头。 根据TCP头来设置skb->cb[]控制块中
2016-04-24 22:03:06
601
原创 Linux 网络层实现
netif_receive_skb(skb){ 如果开启了netpoll,直接netpoll_rx()然后返回;?????????????? 如果使用了bond功能,就把skb->dev设置成设备组中的主设备,skb->realdev还是原来的设备; 入帧计数; 初始化每层协议的raw指针,后续访问都用raw指针; 如果开启了流量控制,且流量控制裁决为TC_NCL
2016-04-24 22:01:46
627
原创 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
1532
原创 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
3813
原创 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
758
原创 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
544
原创 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
970
原创 Linux 2.6 网络下半部
网络代码之接收下半部:net_dev_init() //网络设备层初始化,流控、CPU输入队列、注册proc/sys文件系统、网络处理函数数组、注册net_rx_actionnet_rx_action() //接收数据帧的软中断处理函数{ 关闭中断; 遍历设备; 开中断; 对设备调用poll方法(默认process_backlog);}
2016-04-17 17:12:40
640
原创 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
1185
原创 初窥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
637
原创 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
456
原创 一种高效双端队列(链表)实现方式
本文将介绍一种高效的双端队列(链表),包括数据结构、新建队列、插入头结点、插入尾节点、删除头结点等,所有操作的时间复杂度均为O(1)。为了方便理解,部分函数前面均配了一幅图作为介绍。首先,数据结构定义如下:typedef struct node_s { struct node_s *node_Next; struct node_s *node_Prev; int
2015-10-29 23:14:44
1254
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人