2011/10/6

資訊學院的30門課-網路通訊概論

有一支運行中的視訊伺服器監控程式,使用Java開socket連到service的port看是否活著,
可是誤判率極高,並在視訊伺服器留下許多垃圾訊息。到底程式出了甚麼事?

---
網路通訊概論這門課開在大學二年級,是我唯一修過的網路相關課程,網路跟通訊是截
然不同的領域,1990年代,具圖型使用者界面的網頁瀏覽器無意間被發明,網際網路開
始大紅大紫,計算機概論中就使用了大量篇幅在介紹各個layer的不同,那時甚麼叫做
bridge?甚麼叫做router?甚麼叫做switch?實在有聽沒有懂,唯一可以摸到的網路設
備,就是自己的宿舍網路卡跟RG58那台同軸電纜集線裝置。

網際網路那麼盛行,不能免俗的,我也修了網路通訊概論,這門課已經比計算機網路教
的簡單多了。其中教到七層架構、token ring、FDDI、Ethernet。當時真的是用死背
的,我連課本都沒買,背的我真的不行,後來十年後去管理IPTV Server
Farm的兩部大門神時,才略懂一點網路。這門課比較特別的是,好像不教一下
programming,不算是資訊系。期末project是交一個berkeley socket寫出來的通訊程
式。

是的,這門課學到的socket programming技巧影響很深,出了社會,到了我們公司
後,別處我不知道,我發覺若不會socket programming,當framework沒有高階api讓你呼
叫時,事情就做不下去了。

當時有一個系統監控程式引,被監控端是同事K負責的視訊伺服器,監控程式卻是同事C撰寫的,
使用Java開socket連到service的port看是否活著,可是誤判率極高,
並在視訊伺服器留下許多垃圾訊息。

是的!同事C只是去看Port有沒有Daemon運作,但若Daemon裝死,整個Daemon要正常運作
的條件很多,首先DB要正常,主機的資源也要夠,但他這隻Java程式的作用只有Port
Scan,然後因為TCP連線沒有依照RTSP的規定關閉,每掃描一次,都在主機留下一個錯
誤訊息。

因為誤報率不堪其擾,所以決定自救。我首先我使用ethereal去抓取視訊伺服器跟用戶端的通話內容,
然後我去找RTSP(Real Time Streamming Protocol)的RFC來看,
使用學的到的berkeley socket,在一台Linux主機使用C語言重寫監控程式,
依照RTSP規定送出封包,完整模擬用戶端行為,判斷主機丟回的錯誤訊息,
最後呼叫之前以經開發好的傳送簡訊API、傳送郵件API。
正確率提升到接近100%,主機上也沒了垃圾訊息,終於可以快樂睡覺。

另外,socket programming的應用還有數例,將於課程Network Programming、
Internet Technology與Multimedia communication中分享。
其中包含使用舊型機上盒實作MPEG2協定分析儀。

沒有留言:

張貼留言