1. 程式人生 > >網路程式設計——TCP與UDP的區別,TCP的連線過程

網路程式設計——TCP與UDP的區別,TCP的連線過程

TCP/IP協議模型位於傳輸層,只要有TCP,UDP協議組成

TCP:面向連線的,可靠的,位元組流服務,TCP伺服器必須給每個連線分配資源

UDP:無連線,不可靠的,資料報服務,UDP不需要給每個連線分配資源

面向連線

面向連線:在真正通訊之前,必須先建立一條通訊線路,必須先完成連線

TCP完成連線的過程:

    建立連線:三次握手

    斷開連線:四次揮手

(這裡借鑑謝希仁第五版計算機網路5.9.1)

三次握手

 

為什麼不是兩次握手

   為什麼A還要再發送一次確認呢?這主要是為了防止已失效的連線請求報文段突然有傳送到了B,因而產生錯誤。

   所謂“已失效的連線請求報文段”是這樣產生的,考慮一種正常的情況,A發出連線請求,但因連線請求報文丟失未收到確定。於是A在重傳一次連線請求。後來收到了確認,建立了連線。資料傳輸完畢後,就釋放了連線。A共傳送了兩個請求報文段,其中第一個丟失,第二個到達了B。沒有“已失效的連線請求報文段”。

   先假定出現一種異常情況,即A發出的第一個連線請求並沒有丟失,而是在某個網路節點滯留了,以致延誤到連線釋放以後的某個時間才達到B。本來這是一個早已失效的報文段。但是B收到此失效的連線請求報文段後,誤認為是A重新又發出了一次新的連線請求,於是就像A發出確認報文段,同意建立連線。假定不採用三次握手,那麼只要B發出確定,新的連線就建立了。

   由於現在A並沒有發出建立連線的請求,因此不會理睬B的確認,也不會向B發出新的資料。但B確認為新的連線運輸連線已經建立了,並一直等待A發來資料。B的許多資源就白白浪費了。

   採用三次握手的辦法可以防止上述現象的發生。例如在剛剛的情況下,A不會向B的確認發出確定。B由於收不到確認,就知道A並沒有要求建立連線。

四次揮手

位元組流   &   資料報

那麼,什麼是位元組流,傳送端傳送的次數,與接收端接受的次數沒有關係,接收端接受資料時,不會截斷資料,丟棄部分資料

什麼是資料報,資料報就是傳送和接受次數是相等的,接收端一次未把UDP報文段中的資料讀取完成,則剩下的資料被丟棄

可靠性

TCP可靠性

1.資料必須能夠到達對端                     超時重傳    &    確認機制

2.報文段不重複、不亂序                     32位的序號

3.資料不失真                                       TCP報頭      16位的冗餘校驗碼(TCP頭部&資料)

4.擁塞控制和滑動視窗                         保證資料傳輸中的最小的丟包率