# 專題筆記: 網路通訊協定 ###### tags: `專題` ( 09/29 - 10/05, 2022 ) <!-- -------------------------------------------------- --> HTTPS --- 超文本傳輸安全協定(Hypertext Transfer Protocol Secure),簡稱HTTPS,建立在HTTP的基礎上,不過多了更安全的SSL/TLS來加密封包資料。 SSL 利用非對稱加密演算來對通訊方做身分認證, 之後交換對稱密匙作為會談密匙(Session key)。 這個會談密匙是用來將通訊兩方交換的資料做加密, 保證兩個應用間通訊的保密性和可靠性, 使客戶與伺服器應用之間的通訊不被攻擊者竊聽。 ### HTTP 組成結構 分為HTTP Request與HTTP Response這兩個大項目。網頁上的資訊,其實就是由許多request跟response構成,兩者內容都分成header(額外資訊)與body(主要內容)。  ### Request 從客戶端發出HTTP Request時,會定義一些資訊。瀏覽網頁通常會使用GET方法,Message Body為空。若客戶端要送出資料,則會使用POST方法將資料送進Message Body,提交給某個指定的URL,進而建立資料或更新資料。 Request Method 常用的幾個動作,其中 GET 和 POST 更為常見 - GET:讀取資料 - POST:新增資料(常搭配 form 標籤使用) - PATCH:修改資料 - PUT:修改資料(若該筆資料不存在,則自動新增資料) - DELETE:刪除資料 GET 和 POST 請求的區別 - GET:向指定的資源要求資料,類似於查詢操作。 資料傳遞方式:將引數由 URL 帶至 Server 端 安全性:較 POST 不安全,因為傳遞的引數會在URL上顯示 例如:讀取連結或圖片 - POST:將要處理的資料提交給指定的資源,類似於更新操作。 資料傳遞方式:將引數放在 request body 中傳遞 安全性:較 GET 安全,適合用於隱密性較高的資料 例如:會員登入系統 ### Response 伺服器端回傳HTTP Response時,也會定義一些資訊。 Status Code - 1XX 訊息類 (收到請求,請求者繼續執行操作) - 2XX 成功類 (操作被成功接受並處理),例如:200 成功回應 - 3XX 重定向類 (需進一步操作才能完成),例如:301 成功轉向 - 4XX 客戶端錯誤類 (請求語法錯誤或無法完成請求),例如:404 找不到資源 - 5XX 伺服器錯誤類 (後端的問題),例如:500 伺服器錯誤 Content-Type 定義回應格式 例如 text/html、text/plain、application/json 客戶端才會知道該如何打開訊息 Response Body 許多程式碼檔案,最終渲染成畫面給使用者觀看 <!-- -------------------------------------------------- --> OSI Model & TCP/IP Model --- 應用: 各種網路服務介面 表示: 格式編碼、加解密、壓縮 會議: 建立連線 傳輸: 訊息 -> 區段 檢查資料傳送是否遺失 網路: 區段 -> 封包 選擇封包最佳傳輸路徑 資連: 封包 -> 訊框 檢查資料是否錯誤 實體: 透過網路設備傳送訊號   <!-- -------------------------------------------------- --> TCP & UDP --- 兩者皆為傳輸層(Transport Layer)協定提供不同主機之間的資料傳輸及控制。 ### TCP 傳輸控制協定 (Transmission Control Protocol),是一種可靠的資料傳輸,因此大部分的網路協定都是建立在TCP上面,透過「三次握手」確認建立一個連接。多用於要求可靠傳輸的服務,例如電子郵件、網頁瀏覽、檔案傳輸。 1. TCP為每個封包分配一個唯一的識別碼和一個序號, 這些號碼能讓接收端識別封包的完整性,以及封包的順序。 2. 當接收端收到封包後,如果順序正確, 會向發送端傳送一個確認信號(Acknowledgement), 以此確認接收端已經收到封包。 3. 發送端傳送另一個封包。 4. 如果封包遺失或發送順序錯誤,接收端會保持沈默, 不發送確認信號。這表示發送端需要重新傳送封包。 *** 三次握手 *** A:在嗎? B:在阿。 A:收到! ****************  ### UDP 用戶資料包協定(User Datagram Protocol),流量是不受規範的,需要快速、重複傳送資料的情況會使用UDP,相對而言也較不穩定,多用於即時服務,例如串流媒體、網路電話、網路遊戲。 ### TCP 跟 UDP 比較 | | TCP | UDP | | -------- | -------- | -------- | |可靠性|可靠|不可靠| |速度|慢|快| |傳輸方式|封包按順序傳輸|封包以串流方式傳輸| |錯誤檢查與修正|有|無| |壅塞控制|有|無| |確認|有|只有檢查碼|  <!-- -------------------------------------------------- --> MQTT --- 最初代表的意思是Message Queueing Telemetry Transport(訊息佇列遙測傳輸),MQTT協定的訊息內容很精簡,非常適合用於處理器資源及網路頻寬有限的物聯網裝置。 ### MQTT 跟 HTTP 的比較 底層都是TCP/IP,可以沿用既有的網路架構和設備,差別在網路上流通的「訊息格式」以及應用程式的「處理機制」不同。 ### 訊息格式 - HTTP標頭: 採用文字描述 - MQTT標頭: 採用數字編碼,長度只佔2Bytes,後面跟著訊息的主題(topic)和內容(payload)  ### 訊息傳輸協定 基於「發布∕訂閱」機制 代理人(broker)是個伺服器軟體 向伺服器發送主題的一方是發布者(publisher) 從伺服器獲取主題的一方則是訂閱者(subscriber)  <!-- -------------------------------------------------- --> Websocket --- WebSocket 是一種網路傳輸協定,可在單個TCP連接上進行全雙工通訊,位於OSI模型的應用層。 Client可以透過此協定與Server做溝通,而他和一般https不同的是, 只需透過一次連結便能保持連線,不必再透過一直發送Request來與Server互動。 傳送資料的方式是雙向的,Client端可以像Ajax一樣做請求, Server端也能主動發送Client所需要的資料,使Client和Server之間的資料交換變得簡單。 ### Websocket 跟 HTTP 的比較 - 相同 - 都是基於TCP的應用層協議 - 都使用Request/Response進行連接的建立 - 在連接的建立過程中對錯誤的處理方式相同,這個階段WS可能返回和HTTP相同的狀態碼 - 都可以在網路中傳輸資料 - 不同 - WS使用HTTP來建立連接,但是定義了一系列新的header,這些在HTTP中並不會使用 - WS是HTML5中的協定,支援長久連接,而Http協定不支援長久連接 - WS的連接不能通過中間人來轉發,它必須是一個直接連接 - WS連接建立之後,通信雙方都可以在任何時刻向另一方發送資料 - WS連接建立之後,資料的傳輸使用幀來傳遞,不再需要Request消息 - WS的資料幀有序 ### Websocket 的優劣 - 優 - 效率上有多方面的提升 - 劣 - 伺服器長期維護常連接需要一定成本 - 瀏覽器支援程度不一 - 網路限制大,需要處理好斷線重連問題 ### 應用場合 通訊領域應用多,比如社交聊天、彈幕、多玩家遊戲、協同編輯、股票基金即時報價、體育實況更新、視訊會議/聊天、基於位置的應用、線上教育、智慧家居等需要高即時的場景。 <!-- -------------------------------------------------- --> RPC (分散式系統溝通方法) --- 遠端程序呼叫(Remote Procedure Call),是將本地程式的function或是物件裡的method外顯出來,利用TCP/UDP/HTTP各種網路通訊方法,讓別台機器上面運行的程式可以透過網路呼叫你的這個function或是method。 近來網路應用非常普遍,常需要將某些專屬功能以一個獨立的設備來實現,以增加系統的效率。最常見的是Database Server所提供的網路之間資料處理工具,資料的查詢(Query)、插入(Insert)、更新(Update)、刪除(Delete)等等,這些處理工具都是透過RPC來實現。 - 目的 - 提供一種分散式系統不同Components溝通的方法 - 可以隱藏通訊的方法,對Client來說就是呼叫function ### 架構流程 1. client呼叫client stub。這個呼叫是在本地,並將呼叫參數push到stack中 2. client stub將這些參數包裝,並通過系統呼叫傳送到伺服器端機器,打包的過程叫marshalling(常見方式:XML、JSON、二進位編碼) 3. 客戶端本地作業系統傳送資訊至伺服器(可通過自訂TCP協定或HTTP傳輸) 4. 伺服器系統將資訊傳送至server stub 5. server stub解析資訊,該過程叫unmarshalling 6. server stub呼叫程式,並通過類似的方式返回給客戶端  <!-- -------------------------------------------------- --> 參考資料 --- [何謂 HTTP 傳輸協定](https://medium.com/pierceshih/%E7%AD%86%E8%A8%98-%E4%BD%95%E8%AC%82-http-%E5%82%B3%E8%BC%B8%E5%8D%94%E5%AE%9A-1d9b5be3fd24) [影片: 網路為什麼要分層](https://www.youtube.com/watch?v=oBanE8HGtww) [網路基礎概論 - HTTP 協定、TCP/IP、API](https://hackmd.io/@Heidi-Liu/note-net101) [TCP 和 UDP 是什麼:簡單的說明](https://nordvpn.com/zh-tw/blog/tcp-udp-bijiao/) [MQTT教學(一):認識MQTT](https://swf.com.tw/?p=1002) [WebSocket 讓前後端沒有距離](https://medium.com/enjoy-life-enjoy-coding/javascript-websocket-%E8%AE%93%E5%89%8D%E5%BE%8C%E7%AB%AF%E6%B2%92%E6%9C%89%E8%B7%9D%E9%9B%A2-34536c333e1b) [websocket 優缺點、應用場景以及與HTTP協議的異同](https://blog.csdn.net/qq_39903567/article/details/115385466) [RPC 簡介](http://www.tsnien.idv.tw/Internet_WebBook/chap9/9-1%20RPC%20%E7%B0%A1%E4%BB%8B.html) [遠端程序呼叫](https://zh.wikipedia.org/zh-tw/%E9%81%A0%E7%A8%8B%E9%81%8E%E7%A8%8B%E8%AA%BF%E7%94%A8) [分散式系統溝通的方法 - RPC](https://ithelp.ithome.com.tw/articles/10223580) <!-- -------------------------------------------------- -->
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up