arashi1977さんの助け合いフォーラム投稿一覧

助け合いフォーラムの投稿
2022/07/19 返信
データプレーン、コントロールプレーンについて

こちらの分野に関する質問なのですが、各プレーンの役割については、
理解する際にはどのように覚えたらよろしいでしょうか?

ざっくり言います。

  • コントロールプレーンは「学習する」機能と思ったらいいです。例えば、スタティックルーティングを設定してルータに覚えさせたり、受信したポートに紐づくMACアドレスを覚えるのもコントロールプレーンの話です。状況に応じて、受信したパケットやフレームを解析したりする必要があるので、基本的にCPUで処理されます。
  • データプレーンは「学習内容に基づいて迅速にさばく」機能と思ったらいいです。いちいちCPUに「割り込み(今やってる処理を中断して別のことをさせる)」してるとCPU自体の負荷が高まり、学習機能に影響を及ぼすので、学習した内容は機械的に処理するようにがんばってます(これが各ベンダーの売りになる点)。例えば、MACアドレステーブルやルーティングテーブルを見なくても「この宛先MACアドレス(IPアドレス)はこのポートから出力する。必要なら送信もとMACアドレスなどを書き換える」「この送信もとIPアドレスは破棄することになってるので出力しない」と言う処理をやります。
  • 簡単な判断基準は「それがパケット(フレーム)の転送に直接関わるか」です。例えばルーティングテーブルの更新処理は「学習」であること、「ルーティングテーブルが転送処理をするわけではない」ことから、コントロールプレーンの処理と言えます。また、802.1Qヘッダは「トランクポートへの出力時に実行する」処理なので、直接転送に関わるのでデータプレーンの処理と言えます。

ちなみに人間の例で言うと

  1. 手で触れたものがとても熱い
  2. 手が触れたままだと火傷する(経験的知識、学習ずみ)ことを思い出す
  3. 熱いので手を離す

って時に、2をなくすことで高速に処理できるようになっています。「反射」ってやつですね。

あとCCNPの範囲だと思いますが、NSF(Non Stop Forwarding)っていうデータプレーンとコントロールプレーンを切り離して処理する機能がありまして。これも人間で言うと「脳死してても心臓は動いてる」みたいな感じで、コントロールプレーンを担当するCPU関連に異常があっても、データプレーンを担当するラインカード(各種通信ケーブルが繋がってるボード)が以前コントロールプレーンの情報をもとに作成した転送処理パターンに基づいて、転送処理を継続するって動きをするものです。新しく学習はできないけど「こうする」って知ってる通りに動くって話ですね。

2022/07/19 返信
正解が間違っています

ちょっと確認したいのですが。

質問タイトルが「正解が間違っています」となっていますが、「正解は以下が正しいと考えます」と提示されているのは 正答とされているもののより厳密な記述 となっています。
そこからすると、「正答が間違っている」のではなく「正答選択肢の記述では失敗する場合がある」と言いたいのでしょうか?
言い方を変えると「問題ID:3344の選択肢の中には正解がないと言いたいのか違うのか」がよくわからないです。

選択形式の問題の解答としては「提示された選択肢の中から適切なものを選ぶ」のも試験対策としては必須のスキルですし、正答とされている選択肢で意図的に手を加えず問題の意図通りに実行できるのであれば、それは特に問題ないのではないかと思います。もちろん、実行する環境次第ではおっしゃっているシェル展開で失敗する場合もありますが、それは問題ID:3447などで学習してますし、この問題で再学習するほどのことではないのではと思っています。

例えば逆に、選択肢に以下の二つ

  • zypper install "emacs*"
  • zypper install emacs*

があったとして、「実行時のディレクトリにファイル名がemacsで始まるファイルがあるかどうか」と言う言及がなかったらどっちも正解ってなりません?厳密なやり方を知っているのは素晴らしいと思うのですが、選択肢の中に「問題の意図通りの結果が得られるコマンド」があるのであればそれは別に不適切ではないと思いますよ。

2022/07/07 コメント
選択肢の具体例
「psqlコマンドでデータベースにログインした後に、SQLを記載したファイルを実行する 例」で検索したら一番最初に「psql - -- - PostgreSQL」がヒットして、その中に「-f」や「\i」についての言及もありますね。 > もし可能でしたら、検索ワードのチョイスについてもアドバイスをいただけると有難いです。 基本的な話ですが、「検索ワード」とおっしゃっているように「ワード(単語)」が重要ですね。なのに「選択肢の文と”例”を入力して検索」ということは「ワード」ではなく「センテンス」を入力しているので目的のものに到達しづらいのだと思います。 Googleで「google 検索 テクニック」とかで検索すると色々出てきますよ。
2022/07/07 返信
副作用のある正解

そこで,正解としてはsedなどを使った以下のようなコマンドのほうが適切と考えます.

うーん、まぁそうかもしれませんがそれって選択肢の中にありませんよね?
trコマンドの学習のための問題に対して「tr以外の方法が適切」みたいな言及はちょっと違うかなーと思いました。

2022/07/06 返信
選択肢の具体例

なお、参考URL一読やネット検索をトライしましたが、該当例を見つけられませんでした。

どう言う検索ワード使いました?
私検索したら一発目の1番上にそれらしいの出てきましたが。
https://qiita.com/Takashi_Nishimura/items/da5551e6a4cb4b64f055

2022/06/27 コメント
インデックスのコマンド
トリガーの言及漏らしてましたが、どちらも同じことだと理解してます。
2022/06/27 返信
インデックスのコマンド

作成時は「どのテーブルに紐づくインデックスか」を指定する必要があるのに対して、削除、変更時は「どのインデックスに対しての操作か」と言う指定になるので、紐づくテーブルの情報は不要ってだけだと思いますよ。
関連するテーブルが異なる同名のインデックスが作れるなら話は違いますが。

2022/06/25 返信
Pruning VLAN enabled は考慮しないのでしょうか

https://www.cisco.com/c/ja_jp/td/docs/switches/lan/catalyst1000/software/releases/15_2_7_e/command_reference/b_1527e_1000_cr/interface_and_hardware_commands.html#wp3785065436 をみると、この出力は「プルーニングに適格な VLAN を一覧表示します。」とあるので、「Pruning対象となるVLAN」のはずです。
vtp pruning が有効になっている環境であれば、 VLAN :2-1001 がプルーニングの対象となる(拡張VLANは対象外)」ということを意味しているだけかと思いますよ。

2022/06/25 返信
kvm コマンドについて

kvm コマンドは、Debian系のものなのに、centos.img とRedHat系のものが使われているのが
矛盾しているような気がします。

特に矛盾しないんですね。
kvmコマンドは「KVMを操作する」コマンドなので、Debian そのもの ではないです。
そして、centos.imgは「仮想マシンのイメージファイル」なので、ホストOS(ハイパーバイザ)が何であるかは関係ありません。

別の話で言えば、「Windows上のVMware PlayerでUbuntuが動く!?VMware PlayerはWindowsのアプリなのに、実行させる仮想マシンがLinuxなのは矛盾しているのでは?」という話と同じことです。

2022/06/22 返信
問題文から -cdrom から ide1-cd0 が読み取れない

解説の

次に、QEMUモニタで参照したときのブロックデバイスの表記と、qemu-kvmコマンドのオプションとの対応を以下に示します:

の対応からは -cdrom がセットされた場合のブロックデバイスは

 ide1-hd0/ide1-cd0 : -hdc, -drive index=2,-cdrom

とあるので、 ide1-cd0 だと導けるのだと思いますよ。

2022/06/21 返信
current_user()

これらは「* FROM」「;」の有無が異なるのですが、
意味は同じと考えてよろしいでしょうか。

そうですね、公式ドキュメントからもそう読めます。
https://www.postgresql.jp/document/13/html/sql-select.html

FROM句
(略)
function_name
FROM句では、関数呼び出しを使用することができます (これは特に関数が結果セットを返す場合に有用ですが、任意の関数を使用することもできます)。 SELECTコマンドの実行中は、この関数の結果は一時テーブルであるかのように動作します。 関数呼び出しにWITH ORDINALITY句を追加した時は、すべての関数の出力列の後に各行の番号の列が追加されます。

それと最下部あたりの「FROM内の関数呼び出し」とかですかね。

実際に実行しても、結果としては同じになります。

% kubectl run postgres --image=postgres --env=POSTGRES_PASSWORD=postgres --env=POSTGRES_USER=postgres
pod/postgres created
% kubectl exec postgres -it -- psql -U postgres
psql (14.3 (Debian 14.3-1.pgdg110+1))
Type "help" for help.

postgres=# select * from current_user;
 current_user
--------------
 postgres
(1 row)

postgres=# select current_user;
 current_user
--------------
 postgres
(1 row)
2022/06/20 返信
デフォルト設定について

さて、問題ID:12180そのものに関する質問ではないのでどうコメントするか悩ましいところですが。

とりあえずやってみたらいいんじゃないですか?

CREATE DOMAIN original_type AS integer DEFAULT 10
CREATE TABLE test(id original_type DEFAULT 5 ....

手元にdockerイメージでPostgreSQL環境作って投げてみましたけど、gzx01277さんのSQLはそのまま通ったっぽいですよ。
(dockerじゃなくkubernetesでやってるのでコマンドラインとかちょっと違いますけど本質はそこではないので)

% kubectl run postgres --image=postgres --env=POSTGRES_PASSWORD=postgres --env=POSTGRES_USER=postgres
pod/postgres created
% kubectl exec postgres -it -- psql -U postgres
psql (14.3 (Debian 14.3-1.pgdg110+1))
Type "help" for help.

postgres=# CREATE DOMAIN original_type AS integer DEFAULT 10;
CREATE DOMAIN
postgres=# create table test (id original_type DEFAULT 5);
CREATE TABLE
postgres=# \dt
        List of relations
 Schema | Name | Type  |  Owner
--------+------+-------+----------
 public | test | table | postgres
(1 row)

postgres=# \d test
                   Table "public.test"
 Column |     Type      | Collation | Nullable | Default
--------+---------------+-----------+----------+---------
 id     | original_type |           |          | 5

postgres=# \dD
                              List of domains
 Schema |     Name      |  Type   | Collation | Nullable | Default | Check
--------+---------------+---------+-----------+----------+---------+-------
 public | original_type | integer |           |          | 10      |
(1 row)

postgres=#

もし併用が可能ならば、デフォルト設定のルール(例:ドメイン作成の方が優先、
最新の設定や変更で上書き)を教えてください。

そう言った話は、公式ドキュメントをもとに調べてみたりネットで検証してる人の記事なりを探してみてはどうでしょうか?
もしくはご自身で検証して、その情報を公開されると同様の疑問を持つ方への良い貢献になると思いますよ!

2022/06/19 コメント
AAAの認証方法について
もう一つ。 「問題内容のlocalはlineではないのでしょうか。」について、それがなぜ必要と思ったのか、そうでなければこの設問と選択肢の組み合わせにおいて正答が選択できないのかどうか、というところをもう一度解説と照らし合わせてみると良いですよ。
2022/06/19 コメント
AAAの認証方法について
> 設問は動作についてなのでローカルデータベースでの認証をするということで、ローカルデータベースにIDパスワードの設定がある前提ということでしょうか? その前提がそもそも不要なのです。 この問題では「上記設定を行ったスイッチにtelnet接続する際の動作について正しい記述はどれか。」が問われていますが、「この設定で認証しログインできるか」が問われているわけではありません。それ言ったらradiusの設定完全に完了しているのか、ログイン試行に使ったユーザー/パスワードの組みがRADIUSサーバに登録されているのか、RADIUSサーバへの到達性は間違いなくあるのか、なども含めて考慮しなければそれこそ「…という前提」というものが作為的に「line」の部分だけに向けられているように感じます。 あくまで、 aaa authentication login では「認証”方法”」についての設定がされているのだと理解するのが良いのではないかと思います。その上で、「この設定で認証できるようにするには何が必要か」というところに段階を踏んで進めるのが良いかと思います。
2022/06/19 返信
AAAの認証方法について

問題内容のlocalはlineではないのでしょうか。
逆質問になってしまうのですが、なぜlineだと思ったのでしょうか?

もし違っていたら、理由を教えてほしいです。
設問の通りであれば、「ローカルデータベースによる認証を行う」に該当するのが local メソッドなので、これがないと正答選択肢の通りにならない、ということかと思います。

2022/06/15 コメント
RAは192.168.0.1/24の経路を把握している?
> ただし、設問でtracerouteがループする理由は分かりませんでした。 私の手元で似たような環境作ってみました。その上で、RDのEIGRPトポロジテーブルでどう見えているかをみてみるとこうなってます。 ``` RD#show ip eigrp topology 192.168.1.0/24 EIGRP-IPv4 VR(EIGRP) Topology Entry for AS(1)/ID(172.16.12.4) for 192.168.1.0/24 State is Passive, Query origin flag is 1, 1 Successor(s), FD is 1966080, RIB is 15360 Descriptor Blocks: 172.16.12.3 (GigabitEthernet0/1), from 172.16.12.3, Send flag is 0x0 Composite metric is (1966080/1310720), route is External Vector metric: Minimum bandwidth is 1000000 Kbit Total delay is 20000000 picoseconds Reliability is 255/255 Load is 1/255 Minimum MTU is 1500 Hop count is 1 Originating router is 172.16.12.3 External data: AS number of route is 1 External protocol is OSPF, external metric is 20 Administrator tag is 0 (0x00000000) 172.16.31.5 (GigabitEthernet0/2), from 172.16.31.5, Send flag is 0x0 Composite metric is (2621440/1966080), route is External Vector metric: Minimum bandwidth is 1000000 Kbit Total delay is 30000000 picoseconds Reliability is 255/255 Load is 1/255 Minimum MTU is 1500 Hop count is 2 Originating router is 192.168.1.6 External data: AS number of route is 0 External protocol is RIP, external metric is 0 Administrator tag is 0 (0x00000000) ``` kishidan0227さんの想定通り、RCは1966080、RDは2621440のメトリックになっているため、RCが有効な経路としてルーティングテーブルに乗るんですね。 ``` RD#show ip route 192.168.1.0 Routing entry for 192.168.1.0/24 Known via "eigrp 1", distance 170, metric 15360, type external Redistributing via eigrp 1 Last update from 172.16.12.3 on GigabitEthernet0/1, 00:03:45 ago Routing Descriptor Blocks: * 172.16.12.3, from 172.16.12.3, 00:03:45 ago, via GigabitEthernet0/1 Route metric is 15360, traffic share count is 1 Total delay is 20 microseconds, minimum bandwidth is 1000000 Kbit Reliability 255/255, minimum MTU 1500 bytes Loading 1/255, Hops 1 ```
2022/06/15 返信
正解が2つ記載されており、片方のみ正解扱いになっている

どの2つが正解だとおっしゃってるのか明示していただけますか?

2022/06/13 コメント
tcpdumpコマンドのオプションの選択肢において、dstが正解扱いになっているのが納得できない
> 正当例を見れば明らかなように、tcpdumpコマンドのdst設定時の挙動は「ホスト10.0.2.101に対してpingを打ち続けている時のパケットを監視」になります。 ごめんなさい、「正答例」ってどれのことを指していますか?もし解説にある「以下はホスト10.0.2.101上でパケット監視した実行例です。」のことを言っているなら、これはecho replyがキャプチャできているので10.0.2.101が打ったping(echo request)に対する返事(echo reply)です。つまり、「ホスト10.0.2.101に対してのping」ではなく「ホスト10.0.2.101から他ホストに打ったpingに対する応答(10.0.2.101に返す=宛先が10.0.2.101となるパケット)」ですよ。 > 既に述べていますが、「ホスト10.0.2.101と他ホストの間でpingを打ち続けている時のパケットを監視したい」という表現であれば こちらについてですが、問題文(以下に再度引用)との違いが「に対して→の間で」という点が重要だというお話に聞こえるのですが、そうすると「誰がどこに打っているのか」が曖昧になるのであまり好ましくないんじゃないかなぁと思います。 ``` 問題文: ホスト10.0.2.101から他ホストに対してpingを打ち続けている時のパケットを監視したい。tcpdumpコマンドの下線部に入れられるキーワードはどれか。(3つ選択) ``` 何ていうか、pingがUDP(片方向)であれば別にsakagihogeさんの主張でも納得するのですが、「発信→応答」という組み合わせのある通信について「応答が対象になるというのは論点ではない」と言われても、逆に何を議論のポイントとされているのかがうまく読み取れませんでした。
2022/06/12 コメント
RAは192.168.0.1/24の経路を把握している?
> RB/RCにフィルタをかけ、再配送されなくなった場合でも、適切にルーティングされるであってますでしょうか。 はい、解説の正答提示直前にあるtracerouteの結果からそのように読み取れます。 CML2などを使って実機検証してみると実際にどう見えるかわかって面白いですよ!
2022/06/12 返信
ネイティブVLANの不一致

実機確認はしてませんが、動きとしてはこうなるはずです。

  • PC1→PC4:SwitchAはFa0/1で受け取ったフレームをVLAN10と理解し、Fa0/24から「VLAN10のタグ付き」でフレームを送出。SwitchBは「VLAN10のタグ」を元にFa0/1へフレームを転送
  • PC4→PC1:SwitchBはFa0/1で受け取ったフレームをVLAN10と理解し、Fa0/24から「タグなし」でフレームを送出。SwitchAは「タグなしフレーム」なので、native VLAN設定に基づきVLAN20に属するFa0/2へフレームを転送

参考の以下の部分が関連するかなと思います。

IEEE 802.1Qでは通常、フレームにタグを付けて送信しますがネイティブVLANにはタグを付けません。そのため、受信したフレームにタグが付いていない場合はネイティブVLANと判断できます。

2022/06/12 返信
問題表示がおかしい

ネットワーク接続が怪しかったとかないですかね?キャッシュのクリアとかやってもう一度開き直したらまともに表示されるとかないですか?

2022/06/12 返信
RAは192.168.0.1/24の経路を把握している?

この場合 192.168.0.1/24 への経路を RA は把握しているのでしょうか。

設問の出力だけで言えば、把握していると言えますね。というのもRAでtracerouteを打った結果、経路を把握していない場合は以下のような出力になるからです。

RA#traceroute 192.168.1.6
Type escape sequence to abort.
Tracing the route to 192.168.1.6
VRF info: (vrf in name/id, vrf out name/id)
  1  *  *  *
  2  *  *  *

こうではなく、172.16.1.2→172.16.11.4→172.16.11.3…と回っていることから、RAは192.168.1.6へのネクストホップを172.16.1.2であると学習していると言えます。この辺りはCCNAのレベルでも学習するはずなので、ルーティングなどについて復習されると良いかなと思います。

2022/06/09 返信
tcpdumpコマンドのオプションの選択肢において、dstが正解扱いになっているのが納得できない

問題文、解答は下記の通りだが、問題文に10.0.2.101”から”とあるにもかかわらず、dstが正解扱いになっているのは誤りだと感じた。

誤りだと「感じた」のは主観のお話なので実際は解説の実行例の通り正解は変わらないのですが、最終的には日本語難しい的なお話なのかなと思いました。

問題文は

ホスト10.0.2.101から他ホストに対してpingを打ち続けている時のパケットを監視したい。tcpdumpコマンドの下線部に入れられるキーワードはどれか。(3つ選択)

となっています。で、sakagihogeさんの認識は

echo応答が返るといっても、パケットの向きは他ホストからホスト10.0.2.101になるので、「ホスト10.0.2.101から他ホストに対して」という表現と逆になってしまうと考えます。

です。ですがこれは切り取る場所が不自然かなと思います。
設問は【「ホスト10.0.2.101から他ホストに対してpingを打ち続けている」時の「パケットを監視」したい】のであって、【「ホスト10.0.2.101から他ホストに対して(片方向)」の「パケットを監視」する】とはなっていないですよね?

そうするとここでは「pingを打ち続けている時のパケット」を監視するのですから、pingの通信(通信というのは不自然な気がしますが)を構成する「送信元から宛先へのecho request」と「宛先から送信元へのecho reply(もしくは途中のホストから送信元へのDestination Unreachable/Time Exceededメッセージなど)」を対象にするのは問題ないと言えると思いますが、どうでしょうか?

2022/05/21 返信
【誤記?】解説を読んでも回答通りの答えになりませんでした。

解説に、「(department_id = 3 OR salary > 400000)」の部分が先に評価され
とあるので、department_idが3であるD,Eもしくはsalaryが400000より大きいA,D,Eが回答の選択肢に入ると私は考えます

まず解説の2行目をみてみます。

AND演算子とOR演算子ではAND演算子のほうが先に評価されますが、()括弧がある場合は、括弧内の演算子を優先して評価します。

これからすると、「かっこ→AND→OR」の順に評価されると読めます。その前提で解説の最後の文を再確認しましょう。

設問では「(department_id = 3 OR salary > 400000)」の部分が先に評価され、次にANDですので、「DEPARTMENT_ID列が3かSALARY列が400000より大きく、かつ COMMISSION列が1200000以下である」列(E)、または、「HIREDATE列が2008年4月1日より大きい(新しい)」列(B,C)が検索されます。

カッコだけの評価ならsushitaroさんの言われる通りかもしれませんが、その次にあるANDが抜けているのでずれているんですよね。
順番としては「(department_idとsalaryの条件) かつ commissionの条件」というひとまとまりがあり、次にORで繋がった「hiredateの条件」がくるのですよね。

算数的に考えると

(A + B) x C + D

で「A + B」だけで終わりにして、Cをかけるのを後回しにして C + D をやろうとしてる感覚です。

sqlite3で実験してみましたが、条件をいじるとこんな感じで結果が変わってきます。

sqlite> SELECT *
   ...> FROM employees
   ...> WHERE (department_id = 3
   ...>  OR salary > 400000) ;
5|500000|2000000|01-10-01 ←A
3|500000|2000000|01-10-01 ←D
3|400000|1200000|02-12-01 ←E
sqlite> SELECT department_id, salary, commission, hiredate
   ...> FROM employees
   ...> WHERE (department_id = 3
   ...>  OR salary > 400000)
   ...>  AND commission <= 1200000;
3|400000|1200000|02-12-01 ←Eだけになっているので、ANDが効いていることがわかる
sqlite> SELECT *
   ...> FROM employees
   ...> WHERE (department_id = 3
   ...>  OR salary > 400000)
   ...>  AND commission <= 1200000
   ...>  OR hiredate > '08-04-01';
1|350000|800000|11-04-01 ←B
4|200000|800000|10-04-01 ←C
3|400000|1200000|02-12-01
↑ hiredateの条件でヒットしたB, Cが抽出されている
2022/04/24 返信
教えて下さい。

もしかして https://mondai.ping-t.com/g/posts/14 と同じでしょうか?

戻る