ZMap 為什么能在一個小時內就掃描整個互聯網?
全球互聯網包含數十億個不重復地址,掃描整個互聯網是一項勞動密集型工作,需要耗費幾周甚至幾個月。現在,密歇根大學研究人員發布了一個工具ZMap,用一臺普通的服務器耗時44分鐘就能掃描全部互聯網地址。掃描工具如Nmap使用的方法是發送請求然后監聽回應,雖然請求可以同步進行,但為了記錄每一個未回應請求需要大量開銷,導致速度下降。而ZMap使用了不同的方法,它發生的是無狀態請求,發送之后就忽略了,它不需要記錄未回應請求的名單,而是在發送的數據包中編碼身份信息去識別回應,從而降低開銷。ZMap發送數據包的速度是Nmap的上千倍。Nmap需要數周時間掃描全部網址,而ZMap只要幾十分鐘。密歇根研究人員利用ZMap發現,100萬***網站內HTTPS使用率一年內增加了23%。
傳統上的TCP/IP需要“三次握手”報文交互,在此期間需要維持記錄著與對方交互的狀態。
這種狀態記錄量是巨大的,占用內存和CPU資源很大。
而ZMap索性就不進行三次握手,只進行***個SYN,然后等待對方回復SYN-ACK,之后即RST取消連接。這樣肯定會因網絡原因丟失一定比例的數據,根據其實驗,這個比例在2%左右。
以上策略,在nmap中也有實現,即其TCP SYN掃描方式。
關鍵性的問題出現在對回復的SYN-ACK進行seq number的校驗。傳統上就需要記錄狀態。
而ZMap是將對方receiver ip地址進行hash,將其處理保存到了sender port和seq number兩個字段中,當SYN-ACK回來的時候,就可以根據sender ip、receiver port、ack number這些字段進行校驗。
因此避免了狀態存儲,接近了網絡帶寬極限。

性能方面:
單臺服務器,掃描整個IPv4地址空間,耗時45分鐘,將所接1Gb的帶寬占用了97%。

不僅速度上比Nmap(TCP SYN模式)高不少,而且其設計的無狀態機制,讓其搜索成功的覆蓋率也增加了。

與Nmap等已有系統對比:
NMap是一個通用網絡監測工具,可以適用于不同協議、不同范圍的測試。
而ZMap專做單端口、大范圍的網絡監測。
這也讓ZMap能在這單一領域做很多優化。
