# Computer Networking — 1.1 What is the Internet contributed by <[`kaeteyaruyo`](https://github.com/kaeteyaruyo)> ###### tags: `Computer Networking` ## 1.1.1 A Nuts-and-Bolts Description * **網際網路** (Internet) 一詞意指連接世界上數十億台電子設備的計算機網路。 * 在不久以前,這些電子設備主要都還是桌上型電腦、 Linux 工作站,還有俗稱伺服器的那些用來儲存和傳輸像網頁或 e-mail 等訊息用的電腦。 * 但是到近代,一些非傳統的裝置如筆電、智慧型手機、平板、電視、遊戲主機、恆溫器、家庭保全系統、家電、手錶、眼鏡、汽車、交通號誌...等等,也全都被接到網際網路上了。事實上,**計算機**網路 (computer network) 一詞聽起來已經有點過時了,畢竟有這麼多不是電腦(計算機)的東西連接在網路上。 * 以網際網路的行話來說,我們稱上述這些裝置叫作**主機** (host) 或是**終端設備** (end system)。 * 有統計顯示,至 2015 年止,網際網路上已連接了大約 50 億餘台的裝置,預計至 2020 年時更會增長到 250 億台。[Gartner 2014] * 另有統計顯示,至 2015 年止,網際網路上已有 32 億的使用者數,相當於是地球人口的 40%。[ITU 2015] * 網際網路中的終端設備,是以**電信網路** (communication link) 和**封包交換機** (packet switch) 連接起來的。 * 後面我們會介紹各種不同的電信網路,他們以不同的物理媒介進行傳輸,包含同軸電纜、銅製電線、光纖,以及無線電。不同的傳輸媒介擁有不同的**傳輸速率** (transmission rate), 其單位為 bits/second。 * 當一個終端裝置要傳送資料給另一台裝置的時候,傳送方會先把資料拆成好幾個小片段,對每一個片段加上一些代表標頭 (header) 的位元。這些被處理過的資料包,被稱作**封包** (packet)。封包被透過網路傳送到接收端,再由接收端將其重組回原本的資料。 * 封包交換機用於封包傳輸。封包從他的其中一個入邊進來,再從另一個出邊出去,藉此傳輸到其最終目的地。這一路上經過的邊我們稱作**路由** (route) 或是**路徑** (path)。 * 交換機有很多種,但在當今的網際網路中最重要的兩種是**路由器** (router) 和**資料層交換機** (link-layer switch)。 * 資料層交換機主要用在存取網路(連到你家裡的那塊),而路由器主要用在網路核心(連接網路和網路的部份)。 * 封包傳輸網路跟大眾運輸網路其實是十分相像的。車子在交通網路中運輸,就跟封包在網際網路上運輸是一樣的。想像一個製造商運輸貨物的情境,這跟網路資料傳輸之間有非常良好的對應關係: * 卡車:封包 * 高速公路和馬路:通訊線路 * 路口:交換機 * 倉庫:終端裝置 * 思科 (Cisco) 曾預測,在 2016 年底,世界上的年度網路流量將會超過 1 ZB ($10^{21}$ bytes),並會在 2019 年時達到 2 ZB。 [Cisco VNI 2015] * 終端設備透過**網際網路服務供應商** (Internet Service Provider, ISP) 來存取網路上的內容。 * ISP 有很多種,像是地區的電信公司、企業用的 ISP、 學術用的 ISP、 提供店家 WiFi 的 ISP, 還有蜂巢式網路的 ISP 等。每個ISP都自成一個封包傳輸網路。 * ISP 提供了各式各樣的服務,像是住家用的寬頻網路、高速的區域網路連線、行動式無線網路連線,甚至可以直接連上網頁或是影片等內容提供商。 * 上述這些區域型的,或是說底層的 ISP, 會藉由國家甚至國際級,或是說更高層的 ISP 連結在一起。這些高層的 ISP 由高速的路由器和高速的光纖網路組成。(在美國那種很大的國家是這樣,不同州的電信網路需要透過像 AT&T 那樣的電信商連接在一起,但台灣應該全都是透過中華電信管(´・ω・`)) * 不管是低層的或是高層的 ISP ,他們都是獨立管理的。他們運作在 IP 協定上、遵守特定的命名和定址規則。 * 無論是終端設備、交換機還是其它裝置,都需要遵守**通訊協定** (protocol) 才能在網路上傳輸資料。當前網路上最重要的兩種協定是 **Transmission Control Protocol (TCP)** 和 **Internet Protocol (IP)**, 他們定義了封包內容的格式,兩者被合稱為 **TCP/IP** 通訊協定家族。 * 既然通訊協定這麼重要,那確保大家都同意並遵守通訊協定的內容就更重要了,這樣才能讓每個人做出來的機器能夠彼此互相溝通。因此我們需要一個標準規格,這個規格目前由 **Internet Engineering Task Force (IETF)** 統一制定,這些規格書的名字叫作 **Requests for Comments (RFCs)**, 目前大概有 7000 多份的 RFC 被制定出來。 * 另外也有其它組織制定跟網路通訊相關的規格書。像是 IEEE 802 LAN/MAN Standards Committee [IEEE 802 2016], 就制定了跟乙太網和無線 WiFi 有關的標準。 ## 1.1.2 A Services Description * 上述內容已經介紹了組成網際網路的各個元件,但我們也可以從另一個角度描述網際網路:*網際網路是一個提供各種應用服務的基礎建設*。 * 網際網路可以提供的服務包山包海,例如: * 傳統的 email 和網頁服務 * 智慧型手機或平板上的服務 * 網路聊天室 * 附帶即時路況的地圖 * 雲端音樂串流 * 電影、電視即時串流 * 社群網路 * 視訊會議 * 多人線上遊戲 * 適地性 (location-based) 推薦系統 * 這些服務被稱為**分散式應用服務 (Distributed application)**, 因為他們牽涉到在多個終端設備之間互相交換資料。 * 重要的是,這些應用服務是跑在終端設備上面,而不是跑在網路核心裡的那些交換機上面。交換機雖然可以幫助資料在終端設備之間進行傳輸,但並不被視為是這些資料的來源或目的地。 * 所有連上網際網路的終端設備都會提供一個**插座介面 (Socket interface)**, 來說明這個裝置上的應用程式會如何要求網際網路將資料傳送到跑在另一個終端設備上的應用程式。 * 所謂的 socket interface, 其實就是一連串的規則,發出資料的應用程式遵守這個規則,就能將資料傳送到目標程式。 * 就像人類世界中郵政系統的運作也有一套規則一樣,我們可以暫且把這套規則稱為「郵政服務介面」 ("Postal service interface")。 舉個例子,甲想要寄一封信給乙,很顯然甲不能就寫一封信然後把他丟出窗外,這樣信是不會送到乙手上的。甲必須: * 把信放進信封 * 寫上乙的全名、地址、郵政區號 * 把信封黏好 * 貼上郵票 * 最後,把信放進郵筒裡 * 甲必須遵守郵政系統的規則才能把信寄到乙手上。同樣道理,應用程式也必須遵守 socket interface 的規則才能把資料正確的傳送到目標程式的手上。 * 就像郵政系統會提供如急件、掛號、平信等等不同的郵寄服務一樣,網際網路也有不同的傳送資料的方式。當你在開發一個應用程式時,你必須選擇其中一種。 ## 1.1.3 What Is a Protocol? ### A Human Analogy * 什麼是**通訊協定 (Protocol)** 呢?要了解網路通訊協定的概念,我們可以先用人類之間的溝通來類比。如下圖: ![人類通訊協定 vs. 電腦網路通訊協定](http://codingatschool.weebly.com/uploads/2/6/8/8/26889801/8405218_orig.gif) * 人類時時刻刻都在使用「人類通訊協定」 ("Human protocol") (或你也可以說,有禮貌的溝通方式)。當你想要問對方現在幾點時,你會: * 先跟對方說「安安」 : 初始化一段對話 * 接著對方也會回你「安安」 : 表達已經準備好可以接受請求 * 有時對方不會回你「安安」,而是「別煩我!」,或是「我不會說中文」,或是沒辦法用文字表達的回應,這代表對方現在不願意或是無法開始這段對話。在這種情況下,人類通訊協定就會終止這個問對方幾點的行動。 * 有時對方根本沒有做任何回應,這種情況下人類最終也會放棄等待現在幾點的回應。 * 然後你就可以問對方現在幾點 : 要求一個資料 * 對方回答你現在幾點 : 取得資料 * 在「人類通訊協定」當中,*我們會送出特定的訊息,也會做出特定的舉動以示回應*,顯然這些被傳送或接受到的訊息,以及我們在收到訊息時做出的動作,在人類通訊協定中扮演著非常重要的角色。 * 如果對話中的兩個人類是運作著不同的通訊協定的話,那麼這段對話就無法產生有用的結果。比如說:當一個人有禮貌但另一個人沒有,或是一個人知道時間的概念而另一個人不知道之類的。 * 人類之間必須運作相同的通訊協定才能夠正常的溝通,同樣的,兩個終端設備之間也必須運作同樣的通訊協定才能正常的傳送資料。 ### Network Protocols * 網路通訊協定就像是人類通訊協定一樣,只差在交換資料的實體是網路上的各個軟硬體元件(像電腦、手機、平板、交換機、路由器等等)。所有在網際網路上發生的活動,都受到網路通訊協定的規範,例如: * 直接用電線連接在一起的兩台電腦之間,運作的是用硬體實作的通訊協定,控制著在連接兩張網路卡的電線上的那些位元流要怎麼傳送。 * 兩個終端設備之間運作著壅塞控制協定,用來控制封包傳送的速度(單位時間內要傳送多少封包) * 路由器上運作著一種決定封包要往哪個方向跑的通訊協定 * 通訊協定在整個網際網路上無所不在,因此本書的大部份內容都會圍繞在這個議題上。 * 舉個例子,當你在瀏覽器的網址列上打上一個網址時,接著發生的事情就像上圖的右邊所描述的一樣: * 你的電腦會發出一個 TCP 連線請求,並等待網頁伺服器回應 * 如果封包正確抵達,網頁伺服器會回應一個 TCP 連線回應訊息 * 收到連線回應之後,你的電腦就知道現在可以請求資源了,因此他會送出一個 GET 請求,上頭寫著那個檔案的名字(也就是那串 URL) * 網頁伺服器收到後,就會回應該 URL 對應的網頁(檔案)給你的電腦 * 理解了上述的人類和電腦之間交換訊息的方式之後,我們可以正式對通訊協定一詞下一個定義: > **通訊協定**定義了在兩個實體之間交換的訊息的格式和順序,以及在傳送、轉送、接收訊息及其它事件發生時所需進行的動作。 * 網際網路(或是說電腦網路)大量且頻繁的使用通訊協定。不同的通訊協用來完成不同的任務,有些非常簡單且直覺,有些非常的複雜且聰明。精通網際網路這個領域的學問,就相當於是在理解這些通訊協定的內含,以及為何使用、如何使用它們。 ---- [<< 1. Computer Networks and the Internet](https://hackmd.io/@kaeteyaruyo/computer-networking-1) | [目錄](https://hackmd.io/@kaeteyaruyo/computer-networking-index) | [1.2 The Network Edge >>](https://hackmd.io/@kaeteyaruyo/computer-networking-1-2)