可靠的UDP连接 & MTU MSS

这个网页里面写了:

http://blog.csdn.net/plusboy/article/details/1523308

其可靠性必须由上层应用实现。一般都会采用消息重传来实现其可靠性,采用消息重传的时候有两种方式,一种是发送者发起,另一种是接收者发起。

前一种接收者发的是ACK。发送者收到ACK,就不重传。但是可能ACK内爆。

第二种接收者发的是NACK。发送者收到NACK,就重传。但是可能NACK内爆。另外需要保留发出去的数据,但是一般可以用超时机制,把以前的数据丢弃。

另外,看到云风的这篇文章。

http://blog.codingnow.com/2016/03/reliable_udp.html

我的思考结论就是:在 UDP 协议之上,实现一个带超时的请求回应机制,让业务层负责超时重发,有可能取得比 TCP 通讯更好的效果。但其前提是:单个请求或回应的包不应该过大,最好不要超过一个 MTU ,在互联网上大约是 500 多字节。MSS加报头就等于MTU。 MSL是2MSL = TIME_WAIT时间。

时间: 2024-08-11 03:36:26

可靠的UDP连接 & MTU MSS的相关文章

MTU & MSS 详解记录(转)

          先学习理解一下帧的封装格式: 需要注意的是,区别两种帧封装格式:802标准帧和以太网帧 1,在802标准定义的帧格式中,长度字段是指它后续数据的字节长度,但不包括C R C检验码.RFC 1042(IEEE 802) 2,RFC 894(以太网) 所以,以太网帧报头为目的地址6+源地址6+类型2+CRC 4=18bytes 而802帧没有CRC,所以为14bytes.Sniffer采用的是802帧为14bytes 转载文章: MTU: Maxitum Transmission

MTU&MSS

MTU是Maximum Transmission Unit的缩写,意为最大传输单元,通俗的理解就是在网络上传送的最大数据包,单位是字节. 以太网对数据帧的长度都有一个限制,其最大值为1500,这个特性被称作MTU,不同类型的网络大多数都有一个上限.如果IP层有一个IP包要传,而且数据的长度比链路层上的MTU值还要大,那么就需要对这个数据包进行分片处理,而且要求被分片的每个数据包都要等于或小于这个MTU值,一般是最后一个数据包小于这个值.例如,一个大小为5000字节的数据包在穿越网络时,如果遇到一

NetworkComms V3 之支持TCP连接和UDP连接

NetworkComms V3 无缝的支持TCP连接和UDP连接. 您可以很容易的创建这两种连接 //创建一个连接信息对象 ConnectionInfo connInfo = new ConnectionInfo("192.168.0.1", 10000); //创建一个TCP连接 Connection newTCPConn = TCPConnection.GetConnection(connInfo); //创建一个UDP连接 Connection newUDPConn = UDPC

c#网络通信框架networkcomms内核解析之十一 TCP连接与UDP连接

连接是通信的核心 客户端一般只会有一个连接 服务器端会维护成千上万的连接 在服务器端连接的维护工作是由NetworkComms静态类来完成的,当有新的客户端请求,服务器上会创建相应的连接,并把连接注册到NetworkComms静态类中.当连接断开后,NetworkComms通信框架会自动把相应连接的引用从NetworkComms静态类中删除. 连接的类图: 在V3以上版本中,数据监听部分已从Connnection类中提取出去成为一个单独的类: TCPConnectionListener   ,使

用python做UDP连接

写个客户端 #!/usr/bin/env python from socket import * HOST = '10.2.167.115' PORT = 20001 BUFSIZE = 1024 ADDR = (HOST, PORT) udpClientSock = socket(AF_INET, SOCK_DGRAM) while True: data = raw_input('Enter the message you want to send >') if not data: break

运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接

运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接 最近在项目中可能要用到socket相关的东西来发送消息,所以初步研究了下socket的TCP和UDP实现方式,并且结合java1.5的concurrent.ExecutorService类来实现多线程. 具体实现方式见代码: 一.TCP方式: 1.服务端实现方式: TCP的服务端实现方式主要用到ServerSocket类,接收等待客户端连接的方法是accept(); 代码如下:类Sock

python网络编程实现TCP和UDP连接

实现TCP #!/usr/bin/env python3 # -*- coding: utf-8 -*- import socket # 创建一个socket: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 建立连接: s.connect(('www.sina.com.cn', 80)) # 发送数据: s.send(b'GET / HTTP/1.1\r\nHost: www.sina.com.cn\r\nConnection:

MTU MSS PDU SDU

首先要说两个概念: PDU:协议数据单元,计算机网络各层对等实体间交换的单位叫做PDU,不同层的PDU名称不同 层 名称 应用层 数据 传输层 段 segment 网络层 数据包 package 链路层 帧 frame 物理层 比特 bit SDU:服务数据单元,它是指PDU的实际载荷(payload) PDU和SDU有什么关系呢? PDU和SDU什么关系呢?在每一层都有PDU和SDU,在本层中SDU加上额外协议信息构成本层的PDU,行话是同一层内的SDU是本层PDU的静荷载(payload),

(转)MTU&MSS

MTU是Maximum Transmission Unit的缩写,意为最大传输单元,通俗的理解就是在网络上传送的最大数据包,单位是字节. 以太网对数据帧的长度都有一个限制,其最大值为1500,这个特性被称作MTU,不同类型的网络大多数都有一个上限.如果IP层有一个IP包要传,而且数据的长度比链路层上的MTU值还要大,那么就需要对这个数据包进行分片处理,而且要求被分片的每个数据包都要等于或小于这个MTU值,一般是最后一个数据包小于这个值.例如,一个大小为5000字节的数据包在穿越网络时,如果遇到一