TCP,UDP和socket,Http之間的聯絡與區別
因為最近做一個智慧家居專案,首先要通訊用socket,為了及時先用UDP判斷是內網外網建立連結,再用TCP實時通訊。
首先了解定義
TCP的優點:
可靠,穩定
TCP的可靠體現在TCP在傳遞資料之前,會有三次握手來建立連線,而且在資料傳遞時,有確認、視窗、重傳、擁塞控制機制,在資料傳完後,還會斷開連線用來節約系統資源
TCP的缺點:
慢,效率低,佔用系統資源高,易被攻擊
TCP在傳遞資料之前,要先建連線,這會消耗時間,而且在資料傳遞時,確認機制、重傳機制、擁塞控制機制等都會消耗大量的時間,而且要在每臺裝置上維護所有的傳輸連線,事實上,每個連線都會佔用系統的CPU、記憶體等硬體資源。
而且,因為TCP有確認機制、三次握手機制,這些也導致TCP容易被人利用,實現DOS、DDOS、CC等攻擊。
UDP的優點:
快,比TCP稍安全
UDP沒有TCP的握手、確認、視窗、重傳、擁塞控制等機制,UDP是一個無狀態的傳輸協議,所以它在傳遞資料時非常快。沒有TCP的這些機制,UDP較TCP被攻擊者利用的漏洞就要少一些。但UDP也是無法避免攻擊的,比如:UDP Flood攻擊……
UDP的缺點:
不可靠,不穩定
因為UDP沒有TCP那些可靠的機制,在資料傳遞時,如果網路質量不好,就會很容易丟包。
基於上面的優缺點,那麼:
什麼時候應該使用TCP:
當對網路通訊質量有要求的時候,比如:整個資料要準確無誤的傳遞給
對方,這往往用於一些要求可靠的應用,比如HTTP、HTTPS、FTP等
傳輸檔案的協議,POP、SMTP等郵件傳輸的協議。
在日常生活中,常見使用TCP協議的應用如下:
瀏覽器,用的HTTP
FlashFXP,用的FTP
Outlook,用的POP、SMTP
Putty,用的Telnet、SSH
QQ檔案傳輸
…………
什麼時候應該使用UDP:
當對網路通訊質量要求不高的時候,要求網路通訊速度能儘量的快,這時就可
以使用UDP。
比如,日常生活中,常見使用UDP協議的應用如下:
QQ語音
QQ視訊
TFTP
1、TCP/IP是個協議組,可分為三個層次:網路層、傳輸層和應用層。
在網路層有:IP協議、ICMP協議、ARP協議、RARP協議和BOOTP協議。
在傳輸層中有:TCP協議與UDP協議。
在應用層有:FTP、HTTP、TELNET、SMTP、DNS等協議。
因此,HTTP本身就是一個協議,是從Web伺服器傳輸超文字到本地瀏覽器的傳送協議。
2、HTTP協議是建立在請求/響應模型上的。
首先由客戶建立一條與伺服器的TCP連結,併發送一個請求到伺服器,請求中包含請求方法、URI、協議版本以及相關的MIME樣式的訊息。伺服器響應一個狀態行,包含訊息的協議版本、一個成功和失敗碼以及相關的MIME式樣的訊息。
HTTP/1.0為每一次HTTP的請求/響應建立一條新的TCP連結,因此一個包含HTML內容和圖片的頁面將需要建立多次的短期的TCP連結。一次TCP連結的建立將需要3次握手。
另外,為了獲得適當的傳輸速度,則需要TCP花費額外的迴路連結時間(RTT)。每一次連結的建立需要這種經常性的開銷,而其並不帶有實際有用的資料,只是保證連結的可靠性,因此HTTP/1.1提出了可持續連結的實現方法。HTTP/1.1將只建立一次TCP的連結而重複地使用它傳輸一系列的請求/響應訊息,因此減少了連結建立的次數和經常性的連結開銷。
3、結論:
雖然HTTP本身是一個協議,但其最終還是基於TCP的。不過,目前,有人正在研究基於TCP+UDP混合的HTTP協議。
Socket是什麼呢?
Socket是應用層與TCP/IP協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket介面後面,對使用者來說,一組簡單的介面就是全部,讓Socket去組織資料,以符合指定的協議