作者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
推 teddypig:我是設定每6毫秒送一個udp封包,我在client端只要有收到 07/16 23:39
→ teddypig:Multicast Socket傳進來的物件就+1,然後用System.out的 07/16 23:40
→ teddypig:方式直接印出來 才判斷說 收到的量跟server傳的量有沒有 07/16 23:42
→ teddypig:一致 07/16 23:42
→ kaeluno1:了解,之前我試著一次送10000個封包,結果畫面上顯示幾乎都 07/17 08:39
→ kaeluno1:是低於2000個,改用我描述的方式之後,就變成偶爾才會看到 07/17 08:40
→ kaeluno1:有封包漏,後來試了一下每秒送一個,那也是收到封包就印一 07/17 08:42
→ kaeluno1:次訊息,也是可以全部顯示. 07/17 08:43
推 teddypig:我看我要調降一下傳輸速度了 請問你的測試也是loopback嗎 07/17 10:51
→ kaeluno1:嗯!我是用loopback沒錯 07/17 11:08