SMTP与POP除了命令不一样外,数据上基本是相同的,所以小弟发送同一封邮件,用相同的代码SMTP和POP的数据在网络层(IP包)进行截获,然后用同一个解码模块对SMTP和POP的数据部分进行解码,结果SMTP的数据完全正确,而POP的数据却有时正确有时有问题,或者一部分正常,一部分不正常,经过观察发现有时候POP的数据包有错位的情况发生,比如第10个包错位到了20,原来11一个包到了10的位置,不知道是不是这个原因?请大虾指点。

解决方案 »

  1.   

    哦?还是这个问题阿...
    做协议分析要一层层来,ip分片比较少见,但tcp次序颠倒是很可能的,比如某个包发送时丢失,tcp会继续发送后边的包,等超时没有正确的ack才重传刚才那个。
    要判断TCP的SEQUENCE NUMBER,提前到达的包要缓存起来,直到前边缺少的都填满再送给上层处理。
      

  2.   

    恩,是啊,这个可能是网络延时造成的重发,但是TCP协议的描述是:顺序的无差错的。这个意思是什么?是不是表示是表示层是这样的,而且最迷糊的是为什么SMTP没这样的情况啊?
      

  3.   

    呵呵,smtp没有是因为运气好。假如你把ip包按到达顺序排列,不做tcp排队的话,smtp也可能会出错。
    tcp是顺序的无差错的,意思是,即使ip包颠三倒四地到达,tcp保证按正确的次序,无错地送给上层协议。如果不能确定,tcp会假装没有收到东西。
    而这就是你没做的工作。建议用个链表,把乱序的包存起来,每次向上层报告一个正确的包后,在链表中搜索有无后续包可以接上。