計算機網絡(五):傳輸層


1、OSI和DoD模型

1.1 兩種網絡模型對應的結構及各層協議分配

在這里插入圖片描述

傳輸層最大數據包是65535字節,而網絡層數據最大只有1480字節。所以需要分段,但是只要分段,就有可能丟包,因為網絡層不負責可靠傳輸。所以要求服務器和客戶端保持會話,直到數據傳輸完成。

1.2 傳輸層的兩種協議

1.2.1 TCP(Transmission Control Protocol)傳輸控制協議

應用場景:需要將要傳輸的文件分段傳輸時;就需要TCP協議來建立會話實現可靠傳輸;同時也有流量控制功能。(例如QQ傳文件)

查看會話 netstat -n

查看建立會話的進程 netstat -nb

1.2.2 UDP(User Data Protocol)用戶數據報協議

2、傳輸層協議和應用層協議的關系

在這里插入圖片描述

(1)TCP和UDP協議和不同的端口即可對應一個應用層的協議。注意,53大部分是與UDP相連。

(2)熟知數值一般為0 ~ 1023,登記端口號數值1024 ~ 49151,客戶端口號數值為49152 ~ 65535。

(3)常用的應用層協議使用的端口(號):

http = TCP + 80

Https = TCP + 443

RDP = TCP + 3389

ftp = TCP + 21

共享文件夾 = TCP + 445

SMTP = TCP + 25

POP3 = TCP + 110

telnet = TCP + 23

SQL = TCP + 1433

DNS = UDP + 53

3、服務和應用層協議的關系

防火牆是基於網卡的,只打開必要的端口,不必要的端口不允許接收數據,不影響服務的運行和監聽。服務使用TCP或UDP的端口偵聽客戶端請求;客戶端使用IP地址定位服務器,使用目標端口,定位服務;可以在服務器網卡上設置只開放必要的端口,實現服務器網絡安全。

3.1 在Windows上安裝的服務

DNS服務、Web服務、SMTP、POP3

3.2 如何查看服務偵聽的端口

netstat -a

netstat -an (以數字的形式查看端口)

netstat -n(查看建立的會話)

netstat -nb(查看建立會話的進程)

telnet 192.168.80.100 3389(測試到遠程計算機某個端口是否打開)

3.3 如何設置Windows網絡安全

設置本地連接、TCP/IP篩選

4、傳輸層功能和端口范圍

在這里插入圖片描述

4.1 傳輸層協議和網絡層協議的主要區別

網絡層實現如何把數據包從這個地址(服務器)發送到另一個地址(服務器)。而傳輸層實現如何讓這個應用程序找到對應計算機的應用程序(相對應的應用程序實現邏輯通信)。

在這里插入圖片描述

4.2 傳輸層的主要功能

(1)傳輸層為應用進程之間提供了端到端的邏輯通信(但網絡層是為主機之間提供邏輯通信)。

(2)傳輸層還要對收到的報文進行差錯檢驗。

(3)傳輸層提供面向連接(TCP)和無連接(UDP)服務。

4.3 傳輸層的端口

在這里插入圖片描述

TCP的端口: 端口用一個16位端口號進行標識,端口號只具有本地意義,即端口號只是為了標識本計算機應用層的各進程。在Internet中不同計算機的相同端口號是沒有聯系的(最好不要有沖突)。

5、UDP協議

5.1 UDP特點概述

(1)UDP是無連接的,即發送數據之前不需要建立連接。

(2)UDP使用盡最大努力交付,即不保證可靠交付,同時也不使用擁塞控制。

(3)UDP是面向報文的,適合多媒體通信的要求。

(4)UDP支持一對一,一對多,多對一,多對多交互通信。

(5)UDP首部開銷小,只有8個字節。

在這里插入圖片描述

5.2 UDP的首部格式

在這里插入圖片描述

首部中的長度指的是UDP用戶數據報的長度(首部+數據)。偽首部用於檢驗和。

在這里插入圖片描述

6、TCP協議

6.1 TCP特點概述

(1)TCP是面向連接的傳輸層協議。(三次握手)

img

(2)每一條TCP連接智能有兩個端點(endpoint),每一條TCP連接只能時點對點的(一對一)。

(3)TCP提供可靠交付的服務。(確保不丟包)

(4)TCP提供全雙工通信。(因為需要接收端的反饋,例如如果接收端處理不過來,可讓發送端慢一點,流量控制)

(5)面向字節流。

在這里插入圖片描述

如果傳輸一個比較大的數據,首先一次只會傳輸一小塊,這個數據塊的大小是沒有規律的。加上數據包數據幀的頭,發送給接收端,接收端去掉首部,再次拼接。

6.2 TCP連接

(1)TCP把連接作為最基本的抽象。

(2)每一條TCP連接有兩個端點。

(3)TCP連接的端點不是主機,不是主機的IP地址,不是應用程序,也不是傳輸層協議端口,TCP連接的端點叫 套接字(socket)。套接字socket是一個二元組(IP地址 : 端口號),每一條TCP連接唯一地被通信兩端的兩個套接字所確定,即:TCP連接 = { socket1,socket2 } = { ( IP1 : port1 ),( IP2 : port2 ) }。

(4)端口號拼接到IP地址即構成了套接字。

6.3 TCP如何實現可靠傳輸

6.3.1 可靠傳輸的工作原理——停止等待協議

在這里插入圖片描述

說明:在發送完一個分組后,必須暫時保留已發送的分組的副本;分組和確認分組都必須進行編號;超時計時器的重傳時間應比數據在分組傳輸的平均往返時間更長一些。

6.3.2 確認丟失和確認遲到

在這里插入圖片描述

6.3.3 可靠通信的實現

使用上述的確認和重傳機制,微秒就可以在不可靠的傳輸網絡上實現可靠的通信。這種可靠傳輸的協議常稱為自動重傳請求ARQ(Automatic Repeat reQuest)。ARQ表明重傳的請求是自動進行的。接收方不需要請求發送方重傳某個出錯的分組。缺點,信道利用率低。

在這里插入圖片描述

信道利用率U計算公式:

在這里插入圖片描述

6.3.4 流水線傳輸

發送方可連續發送多個分組,不必每發完一個分組就停頓下來等待對方的確認。由於信道上一直有數據不間斷的傳送,這種傳輸方式可獲得很高的信道利用率。

在這里插入圖片描述

6.3.5 連續ARQ協議

在這里插入圖片描述

如果1確認收到,則滑動窗口。

在這里插入圖片描述

如果12收到了,3沒有收到,則滑動窗口回溯到3位置重新發送.

6.3.6 累計確認(接收方)

接收方一般采用累計確認的方式。

優點:容易實現,信道利用率高。

缺點:不能向發送方反映出接收方已經正確收到的所有分組的信息。

6.4 TCP報文段的首部格式

在這里插入圖片描述

(1)源端口:2個字節16位。

(2)目的端口:2個字節16位。

(3)序號:當前數據的第一個字節在整個文件中的序號。

(4)確認號ack:接收端發送,提示發送端下一次該發的數據在整個文件中的序號。接收端收到后,會把這個序號之前的數據從緩存中刪掉。

(5)數據偏移:當前TCP報文段第多少個字節后是TCP的數據部分了。數據偏移最多表示1111,即15,他最多可以表示15乘以4,即60個字節的偏移量,所以選項 + 填充最多只能是40個字節。

(6)保留:6位,無作用。

(7)URG:urgent,意思是優先級高,發送端優先發送,而不是在緩存中排隊。

(8)ACK:acknowledge,1意味着確認建立了會話。

(9)PSH:1意味着接收端優先讀取,而不是在緩存中排隊。

(10)RST:reset,1意味着TCP會話出現嚴重錯誤,必須釋放和重新連接。

(11)SYN:同步。1意味着要發起會話。

(12)FIN:finish,1意味着釋放連接。

(13)窗口:接收端先發,發送端根據接收端的窗口尺寸確定發送端窗口尺寸。

(14)檢驗和

(15)緊急指針:只有URG為1才有用。

6.5 抓包分析

詳見:[https://www.cnblogs.com/163yun/p/9552368.html]:

6.6 TCP如何實現可靠傳輸(續)

6.6.1 以字節為單位的滑動窗口技術

A的發送窗口是由B的接受窗口長度決定的。在沒有收到B確認收到之前,A不能刪掉滑動窗口內的內容。A可以持續給B發送,直到A的滑動窗口內數據都發了。

在這里插入圖片描述

B收到后給A發確認收到的反饋ACK,序號是下一個應該發送的字節的序號,A收到后,就可以滑動窗口到對應的位置。例如B反饋ACK是7,那么A的滑窗可以移動到7位置,1-6刪除。21-26可以發送。

在這里插入圖片描述

B收到1-6之后,也開始滑窗,B的應用程序可以讀取1-6的數據。B的滑窗繼續接收。

在這里插入圖片描述

以上是正常狀態下的情況。如果出現丟失情況,例如7-9丟失,此時B反饋的ACK=7.因為10-12收到了,因此B發送SACK(選擇性確認),A只發送7-9.

在這里插入圖片描述

6.6.2 超時重傳時間的確定

TCP每發送一個報文段,就對這個報文段設置一次計時器。只要計時器設置的重傳時間到了,但是還沒有收到數據,那么就重傳這一報文段。

公式:RTTs ( new ) = (1 - alpha) × (RTTs ( old ) ) + alpha × (new RTT樣本)

超時重傳時間應略大於上面得出的加權平均往返時間RTTs。alpha推薦值是0.125。這個公式的目的是根據網速和帶寬的實時情況調整往返時間。

6.7 TCP如何實現流量控制

解決通信兩端處理時間不一樣的問題。通過實時調整滑窗尺寸的大小(尺寸甚至可以是0)來實現流量控制。接收端主動調整滑窗大小,發送端根據接收端發送的報文調整相應的滑窗。發送端也會定時發送報文向接收端確認滑窗信息,避免接收端發送的相關調整滑窗大小的報文丟失帶來的影響。

6.8 TCP如何避免網絡擁塞

(1)出現資源擁塞的條件:對資源需求的總和 大於 可用資源。

(2)擁塞控制是一個全局性的過程,涉及到所有的主機,所有的路由區,以及與降低網絡傳輸性能有關的所有因素。

(3)流量控制往往指在給定的發送端和接收端之間的點對點通信量的控制,它所要做的就是抑制發送端發送數據的速率,以便使接收端來得及接收。

6.8.1 擁塞控制起到的作用

在這里插入圖片描述

說明:紅線和綠線之間是數據丟失內容。

6.8.2 慢開始和擁塞避免

(1)發送方維持 擁塞窗口cwnd(congestion window)

(2)發送方控制擁塞窗口的原則是:只要網絡沒有出現擁塞,擁塞窗口就再增大一些,以便把更多的分組發送出去;只要網絡出現擁塞,擁塞窗口就減少一些,以減少注入到網絡中的分組數。

(3)慢開始算法的原理:一開始先發送少量的數據,測試一下網絡是否擁塞,如果沒有出現丟包重傳,就再慢慢提高發送速度。當出現丟包重傳時,就認為是網絡擁塞,就放慢發送速度,從而避免擁塞。(如圖)

在這里插入圖片描述

(4)設置慢開始門限狀態變量ssthresh。慢開始門限狀態變量ssthresh的用法如下:當cwnd < ssthresh時,使用慢開始算法;當cwnd > ssthresh時,停止使用慢開始算法,改用擁塞避免算法;當cwnd = ssthresh時,使用慢開始算法或擁塞避免算法均可;

(5)擁塞避免算法的思路:讓擁塞窗口cwnd緩慢地增大,即每經過一個往返時間RTT就把發送方的擁塞窗口cwnd加1,而不是加倍,使擁塞窗口cwnd按線性規律緩慢增長。

(6)當網絡出現擁塞時對策:無論是在慢開始階段還是在擁塞避免階段,只要發送方判斷網絡出現擁塞(其根據就是沒有按時收到確認),就要把慢開始門限ssthresh設置為出現擁塞時的發送方窗口值的一半(但是不能小於2)。然后把擁塞窗口cwnd重新設置為1,執行慢開始算法。這樣做的目的就是要迅速減少主機發送到網絡中的分組數,使得發生擁塞的路由器有足夠的時間吧隊列中積壓的分組處理完畢。

(7)慢開始和擁塞避免算法的實現舉例

在這里插入圖片描述

擁塞避免並非指完全能夠避免擁塞。利用以上的措施要完全避免網絡擁塞還是不可能的。

擁塞避免是說在擁塞避免階段吧擁塞避免窗口控制為按線性規律增長,使網絡比較不容易出現擁塞。

6.8.3 快重傳和快恢復

快重傳算法首先要求接收方每收到一個失序的報文段后就立即發出重復確認,這樣做可以讓發送方及早知道有報文段沒有到達接收方。當發送端收到連續三個重復的確認時,就執行“乘法減少”算法,即把慢開始門限ssthresh減半,但擁塞窗口cwnd現在不設置為1,而是設置為慢開始門限ssthresh減半后的數值,然后開始執行擁塞避免算法(“加法增大”),使擁塞窗口緩慢地線性增大。

在這里插入圖片描述

6.8.4 發送窗口的實際上限

取接收方窗口和 擁塞窗口 這兩個變量中的較小值。發送窗口的上限 = min { rwnd,,cwnd }。

6.9 TCP傳輸連接管理

傳輸連接有三個階段,即:連接建立,數據傳送,連接釋放。TCP連接的建立都是采用客戶服務器方式。主動發起連接建立的應用進程叫做客戶(client)。被動等待連接建立的應用進程叫做服務器(server)。

在這里插入圖片描述

頭兩次握手除了確定雙方都能聯通外,還通知了雙方的一些端口信息。

第三次握手原因:假如把三次握手改成僅需要兩次握手,死鎖是可能發生的。作為例子,考慮計算機A和B之間的通信,假定A給B發送一個連接請求分組,B收到了這個分組,並發送了確認應答分組。按照兩次握手的協定,B認為連接已經成功地建立了,可以開始發送數據分組。可是,B的應答分組在傳輸中被丟失的情況下,A將不知道B是否已准備好,A認為連接還未建立成功,將忽略B發來的任何數據分組,這樣就形成了死鎖。

在這里插入圖片描述

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM