上一次介绍了ss源码中各个事件处理函数完成的工作,这次具体分析一下协议的建立以及请求数据的传输过程. 因为ss的local和server共用一个类以及一系列的事件处理函数,所以看起来稍显复杂.下面来将local和server端结合分析一下. 首先进程向local端发送发送请求协商版本和认证方法.local端对其响应05 00代表无需认证. # local端 ... elif is_local and self._stage == STAGE_INIT: # TODO check auth met…
quagga支持BGP-4,BGP-4+协议,支持多协议(mpls,isis,ospf等等)以及单播,组播路由的导入和分发. 具体的协议,这里就不附录了,网络上有很多资料,或者RFC. 协议源码的学习基于前几章的quagga源码分析,所以刚接触的朋友最好浏览一下quagga的通用框架以及通用路由处理流程. 好了,闲话少说,直奔主题才是最要紧的. 一.BGP初始化 初始化在bgp_main.c的main函数里开始,其他协议也类似,比如isis的main函数就在isis_main.c,这个嘛,简单统…
ss的local端和server端的工作流程相似,因此复用了TCPRelay类和TCPRelayHandler类. 两端均是使用TCPRelay类监听连接,并使用TCPRelayHandler类处理请求. 以server端为例: # server.py ... tcp_servers = [] tcp_servers.append(tcprelay.TCPRelay(a_config, dns_resolver, False)) ... class def run_server(): ... t…
路由策略的基础知识 定义 路由策略(Routing Policy)作用于路由,主要实现了路由过滤和路由属性设置等功能,它通过改变路由属性(包括可达性)来改变网络流量所经过的路径. 目的 路由器在发布.接收和引入路由信息时,根据实际组网需要实施一些策略,以便对路由信息进行过滤和改变路由信息的属性,如: 控制路由的发布 只发布满足条件的路由信息. 控制路由的接收 只接收必要.合法的路由信息,以控制路由表的容量,提高网络的安全性. 过滤和控制引入的路由 一种路由协议在引入其它路由协议发现的路由信息丰富…
为了方便区分,以下分别使用local,server,remote代表ss客户端,ss服务端,以及ss客户端请求访问的远程主机. 在shadowsocks中,无论对于local还是server,都需要建立两个socket:local_sock和remote_sock 对于local,local_sock用于和进程通讯,server_sock用于和server通讯. 对于server,local_sock用于和local通信,server_sock用于和remote通信. 上一次提到两者的事件处理均…
创建完bgp peer之后,就要bgp start了,不然费那么大劲创建出来不做事情就销毁了,就很尴尬了. 那么对等体一旦start起来,就会进入各自的状态,在不同的状态下处理各自的事件消息. 下面列举一些状态和事件的集合: /* BGP finite state machine status. */ #define Idle 1 #define Connect 2 #define Active 3 #define OpenSent 4 #define OpenConfirm 5 #define…
现有的路由协议都是通过分布式协议逐个配置协商运行的,协议协议,一个就不需要协议咯,至少2个才能够协议着做事情嘛,不过呢,这样就出现网元过多配置困难的问题,对网管软件要求也越来越高, SDN或许可能改变这个局面,但不管软件如何定义,报文还是在一个一个网络节点传输的,所以我们看到quagga这样多的传统网络配置命令不要觉得繁琐,不配置的话,协议不会工作哦. 嗯,这章的主题是创建对等体,就是通过配置命令来完成的. “neighbor peer remote-as asn” router bgp nei…
bgp使用tcp连接,每个bgp实例自身是peer的一个tcp server端,同时也是peer的tcp client端. 1.在bgp_create之后都建立自己的socket服务端开始监听179端口: bgp = bgp_create(as, name); bgp_router_id_set(bgp, &router_id_zebra); *bgp_val = bgp; /* Create BGP server socket, if first instance. */ if (list_i…
BGP的核心就是交换路由,所以关键的部分还是在路由的更新与撤销上面,这之间包含了冗长的属性,community等等处理过程,不做详述. bgp_read函数是路由更新的事件处理函数,在收到BGP_MSG_UPDATE消息的时候开始调用bgp_update_receive函数处理. switch (i) { case NLRI_UPDATE: case NLRI_MP_UPDATE: nlri_ret = bgp_nlri_parse(peer, NLRI_ATTR_ARG, &nlris[i])…
物联网防火墙himqtt源码之MQTT协议分析 himqtt是首款完整源码的高性能MQTT物联网防火墙 - MQTT Application FireWall,C语言编写,采用epoll模式支持数十万的高并发连接,并且兼容ModSecurity部分规则. 代码非常优秀,非常值得收藏和学习,今天笔者就从结合himqtt的源码来进行MQTT协议分析. 一.MQTT协议指令汇总 MQTT协议一共有14个指令,如下表所示:其中有9个报文都是固定的2~4个字节,非常简单适合小型物联网设备. 名字 值 固定…