- 浏览: 289521 次
- 性别:
- 来自: 北京
最新评论
-
Ann-phei:
wooding老师,有没有出书计划呀,是否方便加我QQ详聊呀 ...
2016年书架整理 -
可乐瓶里的小辣椒:
Storm目录贴 -
可乐瓶里的小辣椒:
...
TCP编号系统 -
woodding2008:
tivan 写道反压的你有进行测试过吗?有做功能测试,没有做性 ...
Storm1.0.x新功能调研 -
tivan:
反压的你有进行测试过吗?
Storm1.0.x新功能调研
文章列表
页
内核把物理页作为内存管理的基本单位。尽管处理器的最小可寻址单位通常为字(甚至字节),但是内存管理单元(MMU 管理内存并把虚拟地址转换为物理地址的硬件)通常以页为单位进行处理。正是因为如此,MMU以页( ...
Linux内核数据结构
- 博客分类:
- 操作系统
链表
链表是Linux内核中最简单、最普通的数据结构。链表是一种存放和操作可变数量元素(常称为节点)的数据结构。链表和静态数据的不同之处在于,它所包含的元素都是动态创建并插入链表的,在编译时不知道具体需要创建多少个元素。另外链表中每个元素的创建时间各不相同,所以他们在内存中无须占用连续内存区。正是因为元素不连续地存放,所以各元素需要通过某种方式被连接在一起。于是每个元素都包含一个指向下一个元素的指针,当有元素加入链表或从链表中删除时,简单调整指向下一个节点的指针就可以了。
环形链表
通常情况下,因为链表中最后一个元素不再有下一个元素,所以将链表尾元素中的 ...
临界区和竞争条件
所谓临界区(也称为临界段)就是访问和操作共享数据的代码段。多个执行线程并发访问同一个资源通常是不安全的,为了避免在临界区中并发访问,必须保证这些代码原子执行,操作在执行结束 ...
Linux中断和中断处理
- 博客分类:
- 操作系统
众所周知,处理器的速度跟外围的硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器发送一个请求,然后专门等待回应的办法,显然差强人意。既然硬件处理的这么慢,那么内核就应该在这期 ...
多任务
多任务系统可以划分为两类:非抢占式(cooperative multitasking)和抢占式多任务(preemptive multitaskin)。由调度程序来确定什么时候停止一个进程的运作,以便其他进程能够得到执行的机会,这个强制挂起的动作就 ...
进程
进程是处于执行期的程序(目标码存放在某种存储介质上)。但进程并不仅仅局限于一段可执行程序代码。通常进程还要包含其他资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间以及一个或多个执行线程(Thread of execution),当然还包括用来存放全局变量的数据段等。实际上,进程就是正在执行的程序代码的实时结果。内核需要有效而又透明地管理所有细节。
执行线程,简称线程(thread),是进程中活动的对象。每个线程都拥有一个独立的程序计数器、进程栈和一组进程寄存器。内核调度的对象是线程,而不是进程。
...
TCP/IP协议使用的运输层协议或者是对这些协议之一的改进,或者是他们的组合。
简单协议
简单协议时一个无连接协议,它既没有流量控制,也没有差错控制。我们假设接收方能够及时处理它收到的任何分组。换言之,接收方永远不会因为涌入的分组太多而处理不过来,下图是这个协议的概要。
发送方的运输层从应用那里得到一个报文,用他产生一个分组,然后发送这个分组。接收方的运输层从网络层哪里收到一个分组,从分组中提取出该报文,然后将该报文交付给应用层。发送方和接收方的运输层为它们各自的应用层提供传输服务。
FSM(Finite State Machine ...
流量控制平衡了生产者产生数据的速度和消费者消费数据的速度。TCP把流量控制从差错控制中独立出来。下图所示为发送方和接收方之间的单向数据传送。双向数据传送过程可以从单向传送中推断出来。
图中描绘的数据走向是从发送进程向下发送TCP,再从发送TCP到接收TCP,然后从接收TCP向上到达数据接收进程(路径1、2、和3)。不过,流量控制的反馈走向是从接收TCP到发送TCP,以及从发送TCP向上到发送进程(路径4和5)。TCP的绝大多数实现都不提供从接收进程到接收TCP的流量控制 反馈,而是接收进程准备就绪时去接收TCP那里拉取数据。换言之,接收TCP控制了发送TC ...
TCP首部可以由多达40字节的可选信息。选项用于把附加信息传递给终点,或用来填充对齐其他选项。我们将定义两大类选项:1字节选项和多字节选项。第一类选项包括两种选项:选项列表结束和误操作。在大多数实现 ...
虽然TCP软件需要掌握正在传送的或已接收到的每一个报文段,但在报文段首部中并没有存放报文段编号的字段。实际上,在这个首部中由两个叫作序号和确认号的字段。这两个字段所指的都是字节的编号而不是报文段的编号。
字节号
TCP把在一个连接中要发送的所有数据字节(8位组)都编上号。两个方向的编号是相互独立的。当TCP接收来自进程的数据字节时,就把它们存储在发送缓存中,并为它们进行编号。编号不一定要从0开始。TCP选择 0~(2^32 - 1)之间的一个随机数作为第一个字节的编号。例如,若这个数字恰巧是1057,而要发送的数据总共有6000字节,那么这些字节的编号是从 ...
TCP是可靠的运输层协议。这就表示应用层程序把数据流交付给TCP后要依靠TCP把整个数据流交付给另一端的应用程序,并且是按序的,没有差错、也没有任何一部分丢失或重复。
TCP使用差错控制来提供可靠性。差错控制包括以下的一些机制:检测和重传受到损伤的报文段、重传丢失的报文段、保存失序到达的报文段直至缺失的报文到期,以及检测和丢弃重复的报文段。TCP通过三个简单的工具来完成其差错控制:检验和、确认以及超时。
检验和
每个报文都包含了一个检验和字段,用来检查报文段是否收到损伤。如果某个报文段因检验和无效而被检查出受到损伤,就由终点TC ...
为了能够顺利的进行TCP的操作,大多数的TCP实现至少要使用4个计时器,见下图。
重传计数器
为了重传丢失的报文段,TCP应用了一个重传计时器(在整个连接期间)来处理重传超时(RTO),也就是对报文 ...
因特网中存在一个重要的问题是拥塞(congestion)。如果一个网络中的负载(load)(也就是发送到网络上的分组数量)大于网络的容量(也就是网络能够处理的分组数量),这个网络就有可能发生拥塞。拥塞控制(conge ...
滑动窗口
因为序号是模2的m次方,所以从0至2的m次方-1的序号可以表示为一个环。
缓存被表示为一组小格子,称为滑动窗口(sliding window),在任何时候它们都占据了圆的一部分。在发送方,当一个分组被发送出去,相应的小片就被标记。当所有的小片都被标记后,就表示缓存已满,不允许从应用层接收更多的报文。当一个确认达到后,相应的小片的标记就被取消。如果这个窗口前端连续多个小片都没有标记,那么这个窗口就向后滑动到相应的序号范围上,以允许窗口后端有更多空间的小片。下图描述了发送方的滑动窗口。序号是模16(m=4)的,且窗口大小为7.请注意,滑动窗口只不过是一种抽象,而实际 ...
绝大多数TCP/IP协议采用的差错检测方法称为检验和(checksum)。检验和能够防止分组在传输期间出现的损坏。检验和是附加在分组上的冗余信息。
发送端计算出检验和,并把得到的结果与分组一起发送出去。接收端对包括检验和在内的整个分组重复同样的计算。若得到了满意的结果则接收这个分组,否则就把它丢弃。
发送端计算检验和
在发送端,分组首部被划分为n位的段(n通常取值为16),把这些段用反码算术运算想家,得到的和的长度也是n位。再把这个和取反码(把所有的0变为1以及把所有的1变为0),就得出了校验和。
发送端按以下步骤 ...