R. 1 ネットワークスペシャリスト試験 午後1問題"自分用"メモ
問1
VRRP
ルータを冗長化させる技術。通常時はマスタールータのみがパケットの転送を行う。VRRPアドバタイズメントによって互いの状態を監視する。プライオリティ値の大きいルータがマスタールータとなる。
SNMP
UDPを使う。
SNMPポーリング
SNMPマネージャからSNMPエージェントに向けて送られるパケット。このパケットでエージェントの状態を送るように要求する。
SNMPトラップ
エージェントからマネージャに対してエージェントの状態を通知するために送られるパケット。
LACP
あとでかく
問2
各種ポート番号
SMTP (Simple Mail Transfer Protocol) : 25
POP3 (Post Office Protocol version 3) : 110
問3
DHCPサーバー
新たにネットワークに接続された端末に対してIPアドレスを割り振ったり、DNSサーバーのIPアドレスを教えたりする。
端末はサーバーに対してブロードキャストでDHCP発見パケットを送る。そのため、DHCPサーバーがネットワーク外にある場合はパケットが届かない。そういう場合はネットワーク内のDHCPリレーエージェントが代理でDHCPサーバーに対してユニキャストで要求を送る。
DHCPサーバーは特定の範囲(アドレスプール)からIPアドレスを選んで要求元に割り振るか、要求元のmacアドレスに対応したIPアドレスを割り振る。
DHCPスヌーピング
DHCPサーバーからIPアドレスを取得したクライアントのみが通信できる仕組み。
trusutedポートとuntrustedポートを設定する。trustedポートは無条件に通信が許されるポートで、DHCPサーバーなどが接続される。untrustedポートはDHCPサーバーへの通信のみが許される。このポートに接続された端末が、DHCPサーバからIPアドレスが付与されたのを確認されると、DHCPサーバー以外との通信が可能になる。
R. 3 ネットワークスペシャリスト試験 午後1問題"自分用"メモ
問1
DHCPサーバ
REST API
RESTの原則に従って作られたAPI。HTTPプロトコルによってネットワーク機器と接続し、設定の取得や変更が行える。
traceroute
目的地までに経由するL3ネットワーク機器を列挙するコマンド。
LLDP
レイヤ2の技術。隣接する機器に自分の情報を送ったり、情報を取得したりできる。
問2
VPC
仮想ネットワーク。プライベートIPアドレスを割り当てることができる。
バックボーンエリア
OSPFのエリア番号0のエリア。必ず存在しなければいけない。バックボーンエリアから受け取った経路情報は他のエリアに広告されない(ループ回避のため)。
経路集約
いくつかのネットワークへの経路を、IPアドレスを大きく取ることでまとめて広告すること。ABR(エリア境界ルータ)しかできない。
再配布
OSPFでは、静的経路など異なるルーティングプロトコルの経路情報は伝搬されない。OSPFで広告したければ、再配布を行う必要がある。
問3
CS-ACELP
音声の符号化の方法。携帯電話で利用される。伝送レート8 kbps。
ジッタ
パケットの到着時間のゆらぎ。バッファで到着時間のゆらぎを吸収して音質をあげる。
ToSフィールドとDSフィールド
ToSフィールドを再定義したのがDSフィールド。DSフィールドの上位6ビットがDSCP、下位2ビットがECN。
参考文献
『ネスペR3 - 本物のネットワークスペシャリストになるための最も詳しい過去問解説 情報処理技術者試験』左門 至峰、平田 賀一共著、技術評論社
自分用メモ:優先度の話がややこしい
自分用のメモです。随時書き足す
背景
最近ネットワークスペシャリストの勉強に明け暮れているが、そこで少しややこしいと思ったことがあった。
それは、プロトコルによって、プライオリティ値が大きいものが優先ものもあれば、プライオリティ値が小さいものが優先されるものもあると言うこと。
というわけで、いかにも試験勉強という感じで嫌だが、それらについて随時簡単にまとめておこうと思う。
プライオリティ値が大きいものが優先
StackWise テクノロジー
最も高いプライオリティ値を持つスイッチがマスタになる。
OSPF
最も大きなプライオリティ値を持つルータが代表ルータになる。
プライオリティ値が小さいものが優先
STP
最も小さいブリッジプライオリティを持つスイッチがルートブリッジになる。
検索時のサジェスト機能を実装する
HTMLのinput要素の機能を利用する
input要素のlist属性に、入力候補を列記したdatalistのidを指定する。autocomplete属性を"off"にしておくと、入力履歴がサジェストされなくなる。
コード例
<input type="text" autocomplete="on" list="sns"> <datalist id="sns"> <option value="Twitter"></option> <option value="Instagram"></option> <option value="Facebook"></option> </datalist>
実装
次のようにdatalistに投稿タイトルをすべて格納する。
search_index.html.erb
<h1>検索</h1> <%= form_tag("/search/result", data: { turbo: false}) do %> <input type="text" name="word" autocomplete="off" list="post_titles"> <datalist id="post_titles"> <% @posts.each do |post| %> <option value="<%= post.title %>"></option> <% logger.debug(post.title) %> <% end %> </datalist> <input type="submit" value="検索"> <% end %>
search_controller.rb
class SearchController < ApplicationController def search_index @posts = Post.all end def result @posts = Post.where('title like ?', "%#{params[:word]}%") .or(Post.where('content like ?', "%#{params[:word]}%")) .order(created_at: :desc) end end
問題点
検索ページを開いたタイミングで、投稿データをすべてdatalistに入れるので、データ数が多くなると処理が重くなる。
Readmeを書く
改行コードを<br>タグに変換して表示する
背景
今までtextareaで受け取った文字列をそのままhtmlに埋め込んで表示していた。これだと改行が反映されないので困っていた。解決策
文字列の置換
gsub関数
コントローラで文字列を置換することにした。Rubyでは、文字列の置換をgsub関数で行う。改行コードの一括置換は次のように行う。test.gsub(/\R/, "<br>")
ここで \R は改行コードを表すメタ文字。このようにして改行コードを一括で<br>タグに変換した。
参考文献
文字列中の改行コードを統一する - QiitaHTMLタグのエスケープの回避
このままでは、<br>タグがエスケープされる。html_safe
text.html_safe
こうすると、タグのエスケープが行われなくなる。ただし、<script>グもそのままになるので、XSSが怖い(他にもいろいろあるかも)
参考文献
HTML特殊文字のエスケープ - Ruby on Rails入門sanitize
erbファイルで次のように記述する。sanitize(text, tags: %w(br))
こうすると、<br>タグのみエスケープされなくなる。これで安心。
参考文献
sanitize | Railsドキュメント成果物の一部(自分用メモ)
詳細はGitHubshow.html.erb(sanitizeの使用例)
<div data-controller="show"> <ul data-action="show#content"> <% @post.errors.full_messages.each do |message| %> <li> <%= message %> </li> <% end %> </ul> <h2><%= @post.title %></h2> <h3><%= @post.created_at %></h3> <p><%= link_to("編集", "/posts/#{@post.id}/edit") %></p> <p data-action="click->show#confirm"><%= link_to("削除", "/posts/#{@post.id}/destroy", data: {confirm: "a", turbo_method: :post}) %></p> <p><%= sanitize(@content, tags: %w(br)) %></p> <p><%= link_to("記事一覧へ", "/posts/index") %> </div>
post_controller.rbの一部(gsubの使用例)
def show @post = Post.find_by(id:params[:id]) @content = @post.content @content = @content.gsub(/\R/,"<br>") end
JavaScript で削除確認ボタンを作った
昨日詰んだって書いてたけど、なんとかできた。結論から言うと、event.preventDefault()を呼ぶことで、リンクをたどるのをキャンセルできる。
解決策に気づいた経緯
Stimulus Referenceを見ていたらドンピシャリな記述が見つかった。
こんな記述です。
Cancels the event’s default behavior (e.g. following a link or submitting a form)
JavaScript に無知すぎて、全く知りませんでした。昨日までは、確認ボタンの返り値で遷移先のページを分けようとしていたんですが、そうするとどちらの分岐でも削除機能を呼ぶリンクをたどってしまって困っていました。
コード
show.html.erb
<div data-controller="show"> <ul> <% @post.errors.full_messages.each do |message| %> <li> <%= message %> </li> <% end %> </ul> <h2><%= @post.title %></h2> <h3><%= @post.created_at %></h3> <p><%= link_to("編集", "/posts/#{@post.id}/edit") %></p> <p data-action="click->show#confirm"><%= link_to("削除", "/posts/#{@post.id}/destroy", data: {confirm: "a", turbo_method: :post}) %></p> <p><%= @post.content %></p> <p><%= link_to("記事一覧へ", "/posts/index") %> </div>
show_controller.js
import { Controller } from "@hotwired/stimulus" export default class extends Controller { confirm() { var flag = window.confirm("本当に削除しますか?"); if (!flag){ event.preventDefault(); } } }
- リンクが押される
- JavaScript のconfirm 関数(自作)が呼ばれる
- 確認ボタンが表示される
- 「はい」が押されたら削除機能を呼ぶリンクをたどる。「いいえ」が押されたらリンクをたどるのをキャンセルする
参考にしたサイト
JavaScript の event.preventDefault() のことが解説してあったので読みました。