TCP的验证功能,是不需要程序员自己写,TCP协议自带验证,UDP的验证应采取上面2那种方式,不需要等待,最后接受方发个接受完全的消息就结束了,UDP节省了发送成功时候的验证,所以比较快

解决方案 »

  1.   

    楼主,我来试着回答一下你的问题:
    (1)作为一个传输层的协议,TCP/IP 协议在系统中是封装好了的,不需要自己来实现它的功能。对于TCP和UDP的使用,我们尽管使用系统留给我们的接口即可,所以对于TCP来说,它提供可靠的连接,有自动重传的功能,我们不必自己来写。
    (2)UDP协议虽然提供不可靠的连接,但是它的效率是TCP比不了的,所以在那些对可靠性要求不是很高的应用来说,UDP是个好的选择,比如视频和音频的应用可以在它的基础之上写一些应用层的协议。至于重传的怎么写,你可以学习一下RTP协议,我相信对你会有帮助的。
      

  2.   

    TCP是可靠传输,你的代码通常不用管了
    但是IPV6下,建议你在自己的协议层加个校验,因为IPV6下,IP层的数据校验被取消了,只剩下TCP校验UDP做可靠传输,就需要执行类似TCP的确认机制,但是什么时候重新传递确实是个问题,因为有些网络上延迟很厉害,有些确很低,我自己实现了一个TUDP协议,确认重新传递的时间间隔是动态调整的,默认是 80 MS-》根据第一个反馈包的时间差,加上容余量20左右,重发,如果第一次确认时间很长,那么下次就自动调整重发时间往长的方向,最多不超过3秒 ,因为我测试网络延迟一般高的普遍在1XXX-2XXX之间,超过3的比较少
    这个完全靠经验数据和流程的动态判断,没有规定的重传时间此外,由于UDP被改造成了可靠传输,而我们自己的引擎是无法运行在核心层下,因此,效率不如TCP
      

  3.   

    刚 又想到 一个问题:UDP 一个一个数据包发送 ,这样会不会 后发的数据包先到?那接收端是不是接收的顺序也乱了?要程序员来做相关排序操作吗?像 网络视频 的话,会不会后一秒的画面比前一秒的画面先播放出来?传 文件 的话,文件就会打不开了?
      

  4.   


    UDP : 如果 A的反馈包 超时了,这时 你重发了A包,A包发完后,那个A的反馈包又收到了,那A包不是发了2次?接收端会不会有问题啊?
      

  5.   

    TCP是不需要程序员来写机制的
    人家已经封装好了
    UDP确认机制要第一种,要不然就乱序了
    UDP可能出现乱序问题的
      

  6.   

    问题一:TCP一般不需要自己验证。
    问题二:UDP的验证方法有很多,根据实际需要来决定。简单提几种方式:
    1、不做验证。对于不重要的数据传输,可以忽略丢包以及无序到达,例如视频、音频的即时播放。
    2、对每次发送的数据进行编号,接收方每次收到数据后回发编号,并自己丢弃重复收到的数据,发送方如果在一定时间内没有收到回应则自动重发。这种方式传输速度较低,适用于简单的数据传输。
    3、对每次发送的数据进行编号,由接收方来检查丢包情况,在适当的时候要求发送方重发前一段时间内丢失的数据。这种方式适用于大规模数据传输。
      

  7.   


    你自己的协议机制可以保证这个不会出错
    只确认一次,加个序列号就可以了
    可以参考TCP实现
      

  8.   

    协议的实现机制上,tcp会有对应的机制保证传输的正确性,但是udp只是发送,没有重传等机制
      

  9.   

    问题一:TCP一般不需要自己验证(协议底层保证了)。
     
    问题二:UDP的验证方法有很多,根据实际需要来决定。简单提几种方式: 
    1、不做验证。对于不重要的数据传输,可以忽略丢包以及无序到达,例如视频、音频的即时播放。 
    2、对每次发送的数据进行编号,接收方每次收到数据后回发编号,并自己丢弃重复收到的数据,发送方如果在一定时间内没有收到回应则自动重发。这种方式传输速度较低,适用于简单的数据传输。 
    3、对每次发送的数据进行编号,由接收方来检查丢包情况,在适当的时候要求发送方重发前一段时间内丢失的数据。这种方式适用于大规模数据传输。
      

  10.   

    socket 和tcp udp是一个网络层的吗?tcp连接用Socket 传输文件??