如何通俗地解釋一下 TCP/UDP 協議和 HTTP、FTP、SMTP 等協議之間的區別?


先來假設沒有TCP,甚至沒有IP層,只有MAC對應的數據鏈路層,HTTP等協議能跑多遠?

直接把HTTP封裝在Ethernet Frame 里,可以嗎?當然可以,在同一個二層廣播域里,通過MAC地址來識別對方,然後HTTP的數據通過網卡介面函數完成發送和接收。

那問題來了,如何保證數據萬無一失地到達對方?讓網卡來保證數據的可靠傳輸嗎?網卡只對Ethernet 幀頭做解釋,乙太網頭14個位元組也沒有哪個欄位可以勝任這個可靠傳輸的任務,那HTTP是不是要自己實現數據傳輸得可靠機制,比如發送一段1000位元組的數據,要等待對方給自己確認收到,然後再來發送,這樣是可以保證數據可靠傳輸。

同樣FTP,STMP,POP3,BGP都是要保證數據可靠的傳輸,那他們是不是也要自己實現這些可靠的機制呢?那是必須的!換句話說,只要有一個應用,要可靠傳輸,必須由 application protocol 來實現!是不是很笨啊???這所有application protocol 的可靠傳輸機制是同樣的實現,代碼都應該類似,如果我們把這些被重用的代碼封裝起來,即介面函數API,讓他實現數據的可靠傳輸,同時用一個標識符來表明這是哪個application protocol,是不是可行呢?可行!!!

這就是偉大TCP/IP協議的締造者所高度抽象出來的東東:TCP!它把可靠傳輸機制代碼封裝成了介面函數API,即socket , 同時用TCP Port來辨別其服務的application Protocol。而application protocol 只需要對自己的協議本身和協議數據做解釋,完成端對端的會話。

第二個問題:現在 Ethernet + TCP + application protocol ,這個包能跑多遠?也就是一個廣播域那麼大的範圍了吧?yes,sir,小樣再怎麼得瑟也逃不出廣播域的圈圈。IP層就是來解決這個問題的,有了IP層可以讓Internet 成為可能,一句廣告詞:impossible is nothing! 要知道IP就是 Internet Protocol 的縮寫。

那你可能要問了, 我想要IP層,不想要TCP層,直接把數據封裝在IP層可以嗎? 太可以了!不光可以,而且好多協議也是這麼做的,OSPF,EIGRP,GRE,ESP,AH等協議都是這麼做的,如果他們想保證可靠傳輸,他們自己用代碼來實現,這當然可以。

問題是IP只用一個位元組來表示協議號,理論上只能辨識255種上層協議,資源非常緊張,而且都被知名的大牌協議所霸佔著,比如TCP,ICMP,IGMP,包括上面提到的,哪裡輪的上你哦!為了解決這個資源緊張問題,於是就有了另外一個什麼鳥事不幹,只用來辨別application protocol 的小東西:UDP!

其實UDP除了提供一個Port來分辨application protocol , 確實沒幹點別的,但是Port 號佔用2個位元組,理論上可以分辨65535種 application protocol ,就這一條就可以讓其功德圓滿了,正是因為它不像TCP,是完全無狀態協議,所以也深得一些應用程序的青睞,因為UDP無狀態,IP也無狀態,會話所有的狀態都由application protocol 來進行控制,這也是一種選擇。

另外UDP-based 的應用可以實現可靠傳輸,比如TFTP,那就由TFTP自己來實現可靠傳輸;也可以把數據交給UDP,讓其發送出去即可,對發送出去的數據不需要確認,同學們會問:這是哪種應用啊?語音流量,丟了就丟了,對方聽不見大不了再說一遍。

綜上,TCP提供一種可靠傳輸機制,有狀態;UDP提供一種更多的空間來辨別上層的協議,無狀態


1、TCP、UDP不是應用層協議,是傳輸層協議。
2、應用層所謂的應用,就是為了一個具體的應用場景而做的協議,應用層協議之間的區別,就是應用之間的區別。HTTP和FTP有什麼區別,就是HTTP用來傳輸超文本而FTP用來傳文件。


題主的意思是通俗,本來上傳幾張層次模型的示意圖,知乎傳圖太困難了,可能我上傳的方法不對吧,另外經常用的ID審核一直通不過,望天。
====================疑似分割線,急性子直接拖到後面看通俗的吧========
OSI 模型主要作為一個通用模型來做理論分析,而TCP/IP 協議模型是互聯網的實際通訊協議,兩者一般做映射分析,以下不做嚴格區分和聲明(好吧,比較懶);

OSI 整個模型層次大致可以分為3個主要層面來看
|.............主機...............| 操作系統和軟體等 應用、表示、會話
|.............網路...............| 互聯網路和相關協議 傳輸、網路 (TCP/IP)
|.............介質...............| 物理介質相關 數據鏈路、物理
下圖模型為OSI

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

4,而其他的「HTTP、FTP、SMTP 等所謂的「Application-layer Protocol」協議」指的是在TCP/IP 通訊協議框架下具體實現特定功能的應用(HTTP 用來實現超文本傳輸,FTP文件傳輸,SMTP處理郵件等等),兩者的關係,咳咳,關係通俗的說:

TCP和UDP以及IP 協議是互聯網路通訊的基礎,就像《憲法》,而應用協議就像具體的《刑法》、《民法》、《婚姻法》、《未成年人保護法》......等等,在某個領域的特定應用和具體實現,但是最基本的一條:違憲無效。
下圖模型為TCP/IP棧

========又試著傳圖片,成功了,錯怪知乎了,是DNS不穩定,大家懂的===========


拿網路層,傳輸層,應用層分別比做菜農、菜販和廚師

關係如下:

廚 師
-------------
菜 販
-------------
菜 農

每個角色都有其職能:
菜民負責種菜; 菜販負責運送; 廚師負責做烹飪

每個角色只跟其上下游交流,隔層不直接交流

這樣合理的劃分,職責明確,需要交流的對象只跟上下游打交道,相對簡單

如果你又種菜,自己運輸,自己做菜,那就無法形成產業了。

(這種形態沒有能表達出來兩台計算機通信時的情境,達人可舉個更生動的例子)


數據是海淘包裹裡面的貨物,包裹單即是協議的報文格式。

轉運是包裹的外層,UPS是次內層,到了國內用順豐到你手,是VPN的外層。

也有可能不需要順豐,走UPS直運,那就是非敏感數據。

轉運到外國國內,期間可能要重新拆箱和合箱,那時網路報文的分組/重組。

到了海關是防火牆,DPI是海關檢查。

泛洪攻擊是爆倉。

帶寬費用就是渠道費。

帶寬高(陸運VS乙太網+交換機)不一定延遲小(空運VS光纖長距離直連)。

QoS就是優先投遞的快遞。

人的真實身份是MAC地址,是唯一的,你可以搬家,用不同的地址,但是DHCP就是郵局分配給你地址,順豐的快遞小哥只跟只地址走,不跟人走。

外觀驗貨是checksum。

簽收就是RX。

NAT類似於門牌轉房間號碼,前者是唯一的,後者是重複的,局部有效。


維基百科已經很好的比喻了
參考 http://zh.wikipedia.org/wiki/OSI%E6%A8%A1%E5%9E%8B


首先,tcp/udp 協議屬於運輸層而不是應用層。

比如你開淘寶店,客戶給你下了訂單,他只在乎能不能拿到商品,你只在乎能不能掙到錢,這是應用層(用戶具體需求)。

你需要選一家快遞,然後填好地址寄過去。快遞公司為你提供了運輸層的服務(可靠的交付)。

從你到客戶,有很多種路線或是交通方式,中間有數個中轉站(路由器),快遞公司需要根據地址規劃最合適的路線(網路層/路由選擇),如果某條路不通,或者堵車,就需要共享這種信息(ICMP)

每一條路徑都可能有不同的方法,比如鐵路登記流程,高速公路繳費上路,裝車卸貨,等等,顯然作為淘寶店主你不用操心這些。這就交給數據鏈路層。

然後貨車司機只需要握著方向盤開車,車上有什麼他根本不用在乎,怎麼走都是上司說了算,這是物理層。。。

夠通俗了吧。。


首先 TCP/UDP 和 HTTP/FTP/SMTP 不屬於同一層。 TCP/UDP 屬於 OSI 模型的第四層傳輸層,HTTP/FTP/SMTP 才是屬於應用層。

我想題主應該是個程序員,我就用代碼組織結構來解釋吧。通常我們會把可以被複用的代碼封裝成一個模塊,這個模塊提供的功能通常是業務無關的,只是用來實現一些基礎功能的,比如寫文件、讀文件,這個模塊不會關心讀寫的是 MP3 文件還是 TXT 文件。

不同的業務模塊甚至功能完全不同的兩個軟體(比如一個音樂播放器和一個文本閱讀器)就可以使用這個模塊的『文件讀寫功能』,因為音樂軟體需要打開 MP3 文件,而文本閱讀器需要打開 TXT 文件,這兩個軟體使用了同一個『文件讀寫模塊』實現了基礎的文件讀取功能,進而實現它們各自特有的功能:播放音樂和顯示文本。

TCP 就相當於例子中『文件讀寫模塊』,HTTP 就相當於音樂播放器/文本閱讀器。

也可以這樣理解整個 OSI 模型,越往下層走,數據的封裝越原始、功能越單一,而這些下層的東西是實現大多數需要數據傳輸的應用必不可少的基礎。

像其中一個答案里說的,你甚至可以基於 OSI 第二層數據鏈路層實現 HTTP 協議,這樣你首先得自己實現所有 IP 和 TCP 已經實現的功能(數據切分、數據包re-ordering,數據包重傳等等),才能夠真正實現一個可用可靠的 HTTP。


寫寫我的理解吧,可能比較散碎,也比較粗略。歡迎補充 :-)
tcp中文名字叫「傳輸控制協議」,是傳輸層傳輸數據的一種機制,比如,當你要發送的數據通過應用層到達傳輸層,數據就要選擇自己的傳輸方式了:
1,先跟目的地確認一下,告訴目的地我要傳數據了,目的地接收端如果準備好接收數據,就會反饋回來信息告訴發送端:你可以發送了,然後發送端才能發送數據,這種機制就是tcp;
2,如果發送端不需事先確認目的地是否準備好了接收數據,直接發送數據,這種機制就是udp;
可以看出tcp傳輸數據的機制比udp效率要低一些,需要多次握手確認對方的狀態,udp效率相對就高一些。但是也可以看出前者數據傳輸的可靠性也比較高,後者可靠性就差一些。
我們常用的qq採用的就是udp協議。。。


物理層~高速公路,城鄉公路

數據鏈路層~快遞收送件員/集散中心

網路層~全國快遞網

傳輸層~支付寶

會話層~淘寶客服

表示層~阿里巴巴

應用層~在家愉快的使用商品


TCP/UDP 屬於傳輸層協議
HTTP、FTP、SMTP等屬於應用層協議
一次完整的傳輸都需經過:數據連接層--&>網路層--&>傳輸層--&>應用層。


網路協議是通信計算機雙方必須共同遵從的一組約定。如怎麼樣建立連接、怎麼樣互相識別等。只有遵守這個約定,計算機之間才能相互通信交流。它的三要素是:語法、語義、時序。不同的協議請見對應的RFC。
TCP和UDP屬於TCP/IP協議族的傳輸層協議,可以比喻為火車和高鐵,一個可靠,一個不可靠。HTTP, FTP,SMTP屬於應用層的封裝協議,這些協議在傳輸協議有對應的埠,比如HTTP對應TCP的80埠,FTP對應TCP的21和22埠,SMTP對應TCP的25埠。
應用層協議規定了不同應用的數據的封裝格式,可以理解為貨物的包裝以及標籤等信息,當用操作應用產生數據時,用戶終端內部會根據應用的不同選擇對應的應用層協議對數據進行封裝,然後經由對應的傳輸層協議進行端到端的傳輸,到達對端,再根據不同的應用解封裝,交個對端的應用。當然應用層的數據在傳輸期間還要經過網路層和數據鏈路層的處理,這裡就不多說了。
以上僅為個人觀點,若有不對之處,望各位知友指正。


瞎寫點,通俗嘛。TCP/UDP 是a e i o u(或拼音 a o e i u v)之類的人類能發得出來的音、音節、聲母、韻母之類的。HTTP/FTP/SMTP 是漢語、英語、日語等。


TCP: 可靠性連接,強壯,但速度慢,發送數據有反饋,類似現實生活中EMS,順豐,有簽名反饋機制

UDP:不可靠性連接,輕量,快,發送速度無反饋,類似生活中普通平郵,沒有簽名反饋


TCP 使用場景:文件傳輸

UDP 使用場景:網路視頻


感覺tcp/udp是基礎 http ftp smtp什麼的是延伸......不知說的對不對


先把通信想成寄快遞
然後把tcp/udp想像成運快遞的交通工具
http等想像成你要寄的東西
例如:
http是電腦
snmp是報廢車輛的文件

http規定了電腦應該怎麼構成 比如要用cpu 內存 硬碟 可以有顯示器 可以沒有
snmp規定了文件要什麼 比如有報廢車輛的描述 原因 有公章 有簽名

tcp/udp 則規定了 運輸貨物要怎麼包裝 放在車的哪裡
比如所以貨物都應該用方形盒子包裝 並且放在一個大的不宜破碎的袋子里 每個袋子1米高 封口 從裡到外擺放在車上


傳輸層 是我給你提供了一個說話的方式。偏向於這個說話方式是否可靠。
應用層 是你們說話內容是nba呢,還是遊戲呢,還是女人呢。偏向於說話的內容是什麼。


TCP/UDP點傳輸層的,負責將下層IP層的數據包整合成完整報文提交給上面的應用層。
應用層就是處理數據的,協議指定了這些數據的格式,處理方式等。。


tcp/udp:柴油/汽油拖車
應用層協議:集裝箱/平板車/敞篷車/悶罐車。。。。。
不知道這麼比喻是否恰當


TCP/UDP是傳送數據的方式,FTP等是使用前者具有應用目的應用


&