如果將 Python 中的套接字綁定到 localhost,8200,則可以透過以下方式存取它http://本地主機:8200/。但不是http://xxxx:8200/
如果將 Python 中的套接字綁定到 xxxx,8200, machinename,8200,則可以透過以下方式存取它http://xxxx:8200/和http://機器名稱:8200/, 但不是http://本地主機:8200/
我認為 localhost 的意思是“這台機器”,使用它會“環回”到機器的 IP 位址,但它似乎是不同的 ip。
127.0.0.1 是否始終與機器的 IP 位址不同?
更新:
我知道實際數字是不同的,但是環回有什麼作用?
例如維基百科說
'將網頁瀏覽器指向 URLhttp://127.0.0.1/或者http://本地主機/將訪問該計算機自己的網站”
但是該網站也可以在 xxxx 上訪問,並且可能在 xxxx 上使用單一套接字進行設定 那麼這兩個引用如何運作呢?
結論:
我想我終於明白 127.0.0.1 和 xxxx 是這樣運作的
--127.0.0.1 ==\
>- Computer
--x.x.x.x ==/
並不是
--127.0.0.1 ==\
--------------- x.x.x.x >- Computer
或者
--x.x.x.x ==\
--------------- 127.0.0.1 >- Computer
感謝大家的幫助
答案1
來回答你的問題。
127.0.0.1 不僅是與機器 IP 位址不同的 IP 位址,也是不同的介面。 127.0.0.1 不應出現在本地網路上。它是環回適配器的特殊內部 IP 位址。
xxxx 將是您的乙太網路卡。
順便說一句,「localhost」只是主機檔案中指向 127.0.0.1 的一個項目
如果將套接字綁定到 127.0.0.1:8200,則只有本地運行的用戶端才能存取它,並且只能使用http://127.0.0.1:8200或者http://本地主機:8200(或指向 127.0.0.1 的 dns 或主機檔案條目)。
綁定到 xxxx:8200 的套接字只能透過http://xxxx:8200或指向該條目的 dns 或主機檔案條目。
將套接字綁定到 127.0.0.1 不會自動使其在乙太網路介面上可用。
這就是為什麼你無法連接到 xxxx:8200
您可以將連接埠 8200 綁定到所有可用介面 (0.0.0.0),然後它應該可以工作。
環回適配器的其他功能:
Loopback介面是一個虛擬介面。它通常用於允許同一台機器上的程式相互通訊。它不是引用機器 IP 位址的方法。 127.0.0.1 是環回虛擬適配器的 IP 位址。
關於環回適配器的另一件事是,因為它是虛擬的,所以它實際上不會將任何資料包傳遞到網路卡。
答案2
例如,維基百科說“將網頁瀏覽器指向 URL”http://127.0.0.1/或者http://本地主機/將訪問該計算機自己的網站”
有點不準確。它可能這樣做。同樣,它可能不會顯示任何網站,甚至可能顯示與您使用 xxxx 地址時所獲得的不同的內部網站。
127.0.0.1 指向您自己的計算機,但這並不意味著一旦到達您的計算機,它就會以相同的方式運行
如果您想要一個非技術性的類比,您可以將它們視為進入您房屋的不同門。
兩者都指向同一棟房子,但它們不是同一件事。每扇門都可能帶您進入同一個房間,也可能帶您進入不同的房間。也可以鎖一扇門而不鎖另一扇門。
配置網站時,您指定要綁定到哪些位址,而答案通常是所有位址。 (這相當於所有的門都帶你進入一個房間)
您也可以指定網站僅綁定到一個位址。 (這相當於鎖上除一扇門之外的所有門。)
如果您有兩個(或更多)網站,您可以將它們綁定到單獨的地址。 (這相當於每扇門都進入一個單獨的房間)。
兩個參考如何運作的範例,我的 Windows 7 電腦安裝了 IIS,當我進入 IIS 管理員並右鍵單擊「預設網站」時,它會給我一個「編輯綁定」功能表選項。選擇該選項將彈出綁定清單。我只有一個,但對於 IP 位址,它有 *,這意味著 IIS 偵聽我的所有 IP 位址。
答案3
系統上的每個 IP 位址都是獨立的,可以分別透過套接字綁定,但特殊位址 0.0.0.0 除外,它指示作業系統將套接字綁定到所有介面。