TCP の再構築を理解するドロップ

TCP の再構築を理解するドロップ

85742
Created On 09/25/18 19:21 PM - Last Modified 06/13/23 13:41 PM


Resolution


このドキュメントでは、TCP 再構築パケットドロップのトラブルシューティングの一般的なシナリオについて説明します 

 

ここでは、クライアント、172.22.136.50 は、宛先ポート80のサーバー192.16.31.62 に接続しようとするケーススタディです。ファイアウォールは、動的なアドレスとポートの変換で構成されています, そのため、受信と送信ステージ上の SYN は、異なる ip アドレスとポート番号を示しています, ip ID は同じままですが、.

 

クライアントは、SYN を送信します。 ファイアウォールは、syn を受信し、NAT を実行し、syn を送信します。サーバーは、syn を受信し、syn-ACK を応答します。ファイアウォールは、SYN-ACK を受信し、それを nat し、クライアントにパケットを送り返します。SYN-ACK は、ファイアウォールからクライアントにそれを作ることはありません、したがって、クライアントは、新しいポート番号に接続を作成しようとする前に、同じポート番号に4回以上の接続を再試行します。

 

最初のスナップショットは、クライアントからサーバーへの SYNs、受信、ファイアウォール、送信、およびドロップステージ (ただし、drop stage にはパケットがない) を示しています。2番目のスナップショットは、サーバーからクライアントへの SYN-ACKs を示し、受信、送信、ファイアウォール、およびファイアウォールのドロップステージで再度実行されます。

 

a) クライアントは最初に、以下の IP および TCP 値を持つ SYN パケットでサーバへの接続を試みます。

S の ip アドレス: 172.22.136.50、D の ip アドレス: 192.16.31.62、Ip.Id 24915、src ポート44912、dest ポート80、Seq # 2033466733、Ack # 0

b) ファイアウォールは、パケットを受け取り、172.22.136.50 から198.180.162.5 への ip と44912から21081へのソースポートを変換するので、送信段階での SYN パケットは以下の ip と TCP の値を持っている

S の ip アドレス: 198.180.162.5、D の ip アドレス: 192.16.31.62、Ip.id 24915 src ポート21081、dest ポート80、Seq # 2033466733、Ack # 0

c) の syn は、最終的にサーバーに到達し、サーバーが syn-ACK で応答します。ファイアウォールで受信した SYN-ACK には、以下の IP および TCP 値があります。

S の ip アドレス: 192.16.31.62、D の ip アドレス: 198.180.162.5、Ip.id 0、src ポート80、dest ポート21081、Seq # 743112262、Ack # 2033466734

d) ファイアウォールの SYN-ACK とパケットを送信すると、以下の IP アドレスと TCP 値

S の ip アドレス: 192.16.31.62、D の ip アドレス: 172.22.136.50、Ip.id 0、src ポート80、dest ポート44912、Seq # 743112262、Ack # 2033466734

 

Avinash-syn

 

 

 Avinash-dell-pcap-analysis

 

クライアントは SYN ACK を受け取らなかったため、最終的にあきらめる前に、同じ送信元 ip、宛先 ip、送信元ポート、宛先ポート、seq #、ack # で4回以上再試行し、新しいポート番号に再度接続しようとしています。 

 

S の ip アドレス: 172.22.136.50、D の ip アドレス: 192.16.31.62、Ip.Id 24916、src ポート44912、dest ポート80、Seq # 2033466733、Ack # 0

S の ip アドレス: 172.22.136.50、D の ip アドレス: 192.16.31.62、Ip.Id 24917、src ポート44912、dest ポート80、Seq # 2033466733、Ack # 0

S の ip アドレス: 172.22.136.50、D の ip アドレス: 192.16.31.62、Ip.Id 24918、src ポート44912、dest ポート80、Seq # 2033466733、Ack # 0

S の ip アドレス: 172.22.136.50、D の ip アドレス: 192.16.31.62、Ip.Id 24919、src ポート44912、dest ポート80、Seq # 2033466733、Ack # 0

 

サーバーはこれらすべての SYNs を受け取り、彼らの SYN-ACKs とのすべてのこれらの SYNs に戻って応答します。syn と同様に、syn-ACKs も同じソース ip アドレス、宛先 ip、ソースポート、宛先ポート、seq # と Ack # を持っている。 

 

S の ip アドレス: 192.16.31.62、D の ip アドレス: 198.180.162.5、Ip.id 0、src ポート80、dest ポート21081、Seq # 743112262、Ack # 2033466734

S の ip アドレス: 192.16.31.62、D の ip アドレス: 198.180.162.5、Ip.id 0、src ポート80、dest ポート21081、Seq # 743112262、Ack # 2033466734

S の ip アドレス: 192.16.31.62、D の ip アドレス: 198.180.162.5、Ip.id 0、src ポート80、dest ポート21081、Seq # 743112262、Ack # 2033466734

S の ip アドレス: 192.16.31.62、D の ip アドレス: 198.180.162.5、Ip.id 0、src ポート80、dest ポート21081、Seq # 743112262、Ack # 2033466734

 

これは、SYN-ACKs の Ip.Id 0 を参照することが期待されています。これは、パケットの形式が正しくないということではありません。

 

 

最初の4回の試行が失敗した後、サーバーは SYN-ACKs を再送し続けますが、現在は別のシーケンス # になります。クライアントは、サーバーの seq # まだ知っていないので、理想的には、syn-ack の seq # の変更は、クライアントには関係ありません (クライアントの Syn パケットは Ack # 0 を持っています)。

 

スナップショットに示されているように、サーバは以下の IP および TCP 値で SYN-ACKs を再送ます。

 

S の ip アドレス: 192.16.31.62、D の ip アドレス: 198.180.162.5、Ip.id 0、src ポート80、dest ポート21081、Seq # 883668401、Ack # 2033466734

S の ip アドレス: 192.16.31.62、D の ip アドレス: 198.180.162.5、Ip.id 0、src ポート80、dest ポート21081、Seq # 883668401、Ack # 2033466734

S の ip アドレス: 192.16.31.62、D の ip アドレス: 198.180.162.5、Ip.id 0、src ポート80、dest ポート21081、Seq # 883668401、Ack # 2033466734

 

ファイアウォールは、これらの SYN-ACKs を受信し、以下のカウンタでそれらをドロップします。

 

tcp_drop_packet 2 0 tcp 再構築に失敗したため、tcp pktproc パケットが破棄される警告

 

tcp の再構築の失敗の理由は、"tcp reass" を有効にすることによって理解することができます, 定期的なフィルタと一緒に, キャプチャとフロー basic.

 

> デバッグ dataplane パケット-diag セットログ機能 tcp
すべてのすべての
fptcp fptcp
reass reass

 

> dataplane パケット-diag 表示設定のデバッグ

.....

ログが
有効になっています: はい
ログスロットル:
同期なし-ログごとにティック: はい
機能:
フロー: 基本的な
tcp: reass fptcp
カウンタ:     

 

以下の pan_packet_diag ログは、TCP reassebly 障害がパケットの低下を引き起こした方法を説明します。

 

a) 送信された SYN のログ

 

= = 2015-09-01 13:21: 45.170-0400 = =
fastpath 段階で受信したパケット
情報: len 74 ポート30インターフェイス 30 vsys 1
wqe インデックス227771パケット 0x0x80000004162190e6
パケットデコードダンプ:
L2:70:81:05: ec: d4: 3f-> 00: 1b:17:00:04: 1e、タイプ0x0800
IP: 172.22.136.50-> 192.16.31.62、プロトコル 6
バージョン4、ihl 5、tos 0x00、len 60、
id 24915、frag_off 0x4000、ttl 60、チェックサム 51665
TCP: スポーツ44912、dport 80、seq 2033466733、ack 0、
予約0、オフセット10、ウィンドウ5840、チェックサム49659、
フラグ 0x0002 (SYN)、緊急データ 0
TCP オプション:
00000000:02 04 05 b4 04 02 08 0a 99 03 5c 3e 00 00 00 00 ... ..\>....
00000010:01 03 03 00...。
フロー fastpath、セッション 371381
NAT セッション、ランアドレス/ポート変換
2015-09-01 13:21: 45.171-0400 デバッグ: pan_tcp_reass (pan_reass c:1999): reass: ワーク0x8000000418bcdd00 セッション = 371381 seqno = 2033466733 tcplen = 0 l4plen = 0 c2s 状態 0
2015-09-01 13:21: 45.171-0400 デバッグ: pan_tcp_tcb_init_base (pan_reass c:612): SYN: c2s
2015-09-01 13:21: 45.171-0400 デバッグ: pan_tcp_parse_options_syn (pan_reass): tcp mss 1460
2015-09-01 13:21: c:539-0400 デバッグ: 45.171options_syn (pan_reass c:560): サック許可
2015-09-01 13:21: 45.172-0400 デバッグ: pan_tcp_parse_options_syn (pan_reass): tcp オプション 8 2015-09-01 を無視する
13:21: c:568-0400 デバッグ: 45.172 (pan_tcp_parse_options_syn): tcpウィンドウスケール 0
Syn クッキー: pan_reass (Init 状態): c2s: 0 c2s: nxtseq 2033466734 c2s: startseq 2033466734 c2s: 勝利 0 c2s: st 3 c2s: newsyn 0:: s2c: nxtseq 0 s2c: startseq 0 s2c: 勝利 5840 s2c: st 0 s2c: newsyn 0 ack 0 nosyn 0 
2015-09-01 13:21: 45.172-0400 デバッグ: pan_tcp_reass (pan_reass c:2484): 
セッション = 371381 作業0x8000000418bcdd00 ペイロード len 0、tcp データ len 0、ret 0
転送ルックアップ、進入インタフェース 30
L3 モード、仮想ルータ 2
のルートルックアップ、IP 192.16.31.62

 

b) "レッシング" pan_packet_diag ログを介して、我々は最初の SYN-ACK ファイアウォールによって受信に出くわす。

fireawall は、高速パスステージでこの SYN ack を受け取り、c2s 方向に期待する次のパケット、すなわちseq # 2033466734(通常はクライアントからの ACK パケット)  を持つパケットを評価します。  同様に、s2c 方向から期待する次のパケットは、seq # 743112263を持つものです。  これらの条件を評価した後、ファイアウォールはパケットを送信します。 

 

= = 2015-09-01 13:21: 45.173-0400 = =
fastpath 段階で受信したパケット
情報: len 66 ポート28インターフェイス 28 vsys 0
wqe インデックス224088パケット 0x0x8000000416faf0e6
パケットデコードダンプ:
L2: b4:14:89:85: 4e:43-> 00: 1b:17:00:04: 1c、タイプ0x0800
IP アドレス: 192.16.31.62-> 198.180.162.5、プロトコル 6
バージョン4、ihl 5、tos 0x08、len 52
、id 0、frag_off 0x4000、ttl 57、チェックサム 63923
TCP: スポーツ80、dport 21081、seq743112262、ack2033466734
予約0、オフセット8、ウィンドウ14600、チェックサム47633、
フラグ0x0012 は (SYN ACK)、緊急データ 0
TCP オプション:
00000000:02 04 05 b4 01 01 04 02 01 03 03 09     ... ....
フロー fastpath、セッション 371381
NAT セッション、ランアドレス/ポート変換
2015-09-01 13:21: 45.173-0400 デバッグ: pan_tcp_reass (pan_reass c:1999): reass: ワーク0x8000000418b5ab80 セッション = 371381 seqno = 743112262 tcplen = 0 l4plen = 0 s2c 状態 0
2015-09-01 13:21: 45.173-0400 デバッグ: pan_tcp_tcb_init_base (pan_reass c:612): SYN: s2c
2015-09-01 13:21: 45.173-0400 デバッグ: pan_tcp_parse_options_syn (pan_reass): tcp mss 1460
2015-09-01 13:21: c:539-0400 デバッグ: 45.173options_syn (pan_reass c:560): サック許可
2015-09-01 13:21: 45.173-0400 デバッグ: pan_tcp_parse_options_syn (pan_reass): tcp ウィンドウスケール 9
syn クッキー: c:553 (Init の状態): pan_reass: 1 c2s: c2s2033466734nxtseq: c2s2033466734 c2s: 勝利 14600 c2s: st 3 c2s: newsyn 0:: s2c: nxtseq743112263s2c: startseq 743112263 s2c: 勝利 5840 s2c: st 3 s2c: newsyn 0 ack2033466734nosyn 0
2015-09-01 13:21: 45.173-0400 デバッグ: pan_tcp_tcb_upd_state (pan_reass): tcp の状態 = 1 前 = 3
2015-09-01 13:21: 45.173-0400 デバッグ: pan_tcp_reass (pan_reass c:2484):
セッション = 371381 作業0x8000000418b5ab80 ペイロード len 0、tcp データ len 0、ret 0
転送ルックアップ、進入インターフェイス 28
L3 モード、仮想ルータ2
仮想ルーター2のルートルックアップ、ip 172.22.136.50
ルートが見つかりました、インターフェイス ethernet1/15、ゾーン8、nexthop 10.174.62.17 は、インターフェイス
10.174.62.17/15 arp エントリ上の IP ethernet1 の arp を解決する
インターフェイス上で見つかった 30
ポート上のパケットを送信する30              

 

c) ファイアウォールはまた、seq # 743112262 と ack # 2033466734 で、その後3回再送された SYN ack パケットを受信し、それらを送信します。
 

 

= = 2015-09-01 13:21: 46.169-0400 = =
fastpath 段階で受信したパケット
情報: len 66 ポート28インターフェイス 28 vsys 0
wqe インデックス222187パケット 0x0x80000004162018e6
パケットデコードダンプ:
L2: b4:14:89:85: 4e:43-> 00: 1b:17:00:04: 1c、タイプ0x0800
IP アドレス: 192.16.31.62-> 198.180.162.5、プロトコル 6
バージョン4、ihl 5、tos 0x08、len 52
、id 0、frag_off 0x4000、ttl 57、チェックサム 63923
TCP: スポーツ80、dport 21081、seq 743112262、ack 2033466734
予約0、オフセット8、ウィンドウ14600、チェックサム47633、
フラグ0x0012 は (SYN ACK)、緊急データ 0
TCP オプション:
00000000:02 04 05 b4 01 01 04 02 01 03 03 09   ... ....
フロー fastpath、セッション 371381
NAT セッション、ランアドレス/ポート変換
2015-09-01 13:21: 46.169-0400 デバッグ: pan_tcp_reass (pan_reass c:1999): reass: ワーク0x8000000418b1f500 セッション = 371381 seqno = 743112262 tcplen = 0 l4plen = 0 s2c 状態 1
2015-09-01 13:21: 46.169-0400 デバッグ: pan_tcp_tcb_init_base (pan_reass c:612): SYN: s2c
2015-09-01 13:21: 46.169-0400 デバッグ: pan_tcp_parse_options_syn (pan_reass): tcp mss 1460
2015-09-01 13:21: c:539-0400 デバッグ: 46.169options_syn (pan_reass c:560): サック許可
2015-09-01 13:21: 46.170-0400 デバッグ: pan_tcp_parse_options_syn (pan_reass): tcp ウィンドウスケール 9
syn クッキー: c:553 (新しい syn): pan_reass: 1c2s: c2s 2033466734nxtseq: c2s 2033466734c2s: 勝利 14600 c2s: st 3 c2s: newsyn 0:: s2c: nxtseq 743112263s2c: startseq 743112263 s2c: 勝利 5840 s2c: st 1 s2c: newsyn 0 ack 2033466734 nosyn 0
2015-09-01 13:21: 46.170-0400 デバッグ: pan_tcp_reass (pan_reass):
セッション = c:2484 の仕事0x8000000418b1f500 ペイロード len 0、tcp データ len 0、ret 0
転送ルックアップ、進入インタフェース 28
L3 モード、仮想ルータ 2
ルートルックアップ仮想ルータ2、IP 172.22.136.50
ルートが見つかりました、インターフェイス ethernet1/15、ゾーン8、nexthop 10.174.62.17インターフェイス
ethernet1 で IP 10.174.62.17 の arp を解決する/15
arp エントリは、インターフェイス上で見つかった 30
ポート上のパケットを送信 30
-------------------------------------------
= = 2015-09-01 13:21: 48.169-0400 = =
パケット受信fastpath ステージ
パケット情報: len 66 ポート28インターフェイス 28 vsys 0
wqe インデックス227536パケット 0x0x8000000416e7e8e6
パケットデコードダンプ:
L2: b4:14:89:85: 4e:43-> 00: 1b:17:00:04: 1c、タイプ 0x0800
IP: 192.16.31.62-> 198.180.162.5、プロトコル6
バージョン4、ihl 5、tos 0x08、len 52、
id 0、frag_off 0x4000、ttl 57、チェックサム 63923
TCP: スポーツ80、dport 21081、seq 743112262、ack 2033466734
予約0、オフセット8、ウィンドウ14600、チェックサム47633、
フラグ0x0012 は (SYN ack)、緊急データ0
TCP オプション:
00000000:02 04 05 b4 01 01 04 02 01 03 03 09             ... ....
フロー fastpath、セッション 371381
NAT セッション、ランアドレス/ポート変換
2015-09-01 13:21: 48.170-0400 デバッグ: pan_tcp_reass (pan_reass c:1999): reass: ワーク0x8000000418bc6780 セッション = 371381 seqno = 743112262 tcplen = 0 l4plen = 0 s2c 状態 1
2015-09-01 13:21: 48.170-0400 デバッグ: pan_tcp_tcb_init_base (pan_reass c:612): SYN: s2c
2015-09-01 13:21: 48.170-0400 デバッグ: pan_tcp_parse_options_syn (pan_reass): tcp mss 1460
2015-09-01 13:21: c:539-0400 デバッグ: 48.170options_syn (pan_reass c:560): サック許可
2015-09-01 13:21: 48.170-0400 デバッグ: pan_tcp_parse_options_syn (pan_reass): tcp ウィンドウスケール 9
syn クッキー: c:553 (新しい syn): pan_reass: 1c2s: c2s 2033466734nxtseq: c2s 2033466734c2s: 勝利 14600 c2s: st 3 c2s: newsyn 0:: s2c: nxtseq 743112263s2c: startseq 743112263 s2c: 勝利 5840 s2c: st 1 s2c: newsyn 0 ack 2033466734 nosyn 0
2015-09-01 13:21: 48.170-0400 デバッグ: pan_tcp_reass (pan_reass):
セッション = c:2484 の仕事0x8000000418bc6780 ペイロード len 0、tcp データ len 0、ret 0
転送ルックアップ、進入インタフェース 28
L3 モード、仮想ルータ 2
ルートルックアップ仮想ルータ2、IP 172.22.136.50
ルートが見つかりました、インターフェイス ethernet1/15、ゾーン8、nexthop 10.174.62.17インターフェイス
ethernet1/15 arp エントリ上の IP 10.174.62.17 の arp を解決する

ポート30のインターフェイス30送信
パケットで見つかりました------------------------------------------          

= = 2015-09-01 13:21: 48.170-0400 = =
fastpath 段階で受信したパケット
情報: len 66 ポート28インターフェイス 28 vsys 0
wqe インデックス226639パケット 0x0x8000000416a288e6
パケットデコードダンプ:
L2: b4:14:89:85: 4e:43-> 00: 1b:17:00:04: 1c、タイプ0x0800
IP アドレス: 192.16.31.62-> 198.180.162.5、プロトコル 6
バージョン4、ihl 5、tos 0x08、len 52
、id 0、frag_off 0x4000、ttl 57、チェックサム 63923
TCP: スポーツ80、dport 21081、seq 743112262、ack 2033466734
予約0、オフセット8、ウィンドウ14600、チェックサム47633、
フラグ0x0012 は (SYN ACK)、緊急データ 0
TCP オプション:
00000000:02 04 05 b4 01 01 04 02 01 03 03 09   ... ....
フロー fastpath、セッション 371381
NAT セッション、ランアドレス/ポート変換
2015-09-01 13:21: 48.170-0400 デバッグ: pan_tcp_reass (pan_reass c:1999): reass: ワーク0x8000000418baa700 セッション = 371381 seqno = 743112262 tcplen = 0 l4plen = 0 s2c 状態 1
2015-09-01 13:21: 48.170-0400 デバッグ: pan_tcp_tcb_init_base (pan_reass c:612): SYN: s2c
2015-09-01 13:21: 48.170-0400 デバッグ: pan_tcp_parse_options_syn (pan_reass): tcp mss 1460
2015-09-01 13:21: c:539-0400 デバッグ: 48.170options_syn (pan_reass c:560): サック許可
2015-09-01 13:21: 48.170-0400 デバッグ: pan_tcp_parse_options_syn (pan_reass): tcp ウィンドウスケール 9
syn クッキー: c:553 (新しい syn): pan_reass: 1c2s: c2s 2033466734nxtseq: c2s 2033466734c2s: 勝利 14600 c2s: st 3 c2s: newsyn 0:: s2c: nxtseq 743112263s2c: startseq 743112263 s2c: 勝利 5840 s2c: st 1 s2c: newsyn 0 ack 2033466734 nosyn 0
2015-09-01 13:21: 48.170-0400 デバッグ: pan_tcp_reass (pan_reass):
セッション = c:2484 の仕事0x8000000418baa700 ペイロード len 0、tcp データ len 0、ret 0
転送ルックアップ、進入インタフェース 28
L3 モード、仮想ルータ 2
ルートルックアップ仮想ルータ2、IP 172.22.136.50
ルートが見つかりました、インターフェイス ethernet1/15、ゾーン8、nexthop 10.174.62.17インターフェイス
ethernet1/15 arp エントリ上の IP 10.174.62.17 の arp を解決する

ポート30のインターフェイス30の送信パケットで見つかりました          

 

 

d) ファイアウォールは、変更された seq # 883668401 を使用してサーバーから ACKs の次のセットを受信すると、パケットを削除します。  これは、ファイアウォールが10秒の TCP ハンドシェイクタイムアウト (SYN-ack を受信し、セッションを完全に確立するための後続の ack の間の最大時間) を待機している間に、サーバーから次に期待されている seq # を追跡しているため、予期される動作です。743112263のように並べられますが、seq # 883668401 のパケットを受け取りました。 seq # でこの不一致が発生すると、ファイアウォールによってパケットが削除されます。同様に、seq # 883668401 を持つ後続のパケットはすべてパンによって削除されます。

 

= = 2015-09-01 13:21: 54.169-0400 = =
fastpath 段階で受信したパケット
情報: len 66 ポート28インターフェイス 28 vsys 0
wqe インデックス222256パケット 0x0x80000004165330e6
パケットデコードダンプ:
L2: b4:14:89:85: 4e:43-> 00: 1b:17:00:04: 1c、タイプ0x0800
IP アドレス: 192.16.31.62-> 198.180.162.5、プロトコル 6
バージョン4、ihl 5、tos 0x08、len 52
、id 0、frag_off 0x4000、ttl 57、チェックサム 63923
TCP: スポーツ80、dport 21081、seq 883668401、ack 2033466734
予約0、オフセット8、ウィンドウ14600、チェックサム64069、
フラグ0x0012 は (SYN ACK)、緊急データ 0
TCP オプション:
00000000:02 04 05 b4 01 01 04 02 01 03 03 09   ... ....
フロー fastpath、セッション 371381
NAT セッション、ランアドレス/ポート変換
2015-09-01 13:21: 54.169-0400 デバッグ: pan_tcp_reass (pan_reass c:1999): reass: ワーク0x8000000418b21780 セッション = 371381 seqno = 883668401 tcplen = 0 l4plen = 0 s2c 状態 1
2015-09-01 13:21: 54.169-0400 デバッグ: pan_tcp_reass (pan_reass c:2074): reass: セッション = 371381seqno = 883668401rcv_nxt = 743112263新しい接続
2015-09-01 13:21: 54.169-0400 デバッグ: pan_tcp_reass (pan_reass):SYN_ACK のシーケンス番号が一致しません (現在の + 1 883668402 vs start_seq 743112263)ドロップ
2015-09-01 13:21: 54.169-0400 デバッグ: pan_tcp_reass (pan_reass):
セッション = c:2484 ワーク371381ペイロード len 0、tcp データ len 0、ret 2 TCP の再構築に
失敗
しました: ret 2              

 

 



Actions
  • Print
  • Copy Link

    https://knowledgebase.paloaltonetworks.com/KCSArticleDetail?id=kA10g000000ClWQCA0&lang=ja&refURL=http%3A%2F%2Fknowledgebase.paloaltonetworks.com%2FKCSArticleDetail

Choose Language