Recent Posts
-
2019-03-04
走进 mTCP
mTCP 是一款面向多核系统的用户态网络协议栈内核态协议栈的缺陷互联网的发展,使得用户对网络应用的性能需求越来越高。人们不断挖掘CPU处理能力加强,添加核的数量,但这并没有使得网络设备的吞吐率线性增加,其中一个原因是内核协议栈成为了限制网络性能提升的瓶颈。互斥上锁引起的开销互斥上锁是多核平台性能的第一杀手。现在的服务器端应用为了尽可能的实现高并发,通常都是采用多线程的方式监听客户端对服务端口发起的连接请求。首先,这会造成多个线程之间对accept队列的互斥访问。其次,线程间对文件描述符...
-
2019-01-13
通俗理解IP路由
日常工作环境中,我们习惯于使用ping去测试网络的连通性。如果ping不通,我们往往会去怀疑是不是路由配置错了。路由是什么我们知道,IP地址是网络世界里的门牌号。你可以通过IP地址访问远在天边的网站,那么数据是如何到达网站的呢?靠的就是路径上每个节点的路由。路由,简单的说就是指导IP报文该去哪的指示牌。一般说来,主机会在以下两个时机进行路由查询 收到报文时,查询路由决定是上送本机(LOCAL IN),或者从哪个出接口转发(FORWARD) 本机发送报文时,查询报文出接口 注意,转...
-
2018-12-04
socket activation
这几天在研究runc的实现过程, 注意到它使用了的go-systemd的socket activationpackage, 出于好奇心,于是一探究竟.服务的并行启动 systemd是一套用来管理主机上各个Daemon运行的工具, 开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动.上面提到的并行很有意思, 不相干的Daemon并行启动自然没有什么问题,但倘若Daemon B依赖于Daemon A,那么它就必须等到Daemon A完成启动后才能启动,...
-
2018-11-16
OpenFlow协议原理简介
Overview对于用户来说,网络构建是一项基础性的工作。他们从设备制造商订购网络设备、组网,投入使用后还要对网络流量进行管理。通常大的甲方不会只从一家制造商订购设备,而是会选择把份额分配给不同的制造商。这么做的理由很明显:未来更新设备的主动权。但多个制造商也有坏处,如果每家的产品操作和管理方式不一致,又会使得运维成本提升。怎么办呢?不如设备制造商都遵循同一个标准吧。OpenFlow就是这样一个协议,它解耦了流量管理与具体硬件的关系,只要网络设备支持OpenFlow,那么我就可以用同一种方...
-
2018-11-16
inet socket 与 packet socket
调试过网络程序的人大多使用过tcpdump,但你知道tcpdump是如何工作的吗? tcpdump这类工具也被称为Sniffer,它可以在不影响应用程序正常报文的情况下,将流经网卡的报文呈现给用户。本文不分析tcpdump的具体实现,而只是借tcpdump来揭示一些网络编程中一个大多数人都容易忽略的一个主题:Socket参数对用户接收报文的影响相信所有接触过Socket编程的人都应该认识下面这个API#include <sys/socket.h>sockfd = socket(...