はじめに
このドキュメントでは、IOS® XEおよびCOSでのCAPWAPアクセスポイントパス最大伝送ユニット(PMTU)の検出メカニズム、問題、および解決策について説明します。
シナリオと範囲
リモートサイトのCAPWAPアクセスポイント(AP)がWAN経由でワイヤレスLANコントローラ(WLC)に登録する場合は通常、PMTUの問題が発生します。特に、パスにVPN、GRE、または標準の1500バイトよりも低いMTUを持つネットワークセグメントが含まれている場合に、問題が発生します。
また、Extensible Authentication Protocol(EAP)Transport Layer Security(EAP-TLS)による認証についても説明します。 EAP-TLSは大きな証明書を交換するため、パスMTUを減らすとフラグメンテーションリスクが増大します。
すべてのログは、コードバージョン17.9.3でキャプチャされました。出力は、関連する行だけを表示するように切り捨てられます。
CAPWAP制御とデータ(ネゴシエートされる内容)
CAPWAP制御:
制御チャネルは、加入要求、設定交換、キープアライブ信号などの重要な管理メッセージを処理します。これらのメッセージはDTLSを使用して保護され、コントロールプレーン通信の信頼性と効率性を確保するためのパスMTU(PMTU)ネゴシエーションプロセスの主な焦点となります。
CAPWAPデータ:
このチャネルはカプセル化されたクライアントトラフィックを伝送し、通常はほとんどの導入でDTLSによって保護されます。PMTUネゴシエーションがコントロールチャネルで発生している間、結果のPMTU値によって間接的にデータプレーンカプセル化の最大パケットサイズが決定され、クライアントのデータ伝送の信頼性とフラグメンテーションに影響を与えます。
例
- 制御パケット:接続要求と応答、設定の更新、およびエコー/キープアライブメッセージ。
- データパケット:アクセスポイント(AP)とワイヤレスLANコントローラ(WLC)の間で送信されるカプセル化されたクライアントフレーム。
事実:最大サイズのCAPWAPパケット
IOS AP(例)
送信されるPMTUパケットサイズ:1499バイト=イーサネット+ CAPWAP PMTU
- イーサネット= 14バイト
- CAPWAP PMTU = 1485バイト
- 外部IP = 20バイト
- UDP = 25バイト
- DTLS = 1440バイト
AP-COS(例)
送信されるPMTUパケットサイズ:1483バイト=イーサネット+ CAPWAP PMTU
- イーサネット= 14バイト
- CAPWAP PMTU = 1469バイト
- 外部IP = 20バイト
- UDP = 25バイト
- DTLS = 1424バイト
3段階PMTUチェック
両方のプラットフォームは、3つのハードコードされたPMTU値(576、1005、および1485)をプローブします。違いは、各プラットフォームでイーサネットヘッダーがどのようにカウントされるかです。
CAPWAP PMTUディスカバリメカニズム
IOS APの動作
AP加入フェーズ
CAPWAP加入時に、APはDFビットが設定された1485バイトの最大CAPWAP PMTUをネゴシエートします。応答を5秒間待機します。
パケットキャプチャ(例)
パケット番号106 1499バイトのプローブ(DFセット)が表示されます。 同じサイズの応答は、パケットがフラグメンテーションなしでパスを通過できなかったことを示します。その後、ICMP「Fragmentation Needed」が表示されます。

対応するAPレベルのデバッグ(「debug capwap client path-mtu」)は、APが1485バイトで最初に試行し、応答を5秒間待機したことを示します。応答がない場合は、長さが短い別の接続要求パケットを送信します。これは結合段階のままであり、時間を無駄にしないためです。デバッグログに示されているように、APをWLCに加入させるための最小値に到達します。
*Jul 11 18:27:15.000: CAPWAP_PATHMTU: CAPWAP_DTLS_SETUP: MTU = 1485
*Jul 11 18:27:15.000: CAPWAP_PATHMTU: Setting default MTU: MTU discovery can start with 576
*Jul 11 18:27:15.235: %CAPWAP-5-DTLSREQSUCC: DTLS connection created sucessfully peer_ip: 10.201.234.34 peer_port: 5246
*Jul 11 18:27:15.235: CAPWAP_PATHMTU: Sending Join Request Path MTU payload, Length 1376, MTU 576
*Jul 11 18:27:15.235: %CAPWAP-5-SENDJOIN: sending Join Request to 10.201.234.34
...
*Jul 11 18:27:20.235: %CAPWAP-5-SENDJOIN: sending Join Request to 10.201.234.34
*Jul 11 18:27:21.479: %CAPWAP-5-JOINEDCONTROLLER: AP has joined controller c9800-CL
この時点で#show capwap client rcbを実行すると、576バイトのCAPWAP AP MTUが表示されます。
3702-AP#show capwap client rcb
AdminState : ADMIN_ENABLED
Primary SwVer : 17.9.3.50
..
MwarName : c9800-CL
MwarApMgrIp : 10.201.234.34
OperationState : JOIN
CAPWAP Path MTU : 576
RUN状態フェーズ
APがワイヤレスLANコントローラに正常に加入した後、PMTUディスカバリメカニズムが動作していることがわかります。このメカニズムでは、30秒後に、次に大きいPMTU値のサイズが設定されたDFビットを設定した別のCAPWAPパケットを送信することで、APがより大きいPMTU値のネゴシエーションを開始します。
この例では、APは1005バイト値を試行しています。IOSではPMTUフィールドからイーサネットが除外されるため、回線上に1019バイトが表示されます。WLCが応答すると、APはPMTUを1005バイトに更新します。そうでない場合は、30秒間待機してから再試行します。
次のスクリーンショットは、1005 PMTUのAPネゴシエーションが成功した状態を示しています(パケット#268および#269を参照)。 これらのパケットのサイズは異なることに注意してください。これは、WLCにPMTU計算の異なるアルゴリズムが設定されているためです。

ここで、対応するAPレベルのデバッグ(debug capwap client pmtu)により、APが1005バイトのPMTUを正常にネゴシエートし、AP PMTU値を更新した場所が示されます。
*Jul 11 18:28:39.911: CAPWAP_PATHMTU: PMTU Timer Expired: Trying to send higher MTU packet 576
*Jul 11 18:28:39.911: CAPWAP_PATHMTU: PMTU Timer:Sending Path MTU packet of size 1005
*Jul 11 18:28:39.911: CAPWAP_PATHMTU: MTU = 1005 for current MTU path discovery
*Jul 11 18:28:39.911: CAPWAP_PATHMTU: Ap Path MTU payload with MTU 1005 sent 888
*Jul 11 18:28:39.911: CAPWAP_PATHMTU: Stopping the message timeout timer
*Jul 11 18:28:39.911: CAPWAP_PATHMTU: Setting MTU to : 1005, it was 576
*Jul 11 18:28:39.911: CAPWAP_PATHMTU: Updating MTU to DPAA
*Jul 11 18:28:39.915: CAPWAP_PATHMTU: Sending MTU update to WLC
*Jul 11 18:28:39.915: CAPWAP_PATHMTU: MTU = 1005 for current MTU path discovery
*Jul 11 18:28:39.915: CAPWAP_PATHMTU: Ap Path MTU payload with MTU 1005 sent 21
また、この時点で(#show capwap client rcb)を実行すると、1005バイトのCAPWAP AP MTUが表示されます。showの出力を次に示します。
3702-AP#show capwap client rcb
AdminState : ADMIN_ENABLED
Primary SwVer : 17.9.3.50
Name : 3702-AP
MwarName : c9800-CL
MwarApMgrIp : 10.201.234.34
OperationState : UP
CAPWAP Path MTU : 1005
30秒後、APでは次に高い値である1485バイトのネゴシエーションが再試行されますが、APステータスがRUN状態の間にAPでICMP unreachableが受信されました。ICMP unreachableにはネクストホップ値があり、APはこの値を承認して、デバッグでわかるように、自身のPMTUの計算に使用します。
*Jul 11 18:29:45.911: CAPWAP_PATHMTU: PMTU Timer:Sending Path MTU packet of size 1485
*Jul 11 18:29:45.911: CAPWAP_PATHMTU: MTU = 1485 for current MTU path discovery
*Jul 11 18:29:45.911: CAPWAP_PATHMTU: Ap Path MTU payload with MTU 1485 sent 1368
*Jul 11 18:29:45.911: CAPWAP_PATHMTU: Received ICMP Dst unreachable
*Jul 11 18:29:45.911: CAPWAP_PATHMTU: Src port:5246 Dst Port:60542, SrcAddr:10.201.166.185 Dst Addr:10.201.234.34
*Jul 11 18:29:45.911: CAPWAP_PATHMTU: Calculated MTU 1293, last_icmp_mtu 1300
*Jul 11 18:29:48.911: CAPWAP_PATHMTU: Path MTU message could not reach WLC, Removing it from the Reliable Queue
対応するAPレベルのキャプチャ
ICMP unreachableパケット番号281に注目してください。次に、APでは、パケット番号288で1300バイトのICMPネクストホップ値を考慮し、289で応答を考慮したPMTUのネゴシエーションが試行されます。

COS APの動作
AP-COS APの検出メカニズムには違いがあります。AP joinから開始します。
AP加入フェーズ
加入時に、APは最大値を設定した加入要求を送信し、5秒間待機します。
応答がない場合は、再試行してさらに5秒間待機します。
それでも応答がない場合は、1005バイトで別の参加要求を送信します。これが成功すると、PMTUが更新され(イメージのダウンロードなど)、処理が続行されます。 1005バイトのDFプローブがコントローラに到達できない場合は、576バイト未満まで低下し、再試行されます。
APレベルでのdebug capwap client pmtuを次に示します。
Jul 11 19:06:10 kernel: [*07/11/2023 19:06:10.7065] AP_PATH_MTU_PAYLOAD_msg_enc_cb: request pmtu 1485, update FALSE
Jul 11 19:06:10 kernel: [*07/11/2023 19:06:10.7066] Sending Join request to 10.201.234.34 through port 5248, packet size 1376
Jul 11 19:06:10 kernel: [*07/11/2023 19:06:10.7066] Sending Join Request Path MTU payload, Length 1376
..
Jul 11 19:06:15 kernel: [*07/11/2023 19:06:15.3235] AP_PATH_MTU_PAYLOAD_msg_enc_cb: request pmtu 1485, update FALSE
Jul 11 19:06:15 kernel: [*07/11/2023 19:06:15.3235] Sending Join request to 10.201.234.34 through port 5248, packet size 1376
Jul 11 19:06:15 kernel: [*07/11/2023 19:06:15.3235] Sending Join Request Path MTU payload, Length 1376
Jul 11 19:06:15 kernel: [*07/11/2023 19:06:15.3245] chatter: chkcapwapicmpneedfrag :: CheckCapwapICMPNeedFrag ICMP_NEED_FRAG sent to capwapd, needfrag_count 9184
..
Jul 11 19:06:20 kernel: [*07/11/2023 19:06:20.0794] AP_PATH_MTU_PAYLOAD_msg_enc_cb: request pmtu 1005, update FALSE
Jul 11 19:06:20 kernel: [*07/11/2023 19:06:20.0794] Sending Join request to 10.201.234.34 through port 5248, packet size 896
Jul 11 19:06:20 kernel: [*07/11/2023 19:06:20.0794] Sending Join Request Path MTU payload, Length 896
Jul 11 19:06:20 kernel: [*07/11/2023 19:06:20.0831] Join Response from 10.201.234.34, packet size 917
Jul 11 19:06:20 kernel: [*07/11/2023 19:06:20.0832] AC accepted previous sent request with result code: 0
Jul 11 19:06:20 kernel: [*07/11/2023 19:06:20.0832] Received wlcType 0, timer 30
Jul 11 19:06:20 kernel: [*07/11/2023 19:06:20.5280] WLC confirms PMTU 1005, updating MTU now.
Jul 11 19:06:20 kernel: [*07/11/2023 19:06:20.5702] PMTU: Set capwap_init_mtu to TRUE and dcb's mtu to 1005
Jul 11 19:06:20 kernel: [*07/11/2023 19:06:20.5816] CAPWAP State: Image Data
Jul 11 19:06:20 kernel: [*07/11/2023 19:06:20.5822] AP image version 17.9.3.50 backup 17.6.5.22, Controller 17.9.3.50
パケットサイズが1483バイトであることに注目してください。これは、AP-COSで期待されるイーサネットヘッダーのないpmtu値です。パケット番号1168に次のように表示されます。

RUN状態フェーズ
APはRUN状態に達した後、30秒ごとにPMTUの改善を試行し続け、DFが設定されたCAPWAPパケットと、次にハードコードされた値を送信します。
APレベルのデバッグ(debug capwap client pmtu)を次に示します
Jul 11 19:08:15 kernel: [*07/11/2023 19:08:15.1341] wtpEncodePathMTUPayload: Total Packet Size: 1485
Jul 11 19:08:15 kernel: [*07/11/2023 19:08:15.1341] wtpEncodePathMTUPayload: Capwap Size is 1376.
Jul 11 19:08:15 kernel: [*07/11/2023 19:08:15.1341] [ENC]AP_PATH_MTU_PAYLOAD: pmtu 1485, len 1352, buffer len 1376
Jul 11 19:08:15 kernel: [*07/11/2023 19:08:15.1341] capwap_build_and_send_pmtu_packet: packet length = 1485 for current path MTU discovery
Jul 11 19:08:15 kernel: [*07/11/2023 19:08:15.1343] Ap Path MTU payload sent, length 1368
Jul 11 19:08:15 kernel: [*07/11/2023 19:08:15.1343] WTP Event Request: AP Path MTU payload sent to 10.201.234.34, seq num 53
Jul 11 19:08:15 kernel: [*07/11/2023 19:08:15.1351] pmtu icmp pkt(ICMP_NEED_FRAG) from click received
Jul 11 19:08:15 kernel: [*07/11/2023 19:08:15.1351] chatter: chkcapwapicmpneedfrag :: CheckCapwapICMPNeedFrag ICMP_NEED_FRAG sent to capwapd, needfrag_count 9187
Jul 11 19:08:15 kernel: [*07/11/2023 19:08:15.1351] PMTU data: dcb->mtu 1005, pmtu_overhead:1184 capwapsize_mtu: 1293 next_hop_mtu 1300, last_icmp_mtu 0 router_path_mtu 0
Jul 11 19:08:15 kernel: [*07/11/2023 19:08:15.1351] PMTU: Last try for next hop MTU failed
Jul 11 19:08:17 kernel: [*07/11/2023 19:08:17.9850] wtpCleanupPMTUPacket: PMTU: Found matching PMTUpacket at:50 position of the Q
..
Jul 11 19:08:43 kernel: [*07/11/2023 19:08:43.6435] wtpEncodePathMTUPayload: Total Packet Size: 1485
Jul 11 19:08:43 kernel: [*07/11/2023 19:08:43.6435] wtpEncodePathMTUPayload: Capwap Size is 1376.
Jul 11 19:08:43 kernel: [*07/11/2023 19:08:43.6436] [ENC]AP_PATH_MTU_PAYLOAD: pmtu 1485, len 1352, buffer len 1376
Jul 11 19:08:43 kernel: [*07/11/2023 19:08:43.6436] capwap_build-and-send_pmtu_packet: packet length = 1485 for current path MTU discovery
Jul 11 19:08:43 kernel: [*07/11/2023 19:08:43.6437] Ap Path MTU payload sent, length 1368
Jul 11 19:08:43 kernel: [*07/11/2023 19:08:43.6438] WTP Event Request: AP Path MTU payload sent to 10.201.234.34, seq num 59
Jul 11 19:08:43 kernel: [*07/11/2023 19:08:43.6446] pmtu icmp pkt(ICMP_NEED_FRAG) from click received
Jul 11 19:08:43 kernel: [*07/11/2023 19:08:43.6446] chatter: chkcapwapicmpneedfrag :: CheckCapwapICMPNeedFrag ICMP_NEED_FRAG sent to capwapd, needfrag_count 9188
Jul 11 19:08:43 kernel: [*07/11/2023 19:08:43.6446] PMTU data: dcb->mtu 1005, pmtu_overhead:1184 capwapsize_mtu: 1293 next_hop_mtu 1300, last_icmp_mtu 0 router_path_mtu 0
Jul 11 19:08:43 kernel: [*07/11/2023 19:08:43.6447] PMTU: Last try for next hop MTU failed
Jul 11 19:08:46 kernel: [*07/11/2023 19:08:46.4945] wtpCleanupPMTUPacket: PMTU: Found matching PMTUpacket at:55 position of the Q
対応するAPキャプチャを次に示します。パケット番号1427と1448を確認してください。

結論(アルゴリズムサマリ)
要約すると、アクセスポイントのCAPWAP PMTUDアルゴリズムは次のように動作します。
ステップ 1:最初のCAPWAP PMTUは、AP加入フェーズでネゴシエートされます。
ステップ2:30秒後、APは次の事前定義されたより高い値(576、1005、1485バイト)を送信して、現在のCAPWAP PMTUの改善を試みます。
ステップ3(オプション1): WLCが応答する場合は、現在のCAPWAP PMTUを新しい値に調整し、ステップ2を繰り返します。
ステップ3(オプション2): 応答がない場合は、現在のCAPWAP PMTUを維持して、ステップ2を繰り返します。
ステップ3(オプション3): 応答がなく、ICMP到達不能(タイプ3、コード4)にネクストホップMTUが含まれる場合は、CAPWAP PMTUをその値に調整して、ステップ2を繰り返します。
注:ICMPネクストホップ値が提供されたときに正しいCAPWAP PMTUが使用されるようにするための修正を参照してください。
関連CDET
問題1:
Cisco Bug ID CSCwf52815
AP-COS APが、より高い値のプローブが失敗した場合に、ICMP到達不能ネクストホップ値を承認しない。
修正:8.10.190.0、17.3.8、17.6.6、17.9.5、17.12.2
IOS APはネクストホップ値を承認し、PMTUを更新します。
問題2:
Cisco Bug ID CSCwc05350
非対称MTU(WLC→APはAP→WLCとは異なる)では、ICMPに双方向PMTUの最大値が反映されなかった場合にPMTUフラッピングが発生します。
修正:8.10.181.0、17.3.6、17.6.5、17.9.2、17.10.1
回避策:WLCとAPの間のMTU(ルータ、ファイアウォール、VPNコンセントレータ)を制御するデバイスで、両方向に同じMTUを設定します。
関連するAP側のCisco Bug ID CSCwc05364:COS-APでは、非対称MTUの最大指向性MTUサイズを識別できるようにPMTUメカニズムが改善されています
関連するWLC側のCisco Bug ID CSCwc48316:APが1つのアップストリームと他の2つの異なるMTUを持つことができるように、PMTUの計算を改善します(これに対処する計画がないため、DEによってクローズとマークされています)
問題3:
Cisco Bug ID CSCwf91557
AP-COSは、最大ハードコード値に達した後、PMTUディスカバリを停止します。
17.13.1で修正されています。また、17.3.8、17.6.6、17.9.5、17.12.2のCisco Bug ID CSCwf52815でも修正されています。
問題4:
Cisco Bug ID CSCwk70785
AP-COSがPMTUプローブのMTU値を更新しないため、切断が発生します。
Cisco Bug ID CSCwk90660 - APSP6 17.9.5]ターゲット17.9.6、17.12.5、17.15.2、17.16で修正されています。
問題5:
Cisco Bug ID CSCvv53456
9800スタティックCAPWAPパスMTU設定(AireOSとパリティ)。
これにより、AP加入プロファイルごとに9800にスタティックCAPWAPパスMTUを設定できます。 17.17に進みます