android udp 收发例子_网络协议之TCP和UDP
首先強調(diào)一點,TCP/IP協(xié)議是一個協(xié)議簇。里面包括很多協(xié)議的,UDP只是其中的一個, 之所以命名為TCP/IP協(xié)議,因為TCP、IP協(xié)議是兩個很重要的協(xié)議,就用他兩命名了。
兩個協(xié)議的區(qū)別實際使用時,只需要記住“TCP正常連接發(fā)送數(shù)據(jù)時一般不會產(chǎn)生丟包(排除上下層其他因素),而UDP產(chǎn)生丟包是很常見的事。”
1 下面著重講解一下TCP協(xié)議和UDP協(xié)議的區(qū)別
1、基于連接與無連接;
2、對系統(tǒng)資源的要求(TCP較多,UDP少);
3、UDP程序結構較簡單;
4、流模式與數(shù)據(jù)報模式 ;
5、TCP保證數(shù)據(jù)正確性,UDP可能丟包;
6、TCP保證數(shù)據(jù)順序,UDP不保證。
通過以上分析,可能會有人認為,鑒于TCP可靠的傳輸協(xié)議,那么它一定優(yōu)于UDP,其實不然。
下面舉例說明這個問題:
TCP用于在傳輸層有必要實現(xiàn)可靠傳輸?shù)那闆r。由于它是面向有鏈接并具備順序控制、重發(fā)控制等機制,所以它可以為應用提供可靠傳輸。
在另方面,UDP主要用于那些對高速傳輸和實時性較高要求的通信或廣播通信。我們舉一個例子-通過IP電話進行通話,如果使用TCP,數(shù)據(jù)在傳輸圖中如果丟失會被重發(fā),但這樣無法流暢地傳輸通話人的聲音,會導致無法進行正常交流。而采用UDP,它不會進行重發(fā)處理。從而也就不會有聲音大幅度延遲到達的問題。即使有部分數(shù)據(jù)丟失,也只是會影響某一小部分的通話。此外,在多播與廣播信道中也使用UDP而不是TCP。
TCP(Transmission Control Protocol,傳輸控制協(xié)議)是面向連接的協(xié)議,也就是說,在收發(fā)數(shù)據(jù)前,必須和對方建立可靠的連接。 一個TCP連接必須要經(jīng)過三次“對話”才能建立起來,其中的過程非常復雜,只簡單的描述下這三次對話的簡單過程:
1)主機A向主機B發(fā)出連接請求數(shù)據(jù)包:“我想給你發(fā)數(shù)據(jù),可以嗎?”,這是第一次對話;
2)主機B向主機A發(fā)送同意連接和要求同步 (同步就是兩臺主機一個在發(fā)送,一個在接收,協(xié)調(diào)工作)的數(shù)據(jù)包 :“可以,你什么時候發(fā)?”,這是第二次對話;
3)主機A再發(fā)出一個數(shù)據(jù)包確認主機B的要求同步:“我現(xiàn)在就發(fā),你接著吧!”, 這是第三次對話。
三次“對話”的目的是使數(shù)據(jù)包的發(fā)送和接收同步,經(jīng)過三次“對話”之后,主機A才向主機B正式發(fā)送數(shù)據(jù),這也是保證可靠傳輸?shù)南葲Q條件。
6 UDP(User Data Protocol,用戶數(shù)據(jù)報協(xié)議)
1、UDP是一個非連接的協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡上。 在發(fā)送端,UDP傳送數(shù)據(jù)的速度僅僅是受應用程序生成數(shù)據(jù)的速度、 計算機的能力和傳輸帶寬的限制;在接收端,UDP把每個消息段放在隊列中,應用程序每次從隊列中讀一個消息段。
2、 由于傳輸數(shù)據(jù)不建立連接,因此也就不需要維護連接狀態(tài),包括收發(fā)狀態(tài)等,因此一臺服務機可同時向多個客戶機傳輸相同的消息。
3、UDP信息包的標題很短,只有8個字節(jié),相對于TCP的20個字節(jié)信息包的額外開銷很小。
4、吞吐量不受擁擠控制算法的調(diào)節(jié),只受應用軟件生成數(shù)據(jù)的速率、傳輸帶寬、 源端和終端主機性能的限制。
5、UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持復雜的鏈接狀態(tài)表(這里面有許多參數(shù))。
6、UDP是面向報文的。發(fā)送方的UDP對應用程序交下來的報文, 在添加首部后就向下交付給IP層。既不拆分,也不合并,而是保留這些報文的邊界, 因此,應用程序需要選擇合適的報文大小。
我們經(jīng)常使用“ping”命令來測試兩臺主機之間TCP/IP通信是否正常, 其實“ping”命令的原理就是向?qū)Ψ街鳈C發(fā)送UDP數(shù)據(jù)包,然后對方主機確認收到數(shù)據(jù)包, 如果數(shù)據(jù)包是否到達的消息及時反饋回來,那么網(wǎng)絡就是通的。
ping命令是用來探測主機到主機之間是否可通信,如果不能ping到某臺主機,表明不能和這臺主機建立連接。ping命令是使用 IP 和網(wǎng)絡控制信息協(xié)議 (ICMP),因而沒有涉及到任何傳輸協(xié)議(UDP/TCP) 和應用程序。它發(fā)送icmp回送請求消息給目的主機。
ICMP協(xié)議規(guī)定:目的主機必須返回ICMP回送應答消息給源主機。如果源主機在一定時間內(nèi)收到應答,則認為主機可達。
總結
以上是生活随笔為你收集整理的android udp 收发例子_网络协议之TCP和UDP的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: promise then err_Pro
- 下一篇: opencv 画矩形_图像处理之Open