監聽不同ip地址的差異
IP型別
IP地址一共分為A~E5類,它們分類的依據是其net-id所佔的位元組長度以及網路號前幾位。
- A類地址:網路號佔1個位元組。網路號的第一位固定為0。
- B類地址:網路號佔2個位元組。網路號的前兩位固定為10。
- C類地址:網路號佔3個位元組。網路號的前三位固定位110。
- D類地址:前四位是1110,用於多播(multicast),即一對多通訊。
- E類地址:前四位是1111,保留為以後使用。
特殊地址
- 127.0.0.1:迴環地址。該地址指電腦本身,主要預留測試本機的TCP/IP協議是否正常。只要使用這個地址傳送資料,則資料包不會出現在網路傳輸過程中。
- 10.x.x.x、172.16.x.x~172.31.x.x、192.168.x.x:這些地址被用做內網中。用做私網地址,這些地址不與外網相連。
- 255.255.255.255:廣播地址
- 0.0.0.0:這個IP地址在IP資料報中只能用作源IP地址,這發生在當裝置啟動時但又不知道自己的IP地址情況下。
後臺應用起服務時使用127.0.0.1 和 0.0.0.0的區別
首先 127.0.0.1 和 0.0.0.0 都屬於特殊地址
0.0.0.0
- IPV4中,0.0.0.0地址被用於表示一個無效的,未知的或者不可用的目標。
- 在伺服器中,0.0.0.0指的是本機上的所有IPV4地址,如果一個主機有兩個IP地址,192.168.1.1 和 10.1.2.1,並且該主機上的一個服務監聽的地址是0.0.0.0,那麼通過兩個ip地址都能夠訪問該服務。
- 在路由中,0.0.0.0表示的是預設路由,即當路由表中沒有找到完全匹配的路由的時候所對應的路由。
localhost:
- 只是一個域名,可以代表任何IP地址。在/etc/hosts檔案下預設配置了127.0.0.1
後端監聽ip地址的三種主要的方式
- 監聽到127.0.0.1
- 監聽到0.0.0.0
- 監聽到主機內網ip
監聽127.0.0.1
- 本機通過127.0.0.1訪問成功,網路介面為loopback
- 本機通過區域網IP 192.168.0.113訪問失敗,網路介面為loopback
- 同一區域網下的外部主句通過區域網IP 192.168.0.112訪問失敗,網路介面-et1
因此,在實際應用中,我們在服務端監聽ip地址的時候不要繫結到127.0.0.1 ,如果繫結到了127.0.0.1,會導致我們的應用只能在本地127.0.0.1訪問,其他人無法通過其他任何方式進行訪問
監聽0.0.0.0
- 本機通過127.0.0.1訪問成功,網路介面為loopback
- 本機通過區域網IP 192.168.0.113 訪問成功,網路介面為loopback
- 同一區域網下的外部主句通過區域網IP 192.168.0.112訪問成功,網路介面-et1
比如我有一臺伺服器,一個外網A,一個內網B,如果我繫結的埠指定了0.0.0.0,那麼通過內網地址或外網地址都可以訪問我的應用。
監聽主機內網ip 192.168.0.113
- 本機通過127.0.0.1訪問失敗,網路介面為loopback
- 本機通過區域網IP 192.168.0.113 訪問成功,網路介面為loopback
- 同一區域網下的外部主句通過區域網IP 192.168.0.112訪問成功,網路介面-et1
總結
- 在實際應用中,最好的監聽ip地址方式為:監聽到0.0.0.0 ,nodejs demo如下:
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World'); }).listen(5500, '0.0.0.0');
- 或者nodejs也可以不監聽指定的ip,也可
var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World'); }).listen(5500);