各模块说明如下:

报文段仲裁器1

位于TCP与NC层之间的仲裁器。具备判断2种类型数据的能力:

1.来自TCP的数据报文段;

2.来自TCP的用于连接等控制信号的报文段。

如果是1,则将其放入输入缓存;如果是2则直接送往IP层。

 

报文段仲裁器2

位于IP与NC层之间的仲裁器。具备判断3种类型数据的能力:

1.来自IP的已编码报文段;

2.来自IP的用于连接等控制信号的报文段;

3. NC_ACK信号。

如果是1,则将其放入输入缓存;如果是2则直接送往TCP层;如果是3,则交由NC_ACK判决器。

 

编码模块

NC_ACK判决器

用于判决NC_ACK信号,告诉编码窗口应删除哪一个或哪几个原始报文段,同时其负责“伪造”ACK发给上层TCP。

 

输入缓存

保存来自TCP的数据报文段,因为编码窗口每次仅读取一个原始报文段,输入缓存用来保存还未来得及处理的原始报文段。

 

编码窗口

保存原始报文段,每次从输入缓存读取一个原始报文段,收到NC_ACK判决器发来的信号后即删除相应报文段。

 

随机数产生器

产生0~255的随机系数,不过在使用时应避免0。

   

编码器

利用随机数产生器产生的随机系数对编码窗口中存在的报文段编码,若当前编码窗口只有一个报文段,则直接交给合成器,不进行编码。

 

合成器

将包头产生器传来的NC包头和已编码的报文段合成一个完整的NC层报文段,交给输出缓存。

 

输出缓存

接收合成器传来的NC报文段,在此处设置输出缓存也可起到控制发送速率的作用。

 

系数表

收发双方在建立连接时由发送方传递给接收方的系数表,整个会话过程中系数表不变。根据系数偏移读出相应的系数。

 

包头添加模块

报文段编码情况

即本次有多少报文段参与了编码,这个在解码时必须知道。

 

系数偏移

指示本次所使用的系数在系数表中开始的位置。

 

包头产生器

将报文段编码情况模块和编码系数模块传来的信息封装成规定格式的NC包头,再由合成器与相应已编码报文段组成NC报文段。

 

解码模块

输入缓存

保存来自IP的数据报文段。

 

包头处理

将包头和负载分离,通过包头中的系数偏移和编码情况恢复出编码系数。

   

系数缓存

存放编码系数,并执行高斯消元,确定新看见的报文段,若发现新的报文段则向NC_ACK产生器发送信号,否则丢弃这一组编码系数并通知解码缓存及报文段编码模块一并删除这一组数据。

 

报文段编码情况

和包头添加模块中一样,存储报文段参与的信息。

 

解码缓存

存放编码报文段数据,执行与系数缓存相同的高斯消元,在解码时从报文段编码情况模块获取报文段编码情况信息。

 

NC_ACK产生器

NC层独有的ACK,收到系数缓存传来的信号,便产生一个ACK并把它传递给编码模块的输出缓存,用来告知发送方自己所看到的报文段情况,同时向ACK产生器发送信号。

 

输出缓存

解码的报文段按原来的顺序存放在这里,然后传给TCP,同样可以进行速率控制。

 

2.处理器共享技术的融合:

对于短流持续时间比其所需时间更长的情况,处理器共享(Processor Sharing)机制可以很好应对,它的核心思想就是模拟处理器的资源在各线程间公平分配的特点,把路由器每个线卡的输出链路带宽平均分配给那些正在进行的所有信息流。在建立连接时,每一跳路由根据当前线卡使用情况及发送方的期望发送速率分配给其一个合适的初始速率,缩短以慢启动方式达到合理共享速率的时间。