网络基础之以太网帧,MTU,MSS

本文原创部分占比不多,图片多是盗用,不知道最开始是谁画的,我是从http://geek.csdn.net/news/detail/67260取的。此文主要是做一个自己的梳理。

TSO/UFO

TCP的每个数据包大小不能超过MSS值,在发送端超过的,需按照MSS进行分段(segment)。
分段这事情,老是让CPU来做,那是很耗精力的事,做网卡的乐意分享此任务,将其offload到网卡,当网卡支持TCP分段这功能的时候,我们就说它支持TSO(TCP segmentation offload)。
继续阅读

网络基础之以太网帧,MTU,MSS

以太网帧

网络数据传输,底层是物理设备的支持,如路由、交换、网卡、网线,通过网线传送电信号或者光信号,自然可以"连续"地传输,但是,考虑到连续传输,如果中间某个信号被干扰,一个bit不正确会导致整个串都不正确,损失颇大;其次,考虑到线路的多源共享问题,如果一直传送一个源的数据,其他的数据就得不到发送。于是,聪明的设计者将来自一个源的大段数据,拆分成小段,如果某一小段传输不正确,只影响这一小段,而非整体,根据一定的算法交替发送不同来源的数据,可实现线路共享,而分割的这一小段也就是我们说的帧(Frame),帧也称为协议数据单元(PDU)。
继续阅读

RabbitMQ实践场景示例

基本配置

RabbitMQ是一个成熟稳定的消息队列,对比过几款主流MessageQueue框架,以此框架最为成熟,OpenStack和VMWare这类的虚拟化和云平台都使用此软件作为消息通信,实际测试一个月,相当稳定。
利用MessageQueue可以实现,不同地方,不同时间,不同语言间的通信。

  1. 不同地方,容易理解,通过网络实现,网络可达的地方都能通信。
  2. 不同时间,是因为MQ本身是有缓存机制,包括内存缓存、文件缓存、数据库缓存等,假设Server端向Client发送消息,但是Client并没有启动,没有关系,等到Client启动的时候,从MQ里面取队列或交换里的消息即可,这种方式能很好地实现异步框架。
  3. 不同语言,所有终端只需要通过网络与MQ交互,换言之,只需要使用本语言的网络API实现Client端封装,即可与MQ交互,所以,使用MessageQueue,可以跨语言。

安装方法不再赘述,网上很多,最新版本下载:
https://www.rabbitmq.com/download.html
继续阅读

Zebra IPv6路由管理之源码分析

基本介绍

直接看源码,所有分析说明都写在了源码的注释里面。
对于发送主机,如果源地址由发送程序指定,那么,唯一需要查看的便是那些针对分配给源地址的接口所应用的路由记录。如果源地址并非由发送程序指定,或者并非对应于转发路由器,那么,所有路由记录都将被查看。对于所查看的每一条路由表记录,IPv6将依据路由记录中前缀长度所指定的位数在网络前缀中的每一位取值与目标地址中的相应位之间逐一进行对比。对于前缀长度所指定的位数,如果网络前缀中的所有位均与目标IPv6地址相匹配,则认为当前路由记录与目标地址相匹配。
继续阅读