iT邦幫忙

0

企業資料通訊Week4 (1) | Socket &TCP & UDP

Socket 是甚麼?

遠在兩邊(在同一台機器也是可以)的兩個程序(process)互相傳遞訊息就是inter-process communication (簡稱IPC)
**先開口是client端
如果能夠給他們一個讀寫的通道可以更快速就好了,
這時出現Socket[插槽](provided by the OS) ,像是一個門,我們會在第七層與第四層之間對它做讀寫,過程也是像上一篇說的,一層一層封裝往下丟,到目的地再拆封往上丟上來。如圖,Socket位置就是圖中黃色部分
https://ithelp.ithome.com.tw/upload/images/20211013/20135414bRaReJkVjI.png

Socket 流程

Server端先初始化Socket,然绑定(bind) port,並監聽(listen)port,調用accept阻塞,等待client端連接。這時client也初始化Socket並連接server端,如果成功,這時Server與Client便建立了連線。然後Client發送request,Server端接收並處理request,把Client請求的東西發送給Client端,Client端收到,最后Close 連接,一次的交互即结束。

建立 Socket

Socket如其名,[插槽]功能的確像電話『插座』一樣。如以電話系統而言,只要將電話的插座設定好某一號碼,任何一部電話都可透過這個插座和其它電話通訊。要建立Socket你要有
(1)IP(2^32種不同IP)
(2)port number(2^16,一台機器約可以給65536個獨特processes)

IP好懂就是就是你要傳的地址,
而為甚麼要有 port number 呢?
想想,一台機器假設有幾百個process,我們要讓特定的Socket綁定特定的process,因此每個Socket 都給予一個特殊號碼(IP number + TCP port),使用者之間只要記住對方的 Socket 號碼,便可以直接通訊,而不用考慮到底是經過何種網路、或主機放在什麼地方。
就會像這樣:
https://ithelp.ithome.com.tw/upload/images/20211013/20135414nkXVcXerRm.png

簡單來說,Socket就是一種作業系統提供的程序間通訊機制。

參見:Socket原理讲解
第八章 TCP Socket 程式介面

常見的port number

之前聽過一個比喻,通訊埠像是郵局的櫃檯,特定號碼的窗口有特定功能,例如幾號櫃檯是處理郵務,幾號是有關金融事務。port number 很像上述概念。
剛剛說有六萬多個port number
0~1023 號的服務已被特別定義
1024~49151有的也被占用
49152~65535目前沒有port被正式註冊占用,你寫程式可以用這裡
EX:
HTTP:80
mail server:25

按此查詢port number服務:port number維基百科

App-layer protocol 設計

  1. Types of messages exchanged:
    分兩類,一個是request,另一個是response

  2. message syntax(語法):
    呈現的規格,多少個fields?中間怎麼分隔?長度是可變的嗎?

  3. message semantics(語意):
    通常的設計是 type, length, message
    EX:integer,4Byte,一串數字

  4. rules:
    收到怎樣的message時,server怎麼反應,除了定義正常時回覆,也定義不正常時的回覆(error handling)。

  5. open protocols:
    RFCs定義,HTTP protocols 在browser裡面
    EX:HTTP,SMTP,NTP

/*也有私人的protocols
EX:Skype
/

講一下app需要甚麼transport服務

這裡會視application的功能看看有沒有特別要求

  1. integrity(資料完整性):
    與data loss有關,有的需要完全一模一樣。
    EX:圖片很需要資料完整性
    但是即時語音就還好,偶爾掉一個封包也沒差(人耳朵對於0.1s的延遲覺得不明顯)

  2. timing(即時性):
    愈快愈好
    EX:即時語音通話,槍戰遊戲

  3. throughput(單位時間處理量)

沒有資料丟失的狀態下設備能接收的最大速率
與流暢與否有關

  1. security(安全性)
    加解密

/**我自己解讀timing 與 throughput 的差別是 一個是傳的速率,另一個是收到的速率(適合評估品質)*/

不同服務所要求的點:
https://ithelp.ithome.com.tw/upload/images/20211013/20135414fCoCTRrd5E.png
/**best-effort delivery 儘可能做到最好!*/(我們也是喔!!)

TCP & UDP

在傳輸層,UDP 和 TCP 都是常見的網路通訊協定,都是透過『IP位址』與『TCP Port』形成一個『Socket』進行通訊。但他們倆個運作行為不同。

TCP(Transmission Control Protocol)

TCP是一個完整的協定,也就是會經過『建立連線』、『資料傳輸』與最後的『關閉連線』三個階段,屬於reliable transport ,正確性導向與連線導向線(Connection Oriented)。

運作如下:
TCP會為每個封包分配唯一識別碼與序號,可以保證接收端識別封包完整性與順序,接收端收到,如果確認正確會發送
確認信號(Acknowledgement),然後發送端繼續傳。
如果錯誤接收端就不發送Acknowledgement,因此逾時後發送端重新傳,這也是同步傳輸的表現(雙向資料傳輸協定,會等待對方確認是否已正確收到)。

就是因為如此運作,所以TCP顧及:
1.flow control(流量控制)
2.congestion control(阻塞控制)
3.檢查錯誤

缺點是因為要不斷確認,速度會比UDP慢一些。

TCP也不管:
1)timing
2)throughput 最小保證
3)security

UDP(User Datagram Protocol)

基本上TCP不管的,UDP也不會管。屬於unreliable data transfer 不可靠傳輸。
UDP不做錯誤檢查與修正,不會flow control,也不會congestion control。錯了就直接丟棄封包,不會給你重傳,也因為如此,即時性比較高,屬於非連線型(Connectionless)。

**早期需要即時性的功能,UDP占優勢,現在網路愈來愈快,router變強,loss變少,這些即時性的功能使用TCP來傳也很好。

參見:
維基百科 傳輸控制協定
TCP 和 UDP 是什麼:簡單的說明
維基百科 UDP


尚未有邦友留言

立即登入留言