2016-01-20 80 views
0

我想了解一個設置並高度困惑我的自我。套接字端口綁定到我的本地主機和框中的相同端口IP

說我的盒子IP是xx.xx.xx.xx,127.0.0.1是我的Linux盒子的本地環回。現在,當我爲一個端口做了netstat的我見以下的輸出:

tcp  0  0 127.0.0.1:11191    0.0.0.0:*     LISTEN  9999/myexe  off (0.00/0/0) 
tcp  0  0 xx.xx.xx.xx:11191   0.0.0.0:*     LISTEN  26998/anotherexe  off (0.00/0/0) 

什麼輸出基本上意味着 - 因爲127.0.0.1和XX.XX.XX.XX指的是同一個盒子,然後做它是指兩個可執行文件綁定並運行在同一端口是相同的盒子 - 如果是的話,哪一個二進制將服務請求,如果在端口11191在我的情況?

回答

1

其中每一個幾乎肯定是一個不同的接口,因此不同的互聯網地址。也就是說,127.0.0.1通常是回送接口。儘管xx.xx.xx.xx可能是一個真正的(以太網)網絡接口。完全有可能將兩個單獨的程序綁定到不同地址的相同端口號。單個程序只是綁定到端口號是比較常見的,內核實際上將其轉換爲多個綁定,每個接口的地址一個綁定。

請參閱bind(2)ip(7)手冊頁的詳細信息。具體而言,INADDR_ANY是希望在所有接口上綁定端口的服務器可以使用的僞地址。

也在這裏一看便知Linux下的子目第一段:

Socket options SO_REUSEADDR and SO_REUSEPORT, how do they differ? Do they mean the same across all major operating systems?

+0

「*完全可以將兩個獨立的程序綁定到單獨地址上的同一端口號*」 - 我們可以在netstat輸出中清楚地看到實際情況。 –

0

在某些平臺上,netstat的可以告訴你的是自己的插座的過程。例如,在Windows上,-b開關顯示可執行文件名稱,而-o開關顯示進程ID。在Linux上,-p開關顯示進程信息。

做就意味着兩個可執行已經綁定在同一端口上運行是同一個盒子

是。您的netstat輸出包含進程名稱,因此我們可以清楚地看到myexe正在偵聽127.0.0.1:11191,並且anotherexe正在偵聽xx.xx.xx.xx:11191

如果是這樣的話,如果在我的情況下來自端口11191,哪個二進制將服務請求?

它取決於連接到達哪個本地IP。 127.0.0.1是一個回送適配器,因此只有在同一臺機器上運行的客戶端才能連接到它。如果客戶端特別連接到127.0.0.1上的端口11191,則myexe將處理該連接。如果客戶端連接到xx.xx.xx.xx上的端口11191,則anotherexe將處理該連接。

相關問題