技术领域
[0001] 本发明是有关于一种网络接口控制器,且特别是有关于一种可提前进行边界判定操作的网络接口控制器。
相关背景技术
[0002] 请参照图1,其是一主机内部硬件示意图。如图1所示,一般的主机可包括中央处理单元(central processing unit,CPU)、北桥(north bridge,NB)、动态随机存取存储器(dynamic random access memory,DRAM)及南桥(south bridge,SB),其中,北桥和南桥可能会集成于同一芯片组(chipset)。SB可包括通用串行总线(universal serial bus,USB)及网络接口控制器(network interface controller,NIC)等硬件,其中,网络接口控制器NIC可从动态随机存取存储器DRAM、北桥或中央处理器取得所需的数据并加以处理。
[0003] 以图2为例,其是NIC及其相关传输接口的示意图。如图2所示,NIC 可包括核心(core)模块及悬置(suspend)模块,可对上层数据进行处理后,将处理后的数据经由数模转换(PAD)模块、物理层(physical layer,PHY) 模块从发送端总线(简称TX bus)发送至其他主机,该上层数据可能取自嵌入了NIC的主机的其他硬件,例如动态随机存取存储器DRAM、北桥或中央处理器中的数据。
[0004] 为了提升所发送数据的可靠度,数据中一般会存在一个校验和域段 (segment),用以让收发的双方能够据以验证数据的正确性。由于在发送每个数据包之前皆需进行校验和的生成,因此若能提升校验和计算效率的话,势必能提升数据包发送的效率。
具体实施方式
[0018] 请参照图3A及图3B,其中图3A是本发明之一实施例的NIC示意图,而图3B是图3A的NIC运作示意图。如图3A所示,网络接口控制器300 包括数据对齐模块310及校验和模块320,在一实施例中,数据对齐模块310 及校验和模块320可设置于图2的核心(Core)模块中。在一实施例中,图 2的核心模块可包括一或多个发送端(Transmitter,TX),而数据对齐模块 310及校验和模块320可设置于核心模块的各TX中,以在收到数据包时相互配合以进行所需的校验和计算。在一些实施例中,网络接口控制器可能集成在一芯片组中,也可以嵌入在一主机中,其中,该主机是指可进行网络通信的电子设备,例如,笔记本计算机。在一实施例中,网络接口控制器可以是一网络适配器(Network Interface Card,NIC,一般也可称之为“网卡”),更详细而言,网络接口控制器可以是一千兆比特网络适配器(Gigabit Network Interface Card,GNIC),但本发明不限于此。以下即搭配图3B作进一步的说明。
[0019] 请参照图3B,当数据对齐模块310从主机的硬件结构(例如动态随机存取存储器DRAM、中央处理单元CPU或北桥等)取得原始数据DD时,由于原始数据DD中一般包括有效数据及无效数据,因此数据对齐模块310 可将原始数据DD中的有效数据重新组合为第一有效数据DA。
[0020] 举例而言,假设从主机的接口(其位宽为64比特)所抓到的第一笔原始数据及第二笔原始数据分别为“55aa_55aa_55aa_5500”及“5507_0605_0403_0201”,而其中的有效数据分别为「00」及「07_0605_0403_0201」。在此情况下,数据对齐模块310可将上述有效数据重新组合为“0706_0605_0302_0100”的第一有效数据(其位宽为64比特,即,8字节)。
[0021] 在本实施例中,原始数据DD可来自于一特定数据包,而此特定数据包可依网络接口控制器300所使用的通信协议而具有不同的格式。例如,特定数据包可能是基于多层协议传输的数据,该多层协议可能包括物理层、网络层及/或传输层,其中,网络层协议可包括互联网协议(Internet protocol,IP),传输层协议可包括传输控制协议(transmission control protocol,TCP)和用户数据包协议(user datagram protocol,UDP)。
[0022] 在一实施例中,前述特定数据包可至少包括第一层协议的域段及第二层协议的域段,且第二层协议的域段可包括于第一层协议的有效载荷(payload) 中。亦即,第二层协议为第一层协议的上层协议。举例而言,第一层协议可为互联网协议(Internet protocol,IP),例如IP第四版(IPV4)或IP第六版 (IPV6)。此外,第二层协议为传输控制协议(transmission control protocol, TCP)或用户数据包协议(user datagram protocol,UDP)。对应于IP+TCP 及IP+UDP这两种传输方式,其对应的数据包也具有不同的格式,而以下的表1及表2即为两个示例性的格式。
[0023] 表1(IPV6+TCP)
[0024]
[0025] 表2(IPV6+UDP)
[0026]
[0027] 如以上所标示的,表1及表2分别是在不具有延伸首部(extension header) 情况下的“IPV6+TCP”及“IPV6+UDP”的数据包格式,而其中各个域段的意思可参照IEEE 802.3规格书的内容,表格中也保留原文以利查找,而其个别的具体意涵在此不另赘述。
[0028] 如表1所示,表1包括了第一层协议(即,IP)的域段及第二层协议(即, TCP)的域段,其中TCP的域段包括于IP的有效载荷中。相似地,表2亦包括了第一层协议(即,IP)的域段及第二层协议(即,UDP)的域段,其中UDP的域段包括于IP的有效载荷中。为便于说明,以下皆以TCP作为第二层协议的实例,而本领域技术人员应可基于以下教示相应地推得以UDP 作为第二层协议的相关实施方式。
[0029] 在数据对齐模块310将原始数据DD中的有效数据重新组合为第一有效数据DA之后,校验和模块320可接着将第一有效数据DA拆解为第二有效数据DB,其中各第二有效数据DB的长度小于各第一有效数据DA的长度。在一实施例中,假设第一有效数据DA的长度为64比特,则其可被拆解为4 组位宽为16比特(即,2个字节)的第二有效数据DB。由于校验和的计算一般是以2个字节为单位进行累加,因此上述将第一有效数据DA拆解为第二有效数据DB的操作可利于后续校验和的计算。校验和的计算包括对第二层协议(即,TCP/UDP)域段的校验和的计算及虚拟首部(pseudo header) 的校验和的计算。
[0030] 在一实施例中,校验和模块320可基于下表3所示的虚拟首部(pseudo header)格式来进行校验和计算。
[0031] 表3(虚拟首部)
[0032]
[0033] 举例而言,假设所考虑的是表1中IP域段,则校验和模块320可先将第二有效数据DB中对应于表1中的“Source IP Ad”(来源IP地址)、“Des IP Ad”(目的IP地址)及“Next Header”(下一首部域段)等域段的内容分别填入(即,套用至)表3中的“来源IP地址”、“目的IP地址”及“下一首部”中。接着,校验和模块320可在计算出“上层协议域段的长度”的内容之后,将其填入表3中的域段,以计算出虚拟首部的校验和。在不同的实施例中,由于计算“上层协议域段的长度”内容即可得知IP域段与TCP域段之间的边界,因此也可对第二层协议(即,TCP/UDP)的域段计算校验和,后面会详述。
[0034] 在一实施例中,假设校验和模块320所考虑的是“IPV6+TCP”的数据包格式,且其中不具有延伸首部的话,则“上层协议域段的长度”可参考表 1而直接从第二有效数据DB中取得。具体而言,在不具有延伸首部的情况下,IP的有效载荷长度即为TCP(即,IP的上层协议)的域段长度,而校验和模块320可直接从第二有效数据DB中对应于表1的“Payload Length”的域段取得IP的有效载荷长度,并可接续将其填入表3的“上层协议域段的长度”中,以利后续的虚拟首部的校验和计算。亦即,校验和模块320可直接以IP的有效载荷的长度作为TCP的域段的长度;此外,根据TCP的域段长度得到IP(第一层协议)域段与TCP(第二层协议)域段之间的边界,从而从该边界开始对TCP(第二层协议)域段计算校验和。
[0035] 在另一实施例中,假设校验和模块320所考虑的是具有一或多个延伸首部的“IPV6+TCP”的数据包格式(如下表4所示),则校验和模块320可将 IP的有效载荷的长度减去各延伸首部的长度来计算TCP的域段长度。
[0036] 表4
[0037]
[0038] 请参照上表4,其例如是包括两种延伸首部的“IPV6+TCP”的数据包格式。相似于先前实施例,表4中的各个域段的意思可参照IEEE 802.3规格书的内容,在此不另赘述。
[0039] 在表4的例子中,校验和模块320可从第二有效数据DB中对应于表4 的“Payload Length”的域段取得IP的有效载荷长度,并以其减去各延伸首部的长度来计算TCP的域段的长度,其细节可参照IEEE 802.3规格书,在此不另赘述。
[0040] 在依据上述教示计算出“上层协议的域段长度”的内容之后,校验和模块320可相应地将“上层协议域段的长度”的内容填入表3,并生成一控制信息IS,以指示校验和计算模块从IP(第一层协议)域段与TCP(第二层协议)域段之间的边界开始对后面的TCP(第二层协议)域段及后缀的虚拟首部进行校验和的计算。
[0041] 在一实施例中,校验和的计算例如包括:(1)校验和域段初始化,首先将表1的“TCP ChkSum”(16比特)赋予初始值,全部置为0;(2)将要进行校验和计算的全部内容,以16比特(即,2字节)为单位进行分组;(3) 计算的过程就是对这些16比特的二进制数进行带循环进位的加法,即相加之后如果最高位有进位的话循环进到最低位上(1的补码和运算);(4)累加之后,所得的结果再取反码,即可得到校验和。
[0042] 之后,校验和模块320可将计算得到的校验和填入校验和域段。例如,当数据包为“IPV6+TCP”的数据包格式时,则将计算得到的校验和填入在“TCP ChkSum”域段后,再将整个“IPV6+TCP”数据包进行发送;当数据包为“IPV6+UDP”的数据包格式时,则将计算得到的校验和填入在“UDP ChkSum”域段后,再将整个“IPV6+UDP”数据包进行发送。在一实施例中,“IPV6+TCP”数据包及/或“IPV6+UDP”数据包可由发送端TX经由发送端总线(TX bus)发送至其他主机的接收端(Receiver,RX)。
[0043] 值得注意的是,由于前述边界判定操作需要完成对第二有效数据DB中对应于表1中“NxtHeader”的域段的提取(对“NxtHeader”域段的提取可基于第二有效数据DB直接分离,而不需占用延迟时间)和其长度的累加,但完成累加及提取IP、TCP之间的边界至少需要2个周期的延迟。并且,若存在延伸首部,则将提取到的信息输入相关计算逻辑需要1个周期,而根据各延伸首部的“Next header”域段计算延伸首部的长度又需要1个周期。亦即,延伸首部的数量越多,需延迟的周期就越多。
[0044] 请参照图4,其是依据图3A及图3B绘示的信号时序图。在图4中,假设数据D0、D1、D2、D3及D4分别是“IPV6+TCP”数据包中IP域段中的不同数据,而数据D4之后(如图4所示的数据D5)即为TCP域段,“IPV6+TCP”数据包包括三个延伸首部。如图4所示,在第2个周期开始对数据执行对齐处理,并在第12个周期(即,第24个时钟)才生成控制信息IS。需要注意的是,图4所示的数据包所占的时序周期只是一示意,在实际情况下,数据包会占用更多个时序周期,例如,数据D4可能占用2个周期。
[0045] 值得注意的是,从图3B可看出,在进行IP/TCP边界判定操作时是基于第二有效数据DB(其由有效数据组成)进行的。然而,事实上在进行边界判定操作时仅需知道表1中的“Payload Length”或其他与长度相关的域段即可进行,并不一定需要从具有较小位宽(16比特)的第二有效数据DB(其由第一有效数据DA拆解而来)中取得。换言之,边界判定操作不需等到第二有效数据DB生成之后才进行,而可直接基于原始数据进行边界判定。另外,对校验和的计算也不需要等计算出“Payload Length”或判断出第一层协议的域段及一第二层协议的域段之间的边界才开始,而是在对参与校验和计算的域段数据进行完拆解操作后,即可基于拆解后的域段数据开始部分的计算校验和。
[0046] 有鉴于此,本发明的另一实施例提出一种NIC,其可在进行数据对齐的同时进行边界判定操作,因而可较快地生成控制信息,并将开始计算校验和的时间提前,从而较快地计算出校验和后,及时地发送出数据包,极大地提高了NIC发送数据包的效率。以下将进行详细说明。
[0047] 请参照图5A及图5B,其中图5A是本发明的一实施例NIC中核心模块的TX示意图,而图5B是图5A的NIC运作示意图。在本实施例中,TX 505 包括数据对齐模块510、边界判定模块530及校验和模块520。数据对齐模块510接收至少一原始数据DD,并将原始数据DD重新组合为第一有效数据DA,其中原始数据DD包括一第一层协议(IP)的域段及一第二层协议 (TCP/UDP)的域段。边界判定模块530与数据对齐模块510并行接收原始数据DD,并基于原始数据DD进行边界判定操作以生成边界信息DS,其中边界信息DS用以判定第一层协议(IP)的域段及该第二层协议(TCP/UDP)的域段之间的一边界。校验和模块520耦接数据对齐模块510,经配置以将第一有效数据DA拆解为至少一第二有效数据DB,以及基于该边界信息DS及该第二有效数据DB计算校验和。
[0048] 在一实施例中,校验和模块520进一步可包括校验和控制模块520b、数据拆解模块520c及校验和计算模块520d,但本发明不限于此,例如在一实施例中,图5A所示的校验和控制模块520b和数据拆解模块520c可集成在一个模块中,如图5B所示的拆解数据的模块。
[0049] 首先,数据对齐模块510可接收原始数据DD(其位宽例如是64比特),并将原始数据DD重新组合为第一有效数据DA(其位宽例如是64比特)。之后,数据对齐模块510可将第一有效数据DA提供予校验和模块520。在一实施例中,数据对齐模块510可将第一有效数据DA提供予数据拆解模块 520c,以利数据拆解模块520c将第一有效数据DA拆解为多个第二有效数据DB(其位宽例如是16比特)。此处技术手段的细节可参考图3A实施例中数据对齐模块310的相关说明,在此不再赘述。进一步地,校验和控制模块520b用以接收边界信息DS,并基于边界信息DS生成控制信息IS,该控制信息IS包括一控制信号和该第一层协议(IP)域段的一长度(该长度对应于后续计算虚拟首部的校验和时填入表3的“上层协议域段的长度”域段)。校验和计算模块520d用以根据该控制信号、该第一层协议(IP)域段的该长度及该第二有效数据DB计算该校验和。
[0050] 不同于图3A实施例的是,边界判定模块530与数据对齐模块510并行接收包括无效数据的原始数据DD,并基于原始数据DD进行边界判定操作。在一实施例中,边界判定模块530将其接收到的原始数据DD中的无效数据移除以产生第三有效数据(其位宽例如是64比特)。之后,边界判定模块530 可依据第三有效数据进行边界判定操作,并在执行边界判定操作完成后,基于执行边界判定操作的结果,生成一边界信息,并将边界信息DS传输至校验和控制模块520b,以生成控制信息IS,但本发明不限于此,例如,边界判定模块530可直接依据原始数据DD来执行边界判定操作。
[0051] 在一实施例中,边界判定模块530可参考表1而直接从第三有效数据中提取“Payload Length”的域段,以取得IP的有效载荷长度,从而进行表3 的“上层协议域段的长度”的相关计算,其细节可参照先前实施例中的说明,在此不再赘述。
[0052] 在一实施例中,在边界判定模块530完成边界判定操作之后,边界判定模块530可生成边界信息DS,并提供予校验和控制模块520b。边界判定模块530执行边界判定操作,例如,根据下一首部域段“Next header”来判断原始数据中有无延伸首部及延伸首部的个数(若有延伸首部),原始数据中的第二层协议是TCP协议还是UPD协议,并生成边界信息DS,其中,边界信息DS可能包括指示该原始数据中有无延伸首部的信息、延伸首部的类型及/或延伸首部的长度等信息,例如,若根据“Next header”判断出延伸首部的类型为“destination options header”(简称DH),“Next header”的下一个域段“header extension length”域段(简称Ext Len)所预存的值为则DH 的长度信息,如Ext Len域段所预存的值可为1。
[0053] 由上可知,本实施例中的边界判定模块530不是基于具有较小位宽(其位宽例如是16比特)的第二有效数据DB来进行边界判定操作,而是直接基于移除无效数据后的原始数据DD(即,第三有效数据,其位宽例如是64 比特)来提前进行边界判定操作,如图5B所示。
[0054] 此外,在本实施例中,在数据拆解模块520c生成第二有效数据DB之后,可相应地生成及发送计数信息EA予校验和控制模块520b,其中,当数据拆解模块520c基于第一有效数据DA生成第二有效数据DB的过程中,数据拆解模块520c产生计数信息EA,用于表征该第二有效数据的起始。举例而言,数据拆解模块520c输出的第二有效数据是以16比特为单位输出的,当数据拆解模块520c开始输出第二有效数据中第一层协议的头数据(IP header)时(例如数据拆解模块520c输出前述表1,表2及表4的数据结构的前16比特时),产生该计数信息EA。接着,校验和控制模块520b可基于计数信息EA及边界信息DS生成控制信息IS,并将控制信息IS提供予校验和计算模块520d,以触发校验和计算模块520d相应地计算所需的校验和(例如若原始数据为“IPV6+TCP”数据包,则校验和为虚拟首部+TCP首部+TCP 有效载荷的校验和)。
[0055] 在一实施例中,校验和控制模块520b生成的控制信息IS包括控制信号和第二层协议域段的长度,其中,第二层协议域段的长度可由校验和控制模块520b根据其接收到的边界信息DS来计算。详细来讲,第二层协议域段的长度可由表1所示的“Payload Length”域段中的值减去各个延伸首部的长度后计算而来。举例而言,若延伸首部的类型为一DH,边界信息DS中包括DH长度信息,即,Ext Len域段中的值,则DH延伸首部的长度为Ext Len*8+8;其中控制信号系指示该第二有效数据DB到达该第一层协议(IP) 的域段与该第二层协议(TCP/UDP)的域段的边界,其可由校验和控制模块 520b根据计数信息EA及边界信息DS生成。具体而言,校验和控制模块520b 在接收到计数信息EA后,得知开始生成第二有效数据DB,当从第二有效数据DB的起始经过第一层协议的域段的固定长度域段(例如表1,表2及表4的数据结构的DA,SA,Type/Length,Ver…直至Des IP Ad,这些为长度固定的域段),再经过边界信息DS所指示的第一层协议的域段的不固定长度的域段时(即达到第一和第二层协议的域段的边界时),产生该控制信号,以指示校验和计算模块520d开始对第二层协议(IP)的域段计算校验和。
[0056] 校验和计算模块520d计算前述校验和的细节可参照先前实施例的说明,但本发明不限于此,例如,在一实施例中,校验和计算模块520d还包括一寄存器,用于暂存虚拟首部校验和,虚拟首部校验和是对虚拟首部(如表3 所示)中的域段进行累加运算,虚拟首部是由第一层协议的来源地址域段(如表3中的来源IP地址)、第一层协议的目的地址域段(如表3中的目的IP 地址)及第二层协议域段的长度域段(如表3中的上层协议域段的长度)等域段重新构建而得。
[0057] 在一实施例中,校验和计算模块520d在接收到经数据拆解模块520c拆解后的第二有效数据中包含的虚拟首部的部分域段后,就开始计算虚拟首部校验和,当收到第二层协议域段的长度后,完成虚拟首部校验和的计算。
[0058] 在一实施例中,校验和计算模块520d在接收到校验和控制模块520b发来的控制信号后,开始计算第二层协议(TCP/UDP)域段的校验和,其中,该控制信号用以触发校验和计算模块520d开始对经数据拆解模块520c拆解后的第二层协议域段中的数据进行计算第二层协议(TCP/UDP)域段的校验和。在一实施例中,校验和计算模块520d在计算出第二层协议(TCP/UDP) 域段的校验和后,再将第二层协议(TCP/UDP)域段的校验和与已计算好的虚拟首部校验和进行累加运算,以计算出最终的校验和。
[0059] 请参照图6,其是依据图5A及图5B绘示的信号时序图。在图6中,假设数据D0、D1、D2、D3及D4分别是“IPV6+TCP”数据包中IP(第一层协议)域段中的不同数据,而数据D4之后(如图6所示的数据D5)即为 TCP(第二层协议)域段。相较于图4,在同样条件下,图6的数据在第18 个时钟(即,第9个周期)即生成控制信息IS。亦即,本发明实施例简化了整条数据路径的逻辑,也缩短了计算校验和之前的数据延迟。具体而言,图 6实施例相较于图4实施例缩短了3个周期。
[0060] 同时,由于数据路径缩短,且所考虑的数据位宽为64比特,本发明实施例共节省了192个(即,64x3)D类型触发器,也简化了相关的控制逻辑,因而也在一定程度上降低了NIC电路的整体功耗和面积。
[0061] 在其他实施例中,一个NIC可同时包括多个发送端(TX),数据对齐模块及/校验和模块可以集成在发送端上。在一实施例中,多个TX可共享一个可执行边界判定操作的模块及/或一个可执行数据对齐操作的模块,藉以节省电路。如图7所示,NIC可同时包括四个TX 701、702、703及704,其中,每一TX包括一校验和控制模块520b、一数据拆解模块520c及一校验和计算模块520d。
[0062] 请参照图7,其是依据图5B绘示的校验和计算机制示意图。在一实施例中,NIC包括四个TX 701、702、703及704,图7中略以四个重迭的长方形框表征,且图7中各个组件符号的意义皆与图5B所示相同。如图7所示,前述四个TX 701、702、703及704,可共享同一个可执行边界判定操作的模块(如图5A所示的边界判定模块530)和一个可执行数据对齐操作的模块(如图5A所示的数据对齐模块510),举例而言,当TX 701在基于此数据对齐模块510所对齐后的一数据包和边界判定模块530所提供的相应于该数据包的控制信息IS对该数据包进行校验和的计算时,若数据对齐模块510及/或边界判定模块530开始接收另一个数据包的原始数据,则将对该另一个数据包的原始数据执行完边界判定操作和数据对齐操作后的结果传送给另一发送端(例如TX 703)进行后续操作,以生成该另一个数据包相应的校验和。换言之,多个发送端可包括多个数据拆解模块用以分别对多个第一有效数据执行数据拆解操作,生成多个第二有效数据;多个校验和控制模块用以分别接收对应于多个原始数据的多个边界信息;多个校验和计算模块,用以基于多个边界信息和多个第二有效数据分别计算多个校验和,其中,数据拆解模块和校验和控制模块可集成在一个模块中,如图7所示的拆解数据模块。亦即,本实施例所考虑的NIC不需在每个TX中皆设置一组用于进行边界判定操作的模块及/或一个可执行数据对齐操作的模块,因而可达到节省电路面积及成本的效果。
[0063] 综上所述,本发明提出的网络接口控制器可预先基于原始数据(其包括无效数据)进行边界判定操作以生成控制信息,而不需等到第一有效数据被拆解为第二有效数据再对基于第二有效数据进行边界判定操作,从而能够缩短计算校验和所需的时间并改善效率。另外,在计算校验和时,可先开始计算虚拟首部校验和,并将该计算结果暂存后,等计算完第二层协议 (TCP/UDP)域段的校验和后,再基于该虚拟首部校验和及该第二层协议 (TCP/UDP)域段的校验和计算出最终的校验和,而不是先计算完第二层协议(TCP/UDP)域段的校验和后,再开始将虚拟首部与第二层协议(TCP/UDP) 域段的校验和进行累加运算,计算出最终的校验和,这样,提前了开始计算校验和的时间点,更早地计算出了校验和。并且,在缩短计算校验和所需时间的同时,还可减少所需的硬件(例如,D类型触发器)数量,也简化了相关的控制逻辑,因而降低了电路的整体功耗和面积。此外,在NIC中同时存在多个TX的情况下,由于这些TX可共享同一个可执行边界判定操作的模块及/或一个可执行数据对齐操作的模块,因而可进一步达到节省电路面积及成本的效果。
[0064] 虽然本发明已以实施例公开如上,然其并非用以限定本发明,任何所属技术领域的技术人员,在不脱离本发明的精神和范围内,当可作些许的更动与润饰,故本发明的保护范围当视后附的权利要求所限定者为准。
[0065] 【符号说明】
[0066] 300、700:网络接口控制器NIC
[0067] 310、510:数据对齐模块
[0068] 320、520:校验和模块
[0069] 530:边界判定模块
[0070] 520b:校验和控制模块
[0071] 520c:数据拆解模块
[0072] 520d:校验和计算模块
[0073] 505:TX
[0074] D1、D2、D3、D4、D5:域段
[0075] DD:原始数据
[0076] DA:第一有效数据
[0077] DB:第二有效数据
[0078] DS:边界信息
[0079] EA:计数信息
[0080] IS:控制信息。