1. 程式人生 > >TCP與UDP

TCP與UDP

amp color smi .com new miss 時也 兩個 mic

TCP和UDP是OSI模型中的運輸層中的協議。TCP提供可靠的通信傳輸,而UDP則常被用於讓廣播和細節控制交給應用的通信傳輸。

UDP(User Datagram Protocol):用戶數據報協議

1. UDP是無連接的,發送數據前不需要建立連接,減少了建立連接的開銷和發送數據之前的時延;

2. UDP盡最大努力交付,即不保證可靠交付;

3. UDP是面向報文的,其協議傳輸單元是UDP用戶數據報;

4. UDP支持一對一、一對多、多對一和多對多的交互通信;

5. UDP沒有流量控制、擁塞控制;

6. UDP首部開銷小,只有8個字節,而TCP首部有20個字節。

UDP不提供復雜的控制機制,利用IP提供面向無連接的通信服務。並且它是將應用程序發來的數據在收到的那一刻,立刻按照原樣發送到網絡上的一種機制。

即使是出現網絡擁堵的情況下,UDP也無法進行流量控制等避免網絡擁塞的行為。此外,傳輸途中如果出現了丟包,UDP也不負責重發。甚至當出現包的到達順序亂掉時也沒有糾正的功能。如果需要這些細節控制,那麽不得不交給由采用UDO的應用程序去處理。換句話說,UDP將部分控制轉移到應用程序去處理,自己卻只提供作為傳輸層協議的最基本功能。UDP有點類似於用戶說什麽聽什麽的機制,但是需要用戶充分考慮好上層協議類型並制作相應的應用程序。


TCP(Transmission Control Protocol):傳輸控制協議

1. TCP是面向連接的,使用TCP協議前必須先建立連接,使用完後必須釋放已建立的連接;


2. 每一條TCP連接只能有兩個端點,即是一對一的;

3. TCP提供可靠交付的服務,通過一系列措施保證可靠傳輸。註意,TCP並不保證數據一定會被對方端點接收到,因為這是不可能做到的。如果有可能,TCP就把數據遞送到對方端點,否則就(通過放棄重傳並中斷連接這一手段)通知用戶。這麽說來,TCP並不是100%可靠的協議,它提供的是數據的可靠遞送或故障的可靠通知。

4. TCP提供全雙工通信,TCP允許通信雙方的應用進程任何時候都能發送數據。TCP連接的兩段都設有發送緩存和接收緩存。

5. TCP是面向字節流的,即傳送的數據是一連串無結構的字節流,其協議數據單元是TCP報文段。

6. TCP提供擁塞控制,其主要方法有慢啟動、擁塞避免、快重傳和快恢復。


TCP保證可靠傳輸的措施有:

1. 通過確認機制來確定TCP兩端傳遞數據的成功與否;

2. 超時和重傳機制,TCP一端發送數據後,它要求對端返回一個確認,如果在一定時間間隔後沒有收到另一端的確認消息,TCP就會通過ARQ(自動重傳請求)申請發送端重新發送;

3. 通過對報文段序列號進行排序,如果接收到的序列號相等,則判定發送的數據重復,從而拋棄重復數據;

4. 流量控制,TCP總是告知對端任何時刻它一次能夠從對端接收多少字節的數據,這稱為通告窗口。該窗口指出接收緩沖區當前可用的空間量,從而確保發送端發送的數據不會是接收緩沖區溢出。

5. TCP傳輸單一字節流,任何字節丟失,都將阻塞該連接上其後所有數據的遞送,直到該丟失被恢復。

TCP充分實現了數據傳輸時各種控制功能,可以進行丟包的重發控制,還可以對次序亂掉的分包進行順序控制。而這些在UDP中都沒有。此外,TCP作為一種面向有連接的協議,只有在確認通信對端存在時才會發送數據,從而可以控制通信流量的浪費。

水平有限,只能列舉這麽多了,以後深入學習後再來更新。

TCP三次握手、四次揮手:

技術分享

ACK 代表確認 SYN代表同步 FIN表示結束 ACK中的確認號是發送這個ACK的一端所期待的下一個序列號。因為SYN占一個字節的序列號空間,所以每一個SYN的ACK中的確認號就是該SYN的初始序列號加1.類似的,每一個FIN的ACK中的確認號為該FIN的序列號加1.三次握手:
在服務器準備好接受外來的連接後,
(1)客戶端通過connect發起主動打開(active open)。這導致客戶端TCP發送一個SYN分節,告訴服務器客戶將在連接中發送的數據的初始序列號,如上圖中的SYN seq=x, x為初始序列號。
(2)服務器必須確認(ACK)客戶端的SYN,同時自己也得發送一個SYN分節;它含有服務器將在同一連接中發送的數據的初始序列號。服務器在單個分節中發送SYN和對客戶SYN的ACK。
(3)客戶端確認(ACK)服務器的SYN。四次揮手: (1)某個應用進程首先調用close,我們稱該端執行主動關閉(active close)。該端的TCP於是發送一個FIN分節,表示數據發送完畢。
(2)接收到這個FIN的對端執行被動關閉(passive close)。這個FIN由接收端TCP確認(ACK)。它的接收也作為一個文件結束符傳遞給接收端應用進程(放在已排隊等候該應用進程接收的任何其他數據之後),因為FIN的接收意味著接收端應用進程在相應連接上再無額外數據可接收。
(3)一段時間後,接收到這個文件結束符的應用進程將調用close關閉它的套接字。這導致它的TCP也發送一個FIN分節。
(4)接收這個最終FIN的原發送端TCP(即執行主動關閉的一端)確認(ACK)這個FIN。


TCP與UDP如何加以區分使用?

TCP用於在傳輸層有必要實現可靠性傳輸的情況。由於它是面向有連接並具備順序控制、重發控制等機制的。所以它可以為應用提供可靠傳輸。

另一方面,UDP主要用於那些對高速傳輸和實時性有較高要求的通信或廣播通信。舉一個IP電話進行通話的例子。如果使用TCP,數據在傳送途中如果丟失會被重發,但是這樣無法流暢地傳輸通話人的聲音,會導致無法進行正常交流。而采用UDP,它不會進行重發處理。從而也就不會有聲音大幅度延遲到達的問題。即使有部分數據丟失,也只是影響某一小部分的通話。此外,在多播與廣播通信中也使用UDP而不是UDP。RIP、DHCP等基於廣播的協議也要依賴於UDP。


TCP與UDP區別總結:

1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接

2、TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重復,且按序到達;UDP盡最大努力交付,即不保證可靠交付
3、TCP面向字節流,實際上是TCP把數據看成一連串無結構的字節流;UDP是面向報文的
4、UDP沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低,而TCP提供擁塞控制。
5、每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信
6、TCP首部開銷20字節;UDP的首部開銷小,只有8個字節

7、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道


參考資料:

UNIX網絡編程卷一

計算機網絡第七版-謝希仁

http://m.blog.csdn.net/yipiankongbai/article/details/24435977?utm_source=qq&utm_medium=social

TCP與UDP