halleyzhang 发表于 2010-4-23 15:22:33

127.0.0.1受网络状况影响吗

自己写的一个视频会议程序,我把服务器和客户端都放在一台电脑上,IP地址用127.0.0.1。现在问题是丢包比较严重,而且是时好时坏。我一直认为127.0.0.1是不走网卡的,所以应该是始终畅通的,现在看来莫非是我理解错了?难道127.0.0.1也受网络状况影响吗?请高手给予解答。

freeeyes 发表于 2010-4-24 22:59:35

这取决于你用的什么协议。UDP可能会丢包,TCP是基本不会丢包的。
如果是TCP丢包,只可能是程序代码有些逻辑没有处理。(硬件问题除外)
127.0.0.1是一个有效的IP地址,网卡并不会与因为你的IP是自己而特别的做出一些事情。

steven99ca 发表于 2010-4-27 02:04:29

1.
127.0.0.1是不受网络状况影响的。很多*NIX实现中,他只是一个loopback的内核模块。

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

3.
我基本可以肯定是你的应用程序有问题。试试找一下,有没有大的内存分配,常见病哈。

halleyzhang 发表于 2010-4-27 14:43:58

我用的是UDP,通过输出包的序号我发现,丢包总是一次连续丢五六个包,每个1K左右,其他情况不丢,在网上查了一下,估计可能和socket缓冲区太小有关。
我在客户端增大了Socket的缓冲区,情况有所好转,但偶尔还是丢包。服务器端用的是ACE,是不是ace 也使用了操作系统默认的缓冲区尺寸,我打算再改下服务端的缓冲区试试。
但是缓冲区设多大合适,也很让人迷惑。文档上说最大64K,因为是用16位表示这个缓冲区尺寸,现在应该没这限制了吧?拿我的程序来说,64K远远不够。我的程序响应的比较慢,大概1秒多,如果让100M的网卡充分利用起来,1秒就是100M啊,当然我用不了那么多,但我也希望能达到100K左右,所以我是不是应该把缓冲区设在200K?

halleyzhang 发表于 2010-4-27 14:49:41

3楼说的大的内存分配是什么意思,是不是说大的内存分配导致页面交换,阻塞了socket收发的线程?这是有可能的,因为虽然程序延迟很大(1秒多),但CPU占用并不高,时间应该就是消耗在IO上了吧。不全是自己写的程序,还没仔细研究

halleyzhang 发表于 2010-4-27 14:51:55

忘了说了,我用的是windows

wishel 发表于 2010-4-27 15:37:24

丢包的原因就是拥塞,也就是说发送方速度大于网络能力或接收方处理速度,就会丢包。
tcp有滑动窗口进行流量控制,又有重传机制,所以比较可靠。

增加缓冲大小可以缓解峰值的流量拥塞,但不能解决均值流量拥塞。
所以如果问题是均值流量拥塞,只能想办法加速处理或者减速发送,否则无论多大缓冲,总有满的时候。

halleyzhang 发表于 2010-4-27 17:22:43

奇怪的是,我增加了数据发送量,情况并没有变坏,反而变好了。原来出于调试目的,我每秒发1帧。现在我改成每秒10帧,丢包反而少了,而且因为总帧数多了,丢点也无所谓。我现在调程序用的是不联网的笔记本,出现这现象实在让人无法理解。

freeeyes 发表于 2010-4-28 10:26:32

看看你的代码有没有BLOCK的现象。

sugar 发表于 2010-4-28 11:25:47

认同wishel的看法
页: [1] 2
查看完整版本: 127.0.0.1受网络状况影响吗