網際網路協議解析(一) | 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的區別
- tcp是面向連線的,UDP是無連線的
- TCP 是可靠交付的,UDP是盡最大努力交付的(就是說不可靠交付)
- TCP 是面向位元組流的,UDP 面向報文的
- TCP 是點對點傳輸的,UDP可以點對點、點對多點,進行傳輸就是說UDP可以進行廣播,TCP不可以
- TCP 有擁塞控制、UDP沒有
- 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
(已經下半夜了,實在太累了。未完待續)
參考資料:
《計算機網路》