技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

webauthn

IPA のシステムアーキテクトの勉強をしていたら、webauthn が何度か出てきた。重要項目と思われるので、ネットの記事を見てちょっと勉強した。 webauthn とは、例えば、PC から web サイトにログインする際、事前にサイトに登録済みのスマートフォン等を認証…

xargs コマンドの便利な使い方

最近、以下の本に掲載されている問題を解いている。 1日1問、半年以内に習得 シェル・ワンライナー160本ノック:書籍案内|技術評論社 その中で、xargs コマンドの便利な使い方を知ったので、防備のためここに書いておく。 例:git ls-files | grep -e 'img/…

git の commit, branch, HEAD

git

この3つの関係は、まず commit オブジェクトがあって、それを指す branch があって、さらにその branch を指す HEAD があるというものになっている。つまり、こんな感じ。 commit オブジェクト ← branch ← HEAD HEAD は、現在地、すなわち現在の working di…

xargs コマンド

これまで、 find . -name '*.txt' | xargs grep xxx とかで何気なく使っていた xargs だが、xargs が必要な場合とそうでない場合が自分の中で明確になっていなかったので、ここで簡単にまとめる。 xargs は、受け取った「標準入力」を「引数」に変える働きを…

ONUを入れ替える時

先日、自宅の ONU を入れ替える機会があったのだが、その後、インターネットに接続できなくなるという現象が発生したので、今後のため、ここに書いておく。 ちなみに、自宅のインターネット構成は、ONU に無線ルーターを接続して、その無線ルーターに各種 PC…

golang の map の使い方

golang で map を使って leetCode の典型的な問題を解いたので、今後の参考のために、書いたコードをここに残しておく。 重要そうなところは、ソース中のコメントに記載した。 type MagicDictionary struct { lengthToWords map[int][]string } func Constru…

Javaの2次元配列のソート

簡単なやり方がすぐに見つからなかったので、ここにメモしておく。 以下のようにすると、1つ目の要素でソートできる。 int[][] matrix = new int[][]{{10,5},{3,4},{9,2}}; Arrays.sort(matrix, (a, b) -> a[0] - b[0]); 結果は、[3, 4] -> [9, 2] -> [10, …

Union-Find 木

leetCode の以下の問題を Union-Find 木を使って解いた。 https://leetcode.com/problems/smallest-string-with-swaps/今後の参考のために、自分の書いたコードを載せておく。 import java.util.*; public class SmallestString { public String smallestStr…

マルチホーム環境での通信

ネスペ平成28年の午後2の問題より。 複数の ISP 環境において web サーバを NAT 機能付きの LB 経由で公開している場合、クライアントからの通信について、行きと帰りで同じ ISP を経由するように応答しないと、クライアントが応答を受け取れない。 これ…

VXLAN

VXLAN とは、L3 ネットワーク上に L2 ネットワークを構築するオーバーレイネットワーク技術である。 L2 ネットワークにおけるブロードキャストをシミュレートするためにマルチキャストを使用する。例えば、arp 要求はマルチキャスト (宛先は送信元と同じマル…

スイッチによるMACアドレスの学習

平成27年のネスペの午後2問2を解いていて学習した内容を書く。 スイッチがMACアドレスとポートの対応を学習するのは、スイッチに接続された機器からのフレームの送信元MACアドレスによるものである。通常、宛先MACアドレスからは学習しない。MACアドレス…

NAT444

NAT444 とは、global address, shared address, private address の 3 種類の IPv4 アドレスを用いたネットワーク構成のこと。 shared address はちょっと聞きなれないが、これは ISP のネットワーク内で使用され、グローバルアドレスの節約に貢献する。これ…

GARP

ネスペの問題を解いていると良く出てくる GARP (Gratuitous ARP) について簡単にまとめる。 GARP は自分の IP アドレスに対する MAC アドレスの解決のために使われる。その目的は、自分と同じネットワークにいる機器の ARP キャッシュの更新や重複 IP アドレ…

限定的ブロードキャスト

ネスペの問題を解いていて、ブロードキャストには2種類あるということを知った。 192.168.0.255 のように良く見かけるブロードキャストは Directed ブロードキャストと言われるもので、それ以外に Limited (限定的) ブロードキャストというものがある。 Lim…

golangでのファイルの文字コード判定

ファイルが utf8 かどうかの判定は、以下のように簡単にできる。 fp, err := os.Open(filename) if err != nil { fmt.Println("Can't open file.") os.Exit(1) } defer fp.Close() scanner := bufio.NewScanner(fp) for scanner.Scan() { line := scanner.Te…

スイッチスタック

H25年のネスペの午後2の問1を解いていて思ったことをここに書いていく。 ネスペの午後問題で、スイッチスタックを絡めたリンクアグリゲーションや STP などの設問を解く際、スタックスイッチを1台のスイッチとして考えないと、解けない問題がある。 例え…

Javaのkeystoreタイプ

Java の keystore のタイプとして以下をよく見かける。これらの違いがよく分かっていなかったので、ここに簡単に纏める。 なお、keystore は、公開鍵証明書とそれに対する秘密鍵を格納する場所のこと。Java アプリが SSL/TLS 通信を行う時などに使用される。…

シンクライアントにおける画面転送

ネスペの勉強をしていて、シンクライアントで (RDPのような) 画面転送方式を採用することのメリットについてメモしておく。 画面転送で使用する帯域は、せいぜい 0.2 Mbps 程度とのこと。つまり、WAN やインターネット側での帯域消費を少なくすることができ…

DNSサーバの種類

ネスペでよく出てくるネタなので、ここに纏めておく。 DNSサーバには、コンテンツサーバとキャッシュサーバの2種類がある。キャッシュサーバはフルリゾルバとも言われる。 コンテンツサーバは自分の管轄のドメインの情報を外部に返すもので、キャッシュサー…

DNSサーバの通信はTCP?UDP?

結論から言うと、両方。 名前解決の問い合わせには通常 UDP を使用する。なお、DNS 応答パケットのサイズが512 バイトを超えると、TCP で通信が行われる (TCPフォールバック)。 DNS サーバ間のゾーン転送には TCP が使用される。

プロキシを使った通信時のDNS名前解決

ネスペの令和元年の午後2の問2を解いていて、自分が分かっていないところがあったので、ここにメモしておく。 例えば、 PC ----- プロキシ ----- webサーバ という構成があって、PC が web サーバにアクセスする時、誰が web サーバの DNS 名前解決を行う…

git rebase -i でコミット履歴をいじる時の注意点

git

git rebase -i で履歴をいじる際にコンフリクトが発生することがある。この時、コンフリクトの解消の仕方次第では、コミットが消えることがある、というのが今回の話題。今回取り上げる題材は以下。 $ cat test.txt 111 222 333 444 $ git log --oneline 6c0…

VLANインタフェースとか

VLANインタフェースやVLAN間ルーティングについては、ネスペの平成29年の午後1の問1を解いてみるといろいろ分かる。これは良問だと思う。 参考として、ここに問題文に登場するネットワーク構成図を載せておく。 ネスペ平成29年午後1の問1の図2 この…

対向の機器のインタフェースの状態

平成30年のネスペの問題を解いていて、自分に足りない観点があったので、ここにメモしておく。 ネットワーク機器のインタフェースの状態は、例えば、SNMPマネージャなどが ifOperStatus や ifAdminStatus 等から取得できるが、それ以外にも、対象の機器に…

NAT

ネスペの平成30年の午後2の問題を解いていたところ、NAT について自分が理解できていないところがあったので、ここに簡単にまとめる。 具体的には、NAT 先ネットワークの通信先の、こちら側 (NAT前) でのネットワークにおける IP をどこに振るのかという…

TCPの再送が実施されないケース

平成30年のネスペの午後2の問題を解いていて知った内容。 TCPで送信中、受信端末の瞬断したりして、TCPコネクションが開放されてしまうと、TCPの再送は実施されなくなる。 このケースにおいてもデータを再送したい場合は、アプリ側で独自に再送処理を行う…

サーバ認証とクライアント認証

サーバ認証はクライアント側がサーバの正当性を確認して、クライアント認証はサーバ側がクライアントの正当性を確認するもの。 TLSでは、サーバ認証は必須だが、クライアント認証はオプションである。

認証と認可

ネットワークスペシャリストの勉強をしていて、認証と認可について学んだので、ここに書いていく。 認証と認可は似ているが意味がちょっと違う。 認証は、アクセスしている人が本人かどうかを判定するためもの。一方で、認可は、その人が何の権限を持ってい…

golang と Java のソート例

leetCode の https://leetcode.com/problems/two-city-schedulingを、golang と Java で解いたのだが、2次元配列(スライス)の sort の処理を書いたので、今後の参考のため、ここに残しておく。 package main import "sort" func twoCitySchedCost(costs [][…

golang の空のインタフェース

golang のソースを見ていると、 interface{} というのが出てくることがある。 これは、空のインタフェースというもので、任意の型の値を入れることができる、というものらしい。 golang は、静的型付けの言語であるが、事前にそこに入ってくる型情報が分から…