1 / 67

第一部分 第一代网络系统

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

Download Presentation

第一部分 第一代网络系统

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第一部分 第一代网络系统

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

  3. 常规计算机系统 • 常规的计算机系统:由一个CPU、一个内存、一个或多个I/O设备以及一条总线组成。 • 将常规计算机转换成网络系统需要增加: • 硬件:用来在网络上发送和接收数据包 • 软件:用来处理数据包。

  4. 早期的NIC • 网络接口卡(Network Interface Card,NIC) • 将计算机系统连接到网络的硬件设备 • 从计算机的角度来看,NIC是一个I/O设备 • 从网络的角度来看,NIC是一台计算机 • CPU控制NIC收发包的过程: • 发送:CPU在内存中组装好包,将包传递给NIC,NIC将包发送到网络。 • 接收:CPU允许NIC,说明包存放的位置;NIC等待从网络上到来的包,将其存放到指定的位置,通知CPU。 • NIC中通常包含实现物理层协议标准的物理接口芯片组: • 保证每个输出的帧具有正确的格式,并产生出符合物理层协议标准的信号波形; • 检查每个到来的帧以保证每个帧是有效的。

  5. 早期的NIC(续) • 数据总线的宽度是有限的,一个帧通常需要分多次传输,早期的NIC依赖CPU完成帧的收发: • 接收时,CPU反复访问NIC取得下一个片段的数据,放到内存中; • 发送时,CPU反复地将帧的片段发送给NIC。 • 利用CPU控制包传输: • 优点:NIC可以做得很简单,代价低; • 缺点:包传输开销大,系统可扩展性差,无法适应高速网络。

  6. 现代的NIC • 现代NIC的设计思想: • 将CPU从繁重的I/O中解脱出来,尽可能优化数据传输和减小开销。 • 四种优化技术: • 卡上地址识别和过滤 • 卡上包缓存 • 直接内存访问(DMA) • 操作链

  7. (1)卡上地址识别和过滤 • 单播和广播地址的识别与过滤:用硬件实现 • 多播地址的识别与过滤: • CPU描述要接收的多播地址集 • NIC限定多播地址集的大小(32或64) • NIC维护一个64比特的矢量,并用一个哈希函数将多播地址映射成[0,63]之间的一个数。 • 对于CPU指定要监听的每个多播地址计算一个哈希值,并将矢量中对应比特的值置为1。 • 当一个多播帧到达时,NIC计算目的地址的哈希值,然后检查矢量中对应比特的值。若该比特的值为1,则接收该帧,否则丢弃。 • CPU收到一个多播帧后进一步检查其目的地址是否匹配。 • 使用引用计数器统计多播地址集中有多少个地址对应了矢量中的同一个比特。

  8. (2)卡上包缓存 • 卡上包缓存的必要性: • 包的传输是突发的:短时间内可能有大量数据包连续到来,且都是去往同一个节点; • 总线是共享的:NIC可能需要等待总线,或者等待CPU进行中断服务处理。 • 用于卡上缓存的NIC硬件允许两种同时的操作: • 从网络接口接收一个帧并存到NIC的缓冲区 • 将NIC缓冲区中的一个帧通过总线传输到计算机 • 在NIC上设计一个较大的缓冲区是非常重要的,如果缓冲区能够容纳全部突发的流量,则没有包会丢失。

  9. (3)直接存储器访问 • 发送数据包: • CPU在内存中组装好一个包,利用总线将包存放的位置告诉NIC; • NIC利用DMA从内存中读取包,通过网络接口发送出去,然后产生一个中断通知CPU。 • 接收数据包: • CPU在总线上给出内存中一个缓冲区的位置,允许NIC接收包; • NIC将收到的包传送到指定的内存位置,产生一个中断,通知CPU操作完成。

  10. (4)操作链和数据链 • 数据链(或缓冲区链): • CPU 提供给 NIC 一个由较小的缓冲区形成的链表而不是一个较大的缓冲区,用于存放数据帧。 • 操作链(或命令链): • CPU在内存中创建一个“命令”链表,然后将链表的地址传递给NIC。 • NIC依次执行每一个命令,并在执行完最后一个命令后停止。

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

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

  13. (1)以太网网桥算法 • 在中低速以太网中,商用以太网网桥通常是一个采用常规硬件体系结构的嵌入式系统: • 一个微处理器,内存,两个网络接口 • 网桥算法用软件实现,在ROM中运行 • 以太网网桥的转发规则: • 将每一个到来的帧拷贝到另一个端口,除非已经知道帧的目的地址是在输入端口所连接的网段上 • 当系统启动时,网桥转发每一个帧 • 网桥观察输入帧的源地址,获知每个节点所在的网段

  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; } }

  15. (2)查表和哈希 • 包处理过程中经常需要查表,比如,帧转发表(网桥)、IP路由表、包分类表、资源预留表、TCP连接表…… • 查表操作位于包处理的关键路径上,而且有些表非常庞大,因此查表操作必须优化。 • 对于规模不大的表,可以采用哈希查找。系统分配一个大表,然后利用哈希函数确定存放每个表项的槽位。当哈希表包含许多空槽时,两次哈希(double hashing)的性能很好。

  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.

  17. (3)IP分片与重组 • IP分片/重组的要点: • 每个分片是一个独立的数据报,报头取自原始数据报的报头 • 分片报头与原始报头中不同的域:总长度,标志,分片偏移量,头校验 • 分片的长度由输出网络的MTU决定 • 标志位与分片偏移量一起决定一个数据报是否为一个分片

  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; }

  19. IP重组的复杂性 • 乱序投递:分片在传递过程中可能改变路由,各个分片可能乱序到达。特别是,有些路由器会优先传输短包,所以最后的一个分片可能第一个到达。 • 重复:由于高层协议重传的缘故,网络中会出现重复的数据包或分片。尤其是当重传包沿着一条不同的路径传输时,其分片可能与原始包的分片不同,也就是说不同的分片之间数据有重叠。 • 丢失:来自于一个数据包的一个或几个分片可能在传输过程中丢失,而IP不会重传丢失的包或分片。 • 并发接收:接收系统必须准备同时接收来自不同数据包的分片。

  20. IP重组的要点 • 接收方使用数据报的源IP地址和ID识别属于同一个数据报的分片。 • 接收节点为每个数据报分配一个缓冲区,存放属于该数据报的分片;当重组定时器超时后,释放该数据报的重组缓冲区及相关的数据结构 • 由于分片可能乱序到达,且分片之间可能有数据重叠,接收节点必须记录下哪些数据已经收到了。 • 重组算法使用的数据结构如下:

  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; }

  22. (4)IP转发 • IP转发与网桥转发的最大不同: • 网桥转发表用主机的MAC地址标识目标,可采用精确匹配查找(如哈希查找) • IP路由表用网络前缀(不是一个完整的IP地址)标识目标,不能采用精确匹配查找 • IP路由表示例 目的地址 地址掩码 下一跳地址 接口 192.5.48.0 255.255.255.0 128.210.30.5 2 128.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

  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.

  24. 基于类编址的路由查找 • 基于类编址的IP地址是自包含的,即给定一个目的IP地址,就可以从地址的前几位得到类型信息,并准确取出网络地址。 • 地址查找的方法: • 按照目的地址是A类、B类还是C类地址,将路由表项组织到三张表中,每张表只保存地址类型相同的表项。 • 对于收到的分组,路由器取出目的IP地址,根据类型标识取出网络地址,并采用哈希查找法查找相应的路由表。

  25. 基于无类编址的路由查找 • 采用CIDR后,每个地址块可以有任意的前缀长度,从而地址的类标识不再指示前缀的长度。 • 由于允许地址聚合,路由表中的一个表项可能代表了一群网络而不是一个网络。 • 一个IP地址可能匹配多个表项,其中前缀最长的表项是最佳匹配。 • 因此,IP地址查找属于最长前缀匹配查找。

  26. 适合IP查找的算法 • 线性查找效率太低,只能适用于很小的路由表 • 哈希查找不能用于IP路由查找,因为 • 无法保证相同网络前缀的地址被散列到同一个槽位 • 必须查看每个表项的掩码才能确定地址前缀的长度 • 目前最流行的高速IP查找算法采用Trie树结构

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

  28. (5)TCP连接监视 • 系统记录每个TCP连接的状态,如正在建立、已经建立、正在终止等。 • TCP使用(源IP地址,目的IP地址,源端口,目的端口)四元组来标记一个TCP连接 • 系统检查在两个端系统间传输的TCP段的SYN、FIN等标志。

  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; }

  30. (6)TCP Splicing • 将两个独立的TCP连接接合起来,使得从一个连接上到来的TCP段可以被另一个连接接收。 • 序号转换是TCP接续的核心。接续器必须将从一个连接上到来的TCP段中的序号转换成另一个连接上的序号,确认序号也必须转换。

  31. TCP接续示意图 连接和方向 序列号 连接和方向 序列号 Incoming #1 200 Incoming#2 1200 Outgoing#2 860 Outgoing#1 50 ---------------------------------------------------------------------------------- Change 660 Change -1150 序号变换:+change 确认序号变换:-change

  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; }

  33. (7)包缓冲区管理 • 缓冲区用于缓存收到的数据包,等待处理。 • 分配多大的内存作为包缓冲区? • 取决于网络突发流量或者节点的资源管理策略 • 包缓冲器采用固定长度还是可变长度? • 通常采用固定大小的包缓冲器以避免出现内存碎片 • 每个包缓冲器取多大? • 等于所连接网络中最大帧的长度 • 为连接的每一类网络分配一块内存,在每一块内存中选择适合该网络帧长的包缓冲器大小 • 选择较小的包缓冲器长度,用一个包缓冲器链表存放较大的包

  34. 包缓冲区管理(续) • 不同的网络接口是否共享一个包缓冲区? • 大多数包处理任务只涉及对包头进行处理,不需要访问包的载荷。 • 数据包拷贝需要消耗大量的时间(与包长成正比),效率非常低下(内存速度很慢),应尽可能避免在网络系统内进行数据包拷贝。 • 所有网络接口共享一个包缓冲区可以避免帧的拷贝。 • 高层协议会影响包缓冲区的分配策略 • IP包的最大长度可以达到64KB,最小只有20字节,大多数较长的包为1500字节 • 设计者使用两种长度的包缓冲器,许多长度为1500字节的包缓冲器和少量长度为64KB的包缓冲器,系统根据数据包的大小选择合适的包缓冲器。 • 应避免在分层协议栈中拷贝数据包: • 大缓冲器:给每个包分配一个较大的缓冲器,包的封装及解封装都在该缓冲器进行 • 链表:将载荷及各层包头用链表连接起来

  35. (8)网络字节序 • TCP/IP规定包头中的整数值在传输时用网络字节序表示 • 目前最流行的两种整数表示法: • 小端表示法:低位字节存放在较小的地址,即表示整数的地址指向的是低位字节 • 大端表示法:高位字节存放在较小的地址,即表示整数的地址指向的是高位字节 • TCP/IP定义网络字节序为大端 • 大多数系统都有库例程用于执行必要的字节序转换。

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

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

  38. (1)地址查找和转发 • 地址查找的例子:MAC地址查找,IP地址查找,IP多播查找,ARP cache查找…… • 地址查找通常和包转发联系在一起,系统维护一个地址表,利用数据包中的目的地址查表得到转发信息: • MAC地址查找:精确匹配 • IP地址查找:最长前缀匹配 • IP多播查找:(源IP地址,多播地址)二维查找,其中源地址为最长前缀匹配,组地址为精确匹配

  39. (2)差错检测和纠正 • 最常见的差错检测方法是CRC和检查和(checksum)。 • 虽然差错检验码的传输开销很小,但计算开销很大。特别是当差错检测覆盖整个数据包时,其计算量与包长成正比。 • CRC检错能力强,主要用在链路层上检测传输错误,用硬件实现。 • 检查和方法提供的差错保护比较弱,主要用于在网络层和传输层上检测内存读写错误(如内存中某些位损坏),用软件实现。计算简单,支持增量更新。 • 因特网中的差错恢复主要靠包重传实现,纠错技术用得很少。

  40. (3)分片、分段和重组 • 许多协议允许发送端将一个较大的包划分成若干较小的单元进行传输,接收端再将这些单元组装成原始的包。 • 分片和分段的例子:IP分片,ATM分段,… • 分片和分段一般比较简单,重组则复杂得多,需要考虑包缓冲及各种异常情况的处理。

  41. (4)解多路复用(demultiplexing) • 多路复用是指多个高层协议调用一个低层协议传输数据包,而解多路复用则是指低层协议从若干个高层协议中选择一个来处理收到的数据包。 • 解多路复用发生在协议栈的每一层上。 • 包头中的类型信息由发送端在构造数据包时加入,接收端利用这些类型信息解多路复用。

  42. (5)包分类 • 系统根据一组分类规则将所有的数据包划分成若干种类别(流),对每种类别的包执行相同的操作。包分类就是将一个数据包映射到一个流的过程。 • 分类与解多路复用的不同: • 解多路复用是一种无状态操作,包分类可以是一种有状态操作 • 解多路复用使用一种全局类型系统,而包分类不需要使用全局类型系统,也不要求发送方参与 • 解多路复用一次处理一层,而包分类可以从不同层次的协议头中抽取相关的域进行分类 • 包分类的最大优势是突破了传统的协议分层处理的限制,极大地提高了处理速度,成为高速包处理的重要基础。

  43. (6)排队和分组丢弃 • “排队”用于指代与存储和选择数据包相关的策略、数据结构和算法。 • 排队要考虑的问题: • 队列放在何处:设置在输入端还是输出端 • 队列长度:取决于流量突发长度及资源管理策略 • 每个接口分配一个队列还是所有接口使用一个共享队列 • 是否支持优先级;若是,采用什么排队准则(优先级队列,加权循环WRR,加权公平队列WFQ,……) • 包丢弃:当网络系统无法接收更多的数据包时,选择一些数据包进行丢弃的策略和机制。 • 弃尾(drop tail) • RED(Random Early Detection):和TCP一起使用 • EPD(Early Packet Discard):和ATM一起使用。

  44. (7)调度 • “调度”用来描述对网络系统中并发和并行行为的协调 • 处理多个同时到达的数据包 • 协调多个数据包对同一个输出端口的竞争 • 管理多个并发的定时器事件 • 管理各个协议的进程或线程 • 协调多个处理器 • …… • 调度机制试图保证公平性

  45. (8)安全:鉴别和保密 • 防火墙之类的网络系统需要处理安全协议和机制,鉴别(身份鉴别、消息鉴别)和保密是其中的重要安全机制。 • 鉴别和保密都要依赖于一个非常重要的底层技术--加密。 • 尽管用于鉴别的附加信息不大,但是处理鉴别和保密需要的计算量很大: • 鉴别和保密均需要涉及大量的数据,如整个数据包; • 加/解密计算通常要求大量的计算。 • 实现安全机制的网络系统通常要求另外的处理能力。

  46. (9)流量测量、整形和管制 • 流量测量通常出现在支持服务等级的网络中,用于发现流量模式,确定一种合适的服务等级。 • 流量整形用于调节流量以使其符合事先约定的统计特征,采用的手段通常是推迟包的发送。 • 流量管制是利用强制手段来使实际的流量模式符合事先约定的流量特征,采用的手段通常是丢弃包。 • 由于流量整形和管制位于关键路径上,因此设计时速度是首要考虑的因素。

  47. (10)定时器管理 • 定时器管理是包处理的一个重要部分:超时重传,表刷新,IP重组,调度,流量整形…… • 网络系统中定时器管理的复杂性: • 系统必须能够同时提供多个定时器 • 对定时器精度的要求差异很大(从毫秒级到分钟级) • 协议动态地创建和删除定时器

  48. Delta表 • 每个表项对应一个将要发生的事件,表项中给出事件将要发生的时间。 • 表中的事件按照它们将要发生的时间顺序保存,且被保存的是相对时间而不是绝对时间。 • 定时器进程定期递减表中第一项的时间值,值为0时事件发生,从表中删除该表项,然后定期递减下一个表项的时间。 • 通常建立两个Delta表,一个提供细分辨率(如毫秒级)的定时器管理,另一个提供粗分辨率(如秒级)的定时器管理。

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

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

More Related