TCP有連接可靠服務
TCP特點:
1.TCP是面向連接的傳輸層協議;
2.每條TCP連接只能有兩個端點,每條TCP連接是一對一的;
3.TCP提供可靠交付,保證傳送數據無差錯,不丟失,不重復且有序;
4.TCP提供全雙工信道,允許通信雙方同時發送數據。TCP兩端都設有發送緩存和接收緩存,用來臨時存放雙向通信的數據;
發送緩存存放的數據:1.發送應用程序傳給發送方TCP準備發送的數據。2.TCP已發送但未收到確認的數據。
接收緩存存放的數據:1.按序到達但尚未被接受應用程序讀取的數據。2.不按序到達的數據。
5.TCP是面向字節流的,雖然應用程序和TCP的交互是一次一個數據塊(大小不等),但TCP把應用程序交下來的數據僅視為一串無結構的字節流。(這會導致粘包問題)UDP報文長度由發送應用進程決定,TCP報文的長度需要根據接收方給出的窗口值和網絡擁塞程度來決定。如果進程傳送到TCP緩存的數據塊太長,TCP會把它劃分得短一些傳送,如果太短則積足夠多得字節再組成報文段發出去。
TCP連接的端口為套接字,由IP和端口號組成,套接字唯一的標識網絡中的一臺主機和其上的一個應用(進程)。每條TCP連接唯一的被通信的兩個端口確定。
三次握手:
1.客戶機向服務器發送請求連接報文段,報文段中同步位SYN置1,同時包含一個初始序號seq=x,客戶端進入同步已發送(SYN-SENT)狀態。
2.服務器收到客戶端的請求連接報文,回復一個確認報文。報文中確認位ACK、同步位SYN都置1,并包含一個初始序號seq=y和確認號ack=x+1,服務器進入同步收到(SYN-RCVD)狀態。
3.客戶端收到服務器的確認之后再向服務器發送一個確認報文,報文中確認位ACK置1,序號為seq=x+1,確認號ack=y+1,客戶進程進入已建立連接(ESTABLISHED)狀態。
四次揮手:
1.客戶機發送釋放鏈接報文段,并停止發送數據,主動關閉TCP連接。報文段中終止位FIN置1,序號seq=u為上一個發送序號+1,客戶機進入終止等待1(FIN-WAIT_1)狀態。
2.服務器收到報文段后回復一個確認報文段。報文段中確認位ACK置1,確認號ack=u+1,序號seq=v為前一個序號加一,服務器進入關閉等待狀態(CLOSE-WAIT)。
3.當服務器沒有要向客戶機發送的數據時,通知TCP釋放鏈接。發送釋放連接報文段。報文段中終止位FIN確認位ACK都置1,確認號ack=u+1,序號seq=w(可能在這之前服務器還發送過一些數據),服務器進入最后確認狀態(LAST-ACK)。
4.客戶機收到報文,回復一個確認報文段。報文段中確認位ACK置1,確認號ack=w+1,序號seq=u+1。客戶機等待2MSL(最長報文段壽命)后進入連接關閉狀態(CLOSED)。
UDP無連接非可靠服務
UDP特點:
1.無需建立連接,沒有建立連接時延;
2.無連接狀態,因為是無連接,因此不必維護連接狀態(接收緩存發送緩存擁塞控制和確認之類的);
3.分組首部開銷更小(UDP首部只有8B,而TCP有20B);
4.應用層能更好的控制發送的數據和發送時間。(沒有擁塞控制不會受網絡擁塞影響);
5.UDP支持一對一,一對多,多對多的交互通信,而TCP只支持一對一通信;
UDP常用于一次性傳送較少數據的網絡應用,如DNS,SNMP,也常用于多媒體應用,如IP電話,視屏會議,流媒體等。因為時延小。
UDP不保證可靠交互,但可由用戶在應用層來完成可靠交互(可以在應用層實現類似TCP可靠交互的機制(確認,重傳,數據有序))
UDP是面向報文,UDP對應用層交下來的報文既不合并,也不拆分,而是保留報文的邊界,一次交付一個完整的報文(報文在UDP中是不可分割的,報文是UDP數據報處理的最小單位)。(但UDP交付給IP層(網絡層)后可能會被分片)