1. 程式人生 > >網際網路協議解析(一) | TCP 與UDP

網際網路協議解析(一) | TCP 與UDP

作者有話說

在很多面試中,有 很多面試官會問到:“你說說TCP UDP有什麼區別呀?”,你會巴拉巴拉說一堆區別。有很多人是應試性的背誦,但不一定很系統地理解TCP/UDP。我一個同事曾這樣形容過,就算面試的問題是“你說說龍肉 跟麒麟肉 有什麼區別呀?”,也會有人巴拉巴拉說出1234條來。壓根沒見過,你扯什麼犢子呀。

那麼,咱們就開始說說傳輸層協議  TCP和UDP吧!注:側重講解TCP

1.1 TCP 的前世今生

說起TCP協議就不得不提及一下IP協議。總所周知,IP層的特點是無連線的、盡最大努力傳輸的(言外之意,就是 我IP層盡力傳輸資料。但是如果我出現了丟包等現象,概不負責,我已經盡力啦。你自己看著辦吧)。傳輸網路頂層就是IP層呀,目前來說物理層、資料鏈路層、IP層都是可以出現丟包現象的。如果僅僅使用物理層、資料鏈路層、IP層進行傳輸資料的話,那可就苦了應用層了,誰也不知道哪一段資料會丟失,這個網路也太不可靠了。這也太恐怖了吧。人們總得想辦法解決這個問題吧,所以TCP誕生了。

  

          注:1 物理層  2 資料鏈路層   3 IP層   4 傳輸層    5 應用層

對於程序來說,儘管接收網路傳輸來的資料即可。這個負責網路可靠性的工作,就交給TCP了。TCP是遮蔽了下層網路的細節。在程序看來,就是一條點對點的可靠傳輸的通道。

1.2 TCP 與UDP的區別

  1. tcp是面向連線的,UDP是無連線的
  2. TCP 是可靠交付的,UDP是盡最大努力交付的(就是說不可靠交付)
  3. TCP 是面向位元組流的,UDP 面向報文的
  4. TCP 是點對點傳輸的,UDP可以點對點、點對多點,進行傳輸就是說UDP可以進行廣播,TCP不可以
  5. TCP 有擁塞控制、UDP沒有
  6. TCP 開銷大、UDP開銷小

本不打算這裡寫區別的。但一些好友建議,為了方便大家,在此加上此段總結。

1.3 TCP 的廬山真面目

TCP報文分為首部和資料兩部分。資料部分就是應用層的資料,TCP是無法改動其中的資訊的。首部的欄位實現了TCP的全部功能。

 

解析:

1. 源埠 目的埠      各佔16位,表明主機的埠

2.序號    佔32位,在tcp是面向位元組流的,資料部分的每個位元組(不包括TCP首部)都有編號,而且是按照順序編號的。首部中的序號是資料部分第一個位元組的編號。例如TCP報文的首部序號是501,資料部分攜帶了100個位元組的資料,那麼就表明:資料部分的第一個位元組的編號就是501,最後一個位元組的編號就是600,下次發生TCP報文的序號就應該是601了。如果序號是83,資料部分攜帶了201個位元組的資料,那麼就表明:資料部分的第一個位元組的編號就是83,最後一個位元組的編號就是283,下次發生TCP報文的序號就應該是284了。但是如果序號已經排到 2

^32-1,怎麼辦?那就再接著是0,1,2,3....,也就是說位元組編號是迴圈的,如下:0,  1,  2,   3  ......   2^32-3,2^32-2,2^32-1,0,1,2......

 

(已經下半夜了,實在太累了。未完待續)

參考資料:

    《計算機網路》