作者kaeluno1 (峰)
看板Network
标题Re: [问题] 在本机端跑群播封包 会有遗失吗?
时间Thu Jul 16 20:08:37 2009
※ 引述《teddypig (每天不同的期待^^)》之铭言:
: 我的问题是这样的
: 我在写一个 Server-Client 架构的一个群播(Multicast)程式
: 我的Multicast Group address 设为 127.0.0.1
^^^^^^^^^
先合理的假设你描述的是用loopback这个介面来送multicast的东西.
: 我把网路线拔掉 让 server和client的传输不经过外部网路
: 都在同一台电脑上跑
: 正常来讲 我在server端 送了 3000个封包
: 在client端应该也要收到3000封包才对
: 但是我发现会有随机不定量的遗失,
: 譬如 第一次测遗失了100个 第二次就只遗失80个 会有不固定的遗失
: 请问这样子是正常的吗?
: 都在网卡上跑 还会有自己遗失的现象吗?
我想主要是因为multicast 当然的是使用udp来传输,那udp的特性本来就是不可靠的.
所以会漏封包.
那你可能对为什麽使用loopback介面,加上网路线也都移除了,但是仍然会漏封包有疑问.
假设你是收到一个封包就在画面上输出一个讯息,来得知收到了一个封包,而在你没设限
的状况下,一般来说送封包的速度是飞快的,但是输出到画面上的IO是缓慢的,所以就如同
大洪水冲进了小水管,有些资讯就因此遗漏了.这边不见得是真的有漏封包状况,那我们可
以把输出到画面上的讯息改输出到档案来协助确认一下:
ex. ./server > log.txt 2>&1
抑或是在server端收到3000个封包时,才打个讯息,这样都可以减少因为输出到画面而遗漏
的资讯.
最後还是要提一下,收送封包没有保证一次就成功的方式,所以才会有重试的机制,
只要不是漏的太夸张,应该是可以接受的.
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.230.72.28
1F:推 teddypig:我是设定每6毫秒送一个udp封包,我在client端只要有收到 07/16 23:39
2F:→ teddypig:Multicast Socket传进来的物件就+1,然後用System.out的 07/16 23:40
3F:→ teddypig:方式直接印出来 才判断说 收到的量跟server传的量有没有 07/16 23:42
4F:→ teddypig:一致 07/16 23:42
5F:→ kaeluno1:了解,之前我试着一次送10000个封包,结果画面上显示几乎都 07/17 08:39
6F:→ kaeluno1:是低於2000个,改用我描述的方式之後,就变成偶尔才会看到 07/17 08:40
7F:→ kaeluno1:有封包漏,後来试了一下每秒送一个,那也是收到封包就印一 07/17 08:42
8F:→ kaeluno1:次讯息,也是可以全部显示. 07/17 08:43
9F:推 teddypig:我看我要调降一下传输速度了 请问你的测试也是loopback吗 07/17 10:51
10F:→ kaeluno1:嗯!我是用loopback没错 07/17 11:08