请问用send函数一次发送多少数据比较合适?

Timesboy 2003-06-26 10:36:33
我一次发送10k的数据行不行啊?
...全文
387 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
flinming 2003-06-28
  • 打赏
  • 举报
回复
套接字每次最多发的是8k,如果你扔20k的数据,底成也是会把数据分开发送!
fengge8ylf 2003-06-28
  • 打赏
  • 举报
回复
在局域网上每次发送4K,广域网上每次发送1K为最好。


-----------------------------------
为了得到我应该得到的
为了找回我曾经失去的
蟑螂工作室 2003-06-28
  • 打赏
  • 举报
回复
gz
alanwang_ 2003-06-27
  • 打赏
  • 举报
回复
什么是2K?
internet上大部分的MTU应该是1500,但考虑到有可能会有比较小的MTU存在,1K左右是比较安全的。
wwww2 2003-06-27
  • 打赏
  • 举报
回复
我也觉得1K较合适。
Timesboy 2003-06-26
  • 打赏
  • 举报
回复
可是如果提交给tcp的数据如果过大,那么会造成ip对数据包进行分片,可能会因丢失数据包分片而导致整个数据重传,这在网络阻塞的情况下可不太好

---------------------------------------
to: zyoujie()
我认为按缓冲区大小发速度可以快点
alanwang_ 2003-06-26
  • 打赏
  • 举报
回复
只要不要太小就行了。
你把数据分割成一个个1k的数据包,底层不用分片,但你的应用层要分割数据,也要花时间的!差别不是很大。你可以试试
况且IP包数据分片和路由器也有很大的关系,应用程序本身是很难决定多大合适的
Timesboy 2003-06-26
  • 打赏
  • 举报
回复
to: zyoujie()


zyoujie 2003-06-26
  • 打赏
  • 举报
回复
我认为按缓冲区大小发速度可以快点
Timesboy 2003-06-26
  • 打赏
  • 举报
回复
谢谢,我说的就是发送时的数据包大小
nicolas2001 2003-06-26
  • 打赏
  • 举报
回复
这个好象是要看看协议类型吧?
<<tcp/ip协议 第一卷:协议>>上的建议是最好不要超过协议的MTU
关键是要保证数据不要被分割,因为数据报的分割是很麻烦的事情,有很多额外的开销!

也许你说的是缓冲区的选区?
这个么,我记得曾经在论坛中见到一个帖子,专门讲了缓冲区大小的优缺点;
好像是8K为最好!
或许我记得不对,如果有误望大家指正!!!
Timesboy 2003-06-26
  • 打赏
  • 举报
回复
我看到一些资料说不要超过1500字节的
joinrry 2003-06-26
  • 打赏
  • 举报
回复
我记得是2K
joinrry 2003-06-26
  • 打赏
  • 举报
回复
study
alanwang_ 2003-06-26
  • 打赏
  • 举报
回复
单从协议上看,TCP和UDP数据包发送时,并不关心MTU,如果在送信路径中通不过的话,会在该路由器上再次分片!
但不知道socket在分片上是怎样做的,是否取到了该链路上的最小MTU之后,按照该MTU值进行分片再发送????如果并没有取到整个链路上的MTU,那它是按多大的大小进行分片的?因为这将会影响到发送的效率。
如果系统分片分不好,还不如自己设置TCP_NODELAY之后,1K1K的发送呢 ---- 好像internet上的MTU大小都差不多,如果是按1k分片的话应该没问题吧!

望高手们给于指点
alanwang_ 2003-06-26
  • 打赏
  • 举报
回复
to Timesboy(时代牛仔)
参考TCP/IP详解卷1:每个IP包里都有TCP头,超时重传时只传超时的IP包,也就是说超时重传与系统的发送缓冲区无关!
这样的话,我觉得问题好像应该归结于自己拆分数据包和由系统底层分片哪个效率高的问题!即使不考虑调用函数的开销,也应该完全由系统来进行分片处理,因为网络的情况很复杂,包括MTU之类的参数应用层很难得到或者用不着知道。所以我觉得send数据越大越好!

但考虑到程序的可控性,应尽量减少阻塞socket的send发生阻塞(正在阻塞的send比较耗CPU,可能是不停检查发送缓冲的缘故)或非阻塞socket的send返回失败的可能性,send数据应该越接近发送缓冲越好!而windows系统默认的发送缓冲大小为8k,所以如果没有特殊设定的话,发送接近8k的数据可能效率是最好的!
当然,如果要发送大量数据(比如文件传输),可以适当调大发送缓冲,这样send大数据块效率也比较高了。
------------------------------------------------------------------------
以上是我的认为,不妥之处请指出,谢谢
曾经的猎狐 2003-06-26
  • 打赏
  • 举报
回复
8k
Timesboy 2003-06-26
  • 打赏
  • 举报
回复
to alanwang_(alan)
哦,我不是说每次send的时候数据包的大小为MTU时最快,因为传给send的数据都是放在发送缓冲的吧,应用程序好像就不应该再管了,由应用层传数据给tcp层时,应该视发送缓冲中数据多少而言吧。
当ip层收到要发送的数据包时,它可以查询出口的mtu,如果需要则进行分片。
至于udp的路径mtu发现,我不是很清楚,还要请教一下.
jiadrun 2003-06-26
  • 打赏
  • 举报
回复
许多书籍上认为4K为最佳,我也常用的
alanwang_ 2003-06-26
  • 打赏
  • 举报
回复
to Timesboy(时代牛仔)
你明白了,我糊涂了!你的意思是说每次send数据包的大小为MTU时发送数度最快喽?!因为这样底层是不用分片的!

又,udp好像也能知道MTU吧!要不然的话,如果需要通过一个MTU比较小的网络时,岂不是每次都失败了!不懂
加载更多回复(8)

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧