找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 11779|回复: 12

127.0.0.1受网络状况影响吗

[复制链接]
发表于 2010-4-23 15:22:33 | 显示全部楼层 |阅读模式
自己写的一个视频会议程序,我把服务器和客户端都放在一台电脑上,IP地址用127.0.0.1。现在问题是丢包比较严重,而且是时好时坏。我一直认为127.0.0.1是不走网卡的,所以应该是始终畅通的,现在看来莫非是我理解错了?难道127.0.0.1也受网络状况影响吗?请高手给予解答。
发表于 2010-4-24 22:59:35 | 显示全部楼层
这取决于你用的什么协议。UDP可能会丢包,TCP是基本不会丢包的。
如果是TCP丢包,只可能是程序代码有些逻辑没有处理。(硬件问题除外)
127.0.0.1是一个有效的IP地址,网卡并不会与因为你的IP是自己而特别的做出一些事情。
发表于 2010-4-27 02:04:29 | 显示全部楼层
1.
127.0.0.1是不受网络状况影响的。很多*NIX实现中,他只是一个loopback的内核模块。

2.
UDP和TCP都会有丢包问题,TCP丢包是通过协议本身重发机制来保证完整性,UDP就必须要通过上层协议来实现。

3.
我基本可以肯定是你的应用程序有问题。试试找一下,有没有大的内存分配,常见病哈。
 楼主| 发表于 2010-4-27 14:43:58 | 显示全部楼层
我用的是UDP,通过输出包的序号我发现,丢包总是一次连续丢五六个包,每个1K左右,其他情况不丢,在网上查了一下,估计可能和socket缓冲区太小有关。
我在客户端增大了Socket的缓冲区,情况有所好转,但偶尔还是丢包。服务器端用的是ACE,是不是ace 也使用了操作系统默认的缓冲区尺寸,我打算再改下服务端的缓冲区试试。
但是缓冲区设多大合适,也很让人迷惑。文档上说最大64K,因为是用16位表示这个缓冲区尺寸,现在应该没这限制了吧?拿我的程序来说,64K远远不够。我的程序响应的比较慢,大概1秒多,如果让100M的网卡充分利用起来,1秒就是100M啊,当然我用不了那么多,但我也希望能达到100K左右,所以我是不是应该把缓冲区设在200K?
 楼主| 发表于 2010-4-27 14:49:41 | 显示全部楼层
3楼说的大的内存分配是什么意思,是不是说大的内存分配导致页面交换,阻塞了socket收发的线程?这是有可能的,因为虽然程序延迟很大(1秒多),但CPU占用并不高,时间应该就是消耗在IO上了吧。不全是自己写的程序,还没仔细研究
 楼主| 发表于 2010-4-27 14:51:55 | 显示全部楼层
忘了说了,我用的是windows
发表于 2010-4-27 15:37:24 | 显示全部楼层
丢包的原因就是拥塞,也就是说发送方速度大于网络能力或接收方处理速度,就会丢包。
tcp有滑动窗口进行流量控制,又有重传机制,所以比较可靠。

增加缓冲大小可以缓解峰值的流量拥塞,但不能解决均值流量拥塞。
所以如果问题是均值流量拥塞,只能想办法加速处理或者减速发送,否则无论多大缓冲,总有满的时候。
 楼主| 发表于 2010-4-27 17:22:43 | 显示全部楼层
奇怪的是,我增加了数据发送量,情况并没有变坏,反而变好了。原来出于调试目的,我每秒发1帧。现在我改成每秒10帧,丢包反而少了,而且因为总帧数多了,丢点也无所谓。我现在调程序用的是不联网的笔记本,出现这现象实在让人无法理解。
发表于 2010-4-28 10:26:32 | 显示全部楼层
看看你的代码有没有BLOCK的现象。
发表于 2010-4-28 11:25:47 | 显示全部楼层
认同wishel的看法
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 03:11 , Processed in 0.022592 second(s), 6 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表