如何在社區網路中使用P2P

31 03 2010

當我要用 eMule 得不到高 ID 時,打電話過去,直接告訴他要開哪幾個 Port,TCP 要哪些、UDP 要哪些,然後就把社區網路公司給你的 TCP 及 UDP 埠設定給 eMule,就可以得到高 ID。BT 也是如此,我以前總是認為社區網路會鎖 P2P,事實上以前因為網路速度慢會鎖,所以我寧願用中華電信去給他貴,但是現在連這個都不鎖了,就可以好好用了。

但是後來我再打去社區網路公司要 Port 的時候,他們說公司規定從此以後只能開 10001 以後的 port 給客戶,真是OOXX規定,還好我以前先要到幾個好 port (eMule 的預設埠, 4661等),你再這樣搞,我要離開你了。

原理

在社區網路中使用 P2P 是使用 Port Mapping (華碩稱為Virtual Server (虛擬伺服器) 和Apache中的不同, Port Forwarding) 的方式,把社區 IP 的某個 Port 導向到我的電腦。以下圖為例:

  1. 我們社區的對外 IP 是 163.1.20.55 。
  2. 我已有設定 Port Mapping,將 Port 80 的連線全部導向到內部的 192.168.1.1。
  3. 如果外部電腦連到社區的 Port 80,NAT 就會把這條連線導到 192.168.1.1 這個 IP,讓這條連線自己去此 IP 尋找 Port 80。
  4. 若我有架設 WWW Server (預設 Port: 80),就可以服務外面來的連線了。

portmapping示意圖

如果我家有2台電腦都要跑P2P

這簡單,如果有兩台電腦,都分別跑 emule, BT,則需要的 IP 及 port 假設為:

電腦一:192.168.1.2

emule, port : 10000

bt, port :10001

電腦二:192.168.1.3

emule, port : 10002

bt, port :10003

如此情況,就需要向社區網路公司要 4 個  port,分別為10000, 10001, 10002, 10003,然後在 IP 分享器 (NAT, 無線網路分享器, 寬頻路由器…) 中設定 port mapping,以 tomato 為例,在 [Port Forwarding] -> [Basic] 中新增下列四筆記錄:

Proto Src Address Ext Ports Int Port Int Address Description
TCP 10000 192.168.1.2 PC1, emule
TCP 10001 192.168.1.2 PC1, BT
TCP 10002 192.168.1.3 PC2, emule
TCP 10003 192.168.1.3 PC2, BT
  1. 第一欄,Proto,通訊協定
  2. 第二欄,來源位址,留空不必額外指定
  3. 第三欄,來源埠號,在這裡設定要 mapping 的埠
  4. 第四欄,內部埠號,不必設。如果你的 NAT 要從10000 埠接受封包後,要轉送到內部電腦的 5000 埠,就要在這裡設定為 5000。
  5. 第五欄,接收的電腦 IP
  6. 第六欄,說明,一定要設,不然過兩天你就會忘了這個是設什麼鬼東西

參考資料

維基百科:Port Forwarding (Port Mapping )


管理項目

Information

19 responses

11 04 2010
justin

你好..
最近也在考慮更換社區網路,我家社區也是今網的.
找到你的網站,真是受益良多啊,因為今網的官網真的是太陽春了,連我想留個mail去請教問題也沒辦法(價格寫的不清不楚,網站又沒公告@@),
不過也才有機會來拜訪您的網站~

看了你講解"社區網路跟p2p"的關連,小弟有個問題想請教~
“如果外部電腦想要連到社區的 Port 80,NAT 就會把這條連線導到 192.168.1.1 這個 IP,讓這條連線自己去此 IP 尋找 Port 80。"
既然它會自動導向社區網站的port80,為何會影响到自己家中電腦p2p的下傳呢??
不好意思,小弟的觀念可能還不太清楚正確,能麻煩您撥空幫我簡易解惑一下嗎?感謝感謝~

11 04 2010
joe

您好,很高興能回答您的問題。

在 IP 通訊協定中,每台 Host (電腦也屬) 都會設定 65536 個 Port,每一個 port 都可以建立一個連線,因此只要各個軟體使用的 port 不同,就是各自走各自的路,彼此互不相干。

如:一間郵局有 10 個窗口,每個服務不同的人、事。

Port 80 是 WWW 使用的 “知名埠"。

其實 P2P 都可以自己設定不同的 port 讓外面連進來,以便取得高 id,只要您先設定好,再打電話去今網要求開哪些 port。

例如:
eMule 埠號設 15000
BT 埠號設 15001

打電話叫他們開這兩個 port 對到你家的 ip 即可。

11 04 2010
jsutin

感謝您那麼快就回應我的問題~

是不是也就是說除了一般電腦在使用的『知名埠』(如www(80)..),其餘的port,社區網路業者都會鎖住,除非用戶提出申請 ??!!

那為何 “只能開 10001 以後的 port 給客戶" ,這個限制會造成我們的困擾呢 ??

不好意思,額外問個問題, “取得高 id" 這句是什麼意思呢 ??

11 04 2010
joe

這有些是公司的 know how,我不太肯定。

他們並不是鎖,只是外部想要連入特定 port 的連線不會轉到您的電腦。

因此如果外部連到今網在本社區的路由器 80 port, 因為沒開啟服務,也沒有導到某台電腦,所以也就對外部沒回應。

你提出的申請是:叫今網的工程師在他們的路由器做一個設定,只要連到本路由器的某 port,就直接轉到你家的 ip。由你家的電腦自己決定要不要連線,因此就算今網那邊開了,你家的 Windows XP 防火牆也要開啟特定的 port,才能連通。

“只能開 10001 以後的 port 給客戶" 對我來說是一種 kimochi 的問題,也就是說"林北不爽",沒什麼困擾啦。

eMule 要能拿到"高 id" 才能有更佳的下傳效率,那是那套軟體的機制,您可以去google找看看

11 04 2010
jsutin

不好意思~我補充一下

您在別篇有回應過~
“10001以後的port造成的麻煩就是你要額外去設定你的p2p, game, server 的 port"
我的意思是,之前我用過的p2p軟體,它的port是隨機選取的,那就算今網沒限制10001之後的port,我們不是也要親自去要求開放指定的port讓我們使用嗎??

感謝~

11 04 2010
joe

如果是這樣,您就要手動去設定且固定該 p2p 軟體的 port,再叫今網去開那個號碼的 port

12 04 2010
jsutin

請教您一下~
以往因"社區網路"頻寬容易在社區人多使用時,會造成網路變慢(頻寬被瓜分)!!
所以,使得社區網路業者多少會限制住戶使用p2p等下載軟體!!

可是,既然現在可以使用QoS的方式,使各別住戶可以得到所謂的"保證頻寬"!!那為何業者不全開放PORT讓住戶自己使用(如同ADSL業者),直接讓外部要求導向住戶端IP ??

12 04 2010
joe

現在網路夠快,他們也不會去限速了,要是限速我一定第一時間退租。

這牽涉到電信公司的商業私利,因為 IPv4 的實體 IP (Public IP) 是屬於有價值的稀少品(IP 數量約 2 的 32 次方),電信業者為了維持既得利益,不可能升級到 IPv6 (IP 數量約 2 的 128 次方,多到用不完),這樣會讓很多電信軟硬體公司虧損。

所以當社區網路業者向中華電信申請網路時,中華電信只給少少的實體 IP,就像 ADSL 也只給1個固定 + 7個浮動。所以當大樓的用戶多 (超過數十) 時,實體 IP 是不夠用的,因此就使用 NAT 功能來分享 IP。

13 04 2010
justin

感謝大大的解說,又讓我長知識了~

不曉得是不是我觀念還不夠,無法把ip與開port對上!!
社區網路業者既然可以使用QoS的方式,讓吃頻寬較重的住戶不致於去影响到其它住戶的’保證頻寬’ ,那我們 ‘去要求業者幫忙開通指定port’ 的這個動作,為何還不能省略,直接就讓外部要求導到我們用戶端的port ??!!(不用我們再打電話去開通)

還是port mapping的這個動作,牽涉到實體ip的數量,還無法由NAT功能來徹底達成??!!

感謝~

14 04 2010
joe

IP 等同你電腦的地址, port 等同電腦開啟的窗口,可以有 65536 個。因為社區網路公司給你的是虛擬 IP,中華電信給社區網路公司的是實體 IP。在 internet上,只有實體 IP 才能加入傳輸,虛擬 IP 是自動會被忽略的,所以你的虛擬 IP一定要經由社區網路公司的實體 IP 才能轉出去。外來的連線也是由實體 IP 接收,再由 NAT 根據封包資訊決定要轉發給下轄網路中的哪一台電腦。

P2P 會從特定埠連線進來,但也是連到中華電信給社區網路公司的那一個實體 IP 的路由器,若沒開啟監聽 (listen) 該埠,正常會不理那一個連線的。除非社區網路公司特別去設定那一個埠轉到你的電腦,讓你的電腦回應那一個連線,才會構成通聯。

14 04 2010
justin

嗯~感謝

大大講的這些我大概都懂!
想不通的是這個動作 → 除非社區網路公司特別去設定那一個埠轉到你的電腦,讓你的電腦回應那一個連線,才會構成通聯 。
以目前網路已經夠快+QoS方式,為何以上這個動作,業者無法作到去設定全部開通(65536個port),讓它能以ADSL的方式,不限制各別用戶的下載??!!

15 04 2010
joe

因為在 port mapping 中,每一個port只能對應到一個ip,這是一個固定的死表格,無法像 routing table 有一個機制在做更新,也不可能做更新。

這是大風吹的遊戲,佔住了就是它的,如果每個人都想要埠號 5000,那就只有第一個叫公司設定的先贏了。

15 04 2010
justin

哇哇~原來如此
麻煩大大這麼久~真是不好意思!!
感謝 orz orz

22 11 2010
小豆腐

如果只有一台電腦玩eMule,那就叫今網開TCP4662,UDP4672
兩台以上就設 電腦一:192.168.1.2 eMule port 10000
電腦二:192.168.1.3 eMule port 10001

請問為什麼兩台以上就設eMule port10000?(是自己的路由器tcp和udp都設10000是這樣子嗎?) = =弄不懂頭好痛

22 11 2010
joe

不用痛,沒那麼困難。

因為今網一個社區只有一台路由器,所以只有一個實體 ip,因此如果大樓內同時有兩個用戶都想要叫他們開 emule 預設的 4662,那就只好誰先誰贏。
因此他們公司就全部將用戶貶為庶民,往後要求開 port,就一律從10000號開始給。

只要有埠號給你,你設給 emule 或是 bt, game等,讓那些軟體知道從哪個埠去連線就可以了,不必拘泥於一定要幾號埠。

14 02 2011
godfox

版主您好:

想請教一下,NAT後面的電腦,為甚麼可以共用80 PORT上網(IE開網頁),而不用設定你所說的PORT MAPPING呢?為何其他P2P程式就要一個PORT對一台電腦?

還有TCP/UDP有甚麼不同?假設要叫社區網路開PORT 10001的話,是不是他會開給我TCP 10001 加上 UDP 10001(總共兩個)?

15 02 2011
joe

這說來話長,改天我再寫篇專文,現在先回答您的問題。

您提的 Port 80 是伺服器端的,例如 yahoo,使用者端是浮動選用大於1024 號的埠連出去的。

Port Mapping 是外面要連進來時,要連到 NAT 後面的電腦用的,例如:學校有一個傳達室負責收全校的信,再由傳達室分送給各處室或班上。傳達室依信上面所寫處室的名字,分發到各處室去。這就是 Port Mapping。

而 P2P 程式要多開幾個 Port 來連線,這就是 P2P 軟體的設計問題了,多開一個 Socket (IP + Port) 就多一個傳輸資訊的管道,對於分享資訊是比一條傳輸更佳的。

Port這種東西,是在 ISO 第四層 (Translation Layer) 中,TCP 及 UDP 的特有項目,有空可以翻一下 TCP 封包的格式,其中就有一個 Port 欄位,才可以讓一台電腦開了 65536 個傳輸窗口,進行同時多個連線。
若 TCP, UDP 全部加起來,共有 65536+65536 個。所以區網公司,TCP 和 UDP 要分別索取。

19 10 2013

請教大大,社區網路的浮動IP在使用P2P軟體時,是不是不會被查到是那家下載的,之前大聽聞用P2P下載電影被抓,會不會都是固定IP,大大很了解這原理,所以來問一下大大,還請大大不吝回覆,謝謝

20 10 2013
joe

您好:

社區網路向中華電信租一條光纖後,得到一個實體IP,然後再用虛擬IP分給大樓內用戶。

所以從外面頂多追到你們這橦大樓,無法直接捉到住戶的,接下來就看社區網路商的路由器Log記錄了多少資料了。如果犯的是大罪,例如恐嚇殺掉總統小孩之類的,社區網路商應該會配合檢調供出你們大樓的log,您就曝光了。

如果是小罪,我猜例如下載P2P資料,社區網路商就必須冒著公司倒閉的風險,考量要不要供出大樓的log了,為什麼?因為只要風聲一傳出,哪家社區網路商會把客戶的log供出去,有誰敢用?不消一陣子,用戶全部退租,他們就準備倒閉了。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s




%d 位部落客按了讚: