udp如何实现可靠传输(UDP可靠传输)

      最后更新:2024-02-21 19:27

      UDP如何保证传输的可靠性

      UDP是网络传输数据的基础。UDP传输协议的不可靠含义是:即使该数据报丢失,发送方也不知道。但是,对于每个数据报,还是要求尽可能提高传输可靠性
      要实现无差错的传输数据,我们可以采用重发请求(ARQ)协议,它又可分为连续ARQ协议、选择重发ARQ协议、滑动窗口协议。 采用滑动窗口协议,限制已发送出去但未被确认的数据帧的数目。循环重复使用已收到的那些数据帧的序号。具体实现是在发送端和接收端分别设定发送窗口和接收窗口。 在接收窗口和发送窗口间存在着这样的关系:接收窗口发生旋转后,发送窗口才可能向前旋转,接收窗口保持不动时,发送窗口是不会旋转的。这种收发窗口按如此规律顺时钟方向不断旋转的协议就犯法为滑动窗口协议。
      UDP如何保证传输的可靠性

      UDP使用什么提供可靠性

      UDP是直接发送数据包,而TCP是基于连接的,能提供可靠的数据传输,防止数据包顺序错乱,丢失,出差错等。。。而UDP不提供其保证,所以可靠性差。
      UDP无连接的传输层协议,可靠性由应用层来实现。
      使用应用层协议提供可靠性
      UDP使用什么提供可靠性

      udp工作原理是怎样的?

      UDP工作原理:udp用户数据报协议 (RFC 768) 用户数据报协议(UDP)是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。 UDP 协议基本上是 IP 协议与上层协议的接口。 UDP 协议适用端口分别运行在同一台设备上的多个应用程序。由于大多数网络应用程序都在同一台机器上运行,计算机上必须能够确保目的地机器上的软件程序能从源地址机器处获得数据包,以及源计算机能收到正确的回复。这是通过使用 UDP 的“端口号”完成的。UDP协议使用IP层提供的服务把从应用层得到的数据从一台主机的某个应用程序传给网络上另一台主机上的某一个应用程序。UDP协议有如下的特点:1、UDP传送数据前并不与对方建立连接,即UDP是无连接的,在传输数据前,发送方和接收方相互交换信息使双方同步。2、UDP不对收到的数据进行排序,在UDP报文的首部中并没有关于数据顺序的信息(如TCP所采用的序号),而且报文不一定按顺序到达的,所以接收端无从排起。3、UDP对接收到的数据报不发送确认信号,发送端不知道数据是否被正确接收,也不会重发数据。4、UDP传送数据较TCP快速,系统开销也少。 UDP 适用于不需要 TCP 可靠机制的情形,比如,当高层协议或应用程序提供错误和流控制功能的时候。 UDP 是传输层协议,服务于很多知名应用层协议,包括网络文件系统(NFS)、简单网络管理协议(SNMP)、域名系统(DNS)以及简单文件传输系统(TFTP)。
      udp工作原理是怎样的?

      用UDP实现可靠传输

      如何用vb的winsocket解决udp文件传送丢包的问题 udp协议是1种无连接的协议,他和tcp协议比较有传输速度快,占用资源少的问题。但是由于udp协议本身没有自动找包的功能,因此经常会出现丢包的现象,会造成传送的文件丢包的现象因为时间匆忙和水平有限,本人在效率上没有作优化,只是简单的实现,请大家自己看源码吧注释:主要功能:把文件猜成4k大小的包 在包头+上包的长度 接受了1个包判断长度是否和接受的长度相符如果符合那么就继续发,如果出现丢包那么就从发希望大家有什么好的建议通知我,我会尽量完善的Option Explicit'=============================================='==============================='udp传文件'客户端'作者: 影子'================================'==============================================Dim FileNumber As Integer '用来存文件的句柄Dim LenFile As Long '文件的长度Private Sub Command2_Click()closefileEnd SubPrivate Sub Form_Load()Winsock0.LocalPort = 5698Winsock0.BindbeginfileEnd SubPrivate Sub Winsock0_DataArrival(ByVal bytesTotal As Long)Dim FileByte() As ByteWinsock0.GetData FileByte, vbArray + vbByte '接收类型为:字节数组Dim mendByte() As Byte, i As Long, j As LongDim temp As String, temp1 As String'获得包长j = UBound(FileByte)'合并包头For i = 0 To 7 Step 2temp = temp & Chr(FileByte(i))Next'比较长度看丢包没有If Val(temp) = j ThenReDim mendByte(j - 8)' 提出包头For i = 0 To j - 8mendByte(i) = FileByte(i + 7)Next' 写文件Put #FileNumber, , mendByte' 发送继续发送的请求frmmain.Winsock0.SendData "ok"Else'出现丢包,请求重发frmmain.Winsock0.SendData "no"End IfEnd SubPublic Sub beginfile()FileNumber = FreeFile '取得未使用的文件号Open "c:aaa.exe" For Binary As #FileNumber '打开文件End SubPublic Sub closefile() '关闭文件句柄Close #FileNumberEnd SubOption ExplicitDim GetFileNum As IntegerDim LenFile As LongDim Sendbaye() As Byte '发送的包'==============================='udp传文件'作者: 影子'服务器端'================================Private Sub Command1_Click()GetFileNum = FreeFile '取得未使用的文件号LenFile = FileLen("d:aa.rar") '获得需传送的文件的长度Open "d:aa.rar" For Binary As #GetFileNum '打开需传送的文件Command1.Enabled = False' 传送文件Call TCPSendFile(frmmain.Winsock0, GetFileNum, SplitFile)Text1.Text = NowEnd SubPrivate Sub Form_Load()frmmain.Winsock0.RemoteHost = "192.168.0.12" '服务器ipfrmmain.Winsock0.RemotePort = 5698End Sub'========================================================================='为了清晰,下面分别用两个子过程来完成计算这次还可以传多少个字节的数据和传送数据'==========================================================================Private Function SplitFile() As Long '拆包On Error Resume NextDim GetCount As Long'计算出这次可发送的字节数If LenFile >= 4000 ThenGetCount = 4000LenFile = LenFile - GetCountElseGetCount = LenFileLenFile = LenFile - GetCountEnd IfSplitFile = GetCountEnd FunctionPrivate Sub TCPSendFile(objWinSock As Winsock, FileNumber As Integer, SendLen As Long)Dim FileByte() As Byte, i As Long, j As LongDim temp As StringReDim Sendbaye(0)Dim tempa As String * 4ReDim FileByte(SendLen - 1)tempa = SendLen + 7Sendbaye = tempa ' 把长度负值给包头Get #FileNumber, , FileByte '读取文件ReDim Preserve Sendbaye(SendLen + 7) '把包头+到文件头For i = 0 To UBound(FileByte)Sendbaye(i + 7) = FileByte(i)Nextfrmmain.Winsock0.SendData SendbayeEnd SubPrivate Sub Winsock0_DataArrival(ByVal bytesTotal As Long)Dim str As Stringfrmmain.Winsock0.GetData strSelect Case strCase "ok"'成功继续发送If LenFile = 0 Then '发送完成MsgBox "成功"Exit SubEnd IfCall TCPSendFile(frmmain.Winsock0, GetFileNum, SplitFile)Case "no"'不成功重发上一个包frmmain.Winsock0.SendData SendbayeEnd SelectEnd Sub参考资料:http://www.baidu.com/s?wd=zyg0 udp
      既然你要可靠传输,为什么还要用UDP 换成TCP不就有保证了吗如果你自己写代码来保证,其实只是重复了一遍tcp的过程而已,tcp本身就是在不可靠的IP上实现可靠的数据传输而且tcp协议及其实现已经经过了长时间的实践检验 如果你是学习目的,就去找个tcp的源码看看就可以了
      你会写发送/接收UDP吧,关于可靠传输,不太容易找到现成的跟应用可以脱离开的代码给你。 不过思路都是一样。 发送UDP到对方,对方收到,发送一个UDP包,确认一下,然后你再发。
      bu z
      用UDP实现可靠传输

      应用层协议如何保证UDP传输协议的数据可靠性

      在网络通信质量较好的情况下,udp体现出高效率,这适合于传送少量报文的应用,其可靠性由应用程序来保证,如:接收信号后向源方返回一个回响,超时重发、数据检验等功能需应用程序来实现。虽然udp是一个不可靠的协议,但它是分发信息的一个理想协议。例如,在屏幕上报告股票市场、在屏幕上显示航空信息等等。udp也用在路由信息协议rip(routing information protocol)中修改路由表。在这些应用场合下,如果有一个消息丢失,在几秒之后另一个新的消息就会替换它。
      在传输的数据里加上验证的数据,比如crc32等
      数据包中加入校验码 增加数据交互,采用数据接收方应答数据发送方的机制保证数据传输的可靠性减小单个数据包的长度 等等
      传输时会在你的数据前加校验码的。
      应用层协议如何保证UDP传输协议的数据可靠性

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类