TCP重组基本原理

TCP流的存储使用二位链表的方式,横向的为同一个TCP会话,每一个节点为一个IP包;纵向的是一个接一个的TCP流,用于保存多个TCP会话。

1.每到来一个tcp数据包(pkt),先将该数据包的源ip地址、目的ip地址、源端口号、目的端口号取出来在哈希表中查找有没有与它相匹配的链表(fp)存在,如果有,就把pkt数据包放入与它有相同socket对的fp链中,放入链表的时,我先查找pkt的顺序号在链表中的适当位置,然后才放入;如果没有,调用add_new_tcp()新建一个新的TCP会话,然后再将其加入tcp_stream_table中。

2.每当在fp中放入一个tcp数据段后,先检查fp链表中的数据段是否已经到齐了,若到齐,就将个链表中所有数据段的数据部分拼接到一起,得到应用层报文,然后释放该链表,然后重复1-2步骤;若没到齐,直接重复1-2步骤。


你可能感兴趣的:(Stream,socket,tcp,table,存储,FP)