日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

TCP和UDP的不同之處 tcp和udp概念和區(qū)別

寫了這么多篇關(guān)于 TCP 和 UDP 的文章,還沒有好好聊過這兩個協(xié)議的區(qū)別,這篇文章我們就來開誠布公的談一談 。
關(guān)于 TCP 和 UDP ,想必大家都看過一張這樣的圖 。

TCP和UDP的不同之處 tcp和udp概念和區(qū)別


有一個小姑娘在對著瓶口慢慢的喝水,下面寫著可靠的傳輸,少女的衣服沒有被水浸濕,這張圖被稱為 TCP。
然后又有一個小姑娘在舉著水瓶以很快的速度向下倒水,少女的頭發(fā)凌亂,臉色泛紅,衣服也被水浸濕,這張圖被稱為 UDP。
這兩張圖我認為是個程序員都能大致總結(jié)出來這兩個傳輸協(xié)議的不同點(畢竟圖上都寫的很清楚了)甚至不少同學(xué)對 UDP 產(chǎn)生了邪惡的念想,你說作者好好的畫個圖不行嗎,非要在臉上掛個紅,把衣服弄濕了才行 。。。。。。。
咳,咱們言歸正傳,TCP 和 UDP 的區(qū)別一直是面試的重點,也是經(jīng)常被用來拿來各種比較的兩個協(xié)議 。
建立連接的差異TCP 建立連接需要經(jīng)過三次握手,同時 TCP 斷開連接需要經(jīng)過四次揮手,這也表示 TCP 是一種面向連接的協(xié)議,這個連接不是用一條網(wǎng)線或者一個管道把兩個通信雙方綁在一起,而是建立一條虛擬通信管道 。
TCP 的三次握手流程(客戶端向服務(wù)器發(fā)送建立連接請求):
TCP和UDP的不同之處 tcp和udp概念和區(qū)別


  1. 服務(wù)端進程準備好接收來自外部的 TCP 連接,一般情況下是調(diào)用 bind、listen、socket 三個函數(shù)完成 。這種打開方式被認為是 被動打開(passive open) 。然后服務(wù)端進程處于 LISTEN 狀態(tài),等待客戶端連接請求 。
  2. 客戶端通過 connect 發(fā)起主動打開(active open),向服務(wù)器發(fā)出連接請求,請求中首部同步位 SYN = 1,同時選擇一個初始序號 sequence ,簡寫 seq = x 。SYN 報文段不允許攜帶數(shù)據(jù),只消耗一個序號 。此時,客戶端進入 SYN-SEND 狀態(tài) 。
  3. 服務(wù)器收到客戶端連接后,需要確認客戶端的報文段 。在確認報文段中,把 SYN 和 ACK 位都置為 1。確認號是 ack = x + 1,同時也為自己選擇一個初始序號 seq = y 。請注意,這個報文段也不能攜帶數(shù)據(jù),但同樣要消耗掉一個序號 。此時,TCP 服務(wù)器進入 SYN-RECEIVED(同步收到) 狀態(tài) 。
  4. 客戶端在收到服務(wù)器發(fā)出的響應(yīng)后,需要給出確認連接 。確認連接中的 ACK 置為 1 ,序號為 seq = x + 1,確認號為 ack = y + 1 。TCP 規(guī)定,這個報文段可以攜帶數(shù)據(jù)也可以不攜帶數(shù)據(jù),如果不攜帶數(shù)據(jù),那么下一個數(shù)據(jù)報文段的序號仍是 seq = x + 1 。這時,客戶端進入 ESTABLISHED (已連接) 狀態(tài) 。
  5. 服務(wù)器收到客戶的確認后,也進入 ESTABLISHED 狀態(tài) 。
而 UDP 是面向數(shù)據(jù)報的協(xié)議,所以 UDP 壓根不會有連接的概念,也就不會有三次握手建立連接的過程 。
數(shù)據(jù)傳輸結(jié)束后,通信雙方可以釋放連接 。數(shù)據(jù)傳輸結(jié)束后的客戶端主機和服務(wù)端主機都處于 ESTABLISHED 狀態(tài),然后進入釋放連接的過程 。
(客戶端主機主動關(guān)閉連接)
TCP和UDP的不同之處 tcp和udp概念和區(qū)別


TCP 斷開連接需要歷經(jīng)的過程如下
  1. 客戶端應(yīng)用程序發(fā)出釋放連接的報文段,并停止發(fā)送數(shù)據(jù),主動關(guān)閉 TCP 連接 ??蛻舳酥鳈C發(fā)送釋放連接的報文段,報文段中首部 FIN 位置為 1 ,不包含數(shù)據(jù),序列號位 seq = u,此時客戶端主機進入 FIN-WAIT-1(終止等待 1) 階段 。
  2. 服務(wù)器主機接受到客戶端發(fā)出的報文段后,即發(fā)出確認應(yīng)答報文,確認應(yīng)答報文中 ACK = 1,生成自己的序號位 seq = v,ack = u + 1,然后服務(wù)器主機就進入 CLOSE-WAIT(關(guān)閉等待) 狀態(tài),這個時候客戶端主機 -> 服務(wù)器主機這條方向的連接就釋放了,客戶端主機沒有數(shù)據(jù)需要發(fā)送,此時服務(wù)器主機是一種半連接的狀態(tài),但是服務(wù)器主機仍然可以發(fā)送數(shù)據(jù) 。

    推薦閱讀