基礎網路概念 - 淺談通訊協定


網路和網路相互連接,不同的網路系統也具有不同的通訊協定,為了讓不同的網路系統能有一致的通訊協定,標準化便非常重要。

OSI 與 TCP/IP

什麼是 OSI?

開放式通訊系統互連參考模型(Open System Interconnection Reference Model,OSI),是由國際化標準組織(ISO)針對開放式網路架構所制定的電腦互連標準,簡稱OSI模型。該模型是一種制定網路標準都會參考的概念性架構,並非一套標準規範,也不是用來提供實現的方法,而是透過觀念描述,協調各種網路功能發展時的標準制定。

OSI模型共切分成7個不同的層級,每級按照網路傳輸的模式,定義所屬的規範及標準。由具體到抽象的網路傳輸方式層次來看,7層分別為實體層、資料連結層、網路層、傳輸層、會議層、展示層及應用層。

有個口訣可以幫助記憶七層的順序,All People Seem To Need Data Process

不論是接收端還是發送端,每個一階層只認識對方的同一階層資料。透過應用程式將資料放入第七層的包裹,再將第七層的包裹放到第六層的包裹內, 依序一直放到第一層的最大的包裹內,然後傳送出去給接收端。接收端的主機就得由第一個包裹開始,依序將每個包裹拆開, 然後一個一個交給對應負責的階層來視察。

OSI 七層協定資料的傳遞方式

OSI 模型各層

  • Physical Layer:提供雙方系統間實體介面、傳送位元的規則。控制電腦介面如何經由網路來交談,這一層指定了電子規格。傳輸介質的規格、接頭的規格、資料在介質上的呈現方式。
  • Data Link Layer:提供Network Layer及Physical Layer間之管理、錯誤偵測與控制。將要送經網路的資料包裝及拆裝,組織這些位元。負責將資料切割成真正的資料框,並將之送至傳輸媒介上。其中常見的封包碰撞機制:CSMA/CA和CSMA/CD。
  • Network Layer:提供雙方透過網路的定址方法、傳送路徑。在點對點傳輸中,由於Data Link Layer已提供管理之功能,因此用不到此層。指定使用者資料轉送至網路的界面,負責資料的包封及傳輸途徑的設定。
  • Transport Layer:提供雙方資料交換規則及品質最佳化。確保資料輸送的品質及可靠性,提供兩個系統間可靠穩定並無錯誤的資料傳輸管道。
  • Session Layer:提供雙方應用程式之間的溝通方式和規則。含有溝通、群組、還原三個主要服務。提供使用者應用作業同步及控制。這層提供會談連結的建立,建立會談以及終止會談。建立傳輸規則。
  • Presentation Layer:提供雙方應用程式之間資料格式的轉換。確認使用者應用作業格式以使其能夠彼此交換資料,如將 ASCII 轉換成 EBCDIC內碼轉換、壓縮與解壓縮、加密與解密。
  • Application Layer:提供雙方應用程式存取OSI環境的方法。支援使用者應用作業,如檔案傳輸、電子郵件、虛擬終端、名錄服務、訊息處理系統。

什麼是 TCP/IP?

網際網路協議套組(英語:Internet Protocol Suite,IPS),是一個網路通訊模型,以及一整個網路傳輸協定家族,為網際網路的基礎通訊架構。常被通稱為TCP/IP協定族(TCP/IP Protocol Suite,或TCP/IP Protocols),簡稱TCP/IP。這些協定最早發源於美國國防部(縮寫為DoD)的ARPA網項目,因此也被稱作DoD模型(DoD Model)。

TCP/IP提供了點對點連結的機制,將資料應該如何封裝、定址、傳輸、路由以及在目的地如何接收,都加以標準化。它將軟體通訊過程抽象化為四個抽象層,採取協定堆疊的方式,分別實作出不同通訊協定。協定套組下的各種協定,依其功能不同,分別歸屬到這四個階層之中,常視為是簡化的七層OSI模型。

兩個網際網路主機通過兩個路由器和對應的層連接。各主機上的應用通過一些資料通道相互執行讀取操作。

Photo by Kbrose on Wikimedia Commons

TCP/IP 模型各層

  • Link Layer:這一層又稱網路介面層 (Network Interface Layer),負責與硬體溝通,雖然沒有定義任何通訊協定,但基本上,它支援所有標準的通訊協定。
  • Network Layer:這一層又稱網際網路層 (Internet Layer),負責定址與路由等工作,而且資料是以資料元 (datagram) 為單位,比較知名的通訊協定有 IP(Internet Protocol)。
  • Transport Layer:這一層又稱主機對主機層 (Host-to-Host Layer),負責區段排序、錯誤控制、流量控制等工作,比較知名的通訊協定有 TCP(Transmission Control Protocol)、UDP(User Datagram Protocol)。
  • Application Layer:這一層負責提供網路服務給應用程式,如FTP(File Transfer Protocol,檔案傳輸協定)、SMTP(Simple Mail Transfer Protocol,簡易郵件傳送協定)、POP(Post Office Protocol,郵件接收協定)、DNS(Domain Name System,網域名稱系統)、Telnet(遠端登入)、SNMP(Simple Network Management Protocol,簡易網路管理協定 )、HTTP(HyperText Transfer Protocol, 超文字傳輸協定)等。

OSI 模型與 TCP/IP 模型的差別

OSI DoD 與 TCP/IP 對照圖

  • 相同處:
    • 都採用階層式結構的概念。
    • 都能提供TCP Protocol和UDP Protocol這兩種通訊服務機制。
  • 不同處:
    • OSI 是七層的結構,而 TCP/IP 則是四層的結構。
    • 對可靠性要求不同,TCP/IP模型要求更高。
    • OSI 模型是在協議開發之前設計的,因此具有通用性;而 TCP/IP 模型則是在協議已有的情況下建立的,因此不適用於非 TCP/IP 網路。
    • OSI 模型只是理論上的模型,並沒有成熟的產品支持,而 TCP/IP 模型則已經是「國際標準」。

常見的通訊協定

HTTP(HyperText Transfer Protocol,超文本傳輸協定)

HTTP 是一種用來傳輸超媒體文件 (像是 HTML 文件) 的應用層協定,被設計來讓瀏覽器和伺服器進行溝通,但也可做其他用途。HTTP 遵循標準客戶端—伺服器模式,由客戶端連線以發送請求,然後等待接收回應。HTTP 是一種無狀態協定,意思是伺服器不會保存任兩個請求間的任何資料 (狀態)。儘管作為 TCP/IP 的應用層,HTTP 亦可應用於其他可靠的傳輸層 (例如 UDP),只要不會無聲無息地遺失訊息即可。

HTTP Method

  • OPTIONS:這個方法可使伺服器傳回該資源所支援的所有 HTTP 請求方法。
    就是詢問這個主機提供哪些 Http 方法讓人使用,但也可以被惡意攻擊者刺探敏感資訊,通常弱點掃描檢測到都會建議關閉此方法。
  • HEAD:可以在不必傳輸全部內容的情況下,就可以取得其中「關於該資源的資訊」(元資訊或稱元資料)。
    以 html 來說,都有一塊標題或css等資訊,HEAD就是只取這一塊資料。
  • GET:向指定的資源發出「顯示」請求。使用 GET 方法應該只用在讀取資料,而不應當被用於產生「副作用」的操作中。
  • POST:向指定資源提交資料,請求伺服器進行處理(例如提交表單或者上傳檔案)。資料被包含在請求本文中。
  • PUT:向指定資源位置上傳其最新內容。
  • DELETE:請求伺服器刪除 Request-URI 所標識的資源。
  • TRACE:回顯伺服器收到的請求,主要用於測試或診斷。
  • CONNECT:HTTP/1.1 協定中預留給能夠將連線改為管道方式的代理伺服器。通常用於 SSL 加密伺服器的連結(經由非加密的 HTTP 代理伺服器)。
  • PATCH:更新,在現有的資料欄位中,增加或部分更新一筆新的資料。

PUTPATCH 通常都用在更新資源,兩者的差異是 PUT 預期的行為會是取代整個資源,而 PATCH 則是更新部分資源。

HTTP Status Code

從伺服器端回傳 HTTP Response 時會有一組 Status Code 來表示回應狀態

  • 1XX 訊息類 (Informational responses):收到請求,請求者繼續執行操作。
  • 2XX 成功類 (Successful responses):操作被成功接受並處理,如:200 成功回應。
  • 3XX 重定向類 (Redirects):需進一步操作才能完成,如:301 成功轉向。
  • 4XX 客戶端錯誤類 (Client errors):請求語法錯誤或無法完成請求,如:404 找不到資源。
  • 5XX 伺服器錯誤類 (Server errors):後端的問題,如:500 伺服器錯誤。

FTP ( File Transfer Protocol,檔案傳輸協定 )

FTP 是一個用於在電腦網路上在客戶端和伺服器之間進行檔案傳輸的應用層協定。

FTP 如何運作?

FTP是一種主從式協定,用戶端要求檔案,而伺服器則提供檔案。這樣一來,FTP 建立連線時需要兩種基本通道:命令通道 ( 負責啟動指令並攜帶基本資訊,即欲存取哪些檔案 ) 和資料通道 ( 在兩個裝置之間傳輸檔案資料 )。為了建立連線,使用者需要向 FTP 伺服器提供登入資料,FTP 伺服器通常會將 21 號連接埠選為預設通訊模式。還需注意一點,FTP 有兩種連線模式:主動式和被動式。

在主動模式下,伺服器會主動核准資料請求。不過,主動模式有時可能會因防火牆而發生問題,即防火牆會封鎖來自第三方未經授權的工作階段。這時被動模式就能派上用場。在被動模式下,伺服器不會主動維持連線,而是由使用者同時建立資料通道和命令通道。基本上,伺服器「聽令」但不主動參與,而是由其他裝置來處理大部分工作。

FTP 傳輸並未加密,駭客擷取資料封包後 ( 即封包擷取攻擊 ),就能相對輕易地讀取密碼、使用者名稱和其他敏感資料。

SSH ( Secure Shell Protocol,安全外殼協定 )

SSH 由 IETF 的網路工作小組 (Network Working Group) 所製定,SSH 為建立在套用層和傳輸層基礎上的安全協定。SSH 是一個連線加密機制,讓我們在與遠端電腦(遠端伺服器)連線時,能夠先將訊息加密過後再傳送,並且確保只有「被認可的人」才能夠解密訊息。因此,就算是在一個不安全的網絡裡面,SSH 都能夠確保連線不被竊聽。

截至鳥哥文章「加密機制有點像是兩個人之間的火星語對話啦!如果你跟你的朋友約定好使用你們制訂的某種特別語言, 這個語言只對你們兩個有意義。那麼當你們兩人講話時,在旁邊的人聽到的只是一堆沒有意義的聲音,因為他們聽不懂啊! 即使路人將你的聲音錄下來,只要他不知道你們的特殊用語,那他就不可能瞭解你們對話的內容囉。」

對於開發者來說最熟悉的例子應該就是透過 SSH 不用每次都輸入密碼就連線至 GitHub 上的 Repo。

SMTP ( Simple Mail Transfer Protocol,簡易郵件傳送協定 )

SMTP 是在網際網路的不同郵件伺服器之間,進行電子郵件的交換與傳輸的通訊協定,SMTP 屬於即時送信與收信的通訊協定,傳送端與接收端的主機必須開機並連線,傳送端送出信件後,接收端立即收到信件。SMTP 傳輸協定的內容包括:「信封(Envelope)」指明收件人的電子郵件地址。

例如:使用者 @ 郵件伺服器(hightechtw@gmail.com);「表頭(Header)」指明電子郵件的重要訊息,其中「To」指明收件人的電子郵件地址、「From」指明寄件人的電子郵件地址、「Subject」指明電子郵件的主旨、「Date」指明電子郵件的發信日期與時間等;「本文(Body)」就是我們所要傳送的電子郵件的內容。

參考資料

作者

Nick

發表於

2021-04-24

更新於

2021-11-10

許可協議

評論