# WebSocket & WebRTC

## 網路七層 (OSI模型)

1. 物理層（Physical layer）：負責定義和控制傳輸媒介的物理特性，例如電壓、電流和傳輸速率等。
2. 數據鏈路層（Data Link layer）：負責將數據組織成框架，並在傳輸介質上進行傳輸。
3. 網路層（Network layer）：負責在多個網路之間進行路由和轉發，以實現跨網路的通訊。
4. 傳輸層（Transport layer）：負責確保數據在端到端的通訊中可靠地傳輸，並處理傳輸中的錯誤和損失。
5. 會話層（Session layer）：負責建立、管理和終止兩個應用程序之間的會話。
6. 表示層（Presentation layer）：負責對數據進行編碼、解碼和轉換，以實現跨平台的通訊。
7. 應用層（Application layer）：負責處理應用程序之間的交互操作，例如電子郵件、網頁瀏覽和文件傳輸等。

## WebRTC&#x20;

WebRTC（Web Real-Time Communication）是一個開放標準，用於在瀏覽器之間實現實時音頻、視頻和資料通訊。

WebRTC 通過使用 UDP 和 SCTP 協議實現實時傳輸，使用 ICE 協議穿越 NAT 和防火牆，使用 WebSocket 和 HTTP 建立和管理會話，並使用 JavaScript API 訪問媒體設備和傳輸媒體和資料。因此，WebRTC 涉及到網路七層中的傳輸層、網路層和應用層。

1. 傳輸層（Transport layer）：WebRTC 使用 UDP（User Datagram Protocol）進行實時傳輸，並且使用 SCTP（Stream Control Transmission Protocol）作為可靠傳輸協議。SCTP 提供了流量控制、損失恢復和流媒體多路徑傳輸等功能，以確保傳輸的可靠性和效率。
2. 網路層（Network layer）：WebRTC 通常使用 ICE（Interactive Connectivity Establishment）協議來穿越 NAT（Network Address Translation）和防火牆等網路限制，以實現對等的連接。在 WebRTC 中，使用 STUN（Session Traversal Utilities for NAT）和 TURN（Traversal Using Relay NAT）服務器來協助建立對等連接或轉發傳輸。
3. 應用層（Application layer）：WebRTC 通常使用 WebSockets 和 HTTP 來建立和管理通訊會話，並使用 JavaScript API 來訪問媒體設備、創建連接、傳輸媒體和資料等。

### NAT

（Network Address Translation）是一種網路技術，用於將私有 IP 地址轉換為公共 IP 地址以實現互聯網連接。\
當一個裝置位於 NAT 路由器後面時，該裝置使用私有 IP 地址，這些私有 IP 地址只能在該私有網路中使用，不能直接訪問互聯網。NAT 路由器通過將裝置的私有 IP 地址轉換為路由器的公共 IP 地址，從而實現該裝置與互聯網的連接。

### PeerConnection

是用於在瀏覽器之間建立點對點（P2P）連接的機制。\
當兩個瀏覽器需要建立連接時，它們需要進行一些協商，例如要使用哪些編解碼器、要使用哪些媒體類型（例如音頻或視頻）等等。

### Signaling

在 WebRTC 中，Signaling 可以使用不同的協議和技術，例如 WebSocket、HTTP POST 或者 XHR。\
主要作用是讓兩個瀏覽器之間建立點對點的通信，以便交換媒體數據。\
瀏覽器之間交換的信息包括 SDP 和候選者（ICE Candidate）。

### SDP

(Session Description Protocol)\
包含了有關媒體流的詳細信息，例如編解碼器和媒體類型

### ICE Candidate

協助穿越 NAT 和防火牆，以實現 P2P 連接的一種技術

### STUN

（Session Traversal Utilities for NAT）

### TURN

（Traversal Using Relay NAT）



## WebSocket

### WebSocketState

1. Connecting：表示 WebSocket 正在建立連接，但是尚未完成。
2. Open：表示 WebSocket 已經成功建立連接，並且可以進行通信。
3. CloseSent：表示 WebSocket 已經發送了關閉請求，但是尚未收到對方的回應。
4. CloseReceived：表示 WebSocket 已經收到了對方的關閉請求，但是尚未發送回應。
5. Closed：表示 WebSocket 已經成功關閉連接，無法再進行通信。
6. Aborted：表示 WebSocket 已經因為某些錯誤或異常情況而被中斷或中止。

Turn Server

參考資料:([https://jerry800416.medium.com/turn-server-%E6%9E%B6%E8%A8%AD%E6%96%87%E4%BB%B6-c71dd50fbd30](https://jerry800416.medium.com/turn-server-%E6%9E%B6%E8%A8%AD%E6%96%87%E4%BB%B6-c71dd50fbd30))



