網路通訊基礎

介紹網頁相關的網際網路的通訊技術與協定

基礎介紹

現代提到網際網路,大部分人都不會太陌生,但對於非資訊相關領域的人說,認知可能是在於「WiFi」、「4G」這樣的通訊技術名詞, 因此當提到了上網就是連上Wifi或是開4G這樣的說法,或者是插上網路線上網這樣的概念,或者打開了電腦內的瀏覽器輸入網址,這樣的動作被普遍認知為上網。

然而上網行為背後所牽扯到的機制卻不是那麼容易幾個字描述完全的,這篇文章中所能提及的也僅僅是為了讓大家方便理解在網頁開發的背後,所會需要用上的網路基礎概念。

網路是什麼

那麼網路的概念要如何去理解呢,其實網路建設屬於基礎交通建設的一環,為什麼這樣說呢,我們可以從他的演進來看,早期撥接上網的時代,網路的線路是跟隨著電話線路(有線電話)一起建設的,那個年代只要上網電話線路就會被佔線而無法通話,所以我們不難想像,網路其實在廣義上來說是屬於通訊的範疇,是一種資訊交換的通路。

雖然我們現在上網的手段非常多,且大多數人習慣的方式都是無線上網,但終究這些無線的訊號會匯集在硬體建設上的網路實體線路上,若是較為長途的訊息傳遞,更是會經過海底電纜來進行資訊傳遞。

既然我們可以理解網路是一種資訊交換的通道,就如通車子需要跑在馬路上,我們的資訊需要網路這樣的通道來傳遞,我們就更容易去想像這件事情了。

當然網路的架構也不是一天發展而成的,是由許多大公司、組織花了許久的時間發展至今的,從1970年代的各家技術各說各話、不同的標準,一路發展成為現在擁有共同的標準,這邊我們就不一一的去深入其發展的脈絡,但這是值得了解的一個問題,在 鳥哥私房菜-第二章、基礎網路概念有很詳盡的描述,大家有時間的話可以作為深入閱讀一番,在這邊我們主要會提及一些我們後續文章中會使用的上的部分。

區域網路、廣域網路、內部網路與網際網路

首先我們先了解網路的區域範圍,也就是區域網路(LAN, Local Area Network)、廣域網路(WAN, Wide Area Network)的差異,這個部分的概念相對單純,LAN一般指的就是區域較小的環境,而WAN則是把許許多多的LAN串連再一起所形成的大型網路。

要注意且容易搞混的一點是,LAN跟WAN是以區域作為劃分的,跟所謂的內部網路(Intranet)、網際網路(Internet)是完全不同的概念,所謂的內網,大多指的是只服務特定一群人自行建設起來的內部網路,一般來說會像是企業內部、學校、醫院機構…這種概念,這些內部電腦所相互形成的網絡我們會稱之為內部網路,因為外部節點並沒有辦法直接跟內部網路進行資料交換,所以外部網路就是相對於內部網路所產生的名詞了,也就是我們所稱的網際網路(Internet)了。

如何讓裝置連上網?

有了內外網及區網的概念後,我們就簡單的來說明一下一台裝置是如何連上網路的,首先有幾個專有名詞我們先來定義一下:

  • 網路服務提供公司(ISP, Internet Service Provider) : 在台灣你可以想成提供網路服務的業者,也就是我們去申裝ADSL帳號的業者(ex. 中華電信、台灣大寬頻…),通常是電信業者,可以參考維基百科-台灣網際網路,有比較詳細的列舉,但無論是哪一家,這些業者就會提供一組可以用來上網的帳號給我們了。

  • 網路卡(NIC, Network Interface Controller) : 裝置要上網,需要透過網路卡來連接上LAN,他可以幫我們把網路訊號處理輸入進裝置,或是反向將裝置的訊號輸出至LAN中,特別要提的是網路卡這樣的硬體設備具備了一個獨一無二的編號,我們叫做MAC Adress(Media Access Control Address),這個編號是由IEEE這樣的世界性組織所分配的,因此,在網路上的每一個電腦都必須擁有一個獨一無二的MAC位址。原則上是沒有任何兩塊網路卡擁會有同樣的位址。

所以,當我們的一個裝置想要接上網際網路上網時,我們需要先擁有一組跟ISP業者申請而來的帳號,再來我們的裝置上需要有網路卡幫用來我們轉換訊號,一切就緒後將我們的網路線從網路卡上連接上ISP業者所提供的數據機上,這樣便可以上網了。

但這時候如果我們不想要透過實體網路線接上網數據機上網的話,我們就需要使用到無線網路了,而要能夠使用無線網路就必須要有無線網路的存取點(Wireless Access Point, WAP),也就是我們常說的無線基地台,通常這樣的裝置都會跟路由器(Router)做在同一台機器上,所以當我們去3C產品行購買各種品牌的無線網路分享器時,通常我們就是買了具備無線網路存取功能的路由器,當我們有了這樣的設備後,就必須將這個設備接上ISP的數據機,並且設定好我們的Wifi名稱(SSID)與密碼,這樣形成的網路環境就是一個內部網路的環境了,然後我們的各項裝置(手機、平板、智慧音響、智慧電視…)透過無線網卡連接上我們AP所分享出來的無線網路後就被納入了同一個內部網路了,而我們的無線網路分享器就會幫我們把我們的訊息轉換輸出給數據機輸出至Internet,同時也把Internet的訊號經由數據機、分享器然後轉送至我們的裝置上,這樣一來就可以使用無線網路上網了。

網站是什麼

當我們可以理解網路的概念後,網站的概念就容易得多了,網站就是在網路中,把資訊提供給大家取用的一個節點,就如同佈告欄一樣,而建立這個節點也是我們說的架設網站了,架設網站一般來說需要一台伺服器,將這台伺服器接上網路並且開啟站台的服務,將我們想要公佈的資訊與檔案放入站台中,就可以公開讓大家存取了,一般來說網際網路的站台會有對應的地址也就是我們等等會提到的網址,這樣一來,想要存取資源的使用者,就可以透過瀏覽器,輸入網址後取得我們放在站台中的資料。

當然,存取的檔案哪容以及瀏覽器支援的檔案格式是有固定的規格的,而這樣的檔案格式與規定便是我們這系列文章的主軸:HTML、CSS與Javascript這樣子的檔案類型了,瀏覽器也是藉由解析這樣子的檔案,並且進一步了解並呈現出一個個網頁畫面的。細節的部份我們會在後續瀏覽器的文章中來說明,這邊我們主要需要了解的流程是,當我們輸入了網址,網址便會讓瀏覽器找到這個網址背後對應站台所提供的資料與檔案,瀏覽器會幫我們把這些資料檔案下載回來,並且在瀏覽器內去解析這些文件,轉化成我們人類方便閱讀的畫面呈現給使用者。

網址(URI)、網域(Domain)、DNS(Domain Name System)與IP Adress

上面有提到網址的概念,但一串如同Google搜尋頁面的網址http://google.com這樣的一串字是如何連結到Google的網站的,這背後當然也有一個專門負責解析與對應的機制,所謂網址的組成,其實是有一個完整的規定的: [協定類型]://[伺服器位址]:[埠號]/[資源層級UNIX檔案路徑][檔名]?[查詢]#[片段ID],我們這邊會提到的是[協定類型]://[伺服器位址]這部分,用上面Google的頁面來說,協定類型指的就是http,我們下面會再做說明,而伺服器位址就是我們網站的地址,是一串文字藉由.區分開來的所表達的,在網際網路上這樣的表達方式必須是不能重複的,這樣的概念我們稱為 網域(Domain),而網域其實是為了我們方便記憶所產生的一套命名機制。

原本每一個連上網際網路的節點都具備了一個地址,這樣子資訊才能夠正確無誤的傳遞到該節點上的裝置,而這樣的地址我們稱之為 網際網路協定位址(IP Adress, Internet Protocol Adress) ,但因為IP位址的表示方式是由一串數字來表示的並不容易記憶,例如北科大的網址:ntut.edu.tw 所對應的IP位址就是 140.124.13.105,而幫我們把IP轉換成 ntut.edu.tw網域這樣的動作就是DNS(Domain Name System)的工作了,這樣的工作叫做解析域名,概念上來說DNS會有一份IP對應Domain的對應表,當我們輸入網址想要存取放在google.com上的資料時,他就會幫我們將Domain解析出實際的IP位置然後將告知我們實際要前往的IP地址是什麼,這樣一來我們就可以對那個IP的網站進行資料存取了。

HTTP通訊協定

上面提到的HTTP通訊協定,其實就是在網路世界中用來規範溝通方式內容的一個規定,也就是當資訊要進行傳輸及溝通時,我們必須要有一樣的規格,這樣我拿到你的資料後才能知道如何解析成為人類可以閱讀的方式,這樣的規範術語上我們就稱為通訊協定,而網路世界中最常用的就是 HTTP,全名是 Hyper Text Transfer Protocol 中文譯作 超文本傳輸協定,因此當我們想要存取一個網站的資料時,在我們輸入了網址按下確認後,瀏覽器的實際行為就是對該網址站台發起一個HTTP的存取 請求(Request) ,當對方接收請求後便會對這個請求進行 回應(Response),透過這樣發起請求、站台回應的方式來進行資訊的傳遞與交換。

請求方法

而資訊傳遞又可以細分成不同目的,為了這些目的HTTP有定義了相對應的方法(Methods),也就是不同請求的方法,而一般我們在瀏覽器輸入URL取得畫面就是瀏覽起發起了GET的Requent。這邊列出常見的幾種,細節的部分可以參考MDN-HTTP請求方法

  • OPTIONS:方法描述指定資源的溝通方法(communication option)。
  • GET : 方法請求展示指定資源。使用 GET 的請求只應用於取得資料。
  • POST : 方法用於提交指定資源的實體,通常會改變伺服器的狀態或副作用(side effect)。
  • DELETE :方法會刪除指定資源.
  • PUT :方法會取代指定資源所酬載請求(request payload)的所有表現。
  • PATCH :方法套用指定資源的部份修改。

回應與狀態碼

除了請求以外,回應 (Response) 在HTTP中也是有規範的,回應的訊息當中會包含了 狀態碼(Status code),這些狀態是用來告訴發起請求的客戶端(這邊的情境指的就是瀏覽器)這個請求的狀態,讓請求端知道回應是否成功、失敗或是有其他跳轉的狀況,下列是HTTP常用的Response Status Code,詳細的部分可以看維基百科-HTTP狀態碼

  • 2xx 系列:表示請求成功

    • 200 OK:請求已成功,請求所希望的回應頭或資料體將隨此回應返回。
    • 201 Created:請求已經被實現,而且有一個新的資源已經依據請求的需要而建立,且其URI已經隨Location頭資訊返回。
    • 202 Accepted:伺服器已接受請求,但尚未處理。
    • 204 No Content:伺服器成功處理了請求,沒有返回任何內容。[
  • 3xx 系列:表頁面重新導向

    • 301 Moved Permanently:被請求的資源已永久移動到新位置,並且將來任何對此資源的參照都應該使用本回應返回的若干個URI之一。如果可能,擁有連結編輯功能的用戶端應當自動把請求的位址修改為從伺服器回饋回來的位址。
  • 4xx 系列:表用戶端錯誤

    • 400 Bad Request:由於明顯的用戶端錯誤(例如,格式錯誤的請求語法,太大的大小,無效的請求訊息或欺騙性路由請求),伺服器不能或不會處理該請求。
    • 401 Unauthorized:401語意即「未認證」,即用戶沒有必要的憑據。
    • 403 Forbidden:伺服器已經理解請求,但是拒絕執行它。
    • 404 Not Found:請求失敗,請求所希望得到的資源未被在伺服器上發現,但允許用戶的後續請求。
  • 5xx 系列:表伺服器端錯誤

    • 500 Internal Server Error:通用錯誤訊息,伺服器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。沒有給出具體錯誤資訊。
    • 502 Bad Gateway:作為閘道器或者代理工作的伺服器嘗試執行請求時,從上游伺服器接收到無效的回應。
    • 503 Service Unavailable:由於臨時的伺服器維護或者過載,伺服器目前無法處理請求。這個狀況是暫時的,並且將在一段時間以後恢復。[61]如果能夠預計延遲時間,那麼回應中可以包含一個Retry-After頭用以標明這個延遲時間。如果沒有給出這個Retry-After資訊,那麼用戶端應當以處理500回應的方式處理它。

關於HTTP的請求與回應我們會在後續講到如何使用HTML Form以及Javascript進行Ajax請求的時候再更詳細做說明,這邊只是要讓大家藉由了解HTTP協定的一些內容用以建構整體網路及網站運作的概念。

小結

上面十分籠統的講述了網際網路通訊的部分皮毛,目的是為了幫助大家在後續文章的閱讀上可以比較有感覺、了解自己在進行的內容是什麼,有一個比較整體的概念,這邊很難完整得講完所以細部的機制,畢竟這樣的一個主題在相關科系中會是一門專門的課程,通常會是「資料通訊」或是「企業資料通訊」…這樣的課程,