流量收集分类问题
- 可收集的单条流的特性较少,主要就是从包长度、包到达时间、特殊字段这几个方面扩展。而且为了快速对一条流量进行分类,重点也是使用前若干个数据包的统计特性。
- 使用一个网关服务器,发送端应用程序要将所有TCP/UDP的目的ip和port都设为这个网关程序,然后所有的流量就都会经过这个网关。问题在于数据包实际的目的地址要如何传过来?放在TCP/UDP包的数据域吗?这样又会造成浪费,每个数据包都携带了32字节实际目的ip地址和16字节实际目的端口。
- 另一种类似抓包的想法,使用raw socket原始套接字,实现直接从链路层收发数据帧,可收集到更多的流量信息。这种方式就必须要求所有收发数据的流量都会经过此服务器。
socket(PF_PACKET, type, protocol),其中type字段可取SOCK_RAW或SOCK_DGRAM表示可操作MAC帧头直接从链路层收发数据帧,protocol字段可取ETH_P_IP表示只接收发往目的MAC是本机的IP类型的数据帧。
ioctl(sockfd, SIOCGIFHWADDR, ð);此函数可将socket与指定网络接口如eth0绑定,使我们的原始套接字只接收指定接口的数据报文。 - 网卡从线路上收到信号流,网卡的驱动程序会去检查数据帧开始的前6个字节,即目的主机的MAC地址,如果和自己的网卡地址一致它才会接收这个帧,不符合的一般都是直接无视。然后接收的数据帧会被网络驱动程序分解,IP报文将通过网络协议栈,最后传送到应用程序那里。往上层传递的过程就是一个校验和“剥头”的过程,由协议栈各层去实现。
以上就是一个大致的抓包过程如果将还带有IP头的IP报文当做存入要调度的队列中的数据节点,就可以获取到每个报文的详细的5元组信息,然后队列调度后还可以正常的将其转发出去。 - 抓包统计每条流的信息,在达到一定的分类准确率后判为某个类,然后将该流量的所有数据包都存入对应的队列中。再根据队列调度规则来调度各个队列。暂时无法具体分类的流量数据包,先根据当前统计特性大致分到一个队列。
队列调度
- 首先应该有前面的根据流量特性进行分类,然后才能按规则进行队列调度。















网友评论