01.07 UDP 和 HTTP協議的區別?簡單到沒朋友

網絡由下往上分為:物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。

通過初步的瞭解,我知道IP協議對應於網絡層,TCP協議對應於傳輸層,而HTTP協議對應於應用層,三者從本質上來說沒有可比性,socket則是對TCP/IP協議的封裝和應用(程序員層面上)。也可以說,TPC/IP協議是傳輸層協議,主要解決數據如何在網絡中傳輸,而HTTP是應用層協議,主要解決如何包裝數據。

一、角度1解釋。

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

直接把HTTP封裝在Ethernet Frame 裡,可以嗎?

當然可以,在同一個二層廣播域裡,通過MAC地址來識別對方,然後HTTP的數據通過網卡接口函數完成發送和接收。

電腦網絡:如何秒懂 TCP/UDP 和 HTTP協議的區別?簡單到沒朋友

第二個問題:如何保證數據萬無一失地到達對方?

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

同樣FTP,STMP,POP3,BGP都是要保證數據可靠的傳輸,那他們是不是也要自己實現這些可靠的機制呢?

必須的!

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

當然可行了,快遞公司不就是這樣操作的嘛!

這就是偉大TCP/IP協議的締造者所高度抽象出來的流量調度員:TCP!

電腦網絡:如何秒懂 TCP/UDP 和 HTTP協議的區別?簡單到沒朋友

TCP

它把可靠傳輸機制代碼封裝成了接口函數API,即socket , 同時用TCP Port來辨別其服務的application Protocol。而application protocol 只需要對自己的協議本身和協議數據做解釋,完成端對端的會話。

第二個問題:現在 Ethernet + TCP + application protocol ,這個包能跑多遠?

也就是一個廣播域那麼大的範圍了吧?小樣再怎麼得瑟也逃不出廣播域的圈圈!

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

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

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

綜述

TCP提供一種可靠傳輸機制,有狀態。

UDP提供更多的門牌號來辨別上層的協議,無狀態。

二、角度2解釋。

TCP和UDP使用IP協議從一個網絡傳送數據包到另一個網絡。把IP想像成一種高速公路,它允許其它協議在上面行駛並找到到其它電腦的出口。TCP和UDP是高速公路上的"卡車",它們攜帶的貨物就是像HTTP,文件傳輸協議FTP這樣的協議等。

TCP和UDP是FTP,HTTP和SMTP之類使用的傳輸層協議。雖然TCP和UDP都是用來傳輸其他協議的,它們卻有一個顯著的不同:TCP提供有保證的數據傳輸,而UDP不提供。這意味著TCP有一個特殊的機制來確保數據安全的不出錯的從一個端點傳到另一個端點,而UDP不提供任何這樣的保證。

HTTP(超文本傳輸協議)是利用TCP在兩臺電腦(通常是Web服務器和客戶端)之間傳輸信息的協議。客戶端使用Web瀏覽器發起HTTP請求給Web服務器,Web服務器發送被請求的信息給客戶端。

電腦網絡:如何秒懂 TCP/UDP 和 HTTP協議的區別?簡單到沒朋友


記住,需要IP協議來連接網絡;TCP是一種允許我們安全傳輸數據的機制,,使用TCP協議來傳輸數據的HTTP是Web服務器和客戶端使用的特殊協議。

Socket 接口是TCP/IP網絡的API,Socket接口定義了許多函數或例程,用以開發TCP/IP網絡上的應用程序。


分享到:


相關文章: