華為原理 | 傳輸層協議&交換轉發原理

  • 2019 年 10 月 5 日
  • 筆記

Interface GigabitEthernet0/0/0   ip address 12.1.1.2 255.255.255.0   arp-proxy enable  \華為介面下默認沒有開啟代理ARP

TCP協議:

TCP(Transmission Control Protocl)協議工作在TCP/IP通訊模式的傳輸層,TCP是可靠傳輸協議,在傳輸數據之前需要先和接收者建立連接,通過序列號機制和重傳機制保證TCP數據的可靠性。

TCP協議特性

  • 面向連接協議
  • 會話多路復用
  • 全雙工模式
  • 錯誤檢查
  • 數據包序列化
  • 可靠性機制
  • 數據恢復功能
  • 數據分段
  • 窗口機制

TCP報文格式

TCP報文頭部是可變長頭部,最小頭部長度是20個位元組,最大是60個位元組。頭部長度的計算方法和IP一致,同樣是通過4個比特來標識TCP報文頭部長度。圖中展示了TCP協議報文結構。

圖 TCP協議報文結構

1、源埠(16 bit):TCP數據發送方的源埠號

2、目的埠(16 bit):TCP數據接收發的目的埠號

3、序列號(32bit):序列號用來標識從TCP發送端向TCP接收端發送的數據大小統計,單位為位元組。通過序列號可以計算出發送方向接收方一共發送了多少個位元組的數據。序列號是32 bit的無符號整數,取值範圍是1到2的32次方範圍內的隨機數,序列號到達2的32次方-1後會從0開始計算。

4、確認序列號(32bit):確認序列號用來標識TCP接收端從TCP發送方共計接收了多少個位元組的數據,確認序列號的計算是在接收到TCP報文「序列號」的基礎上加上接收的數據長度作為確認序列號。在TCP協議中所有的控制報文算一個位元組的數據,例如:SYN、FIN報文都數據控制報文。

5、首部長度(4bit):TCP的首部長度是可以變長的,首部長度範圍為20個位元組~60個位元組,標準頭部長度為20個位元組。那麼4個bit的首部長度最大值表示為15,那如何用來表示20~60個位元組呢?這是因為這4個bit不是用來表示長度的,而是表示頭部中攜帶的數據行數。每一行的數據長度固定為4個位元組,這樣可以用行數乘以4,計算出TCP頭部長度,15乘以4等於60,這也是可以表示的最大TCP頭部長度。

6、TCP標誌位(16bit):其中3個比特位是保留位,另外ns、cwr、ece 標誌位不常用,這裡不做介紹。我們主要介紹後面6個比特位。

  • URG:緊急指針(urgent pointer)有效,只有URG標誌位置位,緊急指針欄位才會填充數據。ACK:確認標誌位,用於確認接收到的TCP報文。
  • PSH:PSH標識位置位,表示TCP報文不進緩衝區,需要提交給應用層儘快處理。
  • RST:重建標誌位,需要重新建立TCP會話。
  • SYN:建立連接標誌位,需要建立TCP會話。
  • FIN:斷開連接標誌位,需要斷開TCP會話。

7、窗口尺寸(16bit):窗口大小最大為65535,標識TCP接收方當前可以處理的數據大小。窗口大小是可以滑動的,可以變大也可以變小。這個和TCP接收方的處理能力有關係,如果TCP接收方處理能力下降,它會將窗口大小調小,這樣TCP發送方發送的數據大小也會隨之變小。如果TCP接收方處理能力變強,它會將窗口大小調大,TCP發送方發送的數據大小也會隨之變大。

8、效驗和(16bit):TCP發送端對TCP頭部和TCP填充數據做效驗,並將結果填充到效驗和欄位。TCP接收方收到數據後,會重新對TCP頭部和TCP填充數據做效驗,並和效驗和欄位的值對比對,如果一致則接收數據段並交給上層處理,不一致則丟棄數據段。

9、緊急指針(16bit):只有當URG標誌位置1時緊急指針才有效,緊急指針是一個正向偏移量,和序列號欄位中的值相加表示緊急數據最後一個位元組的序號。TCP緊急方式是發送方向接收方發送緊急數據的一種方式,緊急指針用於緊急處理TCP的控制數據。

10、選項:標準TCP頭部中不攜帶選項欄位,選項欄位只能按4位元組的倍數來填充(用於計算首部長度)。常見的選項欄位有MSS和TCP MD5認證,MSS(Max segment size)最大段大小,用於表示標識TCP數據段可以填充的最大數據長度,TCP的數據分段可以避免IP分片。TCP MD5認證選項用來實現TCP認證的功能,在後續學習的BGP、LDP等協議中,可以利用TCP MD5實現認證功能。

數據:填充TCP數據,數據最大只能填充為MSS大小。

TCP會話的建立

由於TCP是一個面向連接的協議,發送數據前需要先和接收者提前建立連接,連接通常稱之為「會話」。TCP通過三次握手的可靠性機制來建立會話,所謂三次握手是指在TCP會話的建立過程中總共交換了3個TCP控制報文,通過這3個控制報文保證了TCP會話建立過程中的可靠性。TCP三次握手建立過程如圖中所示:

圖 TCP三次握手建立過程(一)

如圖中所示,假設現在主機A需要向主機B發送TCP數據,首先由主機A發起會話建立,向主機B發送一個設置「SYN」標誌位的TCP控制報文,表示想和主機B建立會話連接,報文中的SEQ序列號欄位會填充一個0到2的16次方範圍內的隨機數(只有SYN標誌位置位的TCP報文才會填充一個隨機數),圖中SEQ序列號用0表示。

主機B收到SYN置位的TCP報文後,知道有人想和自己建立連接,主機B接收SYN報文並向主機A回復一個同時設置了「SYN」和「ACK」標誌位的TCP報文,其中的「ACK」表示主機B同意和主機A建立連接,並確認主機A發送的「SYN」報文。而「SYN」表示主機B同時想和主機A建立一個會話連接,這是因為TCP協議是全雙工模式,建立一個會話可以實現數據的雙向發送。

圖TCP三次握手建立過程(二)

報文中的SEQ序列號欄位填充一個0到2的16次方範圍內的隨機數,圖中主機B發送的序列號同樣用0表示。而確認序列號=接收到的序列號+數據長度,由於TCP協議中的控制報文的數據長度也算作一個位元組,所以圖中的ACK SEQ為1(0+1)。通過確認序列號可以統計出已接收的數據總長度。如圖中所示:

主機A收到主機B發送的「SYN+ACK」後,回復一個「ACK」置位的TCP報文進行確認。回復的ACK報文中,SEQ序列號欄位為1(0+1),由於主機A之前發送的SYN報文中的序列號為0,並且已經發送過一個位元組數據(SYN報文),所以現在的SEQ序列號為1。通過序列號欄位可以統計出發送方已發送的數據總長度。ACK SEQ確認序列號為1=主機B的發送序列號+數據長度(0+1)。如圖中所示:

圖TCP三次握手建立過程(三)

經過三次握手,主機A和主機B建立了兩個TCP會話,實現數據的雙向發送。

TCP會話的終止

TCP會話的終止需要經過四次握手斷開連接,原因是TCP 的會話是雙向的,會話兩端獨立的發送和接收數據,那麼終止會話就需要雙向斷開連接。例如:主機A和主機B建立TCP會話後兩端都開始發送TCP數據,如果現在主機A的數據發送完了,主機A向主機B提出斷開連接,這只是個單方向的行為,只會斷開主機A到主機B的連接。而主機B到主機A的連接還保持正常,主機B還可以向主機A繼續發送數據,如果現在主機B的數據也發送完了,主機B向主機A提出斷開連接,連接雙向斷開後TCP會話終止。TCP協議四次握手終止會話的過程如圖中所示:

圖 TCP四次握手斷開連接

圖中主機A向主機B發送完數據後,主機A斷開和主機B的連接。主機A向主機B發送一個FIN置位的TCP控制報文,主機B收到FIN報文後,回復ACK報文確認收到的FIN。由於主機B也沒有數據在發給主機A,隨後主機B也向主機A發送一個FIN置位的TCP控制報文,斷開和主機A的連接。主機A收到FIN報文後,回復ACK報文確認收到的FIN。

TCP的確認與重傳

TCP協議發送的數據通過確認和重傳機制來保證可靠性,數據發送方用序列號來標識發送的數據,數據接收方收到數據後向發送方回復ACK進行接收確認,並通過確認序列號(ACK SEQ)確認接收到的數據長度。數據發送方收到ACK確認後知道接收方已經收到了數據,可以繼續發送數據。如果收不到ACK,則說明接收方可能沒有收到發送的數據,為了保證數據的可靠性,發送方需要重傳丟失的數據。

在TCP協議中判斷數據丟失需要重傳的機制有兩種,分別是定時器超時和快速重傳機制,定時器超時是指在超時定時器規定時間內,都沒有收到數據接收方回復的ACK確認,認為發送的這部分數據丟失,需要重新發送。通過這種方式數據發送方可以判斷出發送的數據已經丟失,但是每次都需要等定時器超時,發現的速度太慢。那我們可以想一下,是誰最先發現數據丟失的呢?答案肯定是數據接收方,接收方收不到數據只有兩種情況,1、根本就沒收到數據 2、收到的數據不完整。針對第一種情況只能靠發送方定時器超時後重傳,而第二種情況接收放知道自己有哪部分數據沒有收到(通過序列號機制), 那麼接收方可以通過發送多個針對於丟棄數據的ACK確認報文(3個以上)來告知發送方這部分數據丟失,發送方在收到針對同一數據的多次ACK確認後,觸發快速重傳,重新發送這部分數據。

圖 TCP協議數據確認機制

圖中展示了TCP數據傳輸過程中的確認機制,主機A發送第一個數據段,標識數據段的序列號SEQ為1369,數據段長度是400個位元組,主機B收到數據段後回復ACK報文確認數據段,ACK報文中的ACK SEQ=接收數據段中的序列號(1369)+ 數據長度(400),計算出回復的確認序列號為1769。主機A收到ACK 後開始發送第二個數據段,第二個數據段的SEQ1769(1369+400),標識已經發送過的數據長度,主機B收到第二個數據段後回復確認ACK,以此類推。

圖 TCP協議數據重傳機制一

圖中主機A在傳輸數據段過程中,部分數據段丟失,針對這部分數據段一致沒有收到ACK確認,主機A等待超時定時器超時後重傳丟失的數據段,這種依賴定時器超時來重傳數據段的機制速度較慢,這種場景下可以使用快速重傳。快速重傳機制如圖中所示:

圖 TCP協議數據重傳機制二

圖中,主機B針對丟失數據段發送多個ACK確認報文,主機A連續收到多個同樣的ACK報文,會觸發快速重傳機制,重傳這部分數據段,不需要待定超時定時器超時。

TCP滑動窗口

TCP協議的窗口機制有兩種,一種是通告窗口,另一種是擁塞窗口。通告窗口是數據接收方通告給發送方自己現在能夠快取和處理數據的大小,通告窗口的大小是可變的,這和接收方當前的處理能力有關,如果接收方當前處理能比較強,接收方會將通告窗口調大並告知發送方,發送方就會增大數據發送量。如果接收方當前處理能力比較弱,接收方會將通告窗口大小調小並告知發送方,發送方就會減小數據發送量,這種調整通告窗口大小的機制叫做「滑動窗口」。而擁塞窗口用於控制數據的發送速率,TCP的數據發送方式採用慢啟動方式,每次發送的數據大小按2次方的方式成線性增長,持續增長過程中如果網路出現擁塞並造成TCP數據段丟失,擁塞窗口會降為當前值的一半,將TCP發送數據的速率降為之前的一半,避免網路擁塞導致的TCP重傳,降為一半後再次執行慢啟動的增長方式。圖中展示了滑動窗口工作原理。

圖 滑動窗口工作原理

圖中主機A為數據發送方,主機B為數據接收方。主機B通告給主機A的窗口大小為3,標識現在自己可以快取和處理3個數據段,主機A收到主機B通告的窗口大小後,會按窗口的大小給主機B發送數據,一次性給主機B發送了3個數據段,之後便不在發送。因為主機A知道主機B只能處理3個,所以發送3個數據段後便不在發送,等於主機B的確認。

主機B收到數據段後,將數據段放入到快取中等待處理,主機B在回復ACK的時候只處理了快取中一個數據段,所以主機B將回復ACK報文中的窗口大小調小,調整為1。主機A收到ACK確認後,從報文中獲取到接收方的窗口大小為1,說明現在接收方只能處理1個數據段,後續主機A只向主機B發送了一個數據段後便不在發送,等待主機B的確認。

應用埠

使用TCP協議作為傳輸層協議的應用程式列表如下所示:

協議

說明

21

FTP

文件傳輸協議,用於上傳、下載

23

Telnet

用於遠程登錄,通過連接目標電腦的這一埠,得到驗證後可以遠程控制管理目標電腦

25

SMTP

簡單郵件傳輸協議,用於發送郵件

53

DNS

域名服務,當用戶輸入網站的名稱後,由DNS負責將它解析成IP地址,這個過程中用到的埠號是53(其實大多數情況下DNS採用UDP 53埠)

80

HTTP

超文本傳輸協議,通過HTTP實現網路上超文本的傳輸

表7-1 TCP埠列表

MAC地址表(CAM表=內容可定址記憶體)

交換機收到數據幀以後學習數據幀中源MAC地址構建MAC地址表。由於MAC地址是保存在記憶體中,那麼交換機斷電或者重啟後MAC地址表丟棄。

構建MAC地址表之後,後續收到數據幀通過幀頭中的目的MAC地址查詢MAC地址表實現轉發。

MAC地址表的組成部分

1、MAC地址(單播)

2、介面ID

3、VLAN ID

交換機的轉發行為:

1、泛洪:組播幀、廣播幀、未知單播幀

2、轉發:目的MAC地址存在於MAC地址表中,

3、過濾(丟棄): 避免數據幀的轉發環路

交換機MAC地址的學習法則:

1、交換機的一個埠可以同時綁定多個不同的MAC地址

2、同一個MAC地址只能綁定到交換機的一個介面

交換機中有一個MAC地址表,裡面存放了MAC地址與交換機埠的映射關係。MAC地址表也稱為CAM(Content Addressable Memory)表。

如圖所示,交換機對幀的轉發操作行為一共有三種:放洪(Flooding),轉發(Forwarding),丟棄(Discarding)。

  • 泛洪:交換機把從某一埠進來的幀通過所有其它的埠轉發出去(注意,「所有其它的埠」是指除了這個幀進入交換機的那個埠以外的所有埠)。
  • 轉發:交換機把從某一埠進來的幀通過另一個埠轉發出去(注意,「另一個埠」不能是這個幀進入交換機的那個埠)。
  • 丟棄:交換機把從某一埠進來的幀直接丟棄。

交換機的基本工作原理可以概括地描述如下:

如果進入交換機的是一個單播幀,則交換機會去MAC地址表中查找這個幀的目的MAC地址。

1)如果查不到這個MAC地址,則交換機執行泛洪操作。

2)如果查到了這個MAC地址,則比較這個MAC地址在MAC地址表中對應的埠是不是這個幀進入交換機的那個埠。如果不是,則交換機執行轉發操作。如果是,則交換機執行丟棄操作。如果進入交換機的是一個廣播幀,則交換機不會去查MAC地址表,而是直接執行泛洪操作。

[SW1]display mac-address  \查看MAC地址表  [SW1]display mac-address aging-time   \查看MAC地址老化時間    Aging time: 300 seconds  [SW1]mac-address aging-time ?  \配置老化時間範圍,默認是300S,如果配置為0代表永遠不老化    <0,10-1000000>  Aging-time seconds, 0 means that MAC aging function does not work