TCP/UDP、 HTTP、FTP、SMTP,區(qū)別及應(yīng)用場景

原文:https://blog.csdn.net/chenrui310/article/details/99739377

一、OSI 模型
OSI 模型主要作為一個通用模型來做理論分析,而TCP/IP 協(xié)議模型是互聯(lián)網(wǎng)的實際通訊協(xié)議,兩者一般做映射分析,以下不做嚴(yán)格區(qū)分和聲明(好吧,比較懶);

OSI 整個模型層次大致可以分為3個主要層面來看
|.............主機...............| 操作系統(tǒng)和軟件等 應(yīng)用、表示、會話
|.............網(wǎng)絡(luò)...............| 互聯(lián)網(wǎng)絡(luò)和相關(guān)協(xié)議 傳輸、網(wǎng)絡(luò) (TCP/IP)
|.............介質(zhì)...............| 物理介質(zhì)相關(guān) 數(shù)據(jù)鏈路、物理
下圖模型為OSI


image.png

1,主機需要網(wǎng)絡(luò)傳輸數(shù)據(jù),網(wǎng)絡(luò)本質(zhì)上是一種服務(wù),主機和網(wǎng)絡(luò)之間靠傳輸層接口,就好比你要叫快遞送東西;
2,網(wǎng)絡(luò)可以提供兩種服務(wù):
1)可靠,面向連接;(TCP) 就像靠譜的快遞,每一步都有反饋和監(jiān)控,當(dāng)然價格也是呵呵...
2)不可靠,盡力而為的傳輸 (UDP) 就像某些不靠譜的快遞或者聽都沒聽過的XX快遞,價格低,但是能不能到就靠運氣了。
3,兩種服務(wù)無所謂好壞,TCP 的可靠是需要消耗很多資源的,效率低 (大塊,重要的文件等)
UDP 不保證可靠性,但是效率高(視頻,語音,不重要的小文件等)

4,而其他的“HTTP、FTP、SMTP 等所謂的“Application-layer Protocol”協(xié)議”指的是在TCP/IP 通訊協(xié)議框架下具體實現(xiàn)特定功能的應(yīng)用(HTTP 用來實現(xiàn)超文本傳輸,F(xiàn)TP文件傳輸,SMTP處理郵件等等),兩者的關(guān)系,咳咳,關(guān)系通俗的說:

TCP和UDP以及IP 協(xié)議是互聯(lián)網(wǎng)絡(luò)通訊的基礎(chǔ),就像《憲法》,而應(yīng)用協(xié)議就像具體的《刑法》、《民法》、《婚姻法》、《未成年人保護(hù)法》......等等,在某個領(lǐng)域的特定應(yīng)用和具體實現(xiàn),但是最基本的一條:違憲無效。
下圖模型為TCP/IP棧


image.png

二、TCP與HTTP的區(qū)別
TCP/IP協(xié)議是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸,而HTTP是應(yīng)用層協(xié)議,主要解決如何包裝數(shù)據(jù)。關(guān)于TCP/IP和HTTP協(xié)議的關(guān)系,網(wǎng)絡(luò)有一段比較容易理解的介紹:“我們在傳輸數(shù)據(jù)時,可以只使用(傳輸層)TCP/IP協(xié)議,但是那樣的話,如果沒有應(yīng)用層,便無法識別數(shù)據(jù)內(nèi)容,如果想要使傳輸?shù)臄?shù)據(jù)有意義,則必須使用到應(yīng)用層協(xié)議,應(yīng)用層協(xié)議有很多,比如HTTP、FTP、TELNET等,也可以自己定義應(yīng)用層協(xié)議。WEB使用HTTP協(xié)議作應(yīng)用層協(xié)議,以封裝HTTP 文本信息,然后使用TCP/IP做傳輸層協(xié)議將它發(fā)到網(wǎng)絡(luò)上?!?/p>

術(shù)語TCP/IP代表傳輸控制協(xié)議/網(wǎng)際協(xié)議,指的是一系列協(xié)議?!癐P”代表網(wǎng)際協(xié)議,TCP和UDP使用該協(xié)議從一個網(wǎng)絡(luò)傳送數(shù)據(jù)包到另一個網(wǎng)絡(luò)。把IP想像成一種高速公路,它允許其它協(xié)議在上面行駛并找到到其它電腦的出口。TCP和UDP是高速公路上的“卡車”,它們攜帶的貨物就是像HTTP,文件傳輸協(xié)議FTP這樣的協(xié)議等。
你應(yīng)該能理解,TCP和UDP是FTP,HTTP和SMTP之類使用的傳輸層協(xié)議。雖然TCP和UDP都是用來傳輸其他協(xié)議的,它們卻有一個顯著的不同:TCP提供有保證的數(shù)據(jù)傳輸,而UDP不提供。這意味著TCP有一個特殊的機制來確保數(shù)據(jù)安全的不出錯的從一個端點傳到另一個端點,而UDP不提供任何這樣的保證。
HTTP(超文本傳輸協(xié)議)是利用TCP在兩臺電腦(通常是Web服務(wù)器和客戶端)之間傳輸信息的協(xié)議。客戶端使用Web瀏覽器發(fā)起HTTP請求給Web服務(wù)器,Web服務(wù)器發(fā)送被請求的信息給客戶端。
  下面的圖表試圖顯示不同的TCP/IP和其他的協(xié)議在最初OSI模型中的位置:

7 應(yīng)用層 例如HTTP、SMTP、SNMP、FTP、Telnet、SIP、SSH、NFS、RTSP、XMPP、Whois、ENRP
6 表示層 例如XDR、ASN.1、SMB、AFP、NCP
5 會話層 例如ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets
4 傳輸層 例如TCP、UDP、RTP、SCTP、SPX、ATP、IL
3 網(wǎng)絡(luò)層 例如IP、ICMP、IGMP、IPX、BGP、OSPF、RIP、IGRP、EIGRP、ARP、RARP、 X.25
2 數(shù)據(jù)鏈路層 例如以太網(wǎng)、令牌環(huán)、HDLC、幀中繼、ISDN、ATM、IEEE 802.11、FDDI、PPP
1 物理層 例如線路、無線電、光纖、信鴿
三、TCP,UDP區(qū)別
TCP與UDP基本區(qū)別
1.基于連接與無連接
2.TCP要求系統(tǒng)資源較多,UDP較少;
3.UDP程序結(jié)構(gòu)較簡單
4.流模式(TCP)與數(shù)據(jù)報模式(UDP);
5.TCP保證數(shù)據(jù)正確性,UDP可能丟包
6.TCP保證數(shù)據(jù)順序,UDP不保證
  
UDP應(yīng)用場景:
1.面向數(shù)據(jù)報方式
2.網(wǎng)絡(luò)數(shù)據(jù)大多為短消息
3.擁有大量Client
4.對數(shù)據(jù)安全性無特殊要求
5.網(wǎng)絡(luò)負(fù)擔(dān)非常重,但對響應(yīng)速度要求高

具體編程時的區(qū)別
1.socket()的參數(shù)不同
   2.UDP Server不需要調(diào)用listen和accept
   3.UDP收發(fā)數(shù)據(jù)用sendto/recvfrom函數(shù)
   4.TCP:地址信息在connect/accept時確定
   5.UDP:在sendto/recvfrom函數(shù)中每次均 需指定地址信息
   6.UDP:shutdown函數(shù)無效

編程區(qū)別
通常我們在說到網(wǎng)絡(luò)編程時默認(rèn)是指TCP編程,即用前面提到的socket函數(shù)創(chuàng)建一個socket用于TCP通訊,函數(shù)參數(shù)我們通常填為SOCK_STREAM。即socket(PF_INET, SOCK_STREAM, 0),這表示建立一個socket用于流式網(wǎng)絡(luò)通訊。
  SOCK_STREAM這種的特點是面向連接的,即每次收發(fā)數(shù)據(jù)之前必須通過connect建立連接,也是雙向的,即任何一方都可以收發(fā)數(shù)據(jù),協(xié)議本身提供了一些保障機制保證它是可靠的、有序的,即每個包按照發(fā)送的順序到達(dá)接收方。

而SOCK_DGRAM這種是User Datagram Protocol協(xié)議的網(wǎng)絡(luò)通訊,它是無連接的,不可靠的,因為通訊雙方發(fā)送數(shù)據(jù)后不知道對方是否已經(jīng)收到數(shù)據(jù),是否正常收到數(shù)據(jù)。任何一方建立一個socket以后就可以用sendto發(fā)送數(shù)據(jù),也可以用recvfrom接收數(shù)據(jù)。根本不關(guān)心對方是否存在,是否發(fā)送了數(shù)據(jù)。它的特點是通訊速度比較快。大家都知道TCP是要經(jīng)過三次握手的,而UDP沒有。

基于上述不同,UDP和TCP編程步驟也有些不同,如下:

TCP:
TCP編程的服務(wù)器端一般步驟是:
  1、創(chuàng)建一個socket,用函數(shù)socket();
  2、設(shè)置socket屬性,用函數(shù)setsockopt(); * 可選
  3、綁定IP地址、端口等信息到socket上,用函數(shù)bind();
  4、開啟監(jiān)聽,用函數(shù)listen();
  5、接收客戶端上來的連接,用函數(shù)accept();
  6、收發(fā)數(shù)據(jù),用函數(shù)send()和recv(),或者read()和write();
  7、關(guān)閉網(wǎng)絡(luò)連接;
  8、關(guān)閉監(jiān)聽;

TCP編程的客戶端一般步驟是:
  1、創(chuàng)建一個socket,用函數(shù)socket();
  2、設(shè)置socket屬性,用函數(shù)setsockopt();* 可選
  3、綁定IP地址、端口等信息到socket上,用函數(shù)bind();* 可選
  4、設(shè)置要連接的對方的IP地址和端口等屬性;
  5、連接服務(wù)器,用函數(shù)connect();
  6、收發(fā)數(shù)據(jù),用函數(shù)send()和recv(),或者read()和write();
  7、關(guān)閉網(wǎng)絡(luò)連接;

UDP:
與之對應(yīng)的UDP編程步驟要簡單許多,分別如下:
  UDP編程的服務(wù)器端一般步驟是:
  1、創(chuàng)建一個socket,用函數(shù)socket();
  2、設(shè)置socket屬性,用函數(shù)setsockopt();* 可選
  3、綁定IP地址、端口等信息到socket上,用函數(shù)bind();
  4、循環(huán)接收數(shù)據(jù),用函數(shù)recvfrom();
  5、關(guān)閉網(wǎng)絡(luò)連接;

UDP編程的客戶端一般步驟是:
  1、創(chuàng)建一個socket,用函數(shù)socket();
  2、設(shè)置socket屬性,用函數(shù)setsockopt();* 可選
  3、綁定IP地址、端口等信息到socket上,用函數(shù)bind();* 可選
  4、設(shè)置對方的IP地址和端口等屬性;
  5、發(fā)送數(shù)據(jù),用函數(shù)sendto();
  6、關(guān)閉網(wǎng)絡(luò)連接;

TCP和UDP是OSI模型中的運輸層中的協(xié)議。TCP提供可靠的通信傳輸,而UDP則常被用于讓廣播和細(xì)節(jié)控制交給應(yīng)用的通信傳輸。

UDP補充:
UDP不提供復(fù)雜的控制機制,利用IP提供面向無連接的通信服務(wù)。并且它是將應(yīng)用程序發(fā)來的數(shù)據(jù)在收到的那一刻,立刻按照原樣發(fā)送到網(wǎng)絡(luò)上的一種機制。即使是出現(xiàn)網(wǎng)絡(luò)擁堵的情況下,UDP也無法進(jìn)行流量控制等避免網(wǎng)絡(luò)擁塞的行為。此外,傳輸途中如果出現(xiàn)了丟包,UDO也不負(fù)責(zé)重發(fā)。甚至當(dāng)出現(xiàn)包的到達(dá)順序亂掉時也沒有糾正的功能。如果需要這些細(xì)節(jié)控制,那么不得不交給由采用UDO的應(yīng)用程序去處理。換句話說,UDP將部分控制轉(zhuǎn)移到應(yīng)用程序去處理,自己卻只提供作為傳輸層協(xié)議的最基本功能。UDP有點類似于用戶說什么聽什么的機制,但是需要用戶充分考慮好上層協(xié)議類型并制作相應(yīng)的應(yīng)用程序。

TCP補充:
TCP充分實現(xiàn)了數(shù)據(jù)傳輸時各種控制功能,可以進(jìn)行丟包的重發(fā)控制,還可以對次序亂掉的分包進(jìn)行順序控制。而這些在UDP中都沒有。此外,TCP作為一種面向有連接的協(xié)議,只有在確認(rèn)通信對端存在時才會發(fā)送數(shù)據(jù),從而可以控制通信流量的浪費。TCP通過檢驗和、序列號、確認(rèn)應(yīng)答、重發(fā)控制、連接管理以及窗口控制等機制實現(xiàn)可靠性傳輸。

TCP與UDP區(qū)別總結(jié):
1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接
2、TCP提供可靠的服務(wù)。也就是說,通過TCP連接傳送的數(shù)據(jù),無差錯,不丟失,不重復(fù),且按序到達(dá);UDP盡最大努力交付,即不保證可靠交付
3、TCP面向字節(jié)流,實際上是TCP把數(shù)據(jù)看成一連串無結(jié)構(gòu)的字節(jié)流;UDP是面向報文的
UDP沒有擁塞控制,因此網(wǎng)絡(luò)出現(xiàn)擁塞不會使源主機的發(fā)送速率降低(對實時應(yīng)用很有用,如IP電話,實時視頻會議等)
4、每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信
5、TCP首部開銷20字節(jié);UDP的首部開銷小,只有8個字節(jié)
6、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道

四、TCP,UDP,HTTP應(yīng)用場景
Socket實現(xiàn)服務(wù)器與客戶端之間的物理連接,并進(jìn)行數(shù)據(jù)傳輸。主要有TCP/UDP兩個協(xié)議。Socket處于網(wǎng)絡(luò)協(xié)議的傳輸層。
TCP:傳輸控制協(xié)議,面向連接的的協(xié)議,穩(wěn)定可靠。當(dāng)客戶和服務(wù)器彼此交換數(shù)據(jù)前,必須先在雙方之間建立一個TCP連接,之后才能傳輸數(shù)據(jù)。
UDP:廣播式數(shù)據(jù)傳輸,UDP不提供可靠性,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報發(fā)送出去,但是并不能保證它們能到達(dá)目的地。由于UDP在傳輸數(shù)據(jù)報前不用在客戶和服務(wù)器之間建立一個連接,且沒有超時重發(fā)等機制,故而傳輸速度很快。

優(yōu)點:1.傳輸數(shù)據(jù)為字節(jié)級,傳輸數(shù)據(jù)可自定義,數(shù)據(jù)量小。相應(yīng)的移動端開發(fā),手機費用低

2.傳輸數(shù)據(jù)時間短,性能高

3.適合C/S之間信息實時交互

4.可以加密,數(shù)據(jù)安全性高

缺點: 1.需要對傳輸?shù)臄?shù)據(jù)進(jìn)行解析,轉(zhuǎn)化為應(yīng)用級的數(shù)據(jù)
2.對開發(fā)人員的開發(fā)水平要求高
3.相對于Http協(xié)議傳輸,增加了開發(fā)量

Http請求主要有http協(xié)議,基于http協(xié)議的soap協(xié)議,常見的http數(shù)據(jù)請求方式有g(shù)et和post,web服務(wù)

優(yōu)點:1.基于應(yīng)用級的接口使用方便

2.要求的開發(fā)水平不高,容錯性強

缺點: 1.傳輸速度慢,數(shù)據(jù)包大。
2.如實現(xiàn)實時交互,服務(wù)器性能壓力大
3.數(shù)據(jù)傳輸安全性差

單工,半雙工,全雙工

一、單工
1、數(shù)據(jù)只在一個方向上傳輸,不能實現(xiàn)雙方通信。

2、例如:電視、廣播。

二、半雙工
1、允許數(shù)據(jù)在兩個方向上傳輸,但是同一時間數(shù)據(jù)只能在一個方向上傳輸,其實際上是切換的單工。

2、例如:對講機。

三、全雙工
1、允許數(shù)據(jù)在兩個方向上同時傳輸。

2、例如:手機通話。

四、示例圖


http協(xié)議有多個版本,存在區(qū)別,截至2019.1,主流協(xié)議是http1.1
http1.1以下版本,http連接為短連接,tcp連接發(fā)送信息等待接受信息后斷開.
http1.1 是半雙工,建立長連接,出現(xiàn)多路復(fù)用,可先后發(fā)送多個http請求,不用等待回復(fù),但是回復(fù)按順序一個一個回復(fù).
(當(dāng)前主流)

http2.0是全雙工,一個消息發(fā)送后不用等待接受,第二個消息可以直接發(fā)送.


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容