代码改变世界

随笔分类 - 网络相关

一种异构数据库同步的简单方法

2016-05-05 23:19 by zmkeil, 4134 阅读, 收藏, 编辑
摘要:标题有点高大上,是为了解决实际应用中的一个问题。做了一个Android应用,用于记录日常消费账单,开始是单机版的,我老婆说太low了,起码要能看到彼此的消费情况吧。为此,我还专门写了一套基于protobuf的RPC组件,用于网络通信,http://www.cnblogs.com/zmkeil/p/5 阅读全文

基于nginx实现protobuf RPC

2016-02-02 09:19 by zmkeil, 5358 阅读, 收藏, 编辑
摘要:老婆一起来上海工作,每个月消费立马上来了,做了一个android记账应用,把每笔帐都实时记录进去。开始是单机版的,只能两个人分别记,月底再merge一下。刚好有一台阿里云的ECS,于是准备升级为带服务端版的,通信协议可以直接用android的http库,但考虑到越来越多的app应用都开始走私有协议( 阅读全文

ngx_lua实现登录逻辑

2015-02-03 02:25 by zmkeil, 2102 阅读, 收藏, 编辑
摘要:最近在公司做一个简单的portal,本来很简单的,只用ngx_lua就可以实现所有的业务逻辑,不需要upstream上游服务。但被要求接入公司内部的用户校验系统,说白了就是一个登录过程,只允许公司内部的用户可以登录访问。公司内部有一整套组件,只要在业务代码里嵌入改组件,就能自动检测用户是否已经登录、... 阅读全文

TR069协议小结

2013-08-01 08:34 by zmkeil, 2790 阅读, 收藏, 编辑
摘要:也称为CWMP,是在Internet网上通过wan口控制通信终端设备的协议。其协议流程如下图所示: 具体网上有很多资料。其主要的两个内容是:HTTP Client模型、DATA模型。HTTP Client模型是精华,也是比较复杂的。目前较为可靠的开源库有libevent,网上有基于该开源库编写的Client模型,名字好像叫evcpe。在公司用的这套代码,我只是大概学习了下,很复杂... 阅读全文

一个VLAN配置的实际例子

2013-08-01 08:31 by zmkeil, 1517 阅读, 收藏, 编辑
摘要:背景很简单,和一般的eth-switch通过VLAN做成路由的方式一样。首先看一种硬件效率较高的方法: Port1~4作为access口,同时在硬件上作为用户模式,即从PC发往这些端口的数据包,是不带VLAN-tag的,SW硬件接收到后,会根据内部的vlan配置,若目的是同一个vlan的其他PC,则直接转发;若要发往CPU,则硬件自动为它们打上tag,然后交由Kernel的vlan设备。同... 阅读全文

网络嵌入式设备

2013-05-26 15:57 by zmkeil, 1787 阅读, 收藏, 编辑
摘要:这不是什么新鲜东西,无线路由器很早前就开始使用了,不过最近才慢慢理解其原理。现在网络嵌入式设备的功能越来越强大了,各芯片厂商的解决方法支持着这种复杂性。最近公司实习,做一个家庭网关的项目。下面的内容应该不算泄密吧,写得随意一点。1.一个网络芯片架构 大家应该看得出来,这是一个DSL芯片。其网络部分由一个switch core构成核心,对外有3个交换口(粉红色的):左侧为以太网MAC... 阅读全文

Web配置子系统中的一个缺陷纠正

2013-05-25 01:55 by zmkeil, 491 阅读, 收藏, 编辑
摘要:1.系统简介就是上一篇中提到的那回事,所用系统是uC/OS,协议栈用的是LwIP(轻量级TCP/IP协议栈)。在uC/OS系统中,协议栈被放在一个task中,并且封装了一套API,供其它task调用来发送数据到网络上,或从网络上接受数据。为提高效率,协议栈的socket实现在该netTask中,而数据buffer实现在各自的task中,即不复制数据,而是task间共享。关于LwIP可以参考... 阅读全文

Luci实现框架

2013-05-14 22:01 by zmkeil, 21696 阅读, 收藏, 编辑
摘要:1.总述 上一篇总结了uhttpd的工作方式,openwrt中利用它作为web服务器,实现客户端web页面配置功能。对于request处理方式,采用的是cgi,而所用的cgi程序就是luci,工作框架如下图所示: Client端和serv端采用cgi方式交互,uhttpd服务器的cgi方式中,fork出一个子进程,子进程利用execl替换为luci进程空间,并通过setenv环境变... 阅读全文

uhttpd的实现框架

2013-05-14 21:58 by zmkeil, 11754 阅读, 收藏, 编辑
摘要:uhttpd是一个简单的web服务器程序,以前没怎么接触过,所以这里主要是对web服务器设计的一些学习总结。Openwrt系统中,真正用到的(需要了解的),其实不多,主要就是cgi的处理,包括与cgi程序的信息交互等,最后一节详细描述一下。1.HTTP协议概述HTTP协议是目前互联网使用最广泛的应用层协议。其协议框架很简单,在一个TCP连接中,以一问一答的方式进行信息交互。具体讲,... 阅读全文

PPP协议体系的实现

2013-05-02 22:05 by zmkeil, 4516 阅读, 收藏, 编辑
摘要:其实PPP不像是一种协议,而更像是一种应用,可以把它看成一个拨号上网的应用软件,拨号成功后,本地主机就可以正常上网了,可以使用TCP/IP等协议,而完全感觉不到PPP的存在。而实际上PPP在网络协议栈中增加了不少东西,但对上层透明。另外PPP一般需要底层工具来支持,如之前讲的PPPoE。 Pppoe协议的实现在协议栈中,且其底层有实际的物理设备(或者vlan设备)支持,关键就在于p... 阅读全文

由PPPOE看Linux网络协议栈的实现

2013-05-01 20:28 by zmkeil, 3985 阅读, 收藏, 编辑
摘要:这个标题起得比较纠结,之前熟知的PPPOE是作为PPP协议的底层载体,而实际上它也是一个完整的协议,不过它的实现比较简单,由它出发,可以很容易理清楚Linux网络栈的实现方式。1.总述Linux中用户空间的网络编程,是以socket为接口,一般创建一个sockfd = socket(family,type,protocol),之后以该sockfd为参数,进行各种系统调用来实现网络通... 阅读全文

Linux下的虚拟Bridge实现

2013-04-21 23:28 by zmkeil, 14045 阅读, 收藏, 编辑
摘要:Linux下的Bridge也是一种虚拟设备,这多少和vlan有点相似,它依赖于一个或多个从设备。与VLAN不同的是,它不是虚拟出和从设备同一层次的镜像设备,而是虚拟出一个高一层次的设备,并把从设备虚拟化为端口port,且同时处理各个从设备的数据收发及转发,再加上netfilter框架的一些东西,使得它的实现相比vlan复杂得多。1.Bridge的功能框图它是Linux下虚拟出来br... 阅读全文

Linux下VLAN功能的实现

2013-04-18 20:19 by zmkeil, 7463 阅读, 收藏, 编辑
摘要:1.Linux网络栈下两层实现1.1简介VLAN是网络栈的一个附加功能,且位于下两层。首先来学习Linux中网络栈下两层的实现,再去看如何把VLAN这个功能附加上去。下两层涉及到具体的硬件设备,日趋完善的Linux内核已经做到了很好的代码隔离,对网络设备驱动也是如此,如下图所示: 这里要注意的是,Linux下的网络设备net_dev并不一定都对应实际的硬件设备,只要注册一个struct n... 阅读全文

Netfilter开发概况

2013-04-17 23:35 by zmkeil, 1571 阅读, 收藏, 编辑
摘要:关于Netfilter的资料网上很多,这里仅描述一些概况,把流程讲清楚,具体的细节可以很方便地跟踪到代码中去看。这个模块是构建在网络栈的网络层的,与底层架构基本没多大关系,所以要做平台间的移植也基本不需要做修改。1.Netfilter框架简述1.1框架Netfilter框架的主要思想是:在网络层数据包的传递路径中,插入一些点,执行额外的功能。如下图所示: 在每个点上注册一串... 阅读全文

OpenWRT平台搭建及简单应用

2013-04-17 23:29 by zmkeil, 4751 阅读, 收藏, 编辑
摘要:1.OpenWRT平台搭建1.1环境准备系统Ubuntu12.04,先安装一些必要的软件包:gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-d... 阅读全文