網路科技 dada on 三月 24, 2009

畸形的台灣網路環境 (IP Peering)

今天的一則新聞「拒付互連費》台灣大 槓上中華電

好玩的是,不專業的聯合報記者把 1M (Mb/s) 的頻寬單位,自作主張翻譯成 "公尺"

udn-joke

這篇新聞爭論的其實是 "peering" (網路互連),無關 "transit" (借道連外),同時也與最後一哩 (last mile) 的電路壟斷無關。所以很多網友說到台固想用中華電信的國際頻寬不付錢,或者是批評台固沒有自建電路,這都跟這條新聞完全無關

雖然已經不是在 ISP 業界了,不過看到這則新聞還是有深深的感慨,固然 ISP 對於中華電信的反彈有其利益考量,不過真正該思考的是:中華電信造成的不公平競爭,使得網路內容提供業者 (ICP) 面臨一個被壟斷而無法公平競爭的網路環境。

Peering (網路互連) 指的是兩個 ISP (網際網路供應商) 相互連結、互通有無的情況,例如 ISP-A 的用戶可以經由 peering 來直接存取放置在 ISP-B 內的網站,反之亦然

如果兩個 ISP 之間沒有 peering 的話,就必須透過 transit 經由其他 ISP 轉接過去,不然就是透過 網路交換中心(IX) 相互連接。

以香港為例,香港網路交換中心 (HKIX) 就扮演了一個很重要的角色,從下面這張圖可以看到,HKIX 的平均流量高達 40-50 Gb/s
hkix

這是日本 JPIX 的流量圖,平均流量高達 75Gb/s 以上:

然後我們來看看台灣的情況,有中華電信在背後當黑手的 台灣網際網路交換中心 (TWIX) 的流量是這樣的:
twix

你沒看錯,TWIX 的流量平均只有 3Gb/s

TWIX 的線路連接情況可以從 TWNIC 的「連線頻寬查詢系統」查詢,簡單的說,TWIX 與各大 ISP 都有連接,但是擁有最多內容的中華電信卻只有 1Gb 的小水管連接到 TWIX。由於需求遠大於供給,逼迫各 ISP 必須直接拉線跟中華電信購買頻寬,以滿足自己的用戶所需

就國際上的慣例而言,兩家 ISP 互連 (peering),會由淨流量輸入者付錢給淨流量輸出者,所以擁有比較多網站內容的 ISP 就有可能賺取這樣的 peering 費用

花錢買 peering 或許是合理的,尤其中華電信擁有國內最多的內容(因為用戶多),但重點在於要花多少錢,中華電信的定價是否合理呢?

實際上來看,中華電信是三頭賺的:

網路內容業者(ICP)為了讓自己的網站用戶能有比較好的網路體驗,怕輸在起跑點上,所以必須花大錢租用中華電信的機房,把自己的網站 colocation 在中華電信

其他的 ISP 業者為了讓自己的寬頻用戶可以很順暢連結放在中華電信的網站,所以也要花大錢跟中華電信買頻寬

更重要的是,HINET寬頻用戶付了不算便宜的上網費用,卻造就了中華電信這樣的寬頻龍頭怪獸,並讓中華電信拿著當武器去壓迫其他 ICP 及 ISP...

依照 peering 的國際慣例計費方式,ISP 業者如果能夠爭取到比較好的內容業者,或許可以減少一些與中華電信 peering 費用,所以 ISP 業者就會盡力去以優惠價格爭取 ICP 內容業者進駐,ICP 得到扶持後,才有能力提供更多的服務給寬頻用戶,這可以使得寬頻用戶、ISP、ICP 三者間產生正向循環,這樣才能扶植網路內容產業的蓬勃發展:

isp1

但台灣因為中華電信的壟斷,導致這樣的循環無法成立,甚至變成惡性循環:

isp2

所以不但寬頻費用居高不下,網路內容業者(ICP)也無法藉由正向循環得到扶持

國內最成功的 peering 輸出國應該是遊戲橘子,遊戲橘子有自己的 AS Number (自治系統號碼),藉由「天堂」這一款超人氣的線上遊戲,使得國內的一些 ISP 都不敢怠慢自己的寬頻用戶,必須乖乖掏錢出來跟遊戲橘子的代理商~和信超媒體買頻寬 (和信超媒體曾經投資過遊戲橘子),不過,中華電信當然還是不會買的,因為他挾兩百萬的寬頻用戶自重

但很可惜的,國內似乎看不到其他內容業者能夠很成功的如法炮製

這正所謂的「養、套、殺」,網路內容業者(ICP),如果一開始就屈服於中華電信的壟斷壓力,怕自己的用戶擁有不好的寬頻體驗,所以把自己的網站放在中華電信。等到網站越長越大,網路內容業者卻反而更擔心如果隨意搬移到其他 ISP 會導致用戶因為無法順利連結而大量流失用戶,所以就被中華電信套住了,之後當然就任意被獅子大開口,完全是賣方市場。想要多租個機櫃都可能跟你說空間不夠,要你配合搬去偏遠的機房。反而是其他 ISP 的機房空在那邊養蚊子

ISP 究竟能不能靠著爭取更多優質 ICP 業者的進駐而降低付給中華電信的 peering 費用呢? 在這個壟斷的環境中,事實上是很難的

過去和信超媒體(GIGA)提供給寬頻用戶的「免費個人網頁空間 (PWP)」曾經擁有非常大的流量輸出,這使得和信超媒體與中華電信 peering 的輸出與輸入不相上下,但中華電信認為這些都是垃圾流量而拒絕提供免費的 peering

曾有一次,GIGA 在國外租了個空間放 PWP 的 Proxy,然後把中華電信用戶連結 PWP 的需求經由國外 Proxy 餵回給中華電信,這一次據說就把中華電信的國際頻寬塞爆了。這個例子更顯示出中華電信對於 peering 定價的不合理性,把 proxy 放在國外餵回給中華電信,都比在國內 peering 餵給中華電信便宜

一個壟斷的網路環境會使得很多情況變得不合理,ICP 無法得到合理的回饋,ISP 也因為無力負擔 peering 費用而必須向 ICP 收取比較高的費用,造成惡性循環

無名小站在2006年曾經想如法炮製遊戲橘子的成功經驗 (後來因為被 Yahoo 買下而作罷),無名小站那時想藉由自己用戶的壓力去逼迫中華電信屈服。但事實證明在中華電信屈服前,無名小站自己必然也會面對更大、來自原有用戶反彈的壓力!

要求中華電信無條件地提供免費 peering 可能是緣木求魚,或許也會有更多爭議,但還是期待中華電信能以其電信龍頭的高度,設法讓國內 ISP 及 ICP 的產業鏈更加健全,而不是只想要吸乾所有人的血。

遊戲橘子的成功有其時空背景,我不認為未來還會有其他家內容提供業者有這個膽識與中華電信對抗,這次 ISP 業者的反彈事實上也不是第一次了。無論如何,想要反轉這個畸形、被壟斷的網路環境,就只能期待 NCC 能有一點作為了。否則的話,台灣是永遠不可能養出像 Youtube 這樣的網站的!

相關討論:

相關新聞:

(本文共被觀看 18,219 次)

作業系統 &軟體 dada on 三月 02, 2009

我愛用的免費軟體 (my favorite freeware)

最近已經快滿三年的 Thinkpad X60 跑得越來越慢,又常常當機,所以找個比較有空的時間就把它重灌 Windows XP Professional,順便作一下筆記

灌好作業系統後,可以先把 ThinkVantage System Update 裝起來,這樣 Thinkpad 相關的驅動程式及軟體都可以直接從這邊更新回來。對了,記得不要裝 Client Security Solution 因為裝了真的是自找麻煩! 另外 System Migration Assistant 和 Rescue and Recovery 我也沒裝..

接下來就是安裝應用程式了,儘可能都以免費的軟體為主:

PicPick 是一個很強大的截圖軟體
XnView 看圖及簡單的圖形處理
Paint.NET 是一個短小精幹的繪圖軟體
FileZilla 支援 FTP 及 SFTP 的檔案傳輸軟體
7-Zip 檔案解壓縮工具
K-Lite Codec Pack 播放各種影音檔案
Adobe Reader 閱讀 PDF 文件

Alcohol 52% Free Edition 虛擬光碟 (裝免費版的即可, 可選擇不裝贊助軟體)
Avira AntiVir 掃毒軟體
Unlocker 強制解鎖
RocketDock 像蘋果的工具列
新酷音輸入法 (最新版: 0.3.4.8)

其他網路工具包含:

Google 提供的工具:

另外微軟的 PowerToys for Windows XP 也有幾個不錯的小工具:

  • CmdHere
  • PowerToy Calculator
  • Tweak UI

還有之前微軟有提供一個 Microsoft Chinese Date and Time,是一個我很愛用的農民曆及世界時間工具,但現在微軟似乎把連結拿掉了,不過網路上搜尋一下就找到了

(本文共被觀看 7,618 次)

網路科技 dada on 二月 20, 2009

AdSense for Domains (在未使用的網址上放廣告)

Google 推出了 AdSense for Domains (AdSense 網域廣告)

引用 Google 對此產品的說明:

AdSense 網域廣告可讓發佈商在未使用的網域上顯示相關內容,以協助使用者取得所需的資訊。

使用者通常會在網址列中輸入網域,或按下無效連結而連上沒有內容的網站。AdSense 網域廣告可提供連結、搜尋結果、廣告和其他內容,而不是「建置中」網頁或 404 錯誤。我們的做法是使用語意技術,根據網域名稱來指定目標。當使用者與您網站上的廣告互動時,您便可以賺取收益。

我猜這個產品推出後,獲利最大的應該是各家 registrar (網址註冊商) 吧 :roll:

可能有很多人會去註冊一些網址來專門放 AdSense for Domains 廣告賺錢,畢竟網址年費還算低,好一點的網址光放 AdSense for Domains 廣告搞不好就可以回本了,而且不用自己找機器放網頁,只要把網址 DNS 指過去 Google 的伺服器即可

根據 Google 的說明,DNS 只要設定好 CNAME 以及四筆 A 記錄即可,Google 也提供了各大網域註冊商(如 GoDaddy)的詳細設定方式

www   CNAME   pub-xxxxxxxxx.afd.ghs.google.com.

@   A   216.239.32.21
@   A   216.239.34.21
@   A   216.239.36.21
@   A   216.239.38.21

當然你也可以設定更多個 CNAME 就是了...

同時,對於網域廣告你還可以設定一些關鍵字,可以更精確選擇你想要顯示的廣告

另外「AdSense 網域廣告計劃政策」裡面有提到

Google AdSense 網域廣告非常重視商標所有人的權利。我們希望所有廣告客戶、使用者和商標所有人都瞭解 Google 審查 AdSense 網域廣告聯播網中商標侵權案件的程序。如果 Google 發現任何包含商標 (或類似拼字) 的網域名稱,便會將該網域從 AdSense 網域廣告聯播網中移除

所以如果想要用與知名網站類似的網域名稱來使用 AdSense for Domains,也許會被移除吧

(本文共被觀看 8,387 次)

消費資訊 dada on 一月 03, 2009

各種信用卡加油優惠整理 (2010/01)

現在各種加油優惠琳瑯滿目,有些信用卡加油優惠只限每週的某一天,
萬一油箱快到底了,還是要找其他替代方案,口袋裡最好放著兩張以上信用卡比較保險

以下以每一天的優惠分列,這樣可以很快找出今天適用的優惠 (只列出汽油的優惠):

  • 每一天:
    • 國泰世華信用卡/金融卡 @ 全國/台亞/鯨世界: 每公升降 1.9 元 (~2010/03/31)
    • 萬泰銀行御璽卡 @ 全國加油站: 每公升降 1.9 元 (~2010/03/31)
    • 中國信託信用卡/金融卡(>201) @ 台灣優力: 每公升降 1.8 元 (~2010/03/31)
    • 滙豐/兆豐/聯邦/玉山/元大信用卡 @ 全國/台亞/鯨世界: 每公升降 1.8 元 (~2010/03/31)
    • 永豐信用卡(>201) @ 台灣優力: 每公升降 1.8 元 (~2010/03/31)
    • 台新/日盛/信用卡 @ 全國/台亞/鯨世界: 每公升降 1.7 元 (~2010/03/31)
    • 各銀行 VISA金融卡 @ 全國加油站: 每公升降 1.7 元 (~2010/03/31)
    • 美國運通卡 @ 全國加油站: 每公升降 2 元 (~2009/12/31)
    • 匯豐銀行信用卡 @ 全國加油站: 每公升降 1.8 元 (~2009/12/31)
    • 玉山銀行山隆卡 @ 山隆加油站: 每公升降 1.8 元 (~2009/12/31)
    • 花旗信用卡(10公升) @ 台亞/鯨世界: 每公升降 1.8 元 (~2009/12/31)
    • VISA金融卡、信用卡 @ 中油自助加油: 每公升降 0.8

    • 大眾銀行 大眾卡 @ 任何加油站: 1%現金回饋 [下期折抵] (~2009/12/31)
    • 花旗 透明卡 @ 任何加油站: 1%現金回饋 [累計200元後折抵]
    • RBS 樂活白金卡 @ 任何加油站: 1%以上現金回饋 [累計200元後折抵]

  • 每週二、四、六:
    • 匯豐銀行信用卡 @ 台亞、鯨世界: 每公升降 2 元 (~2009/09/30)
    • 美國運通卡 @ 優力: 每公升降 1.8 元 (~2009/9/30)

  • 每週一:
    • 台塑會員卡/台亞帝雉卡(現金) @ 台亞: 每公升降 2.1 元 (~2010/03/31)

  • 每週二:
    • 台北富邦 A-Power 聯名卡 @ 全國加油站: 每公升降 2.1 元 (~2010/03/31)
    • 回利卡(現金) @ 全國加油站: 每公升降 2.1 元 (~2010/03/31)

  • 每週三:
    • 遠東銀行 台塑聯名卡 @ 台亞/福懋/西歐/鯨世界: 每公升降 2.1 元 (~2009/12/31)
    • 現金+會員卡(>201) @ 優力: 每公升降 1.9元 (~2010/03/31)
    • 刷卡+會員卡(>201) @ 優力: 每公升降 1元 (~2010/03/31)

  • 每週四:
    • 無僅適用本日之方案

  • 每週五:
    • 荷蘭銀行 樂活白金卡/LEXUS聯名卡@ 全國 每公升降 2 元 (~2009/09/30)

  • 每週六:
    • 無僅適用本日之方案

  • 每週日:
    • 聯邦銀行 家樂福聯名卡 @ 全國/台亞: 每公升降 1.8 元 (~2010/03/31)

各加油站官方網站:

最近更新日期: 2010/01/11

本文簡短網址: http://tinyurl.com/tw-oil

(本文共被觀看 37,627 次)

軟體 dada on 十一月 11, 2008

Mantis Mail Gateway (perl script)

This is a simple Mantis Mail Gateway for mail-in tickets.
It can be used for alert management for monitoring system.

For installation, add the line below to /etc/aliases:

bug: "|/usr/local/bin/mantis-mail-gateway.pl   PROJECT   REPORTER"

and then run newaliases.

The incoming mail will be posted to a Mantis project named 'PROJECT' on behave of user 'REPORTER'. The mail subject will become the bug summary and the mail content will become the bug description.

Note that this script does not understand MIME multipart encoding and may have problems on mail contents besides plain-ASCII encoding.

You are welcome to add more features.

mantis-mail-gateway.pl: (can be downloaded here)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#!/usr/bin/perl
 
# mantis-mail-gateway.pl
 
# Mantis Mail Gateway
# Shen Cheng-Da (cdsheen AT gmail.com)
# require DBI to connect MySQL database
# http://blog.urdada.net/2008/11/11/95/
 
use DBI;
use POSIX qw(strftime);
 
my $db_host    = 'localhost';
my $db_name    = 'mantis';
my $db_user    = 'monitor';
my $db_pass    = 'monitorpass';
 
my $debug      = 0;
 
my $db = "dbi:mysql:dbname=${db_name};host=${db_host}";
 
die "Usage: $0 [project-name] [reporter]\n" unless @ARGV > 1;
 
my $project_name  = $ARGV[0];
my $reporter_name = $ARGV[1];
 
my $dbh;
my $sql;
my $sth;
my $project  = -1;
my $reporter = -1;
 
$dbh = DBI->connect($db, $db_user, $db_pass)
        || die 'ERROR: '.$dbh->errstr;
 
$sql = "SELECT id,name FROM mantis_project_table
        WHERE name LIKE '$project_name'";
 
$sth = $dbh->prepare($sql) || die 'ERROR: '.$dbh->errstr;
$sth->execute() || die 'ERROR: '.$dbh->errstr;
while( @data = $sth->fetchrow_array() ) {
        $project = $data[0];
}
$sth->finish;
 
die "ERROR: project \`$project_name' does not exist\n" unless $project > 0;
 
print "project: $project_name ($project)\n" if $debug;
 
$sql = "SELECT id,username FROM mantis_user_table
        WHERE username = '$reporter_name'";
 
$sth = $dbh->prepare($sql) || die 'ERROR: '.$dbh->errstr;
$sth->execute() || die 'ERROR: '.$dbh->errstr;
while( @data = $sth->fetchrow_array() ) {
        $reporter = $data[0];
}
$sth->finish;
 
die "ERROR: user \`$reporter_name' does not exist\n" unless $reporter > 0;
 
print "reporter: $reporter_name ($reporter)\n" if $debug;
 
my $subject = '';
my $content = '';
 
while(<STDIN>) {
        s/\s+$//;
        last if $_ eq '';
        $subject = $1 if /^Subject: (.+)$/;
}
while(<STDIN>) {
        $content .= $_;
}
 
$sql = 'INSERT INTO mantis_bug_text_table (description) VALUES (?)';
 
$sth = $dbh->prepare($sql) || die 'ERROR: '.$dbh->errstr;
$sth->execute($content) || die 'ERROR: '.$dbh->errstr;
$sth->finish;
 
my $textid = $dbh->{ q{mysql_insertid} };
 
print "bug text id: $textid\n" if $debug;
 
$sql = 'INSERT INTO mantis_bug_table
                ( project_id, reporter_id,
                  date_submitted, last_updated,
                  bug_text_id, summary )
        VALUES (?,?,?,?,?,?)';
 
my $now = strftime('%Y-%m-%d %H:%M:%S', localtime(time));
 
$sth = $dbh->prepare($sql) || die 'ERROR: '.$dbh->errstr;
$sth->execute($project, $reporter, $now, $now, $textid, $subject)
        || die 'ERROR: '.$dbh->errstr;
$sth->finish;
 
$dbh->disconnect;
(本文共被觀看 8,899 次)

後一頁 »