一种tcp协议栈延时的统计方法、装置及系统的制作方法

文档序号:9455737阅读:460来源:国知局
一种tcp协议栈延时的统计方法、装置及系统的制作方法
【技术领域】
[0001] 本发明涉及网络技术领域,尤其涉及一种TCP协议栈延时的统计方法、装置及系 统。
【背景技术】
[0002] TCP (Transmission Control Protocol,传输控制协议)/IP (Internet Protocol, 网络之间互连的协议)是互联网的核心协议,也是大多数网络应用的核心协议,TCP协议栈 的处理延时会极大地影响网络传输速度和用户体验,所以对协议栈延时的统计是极为必要 的。但是,现在没有技术可以精确统计一个TCP数据报文在协议栈中所消耗的时间。
[0003] 现在没有技术可以统计一个TCP数据报文在协议栈中各个阶段所消耗的具体时 间,只能根据各函数所消耗的CPU(Central Processing Unit,中央处理器)时间,来从宏观 上对消耗时间进行估算,由于协议栈会同时有大量的TCP数据流,统计出来的CPU时间反应 的是宏观的平均时间,因此对于具体的某一条数据流,就没法分开进行分析。

【发明内容】

[0004] 本发明实施例提供一种TCP协议栈延时的统计方法、装置及系统,以实现对任一 TCP数据流中每个TCP报文数据在协议栈中的时延统计。
[0005] -方面,本发明实施例提供了一种TCP协议栈延时的统计方法,所述方法包括:在 TCP握手时,接收客户端发送的同步SYN请求;根据所述SYN请求,判断是否支持TCP协议 栈延时TDM ;若支持TDM,则当来自所述客户端的TCP报文数据传输时,在所述TCP报文数据 的TDM选项中记录各个时间点的时间戳,以便所述客户端确定所述TCP报文数据的TDM。
[0006] 另一方面,本发明实施例提供了一种TCP协议栈延时的统计装置,所述装置包括: 接收单元,用于在TCP握手时,接收客户端发送的同步SYN请求;判断单元,用于根据所述 SYN请求,判断是否支持TCP协议栈延时TDM ;记录单元,用于若支持TDM,则当来自所述客 户端的TCP报文数据传输时,在所述TCP报文数据的TDM选项中记录各个时间点的时间戳, 以便所述客户端确定所述TCP报文数据的TDM。
[0007] 再一方面,本发明实施例提供了一种TCP协议栈延时的统计系统,所述系统包括: 客户端和服务器,其中,所述服务器包括上述TCP协议栈延时的统计装置,所述客户端根据 记录的所述各个时间点时间戳,获取所述TCP报文数据的TDM。
[0008] 上述技术方案具有如下有益效果:实现了对任一 TCP数据流中每个TCP报文数据 在协议栈中的时延统计,并且不需要对用户程序进行修改,只需要在内核协议栈中添加时 间统计代码即可,对使用者是完全透明的。可以根据不同的五元组,分别独立统计一条TCP 数据流在协议栈中的处理时间,相比传统方式更加精确,并且避免了对无用数据流的CPU 消耗;可以根据客户端协商来触发统计,在不开启的时候不会增加系统的CPU负载;时间统 计精度高,可以到毫秒级别,而现有的统计是根据一秒时间内各个函数的处理次数来估算 处理时间,无法保证精确度。
【附图说明】
[0009] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以 根据这些附图获得其他的附图。
[0010] 图1为本发明实施例一种TCP协议栈延时的统计方法流程图;
[0011] 图2为本发明实施例一种TCP协议栈延时的统计装置结构示意图。
【具体实施方式】
[0012] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0013] 如图1所示,为本发明实施例一种TCP协议栈延时的统计方法流程图,所述方法包 括:
[0014] 101、在TCP握手时,接收客户端发送的同步SYN请求;
[0015] 102、根据所述SYN请求,判断是否支持TCP协议栈延时TDM ;
[0016] 103、若支持TDM,则当来自所述客户端的TCP报文数据传输时,在所述TCP报文数 据的TDM选项中记录各个时间点的时间戳,以便所述客户端确定所述TCP报文数据的TDM。
[0017] 优选的,所述根据所述SYN请求,判断是否支持TCP协议栈延时TDM,具体包括:根 据所述SYN请求中的TCP选项扩展协商类型字段,判断是否支持TCP协议栈延时TDM。
[0018] 优选的,所述TCP报文数据的TDM选项中包括四个时间点的时间戳:??ΜΕΑ、??ΜΕΒ、 HMEC、HMED ;其中,??ΜΕΑ用于记录所述TCP报文数据交付给TCP传输层时的时间戳; ??ΜΕΒ用于记录所述TCP报文数据交付给网络层的时间戳;HMEC用于记录所述TCP报文数 据交付给链路层的时间戳;HMED用于如果所述TCP报文数据是重发的报文数据,则记录最 后一次网络层重发给链路层的时间戳。
[0019] 优选的,所述时间戳使用服务器端的中央处理器CPU内核的jiffies变量来记录, jiffies变量是一个32位无符号型整数。
[0020] 优选的,所述方法还包括:所述客户端根据记录的所述各个时间点的时间戳,确定 所述TCP报文数据的TDM。
[0021] 对应于上述方法实施例,如图2所示,为本发明实施例一种TCP协议栈延时的统计 装置结构示意图,所述装置包括:
[0022] 接收单元21,用于在TCP握手时,接收客户端发送的同步SYN请求;
[0023] 判断单元22,用于根据所述SYN请求,判断是否支持TCP协议栈延时TDM ;
[0024] 记录单元23,用于若支持TDM,则当来自所述客户端的TCP报文数据传输时,在所 述TCP报文数据的TDM选项中记录各个时间点的时间戳,以便所述客户端确定所述TCP报 文数据的TDM。
[0025] 优选的,所述判断单元22,具体用于根据所述SYN请求中的TCP选项扩展协商类型 字段,判断是否支持TCP协议栈延时TDM。
[0026] 优选的,所述TCP报文数据的TDM选项中包括四个时间点的时间戳:??ΜΕΑ、??ΜΕΒ、 HMEC、HMED ;其中,??ΜΕΑ用于记录所述TCP报文数据交付给TCP传输层时的时间戳; ??ΜΕΒ用于记录所述TCP报文数据交付给网络层的时间戳;HMEC用于记录所述TCP报文数 据交付给链路层的时间戳;HMED用于如果所述TCP报文数据是重发的报文数据,则记录最 后一次网络层重发给链路层的时间戳。
[0027] 优选的,所述时间戳使用服务器端的中央处理器CPU内核的jiffies变量来记录, jiffies变量是一个32位无符号型整数。
[0028] 另外,本发明实施例还提供一种TCP协议栈延时的统计系统,所述系统包括:客户 端和服务器,其中,所述服务器包括上述TCP协议栈延时的统计装置,所述客户端根据记录 的所述各个时间点的时间戳,确定所述TCP报文数据的TDM。
[0029] 例如,本发明应用实例可以由以下几个部分组成:
[0030] I. TCP协议的扩展:
[0031] 处理时延信息会被写入到TCP头的选项部分,信息分两种,一种标识是否支持tcp delaytime measure (以下简称TDM),在TCP握手时发送;另一种是具体的TDM信息。
[0032] 首先,需要在TCP option扩展协商中增加一个类型。
[0034] 类型值为10,该选项只允许在有SYN(synchronous,同步的,是TCP/IP建立连接时 使用的握手信号)标志的TCP包中,也即TCP握手的前两个包中,分别表示各自是否支持 TDM,客户端通过此选项用来激活服务器端相应的TCP数据流进行时延的记录,这样可以保 证只在需要的时候,TCP协议栈才需要进行时延统计,平时不会浪费CPU的资源。
[0035] 其次,TDM选项,类型值为11
[0037] 整个选项长度为18个字节,一共可以携带四个时间戳,分别记录了四个时间,时 间戳直接使用内核的jiffies变量,jiffies变量是一个32位无符号型整数,全局变量 jiffies用来记录自系统启动以来产生的节拍的总数。启动时,内核将该变量初始化为0, 此后,每次时钟中断处理程序都会增加该变量的值。一秒内时钟中断的次数等于Hz,所 以jiffies -秒内增加的值也就是Hz,Hz是内核编译时使用的宏变量,一般为1000,将 jiffies转化为以秒为单位的时间jiffies/Hz。
[0038] ??ΜΕΑ记录的是用户数据交付给TCP传输层时的时间戳;??ΜΕΒ记录的是数据交付 给网络层的时间戳;HMEC记录的是数据交付给链路层的时间戳;HMED记录的是此数据报 文如果是重发的数据报文,则记录最后一次网络层重发给链路层的时间戳。
[0039] 对于接收方来说,OlMEA-HMEBVjiffies就是数据在传输层所花费的时间, (??ΜΕΒ-??ΜΕΟ /jiffies就是网络层所花费的时间,(HMED-HMEC) /jiffies就是TCP协议 栈由于超时重传所花费的时间。
[0040] 2.内核TCP协议栈的修改:
[0041] 如上所述,如果要记录上面的4个时间点,则需要对TCP协议栈进行相应的修改, 包括对TCP选项协商字段的判断,和各个时间点时间戳的写入:
[0042] a)在 tcp_v4_conn_request/tcp_v6_conn_request 函数中对客户端发来的 TCP 选 项协商进行响应,并在对应的tcp sock中记录开启时间统计功能,此两个函数是tcp协商 完成的函数;
[0043] b)在sk_buff结构中增加4个统计时间的变量,sk_buff是Iinux内核TCP/IP协 议栈最重要的结构,它是网络数据报在内核中的表现形式;
[0044] c)在tcp_sendmsg函数是用户态数据发送给传输层的函数,在此函数中将用户发 到网络层的负载所在的sk_buff结构中记录下TIMEA的值;
[0045] d)在ip_push_pending_frames函数是传输层发送给网络层的函数,在此函数中, 在sk_buff结构中记录下TIMEB的值;
[0046] e) dst_output函数是网络层发送给数据链路层的函数,在此函数中记录
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1