網際網路的故事
Calendar 3047年正月廿六
卓俊宏 (1999) 2020-02-19 09:43:21 WED
全球化時代,享受通訊便利是拜 Internet 網際網路之賜,我們可跟遠在數百公里外的親友通話,且通話品質愈來愈好,就是因為我們ISP業者佈建的電纜、光纖頻寬愈來愈高,IC設計與電腦網通業者的設備品質效能愈來愈好,以及軟體公司所發展的軟體整合與個別人工智慧演算法愈來愈強之故,今天我們就來說個網際網路的故事。

網際網路最重要的成員是IP 和 TCP兩位父子,父親 IP負責路線準備,大兒子TCP負責運送(Transmission Control),通常我們會用TCP/IP來表示這對父子。IP 怎麼準備路線的呢?就是要知道來源和目的主機的位址,如來源IP Address 是192.168.1.100,目的IP Address是 192.168.1.211。IP的任務就是把這條路準備好。(這個位址的表示方法目前仍使用IPv4 (32bits),但未來會提升到IPv6(128bits)。)

IP準備好後,就會交給大兒子TCP,TCP辦事可靠,只要給他包裹就一定能送達,送貨過程中如果發現包裹有問題,就會再派一輛重送,不會搞丟。IP的另外一位兒子UDP(User Datagram用戶資料包),你給他包裹,他會幫你送,但有錯誤他不管,只會派一輛車去做這件事,不保證一定送達且資料正確。所以如果想要送快一點就交給UDP,穩一點就交給TCP。

2560px-HTTP_logo_svg.png
看看包裹裡頭的內容,內容才是我們的重點。很多元的,收貨的時候會知道是HTTP(超文本 HyperText)、SMTP(郵件Simple Mail)、FTP(檔案File)或其他。使用瀏覽器連到對方Web Server架設的平台,傳輸的內容都是 HTTP,如果有安全考量就會使用有金鑰的HTTPS,現在大部分網站都使用HTTPS協定。而版本的歷程,從1991年的HTTP 0.9版,1996年的HTTP 1.0版,1997年的1.1版,2015年的 2.0版,到最新的版本是2018年的 3.0版。

HTTP是一個客戶端和伺服器端之間請求和回應的標準,通常透過TCP來傳輸,比如我們在伺服器上的指定 80 埠Port。遠端伺服器的電腦內有一些檔案 *.html(網頁), *.jpg(圖檔), *.mp3(音樂)...。就會把這些內容呈現到我們的瀏覽器上,中間技術細節實際就是經過請求與回應,再由狀態知道是否正確。

Response 訊息為「狀態行(通用資料頭|響應頭|實體頭) CRLF 〔實體內容〕」比如 HTTP/1.1 200 OK 表示成功。
1×× Informational 
2×× Successful 請求成功
3×× Redirection 為完成請求客戶需進一步細化請求
4×× 客戶錯誤
5×× 伺服器錯誤

請求的方法有好幾種,HTTP/1.1協定中 定義了九種方法或稱為動作,大小寫要注意。

1. GET
通常GET是由一個url 給發起的,如果有其他參數,就依附在 querystring,如 http://www.mahahino.com?a=1

如請求:
GET / HTTP/1.1
Host: www.mahahino.com

回應:
HTTP/1.1 200 OK
Date: Mon, 17 Feb 2020 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 138
Last-Modified: Mon, 17 Feb 2020 23:11:55 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
ETag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Connection: close



An Example Page


Hello World, this is a very simple HTML document.





2. HEAD
與GET方法一樣,都是向伺服器發出指定資源的請求。只不過伺服器將不傳回資源的本文部份。
它的好處在於,使用這個方法可以在不必傳輸全部內容的情況下,就可以從回傳的header取得meta-information。

3. POST
向指定資源提交資料,請求伺服器進行處理(例如提交表單或者上傳檔案)。資料被包含在請求本文中。這個請求可能會建立新的資源或修改現有資源,或二者皆有。每次提交,表單的資料被瀏覽器用編碼到HTTP請求的body里。瀏覽器發出的POST請求的body主要有有兩種格式,
一種是application/x-www-form-urlencoded用來傳輸簡單的資料,大概就是"key1=value1&key2=value2"這樣的格式。
另外一種是傳檔案,會採用multipart/form-data格式。
採用後者是因為application/x-www-form-urlencoded的編碼方式對於檔案這種二進位的資料非常低效。

4. PUT
向指定資源位置上傳其最新內容。

5. DELETE
請求伺服器刪除Request-URI所標識的資源。

6. TRACE
回顯伺服器收到的請求,主要用於測試或診斷。

7. OPTIONS
這個方法可使伺服器傳回該資源所支援的所有HTTP請求方法。用'*'來代替資源名稱,向Web伺服器傳送OPTIONS請求,可以測試伺服器功能是否正常運作。

8. CONNECT
HTTP/1.1協定中預留給能夠將連接改為管道方式的代理伺服器。通常用於SSL加密伺服器的連結(經由非加密的HTTP代理伺服器)。
方法名稱是區分大小寫的。當某個請求所針對的資源不支援對應的請求方法的時候,伺服器應當返回狀態碼405(Method Not Allowed),當伺服器不認識或者不支援對應的請求方法的時候,應當返回狀態碼501(Not Implemented)。

9. PATCH
用於將局部修改應用到資源。


HTTP 有幾個重要概念:

  1. 消息(Message):HTTP通訊的基本單位。
  2. 請求(Request):一個從客戶端到伺服器的請求資訊包括應用於資源的方法、資源的標識符和協議的版本號。
  3. 回覆(Response):一個從伺服器返回的資訊包括HTTP協議的版本號、請求的狀態和文檔的MIME類型。
  4. 資源(Resource):由URI標識的網絡資料對象或服務。
  5. 實體(Entity):數據資源或來自服務資源的回映的一種特殊表示方法,它可能被包圍在一個請求或響應資訊中。一個實體包括實體頭資訊和實體的本身內容。
  6. 客戶機(Client):一個為發送請求目的而建立連接的應用程式。
  7. 用戶代理(Useragent):初始化一個請求的客戶機。它們是瀏覽器、編輯器或其它用戶工具。
  8. 伺服器(Server):一個接受連接並對請求返回資訊的應用程式。
  9. 源伺服器(Originserver):是一個給定資源可以在其上駐留或被創建的伺服器。
  10. 代理(Proxy):一個中間程序,它可以充當一個伺服器,也可以充當一個客戶機,為其它客戶機建立請求。請求是通過可能的翻譯在內部或經過傳遞到其它的伺服器中。一個代理在發送請求信息之前,必須解釋並且如果可能重寫它。代理經常作為通過防火牆的客戶機端的門戶,代理還可以作為一個幫助應用來通過協議處理沒有被用戶代理完成的請求。
  11. 網關(Gateway):一個作為其它伺服器中間媒介的伺服器。與代理不同的是,網關接受請求就好象對被請求的資源來說它就是源伺服器;發出請求的客戶機並沒有意識到它在同網關打交道。網關經常作為通過防火牆的伺服器端的門戶,網關還可以作為一個協議翻譯器以便存取那些存儲在非HTTP系統中的資源。
  12. 通道(Tunnel):是作為兩個連接中繼的中介程序。一旦激活,通道便被認為不屬於HTTP通訊,儘管通道可能是被一個HTTP請求初始化的。當被中繼的連接兩端關閉時,通道便消失。當一個門戶(Portal)必須存在或中介(Intermediary)不能解釋中繼的通訊時通道被經常使用。
  13. 緩存(Cache):反應信息的局域存儲。

為何叫做協定,目的就是為了標準化,否則各做自己的,就很難在這全球化網路世界裡普及通用。最後列出所謂的七層OSI模型,通常也可簡化為四層:應用層application layer、傳輸層transport layer、網路互連層internet layer、網路存取(連結)層 Network Access(link) layer。


項目
備註
7. 應用層
application layer
HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP、TLS
6. 表現層
presentation layer
XDR、ASN.1、SMB、AFP、NCP
5. 會議層
session layer
ASAP、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、IGMP、Winsock、BSD sockets
4. 傳輸層
transport layer
TCP、UDP、RTP、SCTP、SPX、ATP、IL
3. 網路層
network layer
IP、ICMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、X.25
2. 資料連結層
data link layer
乙太網路、權杖環、HDLC、影格中繼、ISDN、ATM、IEEE 802.11、FDDI、PPP
1. 實體層
physical layer
數據機、無線電、光纖