我的通讯协议是:
传输信息标志+文件开始标志+结束标志+包号+传输数据+校验和
TCP自己不是有差错处理和丢包重传,那么TCP还要不要自己搞检验啊?UDP呢?
还有那个异或校验和累加校验算法怎么写啊?我查了资料可是还是不很懂啊!
是不是要一位一位的进行异或还是可以32BIT一起啊?而且我上面协议里面的最短的也是INT型的啊。
那么我的校验和应该是怎么类型的呢?

解决方案 »

  1.   

    TCP的校验和纠错机制和你要做的不冲突,你做的事应用层的校验和纠错,它做的是网络层,如果对安全性可靠性要求高有必要在应用层做,具体情况因人而异。
      

  2.   

    那么就是说我在程序中也可以对TCP包校验,如果发现传输的错误可以要求它重新发送的,是不是这样?
    如果我要重新发送不是和UDP的差不多了,我UDP发送过程中记录发送包的标号,如果出错了就记录包号码,最后文件传输完毕就把错误的包号码发送回去要求重新发送,直到文件传输正确。
    那么我TCP要求回发怎么搞?是文件传输完毕了要求回发还是发送一个包检验再发送下一个包?
      

  3.   

    TCP和UDP都协议本身都有校验,通常不需要应用程序自己校验。
    异或校验就是先把一个变量初始化为0,然后逐一与所有数据异或,最后得到的结果就是校验码。可以按BYTE处理数据,也可以按WORD或者DWORD,最后不足的地方补0即可。异或校验没有纠错能力,只有冗余校验才会有纠错能力。另外,异或校验是很简单的校验方式,对于使用TCP、UDP协议来说,增加这种校验没有实际作用,只能是降低效率。