網路程式開發者所需要的網路知識 ( Concepts for a network programmer )

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

身為一個網路程式開發者所需要的網路知識可能如下:
  • 網路工具的使用。
  • 網域名稱與主機位址。
  • 通訊協定。
  • 網路封包。

網路工具的使用

在Linux Ubuntu上可利用下面指令來安裝網路工具:
sudo apt-get install netcat-openbsd tcpdump traceroute mtr
請在Linux下試試底下的指令:
ip addr show eth0
ip route show
ping -c3 8.8.8.8ip route show default
netstat -nr
host -t aaaa google.com
host -t mx tw.yahoo
tcpdump -n -c5 -i eth0 port 22traceroute tw.yahoo.com
mtr tw.yahoo.com
printf 'HEAD / HTTP/1.1\r\nHost: tw.yahoo.com\r\n\r\n' | nc tw.yahoo.com 80

在Windows系統下,有 netstat 與 ping 指令可以用來檢查電腦的網路狀態。此外若需要分析封包時,可用Wireshark這套軟體來協助。

檢測電腦 IPv6 的功能網頁:http://test-ipv6.com/

網域名稱與主機位址。

網域名稱(Domain Name)是用來辨識網路上某一台電腦,以Google為例, www.google.com 剛好是Google的網域名稱與搜尋引擎網址的名稱,每一個網域名稱通常會有至少一組的 IP位址(住址),這可用 ping 的指令來查詢到,而 www.google.com 所對應的IP可能為108.177.97.106。
【那這IP是從何而來的?】透過網路上的 Domain Name System所存放的網域名稱與IP對應表,一個網域名稱所對應的IP就可被查詢到了。

另外,現存的主機位址有 32 bits 的 IPv4 與 128 bits 的 IPv6。此外也需要分清楚私有網路與公開網路以及實體IP、虛擬IP、固定IP、子網路(Subnetwork)等觀念。

通訊協定。

現今有很多軟體會透過網路進行資料傳輸,如閱讀網頁的瀏覽器(Browsers)、檔案傳輸、遊戲、遠端登入等,這些軟體之間的溝通方式需要統一,所用的方式就是透過建立每一種服務的通訊協定,目前已有很多的通訊協定已制定好了,如網頁服務的HTTPHTTPS,檔案傳輸的FTP。除了這些已制定好的通訊協定外,還有自訂的通訊協定,例如遊戲公司所開發的網路遊戲所使用的資料傳輸格式就會是開發團隊所定義的協定。下圖以網頁為例:

圖的左邊為瀏覽器(Firefox、IE、Chrome等),右邊為網頁伺服器,兩者之間透過 HTTP/HTTPS來統一溝通的方式;若是檔案傳輸服務時,左邊就變成請求服務的FTP Client,右邊變成提供服務的 FTP Server,中間的箭頭變成FTP協定了。若是遊戲公司所開發的線上遊戲會是怎麼回事呢?

在程式語言中,圖中的箭頭通常是由 socket 相關的 API 所建立的,可參考 Java 官方的教學文件:What Is a Socket ?

網路封包

須了解網路封包的格式、順序、為什麼封包會遺失等觀念,網路封包的格式會根據不同的通訊協定而有差異,請參考各自的通訊協定的規範,例如網頁 ==> HTTP 或 HTTPS。在網路上,資料的傳輸順序不一定是依序的,會依據網路狀況與軟體的設計方式而有所不同,在多工的系統上就會更混亂了。

以一個團體在討論議題時為例,可能的情況:甲對主席提問,同時乙跟丙也對主席提問,三人都只顧自己發言,不等人發言完再發言。這時主席有辦法了解甲乙丙三人的問題嗎?伺服器的情況跟主席一樣,若有太多資料要處理時,伺服器有可能就當掉了,這是網路封包會掉的原因之一,當然還有其他的原因,就請讀者慢慢體會了。

以上幾點的詳細內容可參考Udacity上的免費課程:Networking for Web Developers

希望有幫助到讀者建立學習的方向。

沒有留言: