tcp是控制傳輸協議,提供的是面向連線、可靠的位元組流服務,當客戶和伺服器彼此交換資料前,必須現在雙方之間建立乙個tcp連線,之後才能傳輸資料。tcp提供超時重發、丟棄重複資料、檢驗資料、流量控制等功能,保證資料能夠從一端傳輸到另一端。
udp是使用者資料報協議,是乙個簡單的面向資料報的運輸層協議。udp不可提供可靠性,它只是把程式傳給ip層的資料報傳送出去,但是並不保證它們是否能夠到達目的地。由於udp在傳輸資料報之前不需要在客戶端和伺服器之間建立乙個連線,且沒有超時重發等機制,故而速度極快。
打個比方,兩者的區別可將前者模擬為打**,後者模擬為發郵件。
另外關於tcp的三次握手和四次揮手也是需要熟悉的,如下:
tcp三次握手和四次揮手的全過程
tcp是主機對主機層的傳輸控制協議,提供可靠的連線服務,採用三次握手確認建立乙個連線
:位碼即tcp
標誌位,有6
種表示:
syn(synchronous建立連線
)ack(acknowledgement 表示響應、確認
)psh(push表示有data資料傳輸
)fin(finish關閉連線
)rst(reset表示連線重置
)urg(urgent緊急指標字段值有效
)三次握手:
第一次握手:客戶端傳送syn
包(syn=x)
到伺服器,並進入
syn_send
狀態,等待伺服器確認;
第二次握手:伺服器收到syn
包,必須確認客戶的
syn(
ack=x+1
),同時自己也傳送乙個
syn包(
syn=y
),即syn+ack
包,此時伺服器進入
syn_recv
狀態;第三次握手:客戶端收到伺服器的syn
+ack
包,向伺服器傳送確認包
ack(ack=y+1)
,此包傳送完畢,客戶端和伺服器進入
established
狀態,完成三次握手。
握手過程中傳送的包裡不包含資料,三次握手完畢後,客戶端與伺服器才正式開始傳送資料。理想狀態下,tcp
連線一旦建立,在通訊雙方中的任何一方主動關閉連線之前,
tcp
連線都將被一直保持下去。
確認號:其數值等於傳送方的傳送序號+1(
即接收方期望接收的下乙個序列號)。
四次揮手:
與建立連線的「
三次握手
」類似,斷開乙個
tcp連線則需要「四次
揮手」。
第一次揮手:主動關閉方傳送乙個fin
,用來關閉主動方到被動關閉方的資料傳送,也就是主動關閉方告訴被動關閉方:我已經不會再給你發資料了
(當然,在
fin包之前傳送出去的資料,如果沒有收到對應的
ack確認報文,主動關閉方依然會重發這些資料
),但是,此時主動關閉方還可以接受資料。
第二次揮手:被動關閉方收到fin
包後,傳送乙個
ack給對方,確認序號為收到序號
+1(與
syn相同,乙個
fin占用乙個序號)。
第三次揮手:被動關閉方傳送乙個fin
,用來關閉被動關閉方到主動關閉方的資料傳送,也就是告訴主動關閉方,我的資料也傳送完了,不會再給你發資料了。
第四次揮手:主動關閉方收到fin
後,傳送乙個
ack給被動關閉方,確認序號為收到序號
+1,至此,完成四次揮手。
tcp的四次
揮手過程
(簡言之):
主動關閉方
向被動關閉方
傳送不會再給你發資料
了的資訊
;被動關閉方
對收到的
主動關閉方
的報文段進行確認;
被動關閉方向主動關閉方
傳送我也
不會再給你發資料
了的資訊;主動關閉方
再次對被動關閉方
的確認進行確認。
tcp三次握手和四次揮手的全過程如下圖:
tcp的三次握手過程?為什麼會採用三次握手,若採用二次握手可以嗎?
答:建立連線的過程是利用客戶伺服器模式,假設主機a
為客戶端,主機
b為伺服器端。(1)
tcp的三次握手過程:主機a向
b傳送連線請求;主機
b對收到的主機
a的報文段進行確認;主機
a再次對主機
b的確認進行確認。
(2)採用三次握手是為了防止失效的連線請求報文段突然又傳送到主機
b,因而產生錯誤。失效的連線請求報文段是指:主機
a發出的連線請求沒有收到主機
b的確認,於是經過一段時間後,主機
a又重新向主機
b傳送連線請求,且建立成功,順序完成資料傳輸。考慮這樣一種特殊情況,主機
a第一次傳送的連線請求並沒有丟失,而是因為網路節點導致延遲達到主機
b,主機
b以為是主機
a又發起的新連線,於是主機
b同意連線,並向主機
a發回確認,但是此時主機
a根本不會理會,主機
b就一直在等待主機
a傳送資料,導致主機
b的資源浪費。
(3)採用兩次握手不行,原因就是上面說的
失效的連線請求的特殊情況,因此採用三次握手剛剛好,兩次可能出現失效,四次甚至更多次則沒必要,反而複雜了。
TCP和UDP之間的區別
1.連線 無連線 他們之間的第一點並且最重要的區別是 tcp是面向連線的協議,而udp是無連線的協議。這意味著當乙個客戶端和乙個伺服器通過tcp傳送資料之前,必須先建立連線,他們可以通過tcp傳送資料。建立連線的過程也被稱為tcp握手,他通過控制訊息在客戶端和伺服器之間互換來實現。下面的圖形象描述了...
TCP和UDP通訊之間比較
在tcp客戶和伺服器可以彼此通訊之前,每一端都要指定連線的套接字對 本地ip位址 本地埠 外地ip位址 外地埠。下圖為從客戶的角度來看待tcp客戶和伺服器 從客戶的角度來理解tcp客戶和伺服器 下面從伺服器的角度來看tcp客戶 伺服器。本地埠 伺服器眾所周知的埠 用bind來繫結。bind呼叫中伺服...
TCP和UDP之間的區別和聯絡
tcp和udp之間的區別和聯絡 1.面向連線的tcp www.2cto.com tcp transmission control protocol,傳輸控制協議 是基於連線的協議,也就是說,在正式收發資料前,必須和對方建立可靠的連線。乙個tcp連線必須要經過三次 對話 才能建立起來,其中的過程非常複...