STP技術

?一、環路的危害

1.現象

  • 鏈路指示燈快速閃爍

  • MAC表震蕩:交換機頻繁修改MAC地址表 → 轉發失效。

2.環路危害造成的影響

  • 鏈路堵塞
  • 主機操作系統響應遲緩
  • 二層交換機管理緩慢
  • 沖擊網關設備的CPU


三、STP的作用

1.STP基本原理

STP即生成樹協議,它通過阻斷冗余鏈路來消除橋接網絡中可能存在的路徑環路。在一個網絡中,當存在多條路徑連接不同的網絡設備(如交換機,圖中的 SWA、SWB、SWC )時,可能會形成物理環路,這會導致廣播風暴、多幀復制等問題,影響網絡的正常運行。STP 通過在交換機之間交換 BPDU(Bridge Protocol Data Unit,橋協議數據單元),來計算出一個無環的網絡拓撲結構將某些端口設置為阻塞狀態,從而避免網絡環路的產生。

--怎么實現冗余鏈路的?

交換機通過交互?BPDU(網橋協議數據單元),比較報文中的?參數,依次選舉出:

  1. 根網橋(全網唯一)

  2. 根端口(每臺非根橋上唯一)

  3. 指定端口(每個網段唯一)
    未被選中的冗余端口將進入?阻塞狀態從而消除二層環路。

2. STP的作用

  • 冗余鏈路:在網絡中,冗余鏈路是為了提高網絡的可靠性而設置的備份鏈路。比如圖中被阻塞的鏈路,在正常情況下雖然不傳輸數據,但當網絡中的其他鏈路出現故障時,它就可以發揮作用。
  • 故障恢復:當 當前正在使用的路徑發生故障時,STP 會檢測到鏈路狀態的變化,然后激活之前被阻塞的冗余備份鏈路,恢復網絡的連通性。例如,如果 SWA 和 SWC 之間的鏈路出現故障,原本被阻塞的 SWB 的 E0/20 端口可能會被重新激活,使得網絡流量可以通過其他路徑傳輸,保證網絡的正常通信 。

3.STP報文


四、STP的工作原理

1. 基礎邏輯:BPDU 交互

核心是交換機間通過交互 BPDU(橋協議數據單元 ),完成拓撲收斂,消除環路

BPDU 里包含網橋優先級、MAC 地址、路徑開銷等參數,交換機,依靠這些參數,確定網絡角色(根網橋、端口角色 ),構建無環拓撲。

?2.BPDU參數

2.1網橋ID

由交換機的優先級和MAC地址組成網橋優先級取值范圍必須在0-65535之中,同時也必須是4.96的倍數。

2.2端口ID

由發送端口的優先級與端口號組成。端口優先級取值范圍0-255(默認128),必須是16的倍數。

2.3路徑開銷?

3. 角色選舉

基于 BPDU 交互,STP 會依次完成以下關鍵動作,最終讓網絡無環且保留冗余:

3.1 選根網橋

  • 規則網橋優先級(默認 32768 )+ MAC 地址,數值越小越優先。
  • 作用:選 1 臺 “主交換機” 當根,所有交換機以它為中心計算拓撲,避免多中心導致環路。

3.2 非根交換機選根端口

  • 規則:非根交換機上,選 “到根網橋路徑開銷最小” 的端口(路徑開銷由鏈路帶寬等決定,帶寬越小開銷越大 )。
  • 作用:每臺非根交換機只留 1 條最優 “上聯根網橋” 的通道,避免同一設備多條路徑回根引發環路。

3.3 每個網段選指定端口

  • 規則每個物理網段(如兩臺交換機之間的鏈路 )里,選 “到根網橋路徑開銷最小” 的端口(網段內所有設備對比,最終 1 個端口當選 )。

當每個交換機的根端口選舉出來之后,切換視角,以鏈路為視角。鏈路兩邊的BPDU進行評比,選舉角色。

1.如果兩個端口中,一個是根端口,另一個就是指定端口

2.如果這個端口是根網橋上的端口,那么就一定是指定端口

3.如果另一端連接的是主機,那么這個端口一定時指定端口

4.看鏈路連接的兩個端口中的BPDU,比較BPDU的優劣,優的一方作為指定端口,劣的一方作為堵塞端口。

  • 作用:保證每個網段只有 1 個 “轉發端口” 向根網橋傳遞流量,防止網段內環路。

3.4 阻塞冗余端口(非根非指定端口)

  • 規則:既不是根端口、也不是指定端口的端口,進入阻塞(Blocking )狀態,不轉發用戶數據(僅收 BPDU 維持拓撲 )。
  • 作用:直接 “切斷” 冗余鏈路的轉發功能,從物理拓撲上消除環路;但鏈路仍保留,故障時可自動激活。

3.4?逐個網段分析(以圖為例)

(1)LANA 網段(連 SWA 和 SWB )

  • SWA 的端口:到根網橋(自己)的路徑開銷是?0(根網橋自己的開銷為 0 ),所以 SWA 在 LANA 網段的端口總開銷 = 0 + LANA 鏈路開銷(4 )= 4 。
  • SWB 的端口:到根網橋的總路徑開銷是?4(SWB → LANA → SWA ,開銷 4 ),所以 SWB 在 LANA 網段的端口總開銷 = 4 + LANA 鏈路開銷(4 )= 8 。

比較兩個端口的總開銷:4(SWA 端口) < 8(SWB 端口)?→?SWA 在 LANA 網段的端口被選為指定端口

(2)LANB 網段(連 SWA 和 SWC )

  • SWA 的端口:到根網橋開銷 0 ,總開銷 = 0 + LANB 鏈路開銷(4 )= 4 。
  • SWC 的端口:到根網橋的總路徑開銷是?4(SWC → LANB → SWA ,開銷 4 ),總開銷 = 4 + LANB 鏈路開銷(4 )= 8 。

比較后:4(SWA 端口) < 8(SWC 端口)?→?SWA 在 LANB 網段的端口被選為指定端口

(3)LANC 網段(連 SWB 和 SWC )

  • SWB 的端口:到根網橋的總路徑開銷是?4(SWB → LANA → SWA ),所以 SWB 在 LANC 網段的端口總開銷 = 4 + LANC 鏈路開銷(4 )= 8 。
  • SWC 的端口:到根網橋的總路徑開銷是?4(SWC → LANB → SWA ),所以 SWC 在 LANC 網段的端口總開銷 = 4 + LANC 鏈路開銷(4 )= 8 。

此時,路徑開銷相同,需要比?橋 ID:

  • SWB 的橋 ID:32768 + 00e0-fc41-4259
  • SWC 的橋 ID:32768 + 00e0-fc41-43b9

比較 MAC 地址(十六進制):00e0-fc41-4259 < 00e0-fc41-43b9?→?SWB 的橋 ID 更小?→?SWB 在 LANC 網段的端口被選為指定端口,SWC 對應的端口成為?Alternate Port(備用端口,阻塞狀態 )。

(4)LAND 網段(連 SWB )

這個網段只有 SWB 一個交換機的端口(因為 LAND 是末端網段,沒有其他交換機 )。根據規則,單個交換機的端口自動成為指定端口?→ SWB 在 LAND 網段的端口是指定端口。

(5)LANE 網段(連 SWC )

同理,LANE 是末端網段,只有 SWC 的端口 →?SWC 在 LANE 網段的端口自動成為指定端口

?綜合分析:

4.STP協議報文

五、STP解決臨時環路問題

1 .STP端口狀態

STP 為了避免網絡環路,給交換機端口定義了?5 種狀態,不同狀態下端口的行為(收發 BPDU、學習 MAC、轉發數據)不同,目的是有序控制端口角色,逐步放開數據轉發,防止環路

端口狀態中文描述轉發數據幀學習 MAC 地址表參與生成樹計算處理 BPDU
Disabled端口沒有啟用????
Blocking阻塞狀態???接收并處理
Listening偵聽狀態???接收并發送
Learning學習狀態???接收并發送
Forwarding轉發狀態???接收并發送

2. 時間計時器

STP 中的計時器用于控制 BPDU 的傳播和端口狀態的轉換,進一步防止臨時環路。

Hello Timer(Hello 時間)

作用:根網橋周期性發送 “配置 BPDU” 的時間間隔,默認 2 秒

?觸發:非根網橋靠收根橋的 BPDU 維持狀態,若收不到,會觸發拓撲重新計算。

Forward Delay(轉發時延)

作用:端口狀態遷移的 “過渡時間”,默認 15 秒,控制 “監聽→學習→轉發” 的等待時長。

  • ?端口從監聽狀態到學習狀態,需要等待一個 Forward Delay 時長,即 15 秒;
  • ?從學習狀態到轉發狀態 ,又需要等待一個 Forward Delay 時長,同樣是 15 秒。
  • ?所以,端口從監聽狀態最終進入轉發狀態,經歷了兩次 Forward Delay 的等待, 總計 30 秒。
Message Age(消息老化時間)

作用:記錄 “配置 BPDU 從根網橋生成后,到當前交換機的時間”,每經過一個交換機,Message Age 會累加(默認每跳 + 1 )。

網橋在轉發 BPDU 時,會根據 Message Age 判斷 BPDU 的時效性。如果 Message Age 超過 Max Message Age,網橋會認為該 BPDU 已經過期,不再使用這個 BPDU 中的信息,可能會導致端口狀態的重新計算和遷移。例如,當網絡中的鏈路出現故障,BPDU 的傳遞路徑發生改變,Message Age 可能會增加,若超過限制,端口可能會重新進入阻塞狀態,重新參與生成樹計算 。

Max Message Age(最大老化時間)

作用規定了配置 BPDU 存活的最大時間,默認 20 秒(10 個 Hello 周期) ,用于保證 BPDU 信息的有效性。

與端口狀態遷移聯系:非根網橋若超過 20 秒沒收到新 BPDU,會認為根橋可能故障,觸發重新選舉根橋和拓撲計算。

3.STP 的傳統缺陷—— 拓撲變化時收斂慢?

4.拓撲發生改變處理機制

4.1觸發條件

前提:拓撲變化觸發

情況 1:網絡里新接了一臺交換機,或者原本阻塞的端口(Blocking)被激活,變成 Forwarding 狀態(能轉發流量了 )。

  • 條件細化
    不僅要 “有端口進入 Forwarding”,還得滿足?“該交換機至少有一個指定端口(Designated Port)”?。
    • 解釋:“指定端口” 是 STP 里每個網段(鏈路)中負責轉發 BPDU 的端口,有指定端口說明交換機在網絡里 “有正式角色”,不是孤立的。如果新激活的端口所在交換機是 “孤網”(沒指定端口),就算端口狀態變,也不用發 TCN(發了也沒人處理 )。

情況 2:有端口 “丟失活躍鏈路”(從 Forwarding/Learning 轉 Blocking)

  • 場景:常見的如鏈路中斷(網線被拔、設備斷電 )、端口被手動關閉,或者 STP 重新計算后,端口從 Forwarding(轉發流量 )或 Learning(學習 MAC 地址 )狀態,被迫變成 Blocking(阻塞,不轉發流量,防止環路 )。
  • 本質:原本能轉發 / 學習的路徑失效了,網絡拓撲實際 “斷了一塊”,需要通知全網更新。

?4.2 TCN BPDU

在STP中,只有根網橋才能發送配置BPDU,下面的拓撲發生改變,根網橋是不知道的。所以需要定義一個新的BPDU用于通知根網橋——TCN BPDU。又為了保證可靠性,就有了TCA BPDU。上游交換機根網橋一旦收到TCN BPDU,那么就會發送TC置為的BPDU,通知各個網橋更改MAC表的老化時間由300s改為15s。

4.3 TCA 及TC置為的BPDU

    4.5.總結

    ??1.流程分步解析

    1. (綠虛線,TCN 消息)SWD → SWC:上報拓撲變化

    SWD 發現鏈路中斷,符合?TCN拓撲變化通知,于是向自己的指定上游交換機(SWC )?發?TCN BPDU?,說 “拓撲變啦,快處理” 。

    2. (紅虛線,TCA 消息)SWC → SWD:確認收到 TCN

    SWC 收到 SWD 的 TCN 后,需要回復?TCA拓撲變化確認,告訴 SWD“我收到消息了,你別一直發” 。這一步是 “確認機制”,避免 TCN 消息一直刷屏 。

    3. (綠虛線,TCN 消息)SWC → SWA:繼續上報給根橋

    SWC 除了回 TCA 給 SWD ,還要把 TCN 消息繼續往根橋(SWA )?轉發(因為拓撲變化必須讓根橋知道,根橋才能發全網更新指令 ),同樣走 “逐級上報” 邏輯 。

    4. (紫實線,TCA 消息)SWA → SWB、SWA → SWC:根橋回 TCA

    根橋 SWA 收到 SWC 轉發的 TCN 后,會向所有非根橋交換機(這里是 SWB、SWC )?發?帶 TCA 置位的配置 BPDU?,確認 “我收到拓撲變化消息了” 。這一步是根橋對全網的 “確認反饋” 。

    5. (紫實線,TC 置位 BPDU )SWA → SWB、SWA → SWC:根橋發全網更新指令

    根橋 SWA 確認拓撲變化后,開始發?帶 TC(Topology Change,拓撲變化執行)置位的 BPDU?,告訴所有交換機:“拓撲變了,趕緊把 MAC 地址表老化時間從默認 300 秒改成 15 秒” 。這樣交換機能快速老化舊表項,重新學習新拓撲下的 MAC 映射,保證流量轉發正確 。

    6. (隱含邏輯)全網更新 MAC 表

    所有收到?TC 置位 BPDU?的交換機(SWB、SWC、SWD 等 ),會加速老化自己的 MAC 地址表。比如原本主機 A 走 SWB→SWD 的路徑,鏈路斷了后,新路徑可能變 SWB→SWC→SWD ,加速老化能讓交換機更快 “忘掉” 舊路徑,學習新路徑的 MAC 映射,網絡重新收斂 。

    當拓撲變化(如鏈路故障)時:

    檢測變化的交換機向根網橋發送 TCN? BPDU。

    上游交換機收到TCN BPDU會給下游交換機回復一個TCA BPDU,同時將TCN BPDU傳給根網橋。

    根橋收到后廣播 TC? BPDU,通知全網:

    全網橋收到后,縮短MAC表老化時間(默認300秒 → 15秒) 快速清除舊路徑的MAC地址。?

    5.網絡拓撲變化--STP網絡收斂

    在生成樹協議中,直接收斂和間接收斂是網絡拓撲發生變化后,生成樹重新計算并達到穩定狀態的兩種不同方式。

    5.1直接收斂

    SW3 的阻塞端口能直接收到根網橋(SW1)的 BPDU,直接切換為根端口,經 “監聽→學習→轉發”(2 個 Forward Delay,默認 15 秒 / 個,共 30 秒 )完成收斂。?

    5.2 間接收斂

    SW2 收不到根網橋 BPDU,“自封” 根網橋,收斂時間50秒。

    將檢測拓撲變化的最長時間(Max Message Age)和端口狀態遷移的總時間相加,就得到了間接收斂的大致時長:20 秒(Max Message Age) + 30 秒(兩次 Forward Delay) = 50 秒。

    5.3 直接收斂vs間接收斂

    若故障導致交換機失去到達根橋的唯一路徑需要重新選舉根端口,則一定是間接收斂

    圖中,SW2的根端口發生故障,指定端口對面又是堵塞端口,所以沒有路能通往根橋了,就是間接收斂。

    六、STP 的缺點

    1.收斂時間長(主動收斂,被動收斂,拓撲改變TCN,MAC表老化)

    2.處理拓撲改變機制不靈活(主機頻繁上下線時,網絡會纏上大量TCN)

    1.?收斂速度極慢(30-50秒)

    根源

    • Blocking→Listening→Learning→Forwarding?強制等待?50秒(20秒 Max Age + 15秒×2 Forward Delay)。

    ?2.處理機制不靈活

    • TCN機制低效
      拓撲變更需逐級上報至根橋 → 延遲高,且根橋單點瓶頸。

    本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
    如若轉載,請注明出處:http://www.pswp.cn/web/91611.shtml
    繁體地址,請注明出處:http://hk.pswp.cn/web/91611.shtml
    英文地址,請注明出處:http://en.pswp.cn/web/91611.shtml

    如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

    相關文章

    RAGFLOW~knowledge graph

    start 為了增強多跳問答&#xff0c;RAGFlow在數據提取和索引之間增加了一個知識圖譜構建步驟&#xff0c;如下面所示。這一步驟會從您指定的分塊方法生成的現有塊中創建額外的塊。 從v0.16.0版本開始&#xff0c;RAGFlow支持在知識庫上構建知識圖譜&#xff0c;允許你在知識庫…

    機器學習【二】KNN

    KNN算法是一種基于實例的惰性學習算法&#xff0c;其核心思想是通過"多數投票"機制進行分類決策。算法流程包括數據準備&#xff08;需歸一化處理&#xff09;、距離計算&#xff08;常用歐氏距離&#xff09;、選擇K值&#xff08;通過交叉驗證確定&#xff09;和決…

    preloader

    patch調試串口115200--- a/platform/ac8257/default.makb/platform/ac8257/default.mak-40,7 40,7 CFG_USB_DOWNLOAD :1CFG_FUNCTION_PICACHU_SUPPORT :1CFG_PMT_SUPPORT :0CFG_UART_COMMON :1 -CFG_LOG_BAUDRATE :921600 CFG_LOG_BAUDRATE :115200CFG_EVB_UART_CLOCK :260000…

    Linux基礎(三)——Bash基礎

    1、Bash基礎1.1 Bash簡介從前邊操作系統的組成介紹中&#xff0c;我們可以知道操作系統為上層用戶提供的與內核進行交互的接口稱為shell&#xff0c;其在系統中的位置如下圖所示&#xff0c;shell作為內核和用戶之間的中介&#xff0c;接收用戶發送的指令&#xff0c;將其解析為…

    Python 元編程實戰:動態屬性與數據結構轉換技巧

    在處理復雜嵌套的 JSON 數據源時&#xff0c;我們常面臨訪問不便、結構不靈活、字段關聯性差等問題。本文將以 O’Reilly 為 OSCON 2014 提供的 JSON 數據源為例&#xff0c;系統講解如何通過 動態屬性轉換、對象封裝、數據庫映射與特性&#xff08;property&#xff09;機制&a…

    Android-側邊導航欄的使用

    在學習之前&#xff0c;我們先得知道側邊導航欄是什么&#xff1f;它是一個 可以讓內容從屏幕邊緣滑出的布局容器&#xff0c;由安卓官方提供&#xff0c;用于創建側邊菜單&#xff0c;通常搭配 NavigationView 使用&#xff1b;添加依賴&#xff1a;在app下的build.gradle中添…

    lesson30:Python迭代三劍客:可迭代對象、迭代器與生成器深度解析

    目錄 一、可迭代對象&#xff1a;迭代的起點 可迭代對象的本質特征 可迭代對象的工作原理 自定義可迭代對象 二、迭代器&#xff1a;狀態化的迭代工具 迭代器協議與核心方法 迭代器的狀態管理 內置迭代器的應用 三、生成器&#xff1a;簡潔高效的迭代器 生成器函數&a…

    實時語音流分段識別技術解析:基于WebRTC VAD的智能分割策略

    引言 在現代語音識別應用中&#xff0c;實時處理音頻流是一項關鍵技術挑戰。不同于傳統的文件式語音識別&#xff0c;流式處理需要面對音頻數據的不確定性、網絡延遲以及實時性要求等問題。本文將深入解析一個基于WebRTC VAD&#xff08;Voice Activity Detection&#xff09;…

    word中rtf格式介紹

    RTF&#xff08;Rich Text Format&#xff0c;富文本格式&#xff09;是一種由微軟開發的跨平臺文檔文件格式&#xff0c;用于在不同應用程序和操作系統之間交換格式化文本。以下是對RTF格式的簡要說明&#xff1a; RTF格式特點 跨平臺兼容性&#xff1a;RTF文件可以在多種文字…

    Springboot 配置 doris 連接

    Springboot 配置 doris 連接 一. 使用 druid 連接池 因為 Doris 的前端&#xff08;FE&#xff09;兼容了 MySQL 協議&#xff0c;可以像連 MySQL 一樣連 Doris。這是 Doris 的一個核心設計特性&#xff0c;目的是方便接入、簡化生態兼容。 首先需要引入 pom 依賴:<dependen…

    Linux 系統啟動與 GRUB2 核心操作指南

    Linux 系統啟動與 GRUB2 核心操作指南 Linux 系統的啟動過程是一個環環相扣的鏈條&#xff0c;從硬件自檢到用戶登錄&#xff0c;每一步都依賴關鍵組件的協作。其中&#xff0c;GRUB2 引導器和systemd 進程是核心樞紐&#xff0c;而運行級別則決定了系統的啟動狀態。以下是系統…

    供應鏈分銷代發源碼:一站式打通供應商供貨、平臺定價、經銷商批發及零售環節

    在當前復雜的市場環境中&#xff0c;供應鏈管理成為企業發展的關鍵。尤其對于電商平臺來說&#xff0c;高效、精準的供應鏈管理不僅能提升運營效率&#xff0c;還能增強市場競爭力。為了應對日益復雜的供應鏈挑戰&#xff0c;核貨寶供應鏈分銷代發系統應運而生&#xff0c;旨在…

    機器學習、深度學習與數據挖掘:核心技術差異、應用場景與工程實踐指南

    技術原理與核心概念數據挖掘作為知識發現的關鍵技術&#xff0c;其核心在于通過算法自動探索數據中的潛在模式。關聯規則挖掘可以發現項目之間的有趣關聯&#xff0c;如經典的"啤酒與尿布"案例&#xff1b;聚類分析能夠將相似對象自動分組&#xff0c;常用于客戶細分…

    《C++初階之STL》【stack/queue/priority_queue容器適配器:詳解 + 實現】(附加:deque容器介紹)

    【stack/queue/priority_queue容器適配器&#xff1a;詳解 實現】目錄前言&#xff1a;------------標準接口介紹------------一、棧&#xff1a;stack標準模板庫中的stack容器適配器是什么樣的呢&#xff1f;1. 棧的基本操作std::stack::topstd::stack::pushstd::stack::pop2…

    Thymeleaf 模板引擎原理

    Thymeleaf 的模板文件&#xff0c;本質上是標準的 HTML 文件&#xff0c;只是“加了標記&#xff08; th&#xff1a;&#xff09;的屬性”&#xff0c;讓模板引擎在服務端渲染時能 識別并處理 這些屬性&#xff0c;從而完成數據&#xff08;model&#xff09; 的填充。<!DO…

    5、生產Redis高并發分布式鎖實戰

    一、核心問題與解決方案 問題本質 #mermaid-svg-W1SnVWZe1AotTtDy {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-W1SnVWZe1AotTtDy .error-icon{fill:#552222;}#mermaid-svg-W1SnVWZe1AotTtDy .error-text{fill:#5…

    CS231n-2017 Lecture8深度學習框架筆記

    深度學習硬件&#xff1a;CPU:CPU有數個核心&#xff0c;每個核心可以獨立工作&#xff0c;同時進行多個線程&#xff0c;內存與系統共享GPU&#xff1a;GPU有上千個核心&#xff0c;但每個核心運行速度很慢&#xff0c;適合并行做類似的工作&#xff0c;不能獨立工作&#xff…

    以ros的docker鏡像為例,探討docker鏡像的使用

    標題以ros的docker鏡像為例&#xff0c;探討docker鏡像的使用&#xff08;待完善&#xff09; 1. docker介紹&#xff08;以ros工程距離&#xff09; &#xff08;1&#xff09;個人理解&#xff1a;docker就是一個容器&#xff0c;主要的作用就是將環境打包好&#xff0c;方…

    Android Audio實戰——TimeCheck機制解析(十三)

    上一篇文章我們雖然通過 tombstoned Log 推斷出 audioserver 崩潰的原因就是系統調用內核接口時發生阻塞,導致 TimeCheck 檢測超時異常而崩潰,但并沒有實質性的證據證明是 kernel 層出現問題導致的崩潰,因此這里我們繼續看一下 TimeCheck 的檢測原理。 一、TimeCheck機制 T…

    飛機大戰小游戲

    1.視覺設計&#xff1a;采用柔和的藍紫色漸變背景&#xff0c;營造夢幻感飛機、敵機和子彈使用柔和的糖果色調添加了粒子爆炸效果&#xff0c;增強視覺反饋星星收集物增加游戲趣味性2.游戲機制&#xff1a;玩家使用左右方向鍵控制飛機移動空格鍵發射子彈P鍵暫停游戲擊落敵機獲得…