TCP/IP之傳輸層

傳輸層的作用

按照OSI參考模型的劃分,傳輸層負責管理兩個節點之間的數據傳輸。更具體的,網絡層能夠根據IP地址,將數據發送到指定的目標主機,而傳輸層則需要將數據發送到更為具體的某一個具體的應用程序。
傳輸層中有兩個非常具有代表性的傳輸層協議,他們分別是TCP和UDP。TCP是面向連接的,負責可靠的通信傳輸,而UDP則是不具有可靠性的,常被用于廣播和細節控制交給應用的通信傳輸。

端口號

數據鏈路和IP中的地址,分別指的是MAC地址和IP地址,前者用來識別同一鏈路中不同的計算機,后者用來識別TCP/IP網絡中互連的主機和路由器。在傳輸層中,也有類似于地址的概念,那就是端口號。端口號用來識別同一臺計算機中進行通信的不同應用程序,因此,它也被稱為程序地址。

  • 端口號的作用
    一臺計算機上同時運行多個程序,例如瀏覽器,email客戶端,ssh客戶端等程序都可以同時運行,傳輸層正是利用這些端口號識別本機中正在進行通信的應用程序,并準確的將數據傳輸。
根據端口號識別應用
  • 如何進行通信識別
    TCP/IP中,要識別一個通信,通常要5個要素:源地址IP,目標地址IP,協議號,源端口號,目標端口號,只有這5個信息完全一致,才能識別他們是否為同一個通信。
識別通信
  • 端口號如何確定
    在實際進行通信時,要事先確定端口號。確定端口號的方法主要有兩種:
  • 標準既定的端口號:一般0-1023的為知名端口號。
  • 時序分配法:服務端有必要監聽端口號,接受服務的客戶端沒有必要確定端口號,這種方法下,客戶端應用程序可以完全不用自己設置端口號,而全權交給操作系統進行分配。操作系統可以為每個應用程序分配互不沖突的端口號。
  • 端口號與協議
    端口號由其使用的傳輸層協議決定。因此,不同的傳輸協議可以使用相同的端口號。

UDP

UDP不提供復雜的控制機制,利用IP提供面向無連接的通信服務。并且它是將應用程序發來的數據在收到的那一刻,立即按照原樣發送到網絡上的一種機制。因此,UDP不提供擁塞控制,丟包重發,順序控制等功能,但能夠簡單高效的發送數據,通常用于以下幾方面:

  • 包總量較少的通信(DNS、SNMP等)
  • 視頻、音頻等多媒體通信(即時通信)
  • 限定于LAN等特定網絡中的應用通信
  • 廣播通信(廣播、多播)

TCP

相對于UDP的面向無連接快速簡單高效,TCP則是一種面向連接的,具備順序控制、重發控制、擁塞管理等機制的可靠的通信傳輸協議。
TCP通過檢驗和、序列號、確認應答、重發控制、連接管理以及窗口控制等機制實現可靠性傳輸。

  • 通過序列號與確認應答提高可靠性
    在TCP中,當發送端的數據到達接收主機時,接收端主機會返回一個已收到消息的通知。這個消息叫做確認應答(ACK)。另外,為了避免接收重復的數據,TCP中會給每個數據添加序列號,接收端查詢接收數據TCP首部中的序列號和數據的長度,將自己下一步應該接收的序列號作為確認應答返送出去。通過序列號和確認應答,TCP可以實現可靠傳輸。
序列號與確認應答
  • 重發超時確定
    重發超時是指在重發數據之前,等待確認應答到來的那個特定時間間隔。如果超過這個時間仍未收到確認應答,發送端將進行數據重發。那么,這個重發超時的具體時間長度是如何確定的呢?
    TCP中,在每次發包時都會計算往返時間及其偏差。將這個往返時間(報文段的往返時間)和偏差時間相加,重發超時的時間就是比這個總和稍大一點的值。
重發超時的確認
  • 連接管理(三次握手和四次握手)
    TCP提供面向連接的通信傳輸,連接是指各種設備、線路,或網絡中進行通信的兩個應用程序為了相互傳遞信息而專有的、虛擬的通信線路,也叫虛擬電路。一旦建立了連接,進行通信的應用程序只使用這個虛擬的通信線路發送和接收數據,就可以保障信息的傳輸。建立一個TCP連接需要發送三個包,也稱為三次握手,斷開一個了解需要發送四個包,也稱為四次握手。
TCP的連接與斷開
  • TCP以段為單位發送數據
    在建立TCP連接的同時,也可以確定發送數據包的單位,我們稱之為“最大消息長度(MSS)”。TCP在傳送大量數據時,是以MSS的大小將數據進行分割傳送。進行重發也是以MSS為單位。
    MSS是在三次握手的時候,在兩端主機之間被計算得出的。兩端主機在發出建立連接的請求時,會在TCP首部中寫入MSS選項。告訴對方自己的接口能夠適應的MSS的大小,然后會在兩者之間選擇一個較小的值投入使用。
TCP以段為單位發送數據
  • 利用窗口控制提高速度
    TCP以段為單位,每發一個段,進行一次確認應答的處理,不過,這種方式下,包的往返時間越長通信性能越低。為了解決這個問題,TCP引入了窗口這個概念。即使在往返時間較長的情況下,它也能夠控制網絡性能的下降。如下圖所示,確認應答不再是以每個分段,而是以更大的單位進行確認時,轉發時間將會被大幅的縮短。也就是說,發送端主機,在發送了一個段以后,不必要一直等待確認應答,而是繼續發送。
    窗口大小就是指無需等待確認應答而可以繼續發送數據的最大值。這個機制實現了使用大量的緩沖區,通過對多個段同時進行確認應答的功能。
TCP窗口
  • 窗口控制與重發機制
    在使用窗口控制中,如果出線段丟失該怎么辦?考慮兩種情況:
  • 數據已經到達對端,但是,確認應答未能返回,這種情況下,是不需要進行重發的,在未使用窗口控制的情況下,沒有收到確認應答的數據也是會被重發,而使用了窗口控制以后,某些確認應答即便丟失也無需重發。
IMG_5674.PNG
  • 某個報文段丟失了,如下圖所示,當1001~2000的報文段丟失以后,發送端會一直收到序號為1001的確認應答,而發送端主機如果連續3次收到同一個確認應答,就會將其所對應的數據進行重發。這種機制比之前的超時管理更加高效,因此被稱為高速重發機制。
Paste_Image.png
  • 流控制
    TCP提供了一種機制,可以讓發送端根據接收端的實際接收能力控制發送的數據量,這就是流控制。他的具體操作是,接收端主機向發送端主機通知自己可以接收數據的大小,發送端發送不超過這個限度的數據,該大小限度就是窗口大小。TCP首部中,專門有一個字段用來通知窗口大小。
流控制
  • 擁塞控制
    有了TCP的窗口控制,收發主機之間能夠連續的發送大量數據包,然而,如果在通信剛開始是就發送大量數據,也可能會引發其他問題。
    計算機網絡處于一個共享環境,因此,可能會因為其他主機之間的通信使得網絡擁堵。在網絡擁堵時,如果突然發送大量的數據,極有可能會導致整個網絡的癱瘓。TCP為了防止該問題的出現,在通信一開始就會通過一個叫做慢啟動的算法得出的數值,對發送數據量進行控制。
    為了在發送端調節所要發送數據的量,定義了一個叫做“擁塞窗口”的概念。再慢啟動的時候,將這個擁塞窗口的大小設置為1個數據段(1MSS)發送數據,之后每一次收到一次確認應答(ACK),擁塞窗口的值就加1.在發送數據包時,將擁塞窗口的大小和接收端主機通知的窗口大小做比較,然后按照他們當匯總較小的那個值,發送比其還要小的數據量。
擁塞控制

TCP和UDP首部的格式

  • UDP首部的格式
UDP首部格式

如圖所示:UDP首部由源端口號,目標端口,包長和校驗組成。

  • TCP首部的格式
TCP首部格式

TCP首部主要包括源端口號,目標端口號,序列號,確認應答號,數據偏移,控制位,窗口大小,校驗和等字段組成,但沒有表示包長度和數據長度的字段。可由IP層獲知TCP的包長,由TCP的包長可知數據的長度。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容

  • 同樣的,本文篇幅也比較長,先來一張思維導圖,帶大家過一遍。 一、 計算機網絡體系結構分層 二、 TCP/IP 基礎...
    滌生_Woo閱讀 65,158評論 38 1,038
  • 傳輸層-TCP, TCP頭部結構 ,TCP序列號和確認號詳解 TCP主要解決下面的三個問題 1.數據的可靠傳輸...
    抓兔子的貓閱讀 4,543評論 1 46
  • 協議基礎 協議就是計算機之間通過網絡實現通信時實現所達成的一種“約定”,這種約定使得那些由不同廠商的設備,不同的C...
    d9fc24a0c9a9閱讀 2,393評論 0 6
  • 個人認為,Goodboy1881先生的TCP /IP 協議詳解學習博客系列博客是一部非常精彩的學習筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,085評論 0 8
  • 1.這篇文章不是本人原創的,只是個人為了對這部分知識做一個整理和系統的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,119評論 6 174