概述
傳輸層是只有主機才有的層次
傳輸層的功能:
- 傳輸層提供進程和進程之間的邏輯通信(網絡層提供主機與主機之間的邏輯通信)
- 復用和分用
- 傳輸層對收到的報文進行差錯檢測
傳輸層有兩個協議:
- 面向連接的傳輸層控制協議TCP(靠譜):傳送數據之前必須建立連接,數據傳送結束以后釋放連接。不提供廣播或者多播服務。由于TCP要提供可可靠的面向連接的傳輸服務,因此不可避免地增加了許多開銷:確認、流量控制、計時器及連接管理等
特點:可靠、面向連接、時延大、適用于大文件
- 無連接的用戶數據報協議UDP(不靠譜):傳送數據之前不需要建立連接,收到UDP報文后也不需要給出任何確認。
特點:不可靠、無連接、時延小、適用于小文件
傳輸層的尋址與端口:
- 復用:應用層所有的應用程序都可以通過傳輸層再傳輸到網絡層
- 分用:傳輸層從網絡層收到數據后交付指明的應用程序
端口:是傳輸層的SAP,標識主機的應用進程。 邏輯端口/軟件端口
端口號只有本地意義,再因特網中不同計算機的相同端口是沒有聯系的。
端口號的長度為16bit,能表示65536個不同的端口號
套接字:在網絡中采用發送方和接收方的套接字組合來識別端點,套接字唯一標識了網絡中的一個主機和它上面的一個進程。
Socket = (主機IP地址, 端口號)
UDP協議
UDP只在IP數據報服務上增加了很少功能,即復用分用和差錯檢測功能。
特點:
- UDP是無連接的,開銷和發送數據之前的時延較小
- UDP使用最大努力交付,即不保證可靠交付。可靠交付由應用層保證
- UDP是面向報文的,適合一次性傳輸少量數據的網絡應用
面向報文:對應用層報文不會改變,應用層給UDP多長的報文,UDP就照樣發送,即一次發一個完整報文。
- UDP沒有擁塞控制,適合很多實時應用
- UDP首部開銷小8字節,TCP20字節
源端口號可有可無,如果不需要接收回復信息就不需要源端口號
UDP檢驗
TCP協議
特點:
- 面向連接,建立虛連接。
- 每條TCP連接只能有兩個端點,每一條TCP連接只能是點對點的
- TCP提供可靠交付的服務,無差錯、不丟失、不重復、按序到達。可靠有序,不丟不重
- TCP提供全雙工通信:發送緩存、接收緩存
發送緩存:準備發送的數據、已發送但尚未收到確認的數據
接受緩存:按序到達但尚未被接受應用程序讀取的數據、不按序到達的數據 - TCP面向字節流:TCP把應用程序交下來的數據看成僅僅是一連串的無結構的字節流
TCP報文段的首部格式
TCP連接管理(TCP三次握手)
TCP連接傳輸的三個階段:連接建立——>數據傳送——>連接釋放
TCP連接的建立采用客戶服務器方式,主動發起連接建立的應用進程叫做客戶,而被動等待連接建立的應用進程叫做服務器。
只有在連接請求和連接請求接受的時候同步位SYN=1,其他時候都為0
設置SYN cookie防止SYN洪范攻擊
TCP的連接釋放(TCP四次握手)
參與一條TCP連接的兩個進程中的任何一個都能夠終止該連接,連接結束后,主機中的資源將被釋放。
TCP可靠傳輸
可靠:保證接收方進程從緩沖區讀出的字節流與發送方發出的字節流是完全一樣的
實現可靠傳輸的機制:
- 校驗:增加偽首部
- 序號:傳輸以字節為單位,為字節編號。序號字段(一個報文段第一個字節的序號)
- 確認:累計確認,返回確認號字段。(捎帶確認)
- 重傳:超時重傳,發送方如果發送了一段時間(重傳時間)后沒有收到來自接收方的確認字段,就會重新發送
對于重傳時間:TCP采用自適應算法,動態改變重傳時間RTTs(加權平均往返時間)
RTT:從發送開始直到收到確認為止的時間
冗余ACK(冗余確認):每當比期望序號大的失序報文段到達時,發送一個冗余ACK,指明下一個期待字節的序號。
TCP流量控制
TCP利用滑動窗口機制實現流量控制
在通信過程中,接收方根據自己接收緩存的大小,動態地調整發送方的發送窗口大小,即接受窗口rwnd(接收方設置確認報文段的窗口字段來將rwnd通知給發送方),發送方的發送窗口取接收窗口rwnd和擁塞窗口cwnd的最小值
TCP擁塞控制
出現擁塞的條件:對資源需求的總和 > 可用資源
網絡中有許多資源同時呈現供應不足 ——>網絡性能變壞——>網絡吞吐量隨輸入負荷增大而下降
擁塞控制:防止過多的數據注入到網絡中。全局性。
擁塞控制和流量控制的區別:
- 擁塞控制是全局控制,而流量是點對點控制
- 流量控制的原因是因為發送速率過快,導致接收緩存不夠。擁塞控制的原因是網絡流量過多導致堵塞。
擁塞控制四種算法
- 慢開始
- 擁塞避免
- 快重傳
- 快恢復
假定:
-
數據單方向傳送,而另一個方向只傳送確認
-
接收方總是有足夠大的緩存空間,因而發送窗口大小取決于擁塞程度
發送窗口 = Min(接收窗口rwnd, 擁塞窗口cwnd) -
接收窗口:接收方根據接收方緩存設置的值,并告知給發送方,反映接收方容量
-
擁塞窗口:發送方根據自己估算的網絡擁塞程度而設置的窗口值,反應網絡當前容量
慢開始和擁塞避免
ssthresh 慢開始門限
新的慢開始門限 = 發生擁塞的cwnd/2