因为这段时间再看suricata的源码,然后发现自己对数据流与数据包的概念有点模糊,然后到网上去百度,发现网上的解释少得可怜,大多数都是一些名词解释,没什么收获,后来看多了也了解了一些,所以记录下来,如果有不正确指出请指出。

        通常,数据包的概念也是有点模糊,TCP层的包可以叫做数据包,应用层的包也可以叫做数据包,这要看你需要解析的是那个层面的包。

        数据流的概念在百度百科上的解释是这样的:数据流(data stream)最初是通信领域使用的概念,代表传输中所使用的信息的数字编码信号序列。然而,我们所提到的数据流概念与此不同。这个概念最初在1998年由Henzinger在文献87中提出,他将数据流定义为“只能以事先规定好的顺序被读取一次的数据的一个序列”。

        我对数据流的定义是(狭义的wireshack抓的pcap包中了解到的概念):数据流是完整的一次TCP\IP链接,包含多个数据包,从开始的SYN包到最后断开连接的第四次握手的ACK包,这些数据包的负载也就是除去所有的协议头所剩下的数据,是描述完整的一次动作(server 和client 交互的数据),从方向上来说,同方向的数据包的IP和端口都是一致的。

       从上面的描述可以看出,数据流是包含了多个数据包的,而这些包都有相似的特点,所以构成了一个数据流,下面我们看看,pcap包的TCP数据流的描述:

1、打包抓到的pcap包,我没有做筛选,所以可以看到从第一个数据包开始到最后是有很多的包。

KEM数据流 数据流 数据包_数据包数据流


2、选择一个数据包,点击右键,选择追踪TCP流。

KEM数据流 数据流 数据包_TCPIP_02



3、最后经过筛选之后,剩下能看到的就是一个包所属的一个TCP流。

KEM数据流 数据流 数据包_数据包数据流_03



再对照我上面对一个流的定义来看,是不是从第一个包开始,是SYN包,再下来是SYN | ACK 包,再往后看看....是不是一次完整的TCP链接,而且同方向的包的IP和端口是一样的。