隨著Internet的不斷普及,網路已經成為人們生活的重要組成部分。網路已經成為很多人使用電腦的最直接理由,這使得網路功能在電腦中的地位更顯突出。然而,對於大部分使用者來說,電腦以及作業系統是一個相當複雜的系統,Windows網路經常會出現不能訪問互連網問題。對於具有一定電腦和網路基礎的人來說,可以利用系統提供的工具進行網路診斷,協助解決相關網路問題。
網路問題診斷,從根本上說,就是按照網路通訊協定棧順利依次進行診斷並發現問題環節所在,包括物理層、資料連結層、網路層、傳輸層、應用程式層等。Windows系統提供了一系列的工具協助使用者進行網路診斷,主要包括:
1、ipconfig:顯示IP協議的配置資訊
2、ping:檢測到指定主機之間的網路是否連通
3、nslookup:主機名稱/IP解析
4、arp:查看IP與物理地址轉換資訊
5、netstat:查看當前活動網路連接資訊
6、tracert:跟蹤資料包到達目的主機的路由表資訊
使用這些工具,有經驗的使用者可以快速定位到問題所在。另外,Windows系統內建了一個網路診斷工具,它自動掃描當前系統,收集相關硬體、軟體和網路連接的資訊,並給出診斷報告。按如下方式運行該工具:控制台-->網路連接-->(左側)網路疑難問題解答程式-->診斷網路設定並運行自動的網路測試-->掃描您的系統。
網路應用軟體往往也會整合一個網路診斷功能,這就需要開發人員編程對各個網路通訊協定環節進行自動檢測。下面是一個簡單的網路檢測常式架構,僅供參考。
PLUGIN_API void check_network(void)
{
plugin_show_rt_info("netdiag is checking...");
if (check_network_connectivity())
{
plugin_show_rt_info("network is ok!");
}
else
{
//1 檢測物理網路連接
if (!network_is_alive())
{
plugin_show_rt_info(GetDiagnosisError());
goto _EXIT;
}
//2 檢測網卡是否工作
if (!DiagnoseTcpIp())
{
plugin_show_rt_info(GetDiagnosisError());
goto _EXIT;
}
//3 檢測網路設定
if (!DiagnoseLocalIp())
{
plugin_show_rt_info(GetDiagnosisError());
goto _EXIT;
}
//4 檢測網關是否可達
if (!DiagnoseGateway())
{
plugin_show_rt_info(GetDiagnosisError());
goto _EXIT;
}
//5 檢測HOST檔案
if (!DiagnoseHostFile())
{
plugin_show_rt_info(GetDiagnosisError());
goto _EXIT;
}
//6 檢測DNS伺服器是否可達
if (!DiagnoseDns())
{
plugin_show_rt_info(GetDiagnosisError());
goto _EXIT;
}
//7 檢測網域名稱是否可以解析
char hostname[] = "your.host.name";
char ip[128];
if (!get_ip_byname(hostname, ip))
{
plugin_show_rt_info(GetDiagnosisError());
goto _EXIT;
}
//8 檢測路由可達性
printf("%s -> %s/n", hostname, ip);
if(!trace_route(ip, 30, true))
{
plugin_show_rt_info(GetDiagnosisError());
goto _EXIT;
}
}
_EXIT:
return;
}
(Aigui LIU / 劉愛貴 / aigui.liu@gmail.com)