社区
网络编程
帖子详情
关于用UDP协议 每次发送很大的数据包的问题
AntonlioX
2005-05-20 09:40:58
我现在在做视频传输。我想问每次发送的包很大 比如有100k(一次发送一视频帧)的大小。是不是可以这样做的? 因为我猜测网络协议的底层会自动进行分包, 在接收端再重新组包,我的说法是否正确啊。
此外,我还有一个问题: 在用udp发送比如视频的数据的时候 是一次发送很大的包好,还是分多次,小包发送啊?
...全文
602
11
打赏
收藏
关于用UDP协议 每次发送很大的数据包的问题
我现在在做视频传输。我想问每次发送的包很大 比如有100k(一次发送一视频帧)的大小。是不是可以这样做的? 因为我猜测网络协议的底层会自动进行分包, 在接收端再重新组包,我的说法是否正确啊。 此外,我还有一个问题: 在用udp发送比如视频的数据的时候 是一次发送很大的包好,还是分多次,小包发送啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
压缩加分块
网络
协议
之
UDP
数据包
参照上篇一起阅读更佳:[网络
协议
之TCP/IP
协议
包](https://blog.csdn.net/qq_31930499/article/details/109261186) 文章目录
UDP
为什么不粘包
UDP
分片
UDP
发送
最大
数据包
大小
UDP
为什么不粘包 为什么TCP有粘包,
UDP
没有粘包? TCP是面向流连接,数据的“粘包”
问题
:客户端
发送
的多个
数据包
使用了优化算法(Nagle算法),将多次间隔较小、数据量小的
数据包
,合并成一个大的
数据包
发送
(把
发送
端的缓冲区填满一次性
发送
);接收端底层会把TCP
UDP
数据包
大小
问题
在进行
UDP
编程的时候,我们最容易想到的
问题
就是,一次
发送
多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,这里仅对像ICQ一类的
发送
聊天消息的情况作分析,对于其他情况,或许也能得到一点帮助: 首先,我们知道,TCP/IP通常被认为是一个四层
协议
系统,包括链路层,网络层,传输层,应用层.
UDP
属于运输层,下面我们由下至上一步一步来
TCP和
UDP
协议
发送
数据包
的大小
概要描述 在进行
UDP
编程的时候,我们最容易想到的
问题
就是,一次
发送
多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,这里仅对像ICQ一类的
发送
聊天消息的情况作分析,对于其他情况,或许也能得到一点帮助: 首先,我们知道,TCP/IP通常被认为是一个四层
协议
系统,包括链路层,网络层,传输层,应用层.
UDP
属于运输层,下面我们由下至上一步一步来看
TCP 和
UDP
协议
发送
数据包
的大小
MTU最大传输单元,这个最大传输单元实际上和链路层
协议
有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64bytes最大不能超过1518bytes,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。 由于以太网EthernetII最大的数据帧是15
python模拟TCP与
UDP
发送
数据包
python模拟TCP与
UDP
发送
数据包
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章