文章目錄
- 1. 運輸層概述
- 2. 運輸層埠號、復用與分用
- 3. TCP(傳輸控制協議)與UDP(用戶資料報協議)的對比
- 4. 流量控制
- 5. 擁塞控制
- 6. 超時重傳時間的選擇
- 7. TCP可靠傳輸的實作
- 8. TCP的連接建立
- 9. TCP的連接釋放
- 10. TCP首部格式
1. 運輸層概述
(1)、前情回顧
計算機網路體結構中的物理層、資料鏈路層以及網路層它們共同解決了將主機通過異構網路互連起來所面臨的問題,實作了主機到主機的通信,

(2)、為什么需要運輸層?
- 但實際上在
計算機網路中進行通信的真正物體是位于通信兩端主機中的行程, 如何運行在不同的主機上的應用行程提供直接的通信服務是運輸層的任務,運輸層協議又稱端到端協議,因為運輸層的作用范圍是端到端,

(3)、運輸層的相關說明
- 運輸層向高層用戶屏蔽了下面網路核心的細節(如網路拓撲、所采用的路由選擇協議等),
它使應用行程看見的就好像是在兩個運輸層物體之間有一條端到端的邏輯通信信道,

- 根據應用需求的不同,因特網的運輸層為應用層提供了兩種不同的運輸協議,即
面向連接的TCP和無連接的UDP,
2. 運輸層埠號、復用與分用
(1)、為什么需要埠號?
- 運行在計算機上的
行程使用行程識別符號PID來標志, - 因特網上的計算機并不是使用統一的作業系統,
不同的作業系統又使用了不同格式的行程識別符號, 為了使運行不同作業系統的計算機的應用行程之間能夠進行通信,就必須使用統一的方法對TCP/IP體系的應用行程進行標識,
(2)、埠號簡介
埠號使用16位元,取值范圍0~65535,埠號只有本地意義,即埠號只是為了標識本地計算機應用層中的各行程在因特網中,不同計算機中的相同埠號是沒有任何聯系的,
分類
- 數值埠號:
0~1023,IANA把這些埠號指派給了TCP/IP體系中最重要的一些應用協議, - 登記埠號:
1024~49151,為沒有熟知埠號的應用程式使用,使用這類埠號必須在IANA按照規定的手續登記, - 短暫埠號:
49152~65535,留給客戶端行程選擇暫時使用,當服務器行程收到客戶行程的報文時,就知道了客戶行程所使用的動態埠號,通信結束后,這個埠號可供其他客戶行程使用,
(3)、發送方的復用
多個行程(這里一個埠表示一個行程)利用一個運輸層協議(或者稱為運輸層介面)發送資料稱為 復用
應用行程的應用報文向下傳遞,有的被UDP協議封裝成UDP資料報,有的被TCP協議封裝成TCP報文段,然后再往下傳輸,被IP協議封裝成IP資料報進行運輸,

(4)、接收方的分用
多個行程(這里一個埠表示一個行程)利用一個運輸層協議(或者稱為運輸層介面)接收時叫做 分用,
IP資料報被接收方接收進行IP分用,如果IP資料報的協議欄位為17,則將IP資料報中的資料載荷部分的UDP資料報向上傳遞給運輸層,如果IP資料報的協議欄位為6,則將IP資料報中的資料載荷部分的UDP資料報向上傳遞給運輸層,

(5)、常見的協議
- UDP(
RIP:520,DNS:53,TFTP:69,SNMP:161,DHCP:67/68) - TCP(
SMTP:25,FTP:20/21,BGP:179,HTTP:80,HTTPS:443)

3. TCP(傳輸控制協議)與UDP(用戶資料報協議)的對比
- UDP支持
一對一,一對多,多對一和多對多互動通信;TCP只能是一對一通信

- UDP是
無連接的(即發送方隨時都可以發送資料報),TCP是面向連接的(在發送資料報之前必須建立連接,發送完畢后必須釋放連接),

- UDP是
面向應用報文的,TCP是面向位元組流的,

- UDP
向上提供無連接不可靠傳輸服務(如果資料報出現誤碼或丟失,不進行任何處理);TCP向上提供面向連接可靠傳輸服務(發送方發送什么,接收方就接受到什么),

- UDP首部開銷小僅8位元組,TCP首部最少20位元組,最大60位元組,

4. 流量控制
(1)、為什么需要流量控制?
一般來說,我們總是希望資料傳輸得更快一些,但是如果發送方發送得過快,接收方就可能來不及接收,這就會造成資料的丟失,
(2)、流量控制
流量控制就是讓發送方得的發送速率不要太快,要讓接收方來得及接收,
(3)、實作方式
利用滑動視窗機制可以很方便地在TCP連接上實作對發送方的流量控制,
- TCP接收方
利用自己的接收視窗的大小來限制發送方發送視窗的大小, - TCP發送方
收到接收方的零視窗通知后,應啟動持續計時器,持續計時器超時后,向接收方發送零視窗探測報文,當之前發送方應盡接收過了來自接收方的零視窗報文,但是接收方再次發送相應的改變發送視窗的大小的通知,如果其丟失,則會造成死鎖,所以零視窗探測報文是用來打破這種僵局的,如下圖所示

(4)、進行流量控制的程序
如下圖所示

說明
seq表示的是該資料段的首位元組序號,ACK表示的是確認分組,ack表示的是對相應的序號之前的資料進行累計確認,rwnd表示的是接收方的接收視窗大小,顯然上圖進行了三次流量控制,
5. 擁塞控制
(1)、為什么需要擁塞控制?
-
擁塞:在某段時間,如果網路中的
某一資源的需求超過了該資源所能提供的可用部分,網路性能就會變壞, -
如果
出現擁塞而不進行控制,整個網路的吞吐量將隨輸入負荷的增大而下降,

(2)、前提摘要
下面我們介紹的四種演算法原理,假定如下條件:
- 資料是單方向傳送,而另一個方向只傳送確認,
- 接收方總是有足夠大的快取空間,因而發送方發送視窗的大小由網路的擁塞程度來決定,
- 以最大報文段MSS的個數為討論問題的單位,而不是以位元組為單位,
(3)、慢開始、擁塞避免
慢開始、擁塞避免的程序說明
剛開始的時候cwnd設定為1,ssthresh門限值設定為為16,慢開始階段,cwnd以乘以2的速度進行增長,當到達ssthresh門限值的時候,開始擁塞避免演算法,cwnd以1進行線性增長,當發現超時重傳時,判斷出現擁塞,cwnd重新設定為1,將ssthresh的值設定為發生擁塞時的cwnd的值的一半,重新開始慢開始演算法,(資料自定)

(5)、為什么需要快重傳和快恢復演算法?
有時候,個別報文段會在網路中丟失,但實際上網路并未發生擁塞,這將導致發送方超時重傳,并誤認為網路發生了擁塞;發送方把擁塞視窗cwnd又設定為最小值1,并錯誤地啟動慢開始演算法,因而降低了傳輸效率,
(4)、快重傳
快重傳:就是使發送方盡快進行重傳,而不是等超時計時器超時再進行重傳,
- 要求接收方
不要等待自己發送資料時才進行捎帶確認,而是進行立即發送確認, - 即使
收到了失序的報文段也要立即發出對已收到的報文段的重復確認, - 發送方
一旦收到了3個連續的重復確認,就將相應的報文段立即重傳,而不是等該報文段的超時計時器超時再重傳,
快重傳的程序說明
發送方向接收方發送資料,發送資料M1、M2后都收到了接收方的確認,但是資料M3丟失,因此,發送方還會繼續發送資料M4、M5、M6;接收方會一直向發送方發送重復確認M2,發送方接收到三個重復確認后,對該報文段立即重傳,而不是等到超時計時器超時,

(5)、快恢復
快恢復的程序說明
剛開始的時候cwnd設定為1,ssthresh門限值設定為為16,慢開始階段,cwnd以乘以2的速度進行增長,當到達ssthresh門限值的時候,開始擁塞避免演算法,cwnd以1進行線性增長,當發現超時重傳時,判斷出現擁塞,cwnd重新設定為1,將ssthresh的值設定為發生擁塞時的cwnd的值的一半,重新開始慢開始演算法、擁塞避免演算法到cwnd為16,此時發送方收到3個重復確認,從而啟動快重傳、快恢復演算法設定ssthresh為8,然后進行擁塞避免演算法,(資料自定)

6. 超時重傳時間的選擇
(1)、相關概念
- RTT:一個TCP資料報文段的
往返傳播時間, 超時重傳時間RTO不能小于RTT,不然會導致不必要的重傳,使網路負荷增大

超時重傳時間RTO不能遠大于RTT,不然會使網路的空閑時間增大,降低傳輸效率,

(2)、超時重傳時間的計算公式
這里的超時重傳時間是加權平均值,因為單純的幾個不具有普遍性,會引起極端情況,

(3)、超時重傳后需要對超時重傳時間進行更新嗎?
- 因為
發生了超時重傳,不能準確的計算相應的RTT,因為會被相應的重傳報文段混淆,

- 所以報文段每重傳一次,就
把重傳時間RTO增大一些,典型的做法就是增大為舊值的兩倍,

7. TCP可靠傳輸的實作
(1)、實作方式
TCP基于以位元組為單位的滑動視窗來實作可靠傳輸,
- 發送方
在未收到接收方的確認時,可將發送視窗還未發送的資料全部發送出去, - 接收方
只接收序號落入視窗內的資料,如果是未按序到達的資料,接收方會先將其存下來,
(2)、實作程序說明
按序
剛開始的時候,發送方會收到接收方的一個確認報文段(rwnd = 20 , ack = 34)(表示接收視窗為20,期望收到的資料的序號為34),然后發送方向接收方發送資料,如果是按序到達的,接收方接收到之后,將相關資料從相應的接收快取中洗掉,然后接收方的視窗向前移動,并向發送方發送前面資料的累計確認分組,發送方接收到后將視窗向前移動,并將相關資料從發送快取中洗掉;

不按序
如果不是按序到達的,那么接收方的視窗保持不變,并向接收方發送未收到的資料的序號,當超過超時時間就會觸發超時重傳,

(3)、特別說明
- 同一時刻,發送方的
發送視窗并不總是和接收方的接收視窗一樣大 - 對于
不按序到達的資料,通常會將其先臨時存放在接收視窗中,等待位元組流中所缺失的位元組收到后,再按序交付上層的應用行程, - TCP要求
接收方必須有累計確認和捎帶確認機制,減少傳輸開銷, - TCP的通信是
全雙工通信,通信的每一方都在發送和接收報文段,
8. TCP的連接建立
(1)、TCP的連接建立要解決的三個問題
- 使TCP雙方能夠確知對方的存在
- 使TCP雙方能夠協商一些引數
- 使TCP雙方能夠對運輸物體資源進行分配
(2)、建立程序說明
建立程序中,TCP客戶機會首先發送給TCP服務器一個TCP連接請求報文(SYN = 1, seq = x),TCP服務器行程收到后發送一個TCP連接請求確認報文(SYN = 1,ACK = 1,seq = y,ack = x + 1),TCP客戶端行程收到相應的報文后進入連接已建立狀態,然后向TCP服務器行程發送一個TCP普通確認報文段,然后TCP服務器行程進入連接已建立狀態,

(3)、第三次的TCP請求的確認的確認是否多余?
不多余,這是為了防止已失效的連接請求報文段突然又傳送到TCP服務器,因而導致錯誤,

9. TCP的連接釋放
(1)、 TCP客戶行程向TCP服務器發送TCP連接釋放報文
當TCP客戶端行程要主動關閉連接時,TCP客戶端行程就會向TCP服務器端發送一個TCP連接釋放報文(FIN = 1 ,ACK= 1,seq = u,ack = v),此時TCP客戶端進入終止等待狀態,

(2)、TCP服務器端行程向TCP客戶端行程發送一個普通的TCP確認報文
然后TCP服務器端行程會向TCP客戶端行程發送一個普通的TCP確認報文(ACK = 1,seq = v,ack = u+ 1),且此時的TCP服務器端進入關閉等待狀態,TCP客戶端行程進入終止等待狀態,

此時TCP客戶端行程到TCP服務器端的行程的連接已經關閉,而TCP服務器端到TCP客戶端行程的連接還未關閉,所以此時TCP服務器端行程還可以給TCP客戶端行程進行資料傳輸,
(3)、TCP服務器端行程向TCP客戶端行程發送TCP連接釋放報文
當TCP服務器端的行程資料傳輸完畢后,TCP服務器端行程會向TCP客戶端行程發送TCP連接釋放報文(FIN = 1,ACK = 1,seq = w,ack = u + 1),且此時TCP服務器端行程進入最后確認狀態,

(4)、TCP客戶端行程向TCP服務器端行程發送普通的TCP連接釋放確認報文
TCP客戶端行程收到TCP服務器端行程發送而來的TCP連接釋放報文后,TCP客戶端行程會向TCP服務器端行程發送一個普通的TCP連接釋放確認報文,且此時從TCP服務器端行程到TCP客戶端行程的連接關閉,TCP服務器端行程進入關閉狀態,而TCP客戶端行程進入時間等待狀態,經過2MSL后進入關閉狀態,

(5)、TCP客戶端行程有必要進入時間等待狀態嗎?可以直接進入關閉狀態嗎?
答案是必須進入時間等待狀態,因為如果在TCP客戶端行程發送完畢TCP連接釋放確認報文后,該報文丟失,那么TCP服務器端行程就會一直重新發送相關的TCP連接釋放報文,而如果是直接進入關閉狀態的話,那么TCP無法進入關閉狀態而導致資源的浪費,

(6)、保活計時器
會出現的現象:TCP客戶端出現故障,那么TCP服務器端該如何發現?
- TCP服務器行程
每收到一次TCP客戶行程的資料,就重新設定并啟動保活計時器, - 如果保活計時器定時周期內未收到TCP客戶端行程發來的資料,則當其到時后,TCP服務器行程就向TCP客戶端行程發送一個探測報文段,以后每隔75秒鐘發送一次,如果一連發送10個探測報文仍無TCP客戶端行程的回應,TCP服務器端行程就認為TCP客戶端行程所在主機出現了故障,就關閉這個連接,
10. TCP首部格式

源埠: 占16位元,寫入源埠號,用來 標識發送該TCP報文段的應用行程,
目的埠: 占16位元,寫入目的埠號,用來標識接收該TCP報文段的應用行程,
序號: 占32位元,取值范圍[0,2^32-1],序號增加到最后一個后,下一個序號就又回到0,指出本TCP報文段資料載荷的第一個位元組的序號,
確認號: 占32位元,取值范圍[0,2^32-1],確認號增加到最后一個后,下一個確認號就又回到0,指出期望收到對方下一個TCP報文段的資料載荷的第一個位元組的序號,同時也是對之前收到的所有資料的確認,若確認號=n,則表明到序號n-1為止的所有資料都已正確接收,期望接收序號為n的資料,
確認標志位ACK: 取值為1時確認號欄位才有效;取值為0時確認號欄位無效,TCP規定,在連接建立后所有傳送的TCP報文段都必須把ACK置1,
資料偏移: 占4位元,并以4位元組為單位,用來指出TCP報文段的資料載荷部分的起始處距離TCP報文段的起始處有多遠,這個欄位實際上是指出了TCP報文段的首部長度,
視窗: 占16位元,以位元組為單位,指出發送本報文段的一方的接收窗,
同步標志位SYN: 在TCP連接建立時用來同步序號,終止標志位FIN: 用來釋放TCP連接,復位標志位RST: 用來復位TCP連接,
推送標志位PSH: 接收方的TCP收到該標志位為1的報文段會盡快上交應用行程,而不必等到接收快取都填滿后再向上交付,
校驗和: 占16位元,檢查范圍包括TCP報文段的首部和資料載荷兩部分,在計算校驗和時,要在TCP報文段的前面加上12位元組的偽首部,
緊急指標: 占16位元,以位元組為單位,用來指明緊急資料的長度,
填充: 由于選項的長度可變,因此使用填充來 確保報文段首部能被4整除,(因為資料偏移欄位,也就是首部長度欄位,是以4位元組為單位的),
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/353342.html
標籤:其他
