社区
网络编程
帖子详情
关于用UDP协议 每次发送很大的数据包的问题
AntonlioX
2005-05-20 09:40:58
我现在在做视频传输。我想问每次发送的包很大 比如有100k(一次发送一视频帧)的大小。是不是可以这样做的? 因为我猜测网络协议的底层会自动进行分包, 在接收端再重新组包,我的说法是否正确啊。
此外,我还有一个问题: 在用udp发送比如视频的数据的时候 是一次发送很大的包好,还是分多次,小包发送啊?
...全文
650
11
打赏
收藏
关于用UDP协议 每次发送很大的数据包的问题
我现在在做视频传输。我想问每次发送的包很大 比如有100k(一次发送一视频帧)的大小。是不是可以这样做的? 因为我猜测网络协议的底层会自动进行分包, 在接收端再重新组包,我的说法是否正确啊。 此外,我还有一个问题: 在用udp发送比如视频的数据的时候 是一次发送很大的包好,还是分多次,小包发送啊?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
nuaa3
2005-05-21
打赏
举报
回复
我把代码发给你了
xiao_xiao_zi
2005-05-20
打赏
举报
回复
分成小包比较好
这样丢包的话代价也比较小
AntonlioX
2005-05-20
打赏
举报
回复
我刚查的一点资料 ,提到了分片的问题
===================
3、 IP分片
任何IP层接收到一份要发送的IP数据报时,它要判断向本地哪个接口发送数据,并查询该接口的MTU。IP把MTU与数据报的长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发送在中间路由器上。IP数据报分片后,只有到达目的主机后才进行重装。
IP首部与分片有关的字段:
(1)对于每份IP数据报来说,都有一个标识字段,该值在分片时被复制到每个片中。
(2)标志字段用其中一个bit表示“更多的片”,除最后一片外,其他每个分片都要设置为1。
(3)片偏移字段指的是该片偏移原始数据报开始处的位置。
(4)数据报被分片后,每个片的总长度要改为该片的长度值。
(5)标志字段中有一个bit表示“不分片”,如果该位1,IP将不对数据报进行分片。
IP报即使丢失一片数据报也要重传整个数据报。为什么呢?因为IP层没有超时重传的机制,必须由更高层负责超时重传。
AntonlioX
2005-05-20
打赏
举报
回复
但是udp 效率高啊。 视频通讯中基本都是用的udp
hdqlj
2005-05-20
打赏
举报
回复
为什么不用tcp呢
AntonlioX
2005-05-20
打赏
举报
回复
但是我看了 vckbase的一个例子 VideoNet
它里面就是 发送很大的包来传输视频的:
//Compress the data...to h263
......
CompressFrame(&cparams, &bits);
// Transmit the compressed frame
.......
dvideo.SendVideoData(cdata,count); //dvideo 是个CSocket类的派生类的对象,用来发送vidoe
===========
其中cdata 是里面定义的全局变量
unsigned char cdata[10000];
在接收的部分
全局变量 static unsigned char data[2000],vdata[30000],adata[5000];
在接收中
unsigned int DSocket::vlength=30000;
.........
ReceiveFrom(vdata,vlength,address,port);
.........
--------------------
它的代码中就是使用的发送的远远超过2k的数据大小 和你们上面说的有点矛盾啊?
yonk
2005-05-20
打赏
举报
回复
UDP每次发送的包不能超过最大包大小,否则你会收不完整。关于此点详细解释请见msdn。另外如果本地arp缓存中没有对方地址时,包比较大会产生多次arp交互。或许这也是需要注意的地方。
younggle
2005-05-20
打赏
举报
回复
视频传输,别忘记编码压缩啊。如果确实不能压缩,那建议你分多次小包发送,每个小包的长度不要超过2K(2048)个字节。
AntonlioX
2005-05-20
打赏
举报
回复
大家来讨论一下啊
zhjie374
2005-05-20
打赏
举报
回复
分开发吧....
nuaawenlin
2005-05-20
打赏
举报
回复
压缩加分块
python粘包
问题
及socket套接字编程详解
主要介绍了python粘包
问题
及socket套接字编程详解,之所以出现粘包,是因为两个数据非常小,然后间隔时间又短,或数据太大,一次取不完,下一次还会取这个大数据,需要的朋友可以参考下
02 网络编程-
UDP
用户
数据包
协议
UDP
全称“用户数据报
协议
”(User Datagram Protocol),即报文。是面向无连接的
协议
。是不可靠
协议
,不可靠指的是无法可靠的得知对方是否收到数据。无连接:通信双方不需要事先连接无确认:收到数据不给对方发回执确认不保证有序、丢失不重发采用帧同步的数据报通信方式(即通信双方
每次
的收发数据量相等)
UDP
类似于寄信,
UDP
的特点是无需连接、无需确认、无需缓冲区、无需分包序列号。因此
UDP
的效率比较高。
UDP
的使用场景:广播、组播模式。
网络
协议
之
UDP
数据包
参照上篇一起阅读更佳:[网络
协议
之TCP/IP
协议
包](https://blog.csdn.net/qq_31930499/article/details/109261186) 文章目录
UDP
为什么不粘包
UDP
分片
UDP
发送
最大
数据包
大小
UDP
为什么不粘包 为什么TCP有粘包,
UDP
没有粘包? TCP是面向流连接,数据的“粘包”
问题
:客户端
发送
的多个
数据包
使用了优化算法(Nagle算法),将多次间隔较小、数据量小的
数据包
,合并成一个大的
数据包
发送
(把
发送
端的缓冲区填满一次性
发送
);接收端底层会把TCP
UDP
数据包
最大长度与收发包
关于
UDP
面向报文的传输方式决定了
UDP
的数据
发送
方式是一份一份的,也就是应用层交给
UDP
多长的报文,
UDP
就照样
发送
,即一次
发送
一个报文。那么
UDP
的报文大小由哪些影响因素呢?
UDP
数据包
的理论长度是多少,合适的
UDP
数据包
应该是多少呢?(1)
UDP
报文大小的影响因素,主要有以下3个[1]
UDP
协议
本身,
UDP
协议
中有16位的
UDP
报文长度,那么
UDP
报文长度不能超过2^16=65536.[2] 以太网(Ethernet)数据帧的长度,数据链路层的MTU(最大传输单元)。
TCP和
UDP
协议
发送
数据包
的大小
概要描述 在进行
UDP
编程的时候,我们最容易想到的
问题
就是,一次
发送
多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,这里仅对像ICQ一类的
发送
聊天消息的情况作分析,对于其他情况,或许也能得到一点帮助: 首先,我们知道,TCP/IP通常被认为是一个四层
协议
系统,包括链路层,网络层,传输层,应用层.
UDP
属于运输层,下面我们由下至上一步一步来看
网络编程
18,363
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章