やさしいネットワークとセキュリティ

ネットワーク・セキュリティエンジニアの視点から各種テクノロジーと資格試験対策をやさしく解説します。

ネットワークスペシャリスト【H30秋午後Ⅱ問1設問2】No.1

設問2(1)

f:id:aolaniengineer:20190922102527p:plain

f:id:aolaniengineer:20190922103107p:plain

f:id:aolaniengineer:20190922103354p:plain

f:id:aolaniengineer:20190922132908p:plain

 該当する、QoSレベルが0の場合のメッセージ送信は以下のように説明されています。

QoSレベルが0の場合、MQTT層におけるPUBLISHの送達確認は行わない。TCP層による送達確認だけが行われる

 また、MQTTを使ったメッセージ交換方式の通信シーケンス例には以下のように説明されています。

クライアントは、サーバのTCPポート8883番にアクセスし、TCPコネクションを確立する。このTCPコネクションは、メッセージ交換の間は常に維持される

 したがって、TCPコネクションが維持される場合は、TCPの再送機能でメッセージが消失することはないと考えられます。

 逆に、TCPコネクションが開放されてしまうと、再送機能も使えなくなり、メッセージが消失する場合があることになります。

 それを裏付けるように、QoSレベルが2の場合には以下のように説明があります。

TCPコネクションが切断された場合のためにPUBLISH及びPUBRELは送信者によって保存され、送信者から受信者への再送に利用される。

 TCPコネクションが開放される場合とはどのような場合でしょうか。

 これについては、問題文のもう少し先に以下の記述があります。

f:id:aolaniengineer:20190922140403p:plain

 ここの「電源断などで非稼動になった場合」という記述です。

 デバイスの電源断などでTCPコネクションが開放されることになります。

 これらの内容を記述していきます。

 したがって、正解は以下の通りです。

 「TCPの送信処理中に、デバイスの電源断などでTCPコネクションが開放された場合

設問2(2)

f:id:aolaniengineer:20190922141101p:plain

 該当箇所は、「PUBLISHを受信した受信者は、メッセージの処理を始める前に送信者にPUBRECを送信し、その応答であるPUBRELを受信してからメッセージの処理を開始する。」です。

 図3の通信シーケンスをよく見ると、送信者と受信者でそれぞれ送達確認ができてから処理を開始したり完了させたりしています。

 また図3の注記2には以下の記述があります。

QoSレベルが2の場合、受信者は、メッセージの処理を開始した以降に受信したPUBLISHは、パケットIDの重複にかかわらず新しいパケットとみなす。

 この説明からすると、もしもPUBRELを受信する前にメッセージを処理するとした場合は、送信者から同じパケットIDのメッセージが再送されると新たに処理を開始してしまいます。

 PUBLISH、PUBRELの保存や、PUBREC、PUBCOMPのやり取りは、このようなメッセージの重複(に伴う処理)を防止するためにあります。

 したがって、正解は以下の通りです。

 「メッセージの重複を防止する。」