一、表面上的區別如下:
首先假設本機有多個網卡:eth0 :192.168.0.1 eth1:192.168.1.1 lo: 127.0.0.1
0.0.0.0 不能ping通,代表本機所有的IP地址;
監聽127.0.0.1,創建Socket,那么用本機地址建立tcp連接不成功,反過來也是如此;也就是,監聽時采用的地址為192.168.0.1,就只能用192.168.0.1進行連接。
而監聽0.0.0.0創建Socket,那么無論使用127.0.0.1或本機ip都可以建立tcp連接,也就是不論通過127.0.0.1或192.168.0.1、192.168.1.1都能連接成功。
0.0.0.0建立tcp連接的時候也可以通過綁定IP_ADDR_ANY來實現。
那么問題來了,還回地址必須是127.0.0.1么?
答案:不是必須!IPv4 的環回地址是保留地址之一 127.0.0.1。盡管只使用 127.0.0.1 這一個地址,但地址 127.0.0.0 到 127.255.255.255 均予以保留。此地址塊中的任何地址都將環回到本地主機中。此地址塊中的任何地址都絕不會出現在任何網絡中。
可以做一個簡單的測試,用ssh root@127.2.3.4 然后登錄看看是不是還是本機?不用修改ip,隨意一個此范圍內長度ip地址均可以ping通,並且通過ssh登錄到本機。
二、事實上處理的區別,如下圖:
他們是在數據鏈路層區別開的,路徑很清楚,就不詳述了。