比如A,B双方进行UDP通讯,A发生一段数据到B时:
1.这段数据要么完整到达B,要么在传输过程中丢失,根本到达不了B
2.这段数据可能完整到达B,或者不完整到达B(部分缺失或错误),或者丢失了,根本到达不了B1和2哪个正确?如果这段数据很小呢(比如100个字节)?如果小数据满足1的话,那么这个"小"到底是多少字节?谢谢各位帮忙!!!
谢谢!
谢谢!

解决方案 »

  1.   

    1和2都正确,不要指望用什么手段来提高UDP的可靠度。
      

  2.   

    应该是2正确的.UDP这个协议说它不可靠,是相对TCP协议而言的.当一个数据段发送出去,它基本上就不管了.因为,它根本在发送之前没有在通信双方建立连接.因些会有丢失的,但它也有它的好处,就是它的传输时延比较短,适合大量的数据传输的。像我们用的TFTP,QQ,采用了通常就是这种方式。
      

  3.   

    UDP包你们一般定义多大?512?
      

  4.   

    我记我的看的书好象就是UDP发出去的包是不管的,对方也不会应答是否收到.TCP发出包之后对方会应答是否完整收到
      

  5.   

    可以在发包的时候采取类似创建TCP连接那样的操作,发消息,然后对方给一个ACK,然后发消息方再发一个ACK,这样算发送成功。
      

  6.   

    可以在发包的时候采取类似创建TCP连接那样的操作,发消息,然后对方给一个ACK,然后发消息方再发一个ACK,这样算发送成功。
      

  7.   

    你这样问是问不出结果的,回答什么的都有,你根本无法判断谁说的对。按我理解是1,我没遇到过不完整的情况。
    你可以在程序的时候在UDP协议之上再自定义一个包头,包头中记录数据长度和校验和,接收到数据后自己判断是否完整。
      

  8.   

    1和2UDP都能发生,但是可以通过程序提高其可靠性,可以加入一些校验和回码信息。
      

  9.   

    LZ还没得出结论呢?
    我查了一下UDP资料,UDP头中包含源端口、目的端口、包长度和校验和,既然包含包长度和校验和就说明UDP协议可以判断包的完整性,会自动抛弃不完整的数据包,所以只要你接收到就是完整的。
      

  10.   

    UDP 是用戶報文協議。它的數據都是打包後再發送的。有邊界檢查,如果接收端收到的數據不完整,這個包就被直接丟了,不做處理。包括在發送過程中,中間的交換機,路由器如果收得不完整的UDP包。也是被直接丟了。不再轉發。
      

  11.   

    当UDP包小于阀值时不会被分片,所以不存在所谓的部分问题。要么接收要么没有。但实际传输中会因为网络环境产生误码,所以如果非要说部分的话,只能说,可能会发生数据错误。UDP包没有CRC,所以你得自己确定它是对的还是错的,但通常可以认为是对的
      

  12.   

    就单个UDP包来说,要么完整到达,要么就丢了,但是如果整段数据被拆分为多个包的话,整段数据可能就是完全收到,部分缺失了或是完全丢失了,还有可能顺序不对。
      

  13.   

    你本身说的就不清楚,UDP的包大小好像不是发送方自已定义的吧.我觉得UDP的一个包应该要么丢失,要么完全到达,但是这个包的大小却不是使用者自己定义的.
      

  14.   

    你本身说的就不清楚,UDP的包大小好像不是发送方自已定义的吧.我觉得UDP的一个包应该要么丢失,要么完全到达,但是这个包的大小却不是使用者自己定义的.------------------------
    一個 UDP 包,要麼到達,要麼就丟失,大小是就是自己的 數據長度 + UDP 頭 + IP 頭 + 以太網頭一個 UDP 的最大分片是 1640 (好象是),一般情況 UDP 的最大用戶包為 64K還有一種情況,就是有一個比較大的 UDP 包到達。你去接收時, recvform 給的緩沖區不夠。
    這時只會讀到這個包的前面的數據,返回 SOCKET_ERROR, 用 WSAGetLastError 可以讀到緩沖不夠的錯誤。但這個包就廢了