Re: [問答] 有關基礎網路 TCP client-server

作者: gowrite (gowrite)   2017-10-14 09:22:47
※ 引述《petitbleu (*大捲兒*)》之銘言:
: ※ 引述《gowrite (gowrite)》之銘言:
: : /*
: : If the host on which the server is running is multihomed (as in this example)
: : , the server can specify that it wants only to accept incoming connetions
: : that arrive destined to one specific local interface.
: : 這段話是不是說 ,
: : 如果 server 本身有多重 IP , 不論是
: : public IP 12.106.32.254
: : 或
: : private IP 192.168.42.1
: : 都可以設定為外來連線的連線介面 (local interface)
: : 但是如果連 WAN 的 IP 指定成 192.168.42.1 那應該連不進來吧?
: : client 發出連線的時候 , 應該是找都找不到
: : 所以 192.168.42.1 是單純指 LAN 端的其他設備可以連到 server 的選擇嗎?
: : 這段話這樣理解是對的嗎??
: : */
謝謝P大,看完你的講解,我慢慢有理解了,
我想進一步的詢問,
想確定有正確理解你的講解,並搞清楚我之前是卡在哪邊不懂,避免之後再跌跤
: 這段是說,如果你的 server 有 n 個 IP address (n >= 1)
: 你可以讓 server 只接受從某個特定 IP address 進來的連線
: 跟是不是 public IP 無關
: 這是相對於一般如果你不特別指定,服務就會綁在 * 上
: 也就是走任意 IP 進來都可以
: 以上面的例子來說,你今天想在 port 5678 提供服務
: 可以指定它在 192.168.42.1:5678 或是 12.106.32.254:5678
如果是指定 IP 的情況:
指定情況一: server 指定 listening socket { 12.106.32.254:5678 , *.* }
======================================================================
這時候 client 端,
想從 140.120.120.120:1500 發 connection request 給 12.106.32.254:5678
連線就可以建立
connected socket pair { 12.106.32.254:5678 , 140.120.120.120:1500 }
可以建立連線的原因是
因為 server 指定 12.106.32.254:5678 且 12.106.32.254 是 public IP
但是如果同樣的 client 端
從 140.120.120.120:1500 發 connection request 給 192.168.42.1:5678
會無法建立連線,
無法建立連線的主要原因 "不是" 因為 192.168.42.1:5678 是 private IP,
而是 server 指定了 listening socket 的 local IP 是 12.106.32.254:5678
這樣理解對嗎???
另外一種指定情況:
指定情況二: server 指定 listening socket { 192.168.42.1:5678 , *.* }
=====================================================================
這時候 client 端,
從 140.120.120.120:1500 發 connection request 給 192.168.42.1:5678
會無法建立連線,
無法建立連線的原因是
就算 server 指定了 listening socket 的 local IP 是 192.168.42.1
但是因為 140.120.120.120 無法從 WAN route 到 private IP 所以無法建立連線
另外同樣的 client 端,
從 140.120.120.120:1500 發 connection request 給 12.106.32.254:5678
也一樣無法建立連線,
是因為 server 指定 192.168.42.1:5678 當成 listening socket
所以就算 server 有 12.106.32.254:5678 這個 public IP,也一樣不能用
這樣理解對嗎???
: 如果不指定則是 *:5678
: 至於這樣做之後,誰能 access 到這些服務
: 則取決於它碰不碰得到這個 IP address
: 所以如果是跑在 192.168.42.1:5678 上,就只有 LAN 能用到它
: 因為外面的世界沒有 route 到你的 192.168.42.1
: 只有你的 LAN 192.168.42.0/24(或有時候是 192.168.0.0/16 不一定)
: 能直接連到 192.168.42.1
最後不指定的情況:
不指定的情況:server 不指定 local IP ,
因此 listening socket { *:5678 , *.* }
========================================================================
這時候 client 端
從 140.120.120.120:1500 發 connection request 給 12.106.32.254:5678
可以建立連線
connected socket pair { 12.106.32.254:5678 , 140.120.120.120:1500 }
原因是 server 沒有指定 local IP,且 12.106.32.254 是 public IP
另外同樣的 client 端
從 140.120.120.120:1500 發 connection request 給 192.168.42.1:5678
會無法建立連線
原因是 192.168.42.1:5678 是無法從 WAN route 到的 private IP
除非 client 端是 192.168.0.0/16 網段中的其中一個 private IP network device
就可以找到 192.168.42.1:5678 並建立連線
請問這樣理解對嗎???
學到這邊謝謝 P 大提點指導
謝謝
<(_ _)>
: : 另外第二段話
: : /*
: : This is a one-or-any choice for the server. The server cannot specify a list
: : of multiple addresses.
: : The wildcard local address is the "any" choice. the wildcard address was
: : specified by setting the IP address in the socket address structure to
: : INADDR_ANY before calling bind.
: : 這邊這段話又說
: : 如果不是選擇指定對外 IP , 那就是選擇 any IP
: : 可是如果在這個例子的話 , 一個 public IP , 一個 private IP
: : 那 FTP server 會自動確認自己目前所擁有的 IP 是哪一個網段,
: : 哪一個 public IP, 哪一個是 private IP ,
: : 然後再指定外來的 request connection 要跟哪一個 IP 連線嗎?
: : */
: : 關於這一小段話 , 不太理解 , 希望有人可以解點解惑
: : 謝謝。
: 承上,跟 public or private 沒有關係
: 它是說你要嘛完全不指定 IP address, 要嘛只能指定一個
: 不能說我要指定這兩個 IP address
: 底層不提供這種選擇
: FTP 或其它 server 通常不會幫你決定要在哪個 IP address 上提供服務
: 但你可以自己設定要用哪一個,或通常走預設是 any
: 外面或裡面能不能連到,只是看它有沒有 route 到你的 any IP 而已
: 如果是跑在 * 上,不管從外面裡面都可以連上
: 當然以 FTP 來說還是可以用驗證擋掉
: 這邊就要看用途來決定要怎麼做了
作者: b325019 (望月)   2017-10-15 18:50:00
在不考慮acl的狀況下1只看路由有沒有通你指定了虛擬ip作為進入的介面實體ip的介面自然是不會通的以你的問題來說最基本要考慮的東西有兩個,routing跟access control,第一先看routing,client跟server的路由有沒有通?再來是看access control,server有沒有允許從該IP進行連線?有>建立連線,沒有>拒絕連線,就這麼簡單不用想的太複雜

Links booklink

Contact Us: admin [ a t ] ucptt.com