想象一下PCAP文件file
,客户端client
和服务器server
之间只有一个连接。没有重复的数据包,没有数据包丢失,数据包正确排序。
如果file
中的数据包以的任何顺序播放而不使用数据包,那么我如何以编程方式订购数据包'时间戳? (例如,从最后一个数据包开始)。
目前我有两个包含队列的队列,传输队列(从client
发送的数据包)和接收队列(从server
发送的数据包)。我知道在找到包含标记client
且没有标记SYN
的数据包之前,我不知道谁是ACK
。
为了在同一队列中对数据包进行排序:
SEQ
数字表示数据包随后到达(忽略SEQ包装)。SEQ
个数字,我会比较ACK
个数字。
ACK
数字意味着数据包随后到达。ACK
数字,我会(我不知道这是否正确):
FIN
标志,则会在之后到达。PSH
标志,则会在之后到达。一旦数据包(希望)在各自的队列中正确排序,我就会开始迭代这两个队列(q1
和q2
):
/* If q1 and q2 are not empty... */
if SEQ number in the queue q1 < ACK number in the queue q2
take packet p in q1
else if SEQ number in the queue q1 == ACK number in the queue q2
if ACK number in the queue q1 < SEQ number in the queue q2
take packet p in q1
else if ACK number in the queue q1 == SEQ number in the queue q2
/* I have implemented this based on what I have seen in file. */
if FIN bit in the queue q1 && FIN bit in the queue q2
/* Compare previous SEQ numbers in both queues, is this correct? */
if the SEQ number of the current packet in q1 is the same as the SEQ number of the previous packet in q1
take packet p in q1
else
take packet p in q2
endif
else if FIN bit in the queue q1
take packet p in q2
else if FIN bit in the queue q1
take packet p in queue q1
else
/* What to do? Is this combination possible? */
endif
else
take packet p in q2
endif
else
take packet p in q2
endif
show packet p
将一个队列中的SEQ
号与另一个队列中的ACK
号进行比较,反之则是基本的。
我不知道在(SEQ in q1 == ACK in q2) and (ACK in q1 == SEQ in q2)
时该怎么做。我所实现的是基于两个PCAP文件的观察。
这样做的正确方法是什么(如果可能的话)?