如何实现读取数据包刚到网卡收不到数据包的时间戳

       在回答这个问题之前我们先看┅下网卡收不到数据包消息队列。如下图所示对端发送的网络数据包被网卡收不到数据包设备接收到之后,会存放到网卡收不到数据包消息队列中由应用程序调用recv系列函数从网卡收不到数据包队列中获取网络消息。

 现在假设:消息处理服务处理网络消息包的平均时间为1s请求方等待回包的时间为1s,网卡收不到数据包消息队列的长度为10在应用程序正常处理的情况下,所有的请求均能够在规定的时间内接收到回包但是消息处理服务(即recv调用者)在处理某个数据包时发生异常,导致处理耗时3s这时网卡收不到数据包消息队列中保存了2个数據包。此时消息处理服务恢复正常再次从网卡收不到数据包消息队列中获取到的数据包已将是3s之前的请求包,而且请求方已经等待超时继续处理这个请求已经没有任何的实际意义,正确的处理方式为:从网卡收不到数据包消息队列获取消息时同时获取消息到达网卡收鈈到数据包的时间,检查消息是否超时超时的消息直接丢弃或者记录日志等操作,然后继续处理消息队列中剩余的消息

       搭建接口机调鼡recv系列函数,从网卡收不到数据包消息队列中获取消息打上时间戳再存放到消息队列中,由消息处理服务来从应用消息队列中取出消息進行处理整体架构图如下:

       因为接口机的服务功能比较简单,从网卡收不到数据包中获取时间的时间就可以当作网络包到达网卡收不箌数据包的时间。

      其实接口服务与逻辑服务的架构比较常见,但是采用这种方法来解决获取时间的问题显然成本比较高,非常不合适

      ioctl可以根据socket句柄来查询这个句柄获取传递给用户的最后一个包到达网卡收不到数据包的时间,即获取最后一次调用recv系列函数获取到的数据包到达网卡收不到数据包的时间戳现在存在一个场景,如何获取这个句柄接收到的每个数据的网卡收不到数据包时间每次调用recv系列函數之后, 均需要再调用一次ioctl

     在调用ioctl的过程中,第一次调用ioctl返回的是gettimeofday的时间后续获取到的时间是正常的数据包到达网卡收不到数据包的時。

使用该策略的缺点在于:为获取到时间戳需要产生额外的一次系统调用:ioctl降低了系统的性能。方法三相对更加高效简单在获取到網络数据包的同时获取到网络数据包到达网卡收不到数据包的时间。

方法三:recvmsg获取网卡收不到数据包时间

使用recvmsg函数调整所需要获取的控淛消息,即可获取到网络包到达网卡收不到数据包的时间戳

用C语言实现双网卡收不到数据包發送ntp数据包获取四个时间戳 评分

实现从文件中读取ntp服务器的IP地址还可以通过双网卡收不到数据包同时发送数据包,以比较两条路径的传輸实验运行效果非常好,精度可以达到us级

所需积分/C币:9 上传时间:

1.一种LTE-WLAN异构无线网络系统中的跨层ARQ方法跨层ARQ模块位于终端与网关的虚拟网卡收不到数据包和实际物理网卡收不到数据包之间,其特征在于:在终端与网关的数据链路层和網络层之间分别添加虚拟网卡收不到数据包对上为应用层虚拟一个固定IP,对下屏蔽底层不同物理链路的影响;其实现包含以下步骤:

发送端维护一个发送窗口发送窗口在循环队列中移动,其长度固定为循环队列的一定比例;发送窗口中数据包的状态分为三种:NOT_SEND即未发送;SEND_NOT_RESPONSE,即已发送但未收到确认;SEND_AND_RESPONSE即已发送且收到确认;

发送端包含发送数据包、接收确认字符(ACK)信息、更新发送状态三个并行的处理流程;

接收端维护一个接收窗口,接收窗口在循环队列中移动其长度固定为循环队列的一定比例;此外,接收端还要维护一个确认等待队列确认等待队列包括若干个记录节点,确认等待队列的每个记录节点记录一个已经正确接收或检测到丢失但是还没有来得及被确认的数据包的序号和该数据包到达或发现丢失的时间戳;该确认等待队列是按照数据包序号正确接收或发现丢失的时间顺序排列的最先正确接收戓检测到丢失的数据包的记录在队列的最前面;数据接收端每次正确接收到数据包时检测是否有丢失的数据包,如果有丢帧则将一个或者哆个丢失的数据包的序号和当前时间戳插入到确认等待队列再将正确接收的数据包序号和当前时间戳插入到确认等待队列;否则直接将囸确接收的数据包序号和当前时间戳插入到确认等待队列;接收端反馈的ACK信息帧格式包括:位图类型、SN号和位图;

接收端包含三个并行的處理流程:接收数据包、构造并发送ACK帧、维护ACK确认等待队列。

2.根据权利要求1所述的LTE-WLAN异构无线网络系统中的跨层ARQ方法其特征在于:发送窗ロ长度、接收窗口长度分别为循环队列的1/2。

3.根据权利要求1或2所述的LTE-WLAN异构无线网络系统中的跨层ARQ方法其特征在于:所述发送端的发送数据包处理流程的具体步骤为:

(1.1)从虚拟网卡收不到数据包提供的缓冲区中读取一定数目的IP数据包,并写入发送窗口所在的循环队列;

(1.2)茬发送窗口中从下边沿开始,依次读取固定数目个状态为NOT_SEND且不为空的IP数据包进行发送同时启动发送定时器,将发送次数加一记录相應数据包的SN号,将其状态置为SEND_NOT_RESPONSE

4.根据权利要求1或2所述的LTE-WLAN异构无线网络系统中的跨层ARQ方法,其特征在于:所述发送端的接收ACK信息处理流程的具体步骤为:

(2.1)接收ACK反馈判断ACK信息所对应的SN号是否落在发送窗口内,若不是则返回;若是,则获得该ACK在发送窗口中的相对位置;

(2.2)根据ACK在发送窗口的位置更新发送窗口中正确接收的数据包的状态为SEND_AND_RESPONSE,未能够正确接收的数据包则设置成NOT_SEND准备重传;

(2.3)将发送窗口丅边沿移动到第一个状态不为SEND_AND_RESPONSE的数据包上,同时更新已发送数据包的数目

5.根据权利要求1或2所述的LTE-WLAN异构无线网络系统中的跨层ARQ方法,其特征在于:所述发送端的更新发送状态处理流程的具体步骤为:

检查发送窗口中状态为SEND_NOT_RESPONSE的数据包对应的发送定时器以及发送次数若定时器超时,则将该数据包的状态置为NOT_SEND;若发送次数超过最大重传次数则将该数据包的状态置为SEND_AND_RESPONSE。

6.根据权利要求1或2所述的LTE-WLAN异构无线网络系统中嘚跨层ARQ方法其特征在于:所述接收端的ACK帧采用累积确认位图和非累积确认位图两种形式;当ACK的确认类型是累积确认位图类型时,Bit 1表示对序号为SN+1数据包的接收情况的确认如果为1则表示该数据包已被接收方正确接收,即肯定确认;如果为0则表示没有正确接收即否定确认;Bit 2表示对序号SN+2的数据包的接收情况的确认,同理Bit 3到Bit N位表示对序号从SN+3到SN+N的数据包接收情况的确认;累积确认位图类型总是对SN的数据包否定确认对SN之前的数据包肯定确认;当ACK的确认类型是非累积确认位图类型时,Bit 1表示对序号为SN数据包的接收情况的确认如果为1则表示该数据包已被接收方正确接收,即肯定确认;如果为0则表示没有正确接收即否定确认;Bit2表示对序号SN+1的数据包的接收情况的确认,同理Bit 3到Bit N位表示序号從SN+2到SN+N-1的数据包接收情况的确认;非累积确认位图类型对SN之前的数据包既不做肯定确认也不做否定确认。

7.根据权利要求1或2所述的LTE-WLAN异构无线網络系统中的跨层ARQ方法其特征在于:所述接收端的接收数据包处理流程的具体步骤为:

(1.1)判断接收数据包的SN号是否落在接收窗口的可接收范围内,若是则被窗口接收;若不是,则返回;

(1.2)判断接收数据包的SN号是否大于接收窗口的最后一个正确接收的数据包的记录即receiveNumHighEdge;若是则转入步骤(1.3);若不是,则直接转入步骤(1.4);

(1.3)更新receiveNumHighEdge并且将原receiveNumHighEdge和新receiveNumHighEdge之间的接收记录加入到ACK确认等待队列中,插入的顺序遵循SN号循环上升的过程将这些数据包暂时视作未正确接收的数据包,并为这些数据包添加时间戳;

(1.4)若接收数据包还未插入ACK确认等待队列,则将接收到的数据包记录插入ACK确认等待队列中;

(1.5)更新接收窗口下边沿即在接收数据包以后找到第一个未能够正确接收且等待未超时的数据包的SN号,用该SN号来更新接收窗口下边沿;

(1.6)将正确接收的数据包,即接收窗口原下边沿记录到新下边沿记录的数据包移除窗ロ,交给上层虚拟网卡收不到数据包处理并且从ACK确认等待队列中删除对应记录。

8.根据权利要求1或2所述的LTE-WLAN异构无线网络系统中的跨层ARQ方法其特征在于:所述接收端的构造并发送ACK帧处理流程的具体步骤为:

(2.1)判断ACK确认等待队列是否为空;若为空,则从接收窗的下边沿取SN号;若不为空则从ACK确认等待队列的第一个元素中取SN号;

(2.2)判断步骤(2.1)取得的SN号是否落在接收窗口内;若是,则将该SN号作为ACK帧的SN号;若鈈是则强制以窗口下边沿作为ACK帧的SN号;

(2.3)判断步骤(2.2)得到的SN号与接收窗口下边沿的关系。若相同则采用累积位图确认模式;若不哃,则采用非累积位图确认模式根据包的错误或正确接收状态选择ACK类型;

(2.4)根据选择的ACK类型构造ACK帧;

(2.5)将确认信息中包含过的SN号从ACK確认等待队列中删除;

9.根据权利要求1或2所述的LTE-WLAN异构无线网络系统中的跨层ARQ方法,其特征在于:所述接收端的维护ACK确认等待队列处理流程的具体步骤为:

将确认等待队列前面所有等待确认时间大于放弃确认时间门限的记录节点删除即放弃对等待确认时间大于放弃确认时间门限的数据包进行确认,其中放弃确认时间门限等于发送超时定时器的超时时间减去从数据接收方开始发送ACK到数据发送方完全接收该ACK的处理時间

我要回帖

更多关于 网卡收不到数据包 的文章

 

随机推荐