一文了解運輸層TCP/UDP協議

閱讀原文能夠訪問個人我的博客git

你如何收到好友的QQ消息?
  你有沒有想過這個問題,當你和朋友使用QQ進行聊天的時候,你的消息是如何發送到好友的手機或者電腦上去的呢?


  在解決這個問題以前不妨先思考一下另外一個問題。有一天遠方的朋友給你寫了一封信,快遞員收到信件以後要把信件送到你的手中。首先他要作的是根據信件上的地址信息找到你家所在的那一棟樓 ,找到你家所在的那一棟樓以後,快遞員會再根據你家的門牌號才能把信件送到你的手中。
  同理,QQ上的消息要從好友哪裏發送到你這裏。第一步是要作的是要找到你的手機或者電腦在網絡中的地址(IP地址),找到你的設備在網絡中的地址以後,你的設備中同時開啓了許多其餘的網絡應用,消息仍然不知道發送到你的手機的哪一個位置,爲了把信息準確的送到QQ上而不是其餘的應用上,必須使用端口號來區別設備上各類不一樣的網絡的應用,至此消息就能夠從好友QQ上準確的發送到你的QQ上了。github

什麼是網絡協議?
  首先讓咱們看一段解釋:緩存

> 一個協議定義了在兩個或多個通訊實體之間交換的報文格式和次序,以及報文發送和/或接收一條報文或其餘事件所採起的動做。

  咋看這個解釋,多是一頭霧水。咱們經過一個類比來解釋一下。假如你忘記帶手錶了,這時你想向一個陌生人詢問如今的時間,首先你要的作的是和陌生人打招呼(發送報文)。若是陌生人迴應了你(接收一條報文後採起的動做),你才能繼續向她問時間。若是陌生人不會說中文,那麼大家就不能進行後繼的交流了。這是一個簡單的人類之間進行交流的協議。服務器

  同理在計算機網絡中,兩個進行通訊的設備也應該遵循相同的網絡通訊協議才能進行通訊。
    網絡

因特網運輸層概述
  運輸層位於網絡層之上應用層之下,該層爲運行在不一樣主機上的<font color = orange>應用進程提供直接的通訊服務起着相當重要的做用。若是不一樣主機之間的應用進程要進行直接通訊的話,惟一的方法是使用應用層的協議。
  運輸層上使用的協議主要有兩種:UDP、TCP。下表展現處了兩種協議分別會在什麼應用中會被使用到。能夠看出TCP協議一般被使用到對數據丟失不能忍受的應用上,如電子郵件、即時通訊,由於TCP協議在傳輸數據的過程當中不會形成數據的丟失。而UDP協議在傳輸的過程當中會有些許的數據丟失,因此它一般會被應用到語音電話、視頻電話等對數據丟失能夠忍受的應用上。spa

應用 應用層協議 下面的運輸協議
電子郵件  SMTP TCP
遠程終端訪問 Telnet TCP
Web HTTP TCP
文件運輸 FTP TCP
遠程文件服務器 NFS 一般UDP
流式多媒體 一般專用2 UDP或TCP
因特網電話 一般專用 UDP或TCP

面向鏈接的運輸:TCP
          TCP之因此是被稱爲面向鏈接的,是由於兩臺主機上下應用進程在進行通訊以前,必須先"握手"即它們必須相互發送某些預備報文段,以創建鏈接,這是保證TCP協議用來傳輸數據可靠的手段之一。
## 三次握手
          前面談到,TCP協議在進行通訊以前會進行三次握手,三次握手以後,兩臺主機上的應用進程之間纔會創建鏈接,那麼三次握手是如何進行的呢?

          第一步:客戶端的TCP首先向服務器的TCP發送一個特殊的SYN報文段(該報文段中不包括應用層數據),報文首部的標識位SYN會被置爲1,同時報文中會加上客戶端隨機生成的一個初始序號(client_isn),將此編號放置於該起始的TCP SYN報文段的序號字段中。最後該報文段會被封裝在一個IP數據報中,發送給服務器。
          第二步:一旦包含TCP SYN報文段的IP數據報到達服務器主機,服務器會向客戶端發送容許鏈接報文(SYNACK報文段),該報文首部的標識位SYN會被置爲0,同時報文中會加上服務器選擇的初始序號(server_isn),將此編號放置到TCP報文段首部的序號字段中,同時TCP報文段的確認號字段被置爲client_isn + 1。
          第三步:在收到SYNACK報文段後,客戶端也要給該鏈接分配緩存和變量。客戶主機則向服務器發送另一個報文段;這最後一個報文段對服務器的容許鏈接的報文段就像了確認(該客戶經過將值server_isn + 1放置到TCP報文段首部的確認段中來完成此項工做)。由於鏈接郵件創建了,因此該SYN比特被置爲0。
          一旦這三個步驟順利完成,客戶端和服務器之間就能夠相互通訊了。
無鏈接運輸:UDP
          顧名思義,UDP在應用進程間傳輸數據以前不須要像TCP那麼麻煩的要與服務器進行三次握手,採用UDP時,只要應用進程將數據傳輸給UDP,UDP就會將此數據打包進報文段並當即將其傳遞給網絡層,發送給遠程主機。因此它就沒法保證數據是否會被準確的交付到遠程主機應用進程。
UDP和TCP比較
          UDP傳輸數據時不須要創建鏈接,但會丟失數據。TCP傳輸數據可靠。兩個協議的不一樣特色致使他們使用的場合不一樣,在實際的開發中須要視工程的要求來決定使用哪個協議。
計算機網絡

  UDP TCP
是否須要與遠程主機創建鏈接
報文首部開銷 8byte 20byte
數據傳輸可靠性 不可靠 可靠
相關文章
相關標籤/搜索