一、概述
物理層、數據鏈路層以及網絡層它們共同解決了將主機通過異構網絡互聯起來所面臨的的問題,實現了主機到主機的通信
但實際上在計算機網絡中進行通信的真正實體是位于通信兩端主機中的進程
如何為運行在不同主機上的應用進程提供直接的通信服務時運輸層的任務,運輸層協議又稱端到端協議
?
?1.1端口號
為了使運行不同操作系統的計算機的應用進程之間能進行網絡通信,必須使用統一的方法對TCP/IP體系的應用進程進行標識,即端口號。
邏輯端口的概念(端口):一個整數值(16位);0-65535
?網絡上中進程工作方式:C/S 對應的端口號碼的分配也分為兩大類
服務類(靜態的預先指定的)
1-1013(默認系統熟知的服務)
1023-45191(需要申請注冊的服務? QQ4000,8000都是它所使用的端口)
客戶類(隨機的由本地操作系統自己管控)
端口:相當于進程在網絡中的地址
IP+PORT(端口號) 構成了網絡中唯一的通信端點:我們稱之為端到端的通信
(Socket) (Socket) Protocol
?1.2復用與分用
發送方的復用
- 發送方的某些應用進程所發送的不同應用報文,在運輸層使用UDP協議進行封裝,這是UDP復用;若用TCP封裝則稱TCP復用
- 運輸層使用端口號區分不同進程,不管使用何種協議封裝的報文,在網絡層都需要使用IP協議封裝成IP數據報,這是IP復用,數據報中協議字段的值用來表名封裝的是何種協議數據單元
接收方的分用
- 根據協議字段的值,將IP數據報封裝的協議數據單元上交運輸層的過程叫IP分用
- 同理,UDP根據端口號將數據交給應用進程叫做UDP分用;TCP根據端口號將數據交給應用進程叫做TCP分用
?1.3運輸層引入的協議
1,TCP協議(負責完成端到端的可靠傳輸)
2,UDP協議(負責完成端到端的數據傳輸)
用戶數據報協議UDP
UDP
是無連接的,隨時可向目的主機發送報文,支持單播、多播和廣播
UDP
收到應用層報文后直接為報文添加UDP
首部就進行發送,即面向應用報文
UDP
數據報首部僅8字節
?傳輸控制協議TCP
TCP
時面向連接的。發送數據前需要"三報文握手"建立連接,數據傳輸結束后需要"四報文揮手"釋放連接僅支持單播
TCP是面向字節流的。其將應用進程交付下來的數據塊僅僅看作是一連串的字節流,
TCP
將這些字節流編號并存儲在緩沖中;接收方一邊接收數據,一邊將緩沖中的數據交給應用進程。接收方收到的字節流必須和發送方收到的字節流完全一致
不會出現傳輸差錯(誤碼、丟失、亂序、重復)
TCP
報文段首部最小20
字節,最大60
字節
?1.4TCP協議流量控制
1)滑動窗口? 發送窗口? 接收窗口
2)超時計時器
3)流量控制方法 :接收端控制發送端
2)超時計時器
3)流量控制方法:接收端控制發送端
4)流量控制的實現過程:0窗口
5)TCP協議效率管理:糊涂窗口
流量控制
一般來說,我們希望數據傳輸能快一些,但如果發送方把數據發送得過快,接收方就可能來不及接收,這會造成數據的丟失
流量控制就是讓發送方的發送速率不要太快,要讓接收方來得及接收
利用滑動窗口實現流量控制
- 發送方和接收方窗口保持一致,發送方窗口隨著接收方窗口變化而變化(通過確認報文告知發送方)
- 發送方發送完窗口內數據后需要等到確認報文才會滑動窗口并繼續發送,若窗口內的某個值很久沒有收到回答報文,則超時重傳報文
若接收方窗口調為0后,一段時間之后又調為200,此時向發送方傳遞確認報文,可此時報文丟失,則會造成發送方窗口始終為0,接收方以為發送方收到了確認報文而開始等待數據,造成死鎖,如何解決??
當發送方窗口大小為
0
時,其隔一段時間就會發送一個1
字節大小的零窗口探測報文,看看此時接收窗口大小是否進行調整零窗口探測報文也有超時重傳機制
1.5TCP的擁塞控制
1)擁塞控制的概念:擁塞就是擁堵了(網絡擁堵了),擁堵的原因?數據包太多了,導致網絡吞吐量下降,網絡時延增加;網絡時延增加又進而加劇了網絡數據包增多
?2)擁塞控制的手段方法
(1)核心方法:減少數據包數量
(2)具體實現:就根據不同情況,采用不同方法來減少數據包數量
(3)擁塞的主要表現就是時延的增加,為此,就圍繞時延增加來進行數據包數量的調整
(4)數據包投放數量是由各主機的發送窗口大小決定的
(5)TCP又引入一個擁塞窗口的概念;擁塞發生時應該控制發送窗口的數量
????????結論:發送窗口的大小:min(擁塞窗口,接收窗口)
(6)擁塞窗口:擁塞發生時,能夠發送數據包的個數
(7)擁塞控制算法:慢開始? 擁塞避免 快重傳? 快恢復
1)慢開始:設置門限值;門限值內,試探著向網絡投入數據包,避免擁塞
2)擁塞避免:擁塞發生時,能夠發送數據包的個數
3)快重傳:當數據包未按序到達,導致重復確認增多,則立即重傳該數據包,門限降為重復確認時擁塞窗口的一半,擁塞窗口同時調小
4)快恢復:發生超時時,立即急速的減少投入網絡的數據包
在某段時間,若對網絡中某一資源的需求超過了該資源所能提供的可用部分,網絡性能就要變壞,這種情況叫做擁塞
若出現擁塞而不進行控制,整個網絡的吞吐量將隨輸入負荷的增大而下降
1.6超時重傳時間(RTO)選擇
正常情況下,超時重傳時間應該設為略大于往返時間。但是由于各區域的速率可能不一致,因此將超時重傳時間設置為一個固定值是行不通的?
?往返時間測量問題
針對出現超時重傳時無法測準往返時間RTT的問題,有以下解決方法
在計算加權平均往返時間RTTs時,只要報文段重傳了,就不采用其往返時間TT樣本。也就是出現重傳時,不重新計算RTTs,進而超時重傳時間RTO也不會重新計算。
此方法的漏洞如下:如果報文段時延突然增大很多,并且之后很長一段時間都會保持這種時延。因此在原來得出的重傳時間內,不會收到確認報文段,于是重傳,造成死鎖
修正方法:報文段每重傳一次,就把超時重傳時間RTO增大一些,典型的做法是將RTO的值取為舊RTO的2倍
1.7可靠傳輸
可靠性保障可以放在體系結構中的任何一層(數據鏈路層,網絡層)實現,但現代網絡系統面向的是主機(獨立自主的計算力)系統,可以將可靠性保障交由主機來完成,進而減輕通信子網的負擔,使得通信子網專注于數據包的高效傳輸
1.停止等待協議(ARQ自動請求重傳協議)
A給B發送數據,B需要給一個確認,
否認應答:A再發,
?2.后退N幀重傳(Go Back N ARQ)(接收窗口固定唯一,而TCP接收窗口不確定)
(1)發送窗口:沒有得到確認的情況下,發送端可以連續發送分組的個數
(2)接收窗口:接收數據的個數以及包含能接受數據的序號
(3)工作協議
(4)窗口大小與序號關系
3.選擇重傳協議
目的提高發送速率,不在采用發送一個數據幀就停下來等待確認的模式,而是可以連續發送多個數據幀后才停下來等待的模式
接收端:引入一個接收窗口的概念(即應當接收的數據幀及數據幀序號);這類協議接收窗口大小為1
其中:連續發送多少個數據幀的個數稱為? 發送窗口
(1)發送窗口
(2)接收窗口
(3)工作過程
(4)窗口大小與序號關系
1.8運輸連接管理
TCP
的運輸連接管理就是使運輸連接的建立和釋放都能正常地進行
SYN
為1
的報文段不能攜帶數據,但會消耗一個序列號seqACK=1
代表這是普通確認報文段,ack=x+1表示這是對報文段序列號seq=x的確認
- 客戶端發起關閉請求,一去一回后進入半關閉狀態【客戶端不再發送數據,服務端可能還會發】
- 服務器將自己剩余的數據發送完后也發送一個關閉請求,接著客戶端給予回應后服務器關閉,客戶機則要等到一段時間后完全關閉(防止發給服務器的確認報文丟失)
1.9首部格式
源端口:占
16
比特,寫入源端口號,用來標識發送該TCP報文段的應用進程目的端口:占
16
比特,寫入目的端口號,用來標識接收該TCP報文段的應用進程
- 序號:占32比特,取值范圍[ 0 ,
? 1 ] ,序號增加到最后一個后,下一個序號就又回到0。作用是指出本TCP報文段數據載荷的第一個字節的序號
- 確認標志位ACK:取值為1時確認號字段才有效,為0時確認號字段無效
確認號:占
32
比特,取值范圍?[ 0 ,? 1 ],序號增加到最后一個后,下一個序號就又回到
0
。可理解為若確認號=n,則表明到序號n-1為止的所有數據都已正確接收,期望接收序號為n的數據
- 數據偏移:占4比特,并以4字節為單位
????????用來指出TCP報文段的數據載荷部分的起始處距離TCP報文段的起始處。這個字段實際?上是指出TCP報文段的首部長度
首部固定長度為20字節,因此數據偏移字段的最小值
保留字段:占6比特,保留為今后使用,但是目前應置為
0
窗口:占16比特,以字節為單位。指出發送本報文段一方的接收窗口
窗口值作為接收方讓發送方設置其發送窗口的依據,這是以接收方的接收能力來控制發送方的發送能力,稱為流量控制
檢驗和:占16比特,檢測范圍包括TCP報文段的首部和數據載荷兩部分
在計算校驗和時,要在
TCP
報文段的前面加上12
字節的偽首部同步標志位SYN:在
TCP
連接建立時用來同步序號終止標志位FIN:用來釋放
TCP
連接
緊急標志位URG:取值為1時緊急指針字段有效;取值為
0
時緊急指針字段無效。緊急指針:占
16
比特,以字節為單位,用來指明緊急數據的長度
選項:增加選項可以增加
TCP
的功能
- 最大報文段長度MSS選項:
TCP
報文段數據載荷部分的最大長度- 窗口擴大選項:為了擴大窗口(提高吞吐率)
- 時間戳選項:
- 用來計算往返時間
RTT
- 用于處理序號超范圍的情況,又稱為防止序號繞回
PAWS
- 選擇確認選項:實現選擇確認功能
填充:由于選項長度可變,因此使用填充來保證報文段首部能被4整除