目前用winpcap实现了TCP的数据率统计,下一步还要统计出TCP的丢包率,请问各位大神们,应该怎么统计呀?
TCP不是可靠传输吗,怎么丢包啊~~~~~~PS:我是用C写的windows程序,就是调用各种API。

解决方案 »

  1.   

    丢包时, 会重发, 记录最近tcp包的SeqNumber, AckNumber 相同的就是重发的包
      

  2.   

    tcp 传输的是字节流,没有“包”的概念。
    如果有,那也是你自己定义的“数据包”,tcp有重传机制,如果你处理的好,不会丢包,
    除非发送方发送的数据量超出接收方的缓冲区。
    如果要计算你自己定义的"包"是否丢了,给你的包加上编号就好了,接收方记录编号,看哪些没取下来(更可能是包的数据不全了)。
      

  3.   


    不过我也想问,难道TCP是绝对不会丢包的???
      

  4.   

    那重传机制也是重传的字节流?
    重传机制我没法处理,因为我是直接调用ws2_32.lib里的send和recv,不和底层打交道,我想重传机制应该电脑本身做好了的吧?
      

  5.   

    我感觉这个应该是网卡做的事情。
    tcpip宝典里面有解释。
      

  6.   

    通过WINCAP sdk抓取IP包,是TCP包的,通过地址,把某个联接的信息取下来,统计相同序号的包,即使重发的包。
      

  7.   


    请问你指的宝典是 TCP/IP详解?那具体是1还是2还是3?
      

  8.   


    如果是内容错误的包应该在winpcap能抓之前就被电脑丢弃了吧?我就很纳闷这样winpcap抓啥来表示丢包率?
    PS: 我是接收数据方
      

  9.   


    那为什么还会有用TCP传输发生错误的现象?
      

  10.   

    TCP是流协议,可靠,不存在丢包,你说的传输错误的现象指的是什么现象?数据接收不完全?你接收端的问题吧
      

  11.   

    首先是IP层,这是基本的传输单元,这部分是不会错的,是由网卡硬件及驱动协同完成的,当是错的IP包,是不会上报的。然后再就是TCP包,会有校验,校验不过的,当然也不能算咯,所以,你根本不用担心这些。
      

  12.   

    通过WINCAP sdk抓取IP包,是TCP包的,通过地址,把某个联接的信息取下来,统计相同序号的包,即使重发的包。
      

  13.   

    也就是说winpcap是抓不到错误的包的?只能如此来近似得到?
      

  14.   

    一群傻逼tcp不丢包是应用层的视角说话。pcap是链路层,白痴