tcp-为何TCP发包就不存在丢包和乱序? 而UDP发包就有,难道就只有Tcp有重传机制,udp就没有?

问题描述

为何TCP发包就不存在丢包和乱序? 而UDP发包就有,难道就只有Tcp有重传机制,udp就没有?

如果说tcp有自动重排机制,那么udp如果乱序了,怎么处理?如果有具体算法最好了~,对这块概念很模糊……

解决方案

个人理解
tcp 在建立连接时有三次握手的过程,这样就保证的连接的有效性。发包时发包完成也有反馈(对方接收完成有标记),所以tcp不存在丢包乱序的问题
UDP,建立连接并没有三次握手的过程,而且发送数据只是负责发送,不会有发送成功的反馈

解决方案二:

TCP发包

解决方案三:

tcp 协议头有 seq 和 ack_seq 用来保证 tcp包的时序, 如果出现缺少其中一块, 会进行重传, 而 udp没有seq 和 ack_seq 来保证, 所以没有

解决方案四:

那UDP乱序怎么处理,有没有什么经典的算法什么的?

解决方案五:

因为UDP只负责发,它不管对方有没有收到。乱序的话,你可以对包设置编号啊

解决方案六:

主要就是自己定义包的协议格式,用一个ID等来编码,然后自己组包的时候,按照这些顺序等逻辑再恢复

时间: 2024-09-05 17:21:33

tcp-为何TCP发包就不存在丢包和乱序? 而UDP发包就有,难道就只有Tcp有重传机制,udp就没有?的相关文章

Socket编程 (异步通讯,解决Udp丢包) - Part4

原文http://www.cnblogs.com/zengqinglei/archive/2013/05/15/3079007.html Socket编程 (异步通讯,解决Udp丢包) 对于基于socket的udp协议通讯,丢包问题大家应该都见怪不怪了,但我们仍然希望在通讯方面使用Udp协议通讯,因为它即时,消耗资源 少,响应迅速,灵活性强无需向Tcp那样建立连接消耗很长的时间等等很有优势的理由让我们对Udp通讯寄予了厚望.但它也存在一个不好的特点,经常丢包是 时常发生的事.可能各位大侠已经有了

rt-同时接收多个udp时丢包

问题描述 同时接收多个udp时丢包 udp广播,多个客户端同时回馈.广播端接收反馈数据会出现丢包.在android上测试,好的手机丢包情况明显改善.请教下有没有好的解决方案彻底解决. 解决方案 UDP丢包问题 解决方案二: UDP本身就是不可靠的.如果有丢包,你可以尝试再次广播,多发送几次,来接收数据

ns2-NS2 中tcp源代码关于处理接收到的ack包问题

问题描述 NS2 中tcp源代码关于处理接收到的ack包问题 TcpAgent函数中的newack(Packet *pkt)函数负责对新到达的ack包进行处理, 在该函数里,既然是处理信道的ack包,用什么函数能够获得该ack包的到达时间.下面有个图,是这个函数里面的内容 里面的ts_echo_=tcph->ts_echo(); 这个就是我想要的ack包的到达时间么? 解决方案 http://blog.sina.com.cn/s/blog_4fb1f17d01018l5r.html

线程-UDP传输文件,通过网线直连,低速传输正常,高速传输丢包的问题

问题描述 UDP传输文件,通过网线直连,低速传输正常,高速传输丢包的问题 用UDP传输视频文件,VC发送数据到安卓端,安卓端监听端口接收数据,采用网线直连,排除网络原因造成的丢包.当VC发送数据延时50ms(大概几百K每秒的速度发包),JAVA端能正确接收.可是不延时50ms发送时(大概2M/S的速度发包)JAVA端接收就出现丢包.JAVA开了两个线程,一个线程接收并放到缓冲队列,另一个线程从缓冲队列取出数据写入U盘.缓冲队列大小也比发送的文件要大,也不可能是缓冲队列不够大的问题.希望得到大神指

网络丢包率是什么意思

在我们网络上形成的数据包通过途径传输到另一个数据库上面,一般通过网络传输的过程中会因为一些原因比如距离过大而产生小部分数据包被丢失,而大部分数据包被成功传输到终端数据库上.这样就形成了一个网络丢包的过程.而其中丢包的大小和传输数据包的大小就是网络丢包率.比如工厂在A地买了一车货,然后运送到B地,其中因为搬运工搬运和其他原因造成这批货和在A地的所测量的数值要少一些,这个过程就是被丢失的货物的故此,也就是网络中网络丢包,而丢失的货物和货物的总量的比值就是网络丢包率.通常这些只是磨损消耗,属于很正常的

网络丢包的原因是什么?

  ICMP回送请求报文是主机或路由器向一个特定的目的主机发出的询问,收到此报文的机器必须给源主机发送ICMP回送回答报文.这种询问报文用来测试目的站是否可到达以及了解其状态. 需要指出的是,ping是直接使用网络层ICMP的一个例子,它没有通过运输层的UDP或TCP. 网络丢包的原因主要有物理线路故障.设备故障.病毒攻击.路由信息错误等,下面我们结合具体情况进行说明. 路由错误 网络路径错误也会导致数据包不能到达目的主机,如主机的默认路由配置错误,主机发出的访问其他网络的数据包会被网关丢弃.但

Java数据报之失序和丢包

数据   习惯了TCP编程,认为UDP可以包办这些问题是错误的.一个UDP应用程序要承担可靠性方面的全部工作,包括报文的丢失.重复.时延.乱序以及连接失效等问题. 通常我们在可靠性好,传输时延小的局域网上开发测试,一些问题不容易暴露,但在大型互联网上却会出现错误. UDP协议把递送的可靠性责任推到了上层即应用层,下面简单编写了几个类来专门处理两个问题:乱序和丢包. 四个类:DataPacket 类,PacketHeader类,PacketBody类 ,DataEntry类,位于同一个文件Data

tcp-TCP读设备大量数据产生丢包

问题描述 TCP读设备大量数据产生丢包 我在用C++的socket实现了一个TCP的接收程序,需要将设备的数据保存下来.可是设备传来的数据量很大,可能是我线程设计的不合理,好吧,是我根本没有线程以及网络编程基础,所以数据产生丢失.哪位前辈能指点一下我该怎么分配我的线程.设备工作50HZ,一秒存的TXT文件大约5M.谢谢了. 解决方案 Tcp接收数据的话,要经过网络层,而网络层的最大传输单元是1500个字节,具体怎么分配线程不太懂了,你可以参考下刚才所说的

udp丢包 又是udp丢包

什么会导致udp丢包呢,我这里列举了如下几点原因: 1.调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这二次调用间隔里,发过来的包可能丢失.对于这种情况可以修改接收端,将包接收后存入一个缓冲区,然后迅速返回继续recv. 2.发送的包巨大丢包.虽然send方法会帮你做大包切割成小包发送的事情,但包太大也不行.例如超过30K的一个udp包,不切割直接通过send方法发送也会导致这个包丢失.这种情况需要切割成小包再逐个send. 3.发送的包较大,超过mtu