67
第第 第第第第第 一统

第一部分 第一代网络系统

Embed Size (px)

DESCRIPTION

第一部分 第一代网络系统. 主要内容. 常规计算机硬件体系结构 基本的包处理算法和数据结构 主要的包处理功能 常规处理器上的协议软件. 常规计算机系统. 常规的计算机系统:由一个 CPU 、一个内存、一个或多个 I/O 设备以及一条总线组成。 将常规计算机转换成网络系统需要增加: 硬件:用来在网络上发送和接收数据包 软件:用来处理数据包。. 早期的 NIC. 网络接口卡( Network Interface Card , NIC ) 将计算机系统连接到网络的硬件设备 从计算机的角度来看, NIC 是一个 I/O 设备 - PowerPoint PPT Presentation

Citation preview

Page 1: 第一部分  第一代网络系统

第一部分 第一代网络系统

Page 2: 第一部分  第一代网络系统

主要内容 常规计算机硬件体系结构 基本的包处理算法和数据结构 主要的包处理功能 常规处理器上的协议软件

Page 3: 第一部分  第一代网络系统

常规计算机系统 常规的计算机系统:由一个 CPU 、一个内存、一

个或多个 I/O 设备以及一条总线组成。 将常规计算机转换成网络系统需要增加:

硬件:用来在网络上发送和接收数据包 软件:用来处理数据包。

Page 4: 第一部分  第一代网络系统

早期的 NIC 网络接口卡( Network Interface Card , NIC )

将计算机系统连接到网络的硬件设备 从计算机的角度来看, NIC 是一个 I/O 设备 从网络的角度来看, NIC 是一台计算机

CPU 控制 NIC 收发包的过程: 发送: CPU 在内存中组装好包,将包传递给 NIC , NIC 将包发送到网络。 接收: CPU 允许 NIC ,说明包存放的位置; NIC 等待从网络上到来的包,将其存放

到指定的位置,通知 CPU 。

NIC 中通常包含实现物理层协议标准的物理接口芯片组: 保证每个输出的帧具有正确的格式,并产生出符合物理层协议标准的信号波形; 检查每个到来的帧以保证每个帧是有效的。

Page 5: 第一部分  第一代网络系统

早期的 NIC (续) 数据总线的宽度是有限的,一个帧通常需要分多次传输,

早期的 NIC 依赖 CPU 完成帧的收发: 接收时, CPU 反复访问 NIC 取得下一个片段的数据,放到内存中; 发送时, CPU 反复地将帧的片段发送给 NIC 。

利用 CPU 控制包传输: 优点: NIC 可以做得很简单,代价低; 缺点:包传输开销大,系统可扩展性差,无法适应高速网络。

Page 6: 第一部分  第一代网络系统

现代的 NIC 现代 NIC 的设计思想:

将 CPU 从繁重的 I/O 中解脱出来,尽可能优化数据传输和减小开销。

四种优化技术: 卡上地址识别和过滤 卡上包缓存 直接内存访问( DMA ) 操作链

Page 7: 第一部分  第一代网络系统

( 1 )卡上地址识别和过滤 单播和广播地址的识别与过滤:用硬件实现 多播地址的识别与过滤:

CPU 描述要接收的多播地址集 NIC 限定多播地址集的大小( 32 或 64 ) NIC 维护一个 64 比特的矢量,并用一个哈希函数将多播地址映射

成 [0,63] 之间的一个数。 对于 CPU 指定要监听的每个多播地址计算一个哈希值,并将矢量

中对应比特的值置为 1 。 当一个多播帧到达时, NIC 计算目的地址的哈希值,然后检查矢

量中对应比特的值。若该比特的值为 1 ,则接收该帧,否则丢弃。

CPU 收到一个多播帧后进一步检查其目的地址是否匹配。 使用引用计数器统计多播地址集中有多少个地址对应了矢量中的同一个比特。

Page 8: 第一部分  第一代网络系统

( 2 )卡上包缓存 卡上包缓存的必要性:

包的传输是突发的:短时间内可能有大量数据包连续到来,且都是去往同一个节点;

总线是共享的: NIC 可能需要等待总线,或者等待 CPU 进行中断服务处理。

用于卡上缓存的 NIC 硬件允许两种同时的操作: 从网络接口接收一个帧并存到 NIC 的缓冲区 将 NIC 缓冲区中的一个帧通过总线传输到计算机

在 NIC 上设计一个较大的缓冲区是非常重要的,如果缓冲区能够容纳全部突发的流量,则没有包会丢失。

Page 9: 第一部分  第一代网络系统

( 3 )直接存储器访问 发送数据包:

CPU 在内存中组装好一个包,利用总线将包存放的位置告诉 NIC ;

NIC 利用 DMA 从内存中读取包,通过网络接口发送出去,然后产生一个中断通知 CPU 。

接收数据包: CPU 在总线上给出内存中一个缓冲区的位置,允许 NI

C 接收包; NIC 将收到的包传送到指定的内存位置,产生一个中断,

通知 CPU 操作完成。

Page 10: 第一部分  第一代网络系统

( 4 )操作链和数据链 数据链(或缓冲区链):

CPU 提供给 NIC 一个由较小的缓冲区形成的链表而不是一个较大的缓冲区,用于存放数据帧。

操作链(或命令链): CPU 在内存中创建一个“命令”链表,然后将链表的地址传递给 NIC 。 NIC 依次执行每一个命令,并在执行完最后一个命令后停止。

t / r syn t / r syn t / r syn

packet buff er packet buff er packet buff er

Page 11: 第一部分  第一代网络系统

主要内容 常规计算机硬件体系结构 基本的包处理算法和数据结构 主要的包处理功能 常规处理器上的协议软件

Page 12: 第一部分  第一代网络系统

基本的包处理算法和数据结构 以太网网桥算法 查表和哈希 IP 包分片和重组 IP 转发 TCP 连接监视 TCP 接续 包缓冲区管理 网络字节序

Page 13: 第一部分  第一代网络系统

( 1 )以太网网桥算法 在中低速以太网中,商用以太网网桥通常是一个采用常规

硬件体系结构的嵌入式系统: 一个微处理器,内存,两个网络接口 网桥算法用软件实现,在 ROM中运行

以太网网桥的转发规则: 将每一个到来的帧拷贝到另一个端口,除非已经知道帧的目的地

址是在输入端口所连接的网段上 当系统启动时,网桥转发每一个帧 网桥观察输入帧的源地址,获知每个节点所在的网段

Page 14: 第一部分  第一代网络系统

以太网网桥算法 Create an empty List, L, that will contain pairs of (MacAddress, Interface)Do forever {

Acquire the next frame to arrive; Set I to the interface over which the frame arrived; //I 为帧的输入

端口Extract the source address, S;Extract the destination address, D;Add the pair (S, I) to list L if not already present. //更新转发表If the pair (D, I) appears in list L { // 目的地址位于输入端口上 Drop the frame; } Else { Forward the frame over the other interface;}

}

Page 15: 第一部分  第一代网络系统

( 2 )查表和哈希 包处理过程中经常需要查表,比如,帧转发表(网桥)、

IP路由表、包分类表、资源预留表、 TCP 连接表…… 查表操作位于包处理的关键路径上,而且有些表非常庞大,因此查表操作必须优化。

对于规模不大的表,可以采用哈希查找。系统分配一个大表,然后利用哈希函数确定存放每个表项的槽位。当哈希表包含许多空槽时,两次哈希( double hashing)的性能很好。

Page 16: 第一部分  第一代网络系统

使用两次哈希查找( D, I )表 Given: a key, a table in memory, and the table size N.

Produce: a slot in the table that corresponds to the key or an empty table slot if the key is not in the talbe.Method: double hashing with open addressing.

Choose P1 and P2 to be prime numbers; Fold the key to produce an integer, K;Compute table pointer Q equal to (P1×K) modulo N;Compute increment R equal to (P2×K) modulo N;While (table slot Q not equal to K and nonempty) {

Q←(Q+R) modulo N;}At this point, Q either points to an empty table slot or to the slot containing the key.

Page 17: 第一部分  第一代网络系统

( 3 ) IP 分片与重组 IP 分片 / 重组的要点:

每个分片是一个独立的数据报,报头取自原始数据报的报头 分片报头与原始报头中不同的域:总长度,标志,分片偏移量,头校验 分片的长度由输出网络的MTU决定 标志位与分片偏移量一起决定一个数据报是否为一个分片

version IHL type of service total length

identificationDF

MF fragment offset

time to live protocol header checksum

source IP address

destination IP address

options (0 or more words)

32 Bits

ͼ8£ 5 IP ·Ö×éÍ·¸ñʽ

¹Ì¶¨²¿·Ö

Page 18: 第一部分  第一代网络系统

IP 分片算法 Given: an IP datagram, D, and a network MTU. Produce: a set of fragments for D.

If the DO NOT FRAGMENT bit is set { Stop and report an error;}Compute the size of the datagram header, H;Choose N to be the largest multiple of 8 such that H+N≤MTU;Initialize an offset counter, O, to be zero;Repeat until datagram empty { Create a new fragment that has a copy of D’s header; Extract up to the next N octets of data from D and place the data in the fragment; Set the MORE FRAGMENT bit in fragment header;

Set TOTAL LENGTH field in fragment header to be H+N; Set FRAGMENT OFFSET field in fragment header to be O; Compute and set the CHECKSUM field in fragment header; Increment O by N/8;

}

Page 19: 第一部分  第一代网络系统

IP 重组的复杂性 乱序投递:分片在传递过程中可能改变路由,各个分片可

能乱序到达。特别是,有些路由器会优先传输短包,所以最后的一个分片可能第一个到达。

重复:由于高层协议重传的缘故,网络中会出现重复的数据包或分片。尤其是当重传包沿着一条不同的路径传输时,其分片可能与原始包的分片不同,也就是说不同的分片之间数据有重叠。

丢失:来自于一个数据包的一个或几个分片可能在传输过程中丢失,而 IP不会重传丢失的包或分片。

并发接收:接收系统必须准备同时接收来自不同数据包的分片。

Page 20: 第一部分  第一代网络系统

IP 重组的要点 接收方使用数据报的源 IP 地址和 ID识别属于同一个数据报的分片。 接收节点为每个数据报分配一个缓冲区,存放属于该数据报的分片;

当重组定时器超时后,释放该数据报的重组缓冲区及相关的数据结构 由于分片可能乱序到达,且分片之间可能有数据重叠,接收节点必须记录下哪些数据已经收到了。

重组算法使用的数据结构如下:

40 80 40

重 组 缓 冲 区 分 片

Page 21: 第一部分  第一代网络系统

IP 重组的伪代码 Given: a fragment, F, add to a partial reassembly.

Method: maintain a set of fragments for each datagram.

Extract the IP source address, S, and ID fields from F;

Combine S and ID to produce a lookup key, K;

Find the fragment set with K or create a new set;

Insert F into the set;

If the set contains all the data for the datagram {

Form a completely reassembled datagram and process it;

}

Page 22: 第一部分  第一代网络系统

( 4 ) IP 转发 IP 转发与网桥转发的最大不同:

网桥转发表用主机的MAC 地址标识目标,可采用精确匹配查找(如哈希查找)

IP路由表用网络前缀(不是一个完整的 IP 地址)标识目标,不能采用精确匹配查找

IP路由表示例 目的地址 地址掩码 下一跳地址 接口192.5.48.0 255.255.255.0 128.210.30.5 2128.10.0.0 255.255.0.0 128.210.141.12 1 0.0.0.0 0.0.0.0 128.210.30.5 2

Page 23: 第一部分  第一代网络系统

采用线性查找的算法 Given: destination address A routing table R.Find: a next hop and interface used to route datagram to A.For each entry in table R { Set MASK to the Address Mask in the entry; Set DEST to the Destination Address in the entry; If ( A & MASK) ==DEST {

Stop; use the next hop and interface in the entry; } } if this point is reached, declare error: no route exist.

Page 24: 第一部分  第一代网络系统

基于类编址的路由查找 基于类编址的 IP 地址是自包含的,即给定一个目

的 IP 地址,就可以从地址的前几位得到类型信息,并准确取出网络地址。

地址查找的方法: 按照目的地址是 A类、 B类还是 C类地址,将路由表项组织到三张表中,每张表只保存地址类型相同的表项。

对于收到的分组,路由器取出目的 IP 地址,根据类型标识取出网络地址,并采用哈希查找法查找相应的路由表。

Page 25: 第一部分  第一代网络系统

基于无类编址的路由查找 采用 CIDR后,每个地址块可以有任意的前缀长度,从而

地址的类标识不再指示前缀的长度。 由于允许地址聚合,路由表中的一个表项可能代表了一群

网络而不是一个网络。 一个 IP 地址可能匹配多个表项,其中前缀最长的表项是最佳匹配。

因此, IP 地址查找属于最长前缀匹配查找。

Page 26: 第一部分  第一代网络系统

适合 IP 查找的算法 线性查找效率太低,只能适用于很小的路由表 哈希查找不能用于 IP路由查找,因为

无法保证相同网络前缀的地址被散列到同一个槽位 必须查看每个表项的掩码才能确定地址前缀的长度

目前最流行的高速 IP 查找算法采用 Trie 树结构

Page 27: 第一部分  第一代网络系统

二进制 Trie树

对二进制 Trie 树的改进: 缩短只包含一个叶子节点的长分支 采用多分支Trie 树

a d

c

b

e

f g h i

0 1

1

10

0

0

0

0 0

0 0

1

1

11

Pr efi xesa 0*b 01000*c 011*d 1*e 100*f 1100*g 1101*h 1110*i 1111*

Page 28: 第一部分  第一代网络系统

( 5 ) TCP 连接监视 系统记录每个 TCP 连接的状态,如正在建立、已经建立、

正在终止等。 TCP 使用(源 IP 地址,目的 IP 地址,源端口,目的端

口)四元组来标记一个 TCP 连接 系统检查在两个端系统间传输的 TCP 段的 SYN、 FIN等

标志。

Page 29: 第一部分  第一代网络系统

监视 TCP 连接的算法Given: a copy of traffic passing across a network.Produce: a record of TCP connections present in the traffic.

Initialize a connection table, C, to empty;For each IP datagram that carries a TCP segment { Extract the IP source, S, and destination, D, addresses; Extract the source, P1, and destination, P2, port numbers;

Use (S, D, P1, P2) as a lookup key for table C and create a new entry, if needed;

If the segment has the RESET bit set, delete the entry; Else if the segment has the FIN bit set, mark the connection closed in one

direction, removing the entry from C if the connection was previously closed in the other;

Else if the segment has the SYN bit set, mark the connection as being established in one direction, marking it completely established if it was previously marked as being established in the other;

}

Page 30: 第一部分  第一代网络系统

( 6 ) TCP Splicing 将两个独立的 TCP 连接接合起来,使得从一个连

接上到来的 TCP 段可以被另一个连接接收。序号转换是 TCP 接续的核心。接续器必须将从一

个连接上到来的 TCP 段中的序号转换成另一个连接上的序号,确认序号也必须转换。

Page 31: 第一部分  第一代网络系统

TCP 接续示意图

连接和方向 序列号 连接和方向 序列号Incoming #1 200 Incoming#2 1200Outgoing#2 860 Outgoing#1 50---------------------------------------------------------------------------------- Change 660 Change -1150

序号变换: +change确认序号变换: -change

HostA

Spl i cerHost

BTCP #1连 接 TCP #2连 接

sequence 200 sequence 50 sequence 860 sequence 1200

1 2

Page 32: 第一部分  第一代网络系统

TCP 接续使用的算法Given: two TCP connections.Produce: sequence translations for splicing the connection.

Compute D1, the difference between the starting sequences on incoming connection 1 and outgoing connection 2;Compute D2, the difference between the starting sequences on incoming connection 2 and outgoing connection 1;For each segment {

If segment arrived on connection 1 {Add D1 to sequence number;

Subtract D2 from acknowledgement number;

} else if segment arrived on connection 2 {Add D2 to sequence number;

Subtract D1 from acknowledgement number;

}

Page 33: 第一部分  第一代网络系统

( 7 )包缓冲区管理 缓冲区用于缓存收到的数据包,等待处理。 分配多大的内存作为包缓冲区?

取决于网络突发流量或者节点的资源管理策略 包缓冲器采用固定长度还是可变长度?

通常采用固定大小的包缓冲器以避免出现内存碎片 每个包缓冲器取多大?

等于所连接网络中最大帧的长度 为连接的每一类网络分配一块内存,在每一块内存中选择适合该网络

帧长的包缓冲器大小 选择较小的包缓冲器长度,用一个包缓冲器链表存放较大的包

Page 34: 第一部分  第一代网络系统

包缓冲区管理(续) 不同的网络接口是否共享一个包缓冲区?

大多数包处理任务只涉及对包头进行处理,不需要访问包的载荷。 数据包拷贝需要消耗大量的时间(与包长成正比),效率非常低下(内存

速度很慢),应尽可能避免在网络系统内进行数据包拷贝。 所有网络接口共享一个包缓冲区可以避免帧的拷贝。

高层协议会影响包缓冲区的分配策略 IP 包的最大长度可以达到 64KB,最小只有 20 字节,大多数较长的包为 1500 字节

设计者使用两种长度的包缓冲器,许多长度为 1500 字节的包缓冲器和少量长度为 64KB的包缓冲器,系统根据数据包的大小选择合适的包缓冲器。

应避免在分层协议栈中拷贝数据包: 大缓冲器:给每个包分配一个较大的缓冲器,包的封装及解封装都在该缓冲器进行

链表:将载荷及各层包头用链表连接起来

Page 35: 第一部分  第一代网络系统

( 8 )网络字节序 TCP/IP 规定包头中的整数值在传输时用网络字节序表示 目前最流行的两种整数表示法:

小端表示法:低位字节存放在较小的地址,即表示整数的地址指向的是低位字节

大端表示法:高位字节存放在较小的地址,即表示整数的地址指向的是高位字节

TCP/IP 定义网络字节序为大端 大多数系统都有库例程用于执行必要的字节序转换。

Page 36: 第一部分  第一代网络系统

主要内容 常规计算机硬件体系结构 基本的包处理算法和数据结构 主要的包处理功能 常规处理器上的协议软件

Page 37: 第一部分  第一代网络系统

网络系统的基本功能 地址查找和包转发 差错检测和纠正 分片、分段和重组 解多路复用 包分类 排队和包丢弃 调度 安全:鉴别和保密 流量测量、整形和管制 定时器管理

Page 38: 第一部分  第一代网络系统

( 1 )地址查找和转发 地址查找的例子:MAC 地址查找, IP 地址查找, IP 多

播查找, ARP cache查找…… 地址查找通常和包转发联系在一起,系统维护一个地址表,

利用数据包中的目的地址查表得到转发信息 : MAC 地址查找:精确匹配 IP 地址查找:最长前缀匹配 IP 多播查找:(源 IP 地址,多播地址)二维查找,其中源地址为最长前缀匹配,组地址为精确匹配

Page 39: 第一部分  第一代网络系统

( 2 )差错检测和纠正 最常见的差错检测方法是 CRC 和检查和( checksum)。

虽然差错检验码的传输开销很小,但计算开销很大。特别

是当差错检测覆盖整个数据包时,其计算量与包长成正比。 CRC 检错能力强,主要用在链路层上检测传输错误,用硬

件实现。 检查和方法提供的差错保护比较弱,主要用于在网络层和

传输层上检测内存读写错误(如内存中某些位损坏),用软件实现。计算简单,支持增量更新。

因特网中的差错恢复主要靠包重传实现,纠错技术用得很少。

Page 40: 第一部分  第一代网络系统

( 3 )分片、分段和重组 许多协议允许发送端将一个较大的包划分成若干较小的单元进行传输,接收端再将这些单元组装成原始的包。

分片和分段的例子: IP 分片, ATM分段,… 分片和分段一般比较简单,重组则复杂得多,需

要考虑包缓冲及各种异常情况的处理。

Page 41: 第一部分  第一代网络系统

( 4 )解多路复用( demultiplexing ) 多路复用是指多个高层协议调用一个低层协议传

输数据包,而解多路复用则是指低层协议从若干个高层协议中选择一个来处理收到的数据包。

解多路复用发生在协议栈的每一层上。 包头中的类型信息由发送端在构造数据包时加入,

接收端利用这些类型信息解多路复用。

Page 42: 第一部分  第一代网络系统

( 5 )包分类 系统根据一组分类规则将所有的数据包划分成若干种类别

(流),对每种类别的包执行相同的操作。包分类就是将一个数据包映射到一个流的过程。

分类与解多路复用的不同: 解多路复用是一种无状态操作,包分类可以是一种有状态操作 解多路复用使用一种全局类型系统,而包分类不需要使用全局类型系统,也不要求发送方参与

解多路复用一次处理一层,而包分类可以从不同层次的协议头中抽取相关的域进行分类

包分类的最大优势是突破了传统的协议分层处理的限制,极大地提高了处理速度,成为高速包处理的重要基础。

Page 43: 第一部分  第一代网络系统

( 6 )排队和分组丢弃 “排队”用于指代与存储和选择数据包相关的策略、数据结构和算

法。 排队要考虑的问题:

队列放在何处:设置在输入端还是输出端 队列长度:取决于流量突发长度及资源管理策略 每个接口分配一个队列还是所有接口使用一个共享队列 是否支持优先级;若是,采用什么排队准则(优先级队列,加权循环WRR,加权公平队列WFQ,……)

包丢弃:当网络系统无法接收更多的数据包时,选择一些数据包进行丢弃的策略和机制。 弃尾( drop tail) RED( Random Early Detection):和 TCP 一起使用 EPD( Early Packet Discard):和 ATM一起使用。

Page 44: 第一部分  第一代网络系统

( 7 )调度 “调度”用来描述对网络系统中并发和并行行为的协调

处理多个同时到达的数据包 协调多个数据包对同一个输出端口的竞争 管理多个并发的定时器事件 管理各个协议的进程或线程 协调多个处理器 ……

调度机制试图保证公平性

Page 45: 第一部分  第一代网络系统

( 8 )安全:鉴别和保密 防火墙之类的网络系统需要处理安全协议和机制,鉴别

(身份鉴别、消息鉴别)和保密是其中的重要安全机制。 鉴别和保密都要依赖于一个非常重要的底层技术 --加密。 尽管用于鉴别的附加信息不大,但是处理鉴别和保密需要

的计算量很大: 鉴别和保密均需要涉及大量的数据,如整个数据包; 加 / 解密计算通常要求大量的计算。

实现安全机制的网络系统通常要求另外的处理能力。

Page 46: 第一部分  第一代网络系统

( 9 )流量测量、整形和管制 流量测量通常出现在支持服务等级的网络中,用于发现流

量模式,确定一种合适的服务等级。 流量整形用于调节流量以使其符合事先约定的统计特征 ,采用的手段通常是推迟包的发送。

流量管制是利用强制手段来使实际的流量模式符合事先约定的流量特征,采用的手段通常是丢弃包。

由于流量整形和管制位于关键路径上,因此设计时速度是首要考虑的因素。

Page 47: 第一部分  第一代网络系统

( 10 )定时器管理 定时器管理是包处理的一个重要部分:超时重传,表刷新, IP 重组,调度,流量整形……

网络系统中定时器管理的复杂性: 系统必须能够同时提供多个定时器 对定时器精度的要求差异很大(从毫秒级到分钟级) 协议动态地创建和删除定时器

Page 48: 第一部分  第一代网络系统

Delta表 每个表项对应一个将要发生的事件,表项中给出事件将要发生的时间。 表中的事件按照它们将要发生的时间顺序保存,且被保存的是相对时

间而不是绝对时间。 定时器进程定期递减表中第一项的时间值,值为 0时事件发生,从表

中删除该表项,然后定期递减下一个表项的时间。 通常建立两个 Delta 表,一个提供细分辨率(如毫秒级)的定时器管

理,另一个提供粗分辨率(如秒级)的定时器管理。

16 4 1 9

Page 49: 第一部分  第一代网络系统

主要内容 常规计算机硬件体系结构 基本的包处理算法和数据结构 主要的包处理功能 常规处理器上的协议软件

Page 50: 第一部分  第一代网络系统

常规处理器上的协议软件 网络系统在哪儿实现 优先级处理 实现分层协议的软件异步编程和同步编程

Page 51: 第一部分  第一代网络系统

( 1 )网络系统在哪儿实现? 将网络系统实现为一个应用程序:

方便编程、编译和调试 应用程序运行在私有虚拟地址空间中,简化了数据结

构和缓冲区的分配 底层系统只要提供基本的 I/O支持 已经有许多库例程可以为应用程序提供访问系统服务

和功能的方法 缺点:应用程序(包处理软件)无法与 I/O 设备( NI

C )直接交互,导致较高的开销(如数据包拷贝),无法适应高速度。

Page 52: 第一部分  第一代网络系统

实现为独立的嵌处式系统嵌入式系统由专用于某个特殊任务的可编程硬件

设备组成,典型地包括一个处理器、 ROM (运行软件)、 RAM 、一个或多个 I/O 接口,处理器完全由软件控制。

优点:软件可以针对特定的任务和硬件结构而优化,因而很容易实现高速度。

缺点:代价高。嵌入式系统实现对于一个独立的网络设备来说是最理想的。

Page 53: 第一部分  第一代网络系统

在操作系统内核中实现 一种较低代价的实现方法是在计算机操作系统中构建包处

理软件。 与应用程序相比,内核能够控制所有的硬件资源,开销小,但编程难度大一些。

与嵌入式系统相比,操作系统提供了编程抽象,提升了编码的级别,并提供了设备驱动程序这样控制硬件资源的程序,程序员不需要关心硬件的细节。

设计者可以选择将协议处理划分成两部分,要求高速度的包处理放在操作系统中,不要求优化的部分(如人机接口)放在应用程序中,以减轻内核的负担。

操作系统中的协议软件可以被运行在计算机上的所有应用程序共享。

Page 54: 第一部分  第一代网络系统

( 2 )协议软件以怎样的优先级运行? 一般地,计算机系统提供硬件中断、软件中断和应用程序三个优先等级 硬件中断:由 I/O 设备引起 软件中断:由执行一条特殊指令引起

软件中断可以用来改变优先级。 一般的想法:

硬件设备(网络接口)需要最高的优先级 协议软件具有中等的优先级 应用程序具有最低的优先级

队列用来在不同优先级之间提供缓存

Page 55: 第一部分  第一代网络系统

使用队列连接不同的优先级

Page 56: 第一部分  第一代网络系统

多优先级和内核线程 软件中断机制无法提供足够多的优先级别,一般只有 4个或 8个优先级。

许多操作系统可以将处理优先级分配给并发的执行线程。

线程的优点是可以提供比软件中断更多的优先级,且编程模式为程序员所熟悉。

操作系统利用优先级进行线程调度。

Page 57: 第一部分  第一代网络系统

协议软件的概念组织 协议软件使用内核线程实现,可以访问内核中的所有数据结构和 I/O 设备,可以灵活设置线程的优先级。

内核线程共享一个地址空间,一个线程可以检查或修改任何一个数据结构。

数据包在多个控制线程间传递。 每一对线程间使用队列缓存包。 线程同步机制保证互斥地访问包队列等共享数据

结构。

Page 58: 第一部分  第一代网络系统

( 3 )分层协议的内核线程组织 分层的协议栈如何用线程来组织?

每层一个线程 每协议一个线程 每协议多个线程 每包一个线程 独立的定时器管理线程

Page 59: 第一部分  第一代网络系统

每层一个线程 每一层设计为一个线程,较低层上的线程具有较高的

优先级。 优点:

易于为程序员所理解 实现与概念模型相匹配 允许为每一层分配一个优先级

每一层上设置一个包队列,用于在相邻层间传递包 不同层上的线程采用阻塞机制进行同步

Page 60: 第一部分  第一代网络系统

每层一个线程示意图

Page 61: 第一部分  第一代网络系统

每协议一个线程 若某层上有多个协议,程序员可以为每个协议单独分配一

个线程,简化代码的设计。 类似于每层一个线程的方法,其实现与概念模型相匹配。 优于每层一个线程的地方:

更易于为程序员所理解,代码设计更简化 细粒度控制 允许给每个协议分配一个优先级

每个协议使用一个单独的队列接收到达的包

Page 62: 第一部分  第一代网络系统

每协议一个线程的例子

Page 63: 第一部分  第一代网络系统

每协议多个线程如果一个协议比较复杂,可以用多个线程实现,

以进一步减小软件的复杂度。 可以比单线程有更多的控制,比如可以给某个方向的处理以更高的优先级。

典型的划分: 为包的输入处理分配一个线程 为包的输出处理分配一个线程 为管理 / 定时分配单独的线程

Page 64: 第一部分  第一代网络系统

每包一个线程假设系统中有很多线程可用,线程的分配不需要花费很多的开销(如预分配一个线程池),而且大部分的包在穿过协议栈时不被分片。

当数据包到来时: 系统分配给它一个空闲的线程 线程执行每一层上的代码 返回等待下一个包

最小化上下文切换

Page 65: 第一部分  第一代网络系统

独立的定时器管理线程 由于许多协议都要用到定时器管理,可以用两个

定时器线程管理所有协议的定时事件。粗粒度定时器

管理秒级定时事件 工作在较低优先级

细粒度定时器 管理微秒级定时事件 工作在较高优先级

Page 66: 第一部分  第一代网络系统

( 4 )异步编程和同步编程 围绕中断组织程序倾向于使程序成为异步的:

程序员将输入看成是一系列可在任何时刻发生的事件,代码被组织为一组模块,每个模块处理一个可能的事件。

CPU 可在任何时刻被抢占以处理一个较高优先级的事件。 围绕线程组织程序倾向于使程序成为同步的:

程序员将一组线程看成是相互独立的,一个线程一次处理一个事件。

一个线程完成一个动作后,再开始另一个动作。 同步代码通常比异步代码容易编写和理解,因此不容易出错;但是同步程序通常比异步程序执行效率低。

Page 67: 第一部分  第一代网络系统

作业 实验一, 4月 5日前提交。