优质博文
Neutron 拓扑框架
Neutron 理解 (1): Neutron 所实现的虚拟化网络 How Netruon Virtualizes Network
活捉一只程序猿。。。
号称网络硬件三剑客的 集线器(Hub)、交换机(Switch)与路由器(Router) 一直都是网络界的活跃分子,但让很多初入网络之门的菜鸟恼火的是,它们三者不仅外观相似,而且经常呆在一起,要想分清谁是谁,感觉有点难!就让我们一起来看看它们之间有什么区别和联系吧!
在认识集线器之前,必须先了解一下中继器。在我们接触到的网络中,最简单的就是两台电脑通过两块网卡构成 双机互连,两块网卡之间一般是由非屏蔽双绞线来充当信号线的。由于双绞线在传输信号时信号功率会逐渐衰减,当信号衰减到一定程度时将造成信号失真,因此在保证信号质量的前提下,双绞线的最大传输距离为 100 米。当两台电脑之间的距离超过 100 米时,为了实现双机互连,人们便在这两台电脑之间安装一个 中继器,它的作用就是将已经衰减得不完整的信号经过整理,重新产生出完整的信号再继续传送。 中继器就是普通集线器的前身,集线器实际就是一种多端口的中继器。集线器一般有4、8、16、24、32等数量的 RJ45 接口,通过这些接口,集线器便能为相应数量的电脑完成 “中继” 功能。由于它在网络中处于一种 “中心” 位置,因此集线器也叫做 Hub 。
首先,栈 (stack) 是一种串列形式的 数据结构。这种数据结构的特点是 后入先出 (LIFO, Last In First Out),数据只能在串列的一端 (称为:栈顶 top) 进行 推入 (push) 和 弹出 (pop) 操作。根据栈的特点,很容易的想到可以利用数组,来实现这种数据结构。但是本文要讨论的并不是软件层面的栈,而是硬件层面的栈。
大多数的处理器架构,都有实现硬件栈。有专门的栈指针寄存器,以及特定的硬件指令来完成 入栈/出栈 的操作。例如在 ARM 架构上,R13 (SP) 指针是堆栈指针寄存器,而 PUSH 是用于压栈的汇编指令,POP 则是出栈的汇编指令。
mogrify 是一个图形处理应用程序,Ubuntu 系统已经集成了此工具。它支持对图片的 resize
, blur
, crop
, despeckle
, dither
, draw on
, flip
, re-sample
等操作。
还有 mogrify 很类似的图形处理工具 convert,只不过 mogrify 默认是直接在原图上进行修改(除非你使用 -format
后缀参数),而 convert 则不是。
mogrify 功能强大,并且也容易上手,下面我举一些简单的例子:
1 | $ mogrify -resize 50% rose.jpg |
Linux 的进程调度是基于 “处理器比重” 策略,具体实现通过 vruntime 成员。所有进程以各自的 vruntime 作为 Key,链接成为一个 RBTree。调度核心通过查找最小的 vruntime 对应的进程,作为下一刻需要运行的进程。vruntime 作为进程调度的核心,那它的计算方法是什么?
应用程序进行系统调用(system call)时,通过 软中断(soft irq) 陷入内核态,将 系统调用号 以及 参数指针 通过 CPU 通用寄存器 传入(exp. eax, ebx…),由内核代表应用程序在 内核空间 执行系统调用。
Linux 内核常用的 内建数据结构 : 链表 list, 队列 kfifo, 映射 idr, 二叉树 rbtree
Linux 中断实现机制怎样? 中断发生时,通过 中断向量表 跳转到预定义入口点。初始入口点将 中断号保存在栈中,然后跳转调用 unsigned int do_IRQ(struct pt_regs regs)
进行处理。因为 C 的调用惯例是要把函数参数放在 栈的顶部,因此可以从 pt_regs 结构中提取出中断号 进行进一步处理。
什么是中断上下文?当执行一个中断处理程序时,内核即处于中断上下文 (interrupt context) 中。
为什么中断里面不能休眠? 因为没有后备进程,所以中断上下文不可以休眠,否则又怎能对它重新调度呢? 这段话中的,后备进程 要怎么理解? 中断栈又是什么鬼?
类型所占字节数和机器字长及编译器有关系,所以,int
,long int
,short int
的宽度都可能随编译器而异。但有几条铁定的原则(ANSI / ISO 制订的):
sizeof(short int) <= sizeof(int)
sizeof(int) <= sizeof(long int)
short int
至少应为 16位(2字节)long int
至少应为 32位。类型 | 字节长度 |
---|---|
char |
1个字节 |
void * (指针变量) |
4个字节 |
short int |
2个字节 |
int |
4个字节 |
unsigned int |
4个字节 |
float |
4个字节 |
double |
8个字节 |
long |
4个字节 |
unsigned long |
4个字节 |
long long |
8个字节 |
今天来和伙伴说说我这两天,亲历的一次网络安全问题。我之前对基础网络方面的知识确实没多少了解,并且正好在假期没什么事情,于是想着借着这次机会好好玩把。虽然已经抓到了木马程序,但是还没理解黑客是怎么黑进来的,估计主机里面还有黑客留的后门,但是中间的调试过程比较有趣。
最近由于家里的网络环境速度突然非常糟糕,路由经常掉线,直接导致家里没法上网。主要表现在路由能正常拿到联通的 IP 地址,但是没法正常上网。于是直接更新路由固件至官网回信更新路由固件解决问题。掉线问题解决后,立马用 BOX 测下网速如何,1.2M/s 不错,没什么问题了。
到晚上了,准备 SSH 连上家里的 Ubuntu 搞点东西。先是发现 SSH 建立连接的时间比以前久多了,并且 SSH 连接上后,时不时的 shell 会卡住。这就奇怪了,这局域网内直连,怎么这么不稳定。于是我就用 Ubuntu 去 PING 下百度,发现要 150ms 多,这就不对了,家里 10M 带宽,怎么要怎么久。于是我再用 Notebook 去 PING 了下百度,却只要 50ms 左右。明显 Ubuntu 出了问题,于是马上登到路由管理页面,检查下 Ubuntu 主机的带宽情况。这一看吓一跳,就发现主机有 16M/s 的上行流量!
家里的 Ubuntu 主机确实是安装了 Apache,但是并没有真正对外提供 WEB 服务,仅仅只是局域网内测试用。因此这 16M/s 的上行流量肯定是不正常的,SSH 卡顿应该就是因为主机的上行带宽都被占用了,没有多余的带宽给正常的服务。