2012/06/24

[llcp]データを送信したい側がCONNECTを送信するのだろう

LLCPのシーケンスがわからんごとなってきたが、なぜここまでシーケンスの資料がないのだろうか?

思い当たったのは、LLC副層だ。
LLCPで検索していると、IEEE 802.2という規格が引っかかっていた。
あまり気にしていなかったのだが、「基礎から学ぶWindowsネットワーク LLCプロトコル」を見ると、LLCPでよく使われる「SAP」とか「N(S)」なんかが出てきている。

うーん、説明が少ないのは、既存のIEEE 802.2と一緒だから省略したということだろうか。


LLCについては、以下のページが詳しくわかりやすかった。

Network Analysis
http://www.cam.hi-ho.ne.jp/puffin/compendium/J_L1-LLC.html

 

ConnectionlessとかConnection-orientedなんかも同じだ。
Type IとかType IIとかは、Link Service ClassesのClass 1, Class 2と対応しそう。
NRMやABMなんて用語も説明があんまりなかったのだが、LLCから来ているのだろう。

 

読んだが・・・LLCPのConnection-orientedとの関連づけができんかった。
802.2には、LLCPの「CONNECT」に相当するものがよくわからない。
Normal Operation開始時には「5.8 Symmetry Procedure」の初期化をするようになっているが、これがABMになるという意味で、802.2の「SABME」になるのだろうか。

うーーん・・・


そういえば、NPPも同じような実装になっていたなあ、と検索してみると興味深い話があった。
https://launchpad.net/nfcpy/+announcement/8271
nfcpyだ。
読んだ感じからすると、nfcpyがサーバ動作をしているとき、symmetry packetを交換しないとうまくいかなかった、ということのようだ。
symmetry packetは、SYMM PDUのことだろうか。

 

http://www.libnfc.org/community/topic/401/p2p-communication-between-android-phone-and-nfc-reader/
こっちは、libnfcのフォーラム。
ターゲットになってNexus Sと通信しているログが出ている。
GeneralBytesを送信後、TgGetDataするとCONNECT PDUを受け取っているようだ。
この話は、コメントをいただいた件と一致している。
送信するNDEFメッセージがないときはSYMM PDUを送る、という文のあとで、送信するNDEFメッセージができるとCONNECT PDUを送る、とある。

そうか、そういうことなのか!


私はてっきり、CONNECTしたあとでSYMMを交換し合うフェーズになると思っていたのだが、Android端末を向かい合わせた時点で送るものがあろうとなかろうと「5.6.3 Connection Establishment」の手前まで実行し、送るものが出てくるまではSYMMをやりとりして待つ、ということなのだ。
送信するデータができれば自分からCONNECT PDUを投げるし、先に相手からCONNECTが来たらデータ受信側になる、と。

nstは送りたいNDEFメッセージを最初から持っているので、相手からCONNECTが来ると「私は送るものがあるんだから拒否」ということでDMを投げるのだろう。

つまり、開始まではこういうシーケンスになるということだと思う。

データ送受信開始まで

まだ間違ってるところはあるかもしれんが、この数日悩んでいたことに理屈が付いて、すっきりだ。

2 件のコメント:

  1. 匿名20:55

    多分それ正解です…きっと。
    やることない時で、タイムアウトするわけではないならシムで繋いどけ、とどっかで見たような。
    Androidビームの動作は、重ね合わせた時点でDEPまでつないでシムを延々と出し合い、送りて側のユーザが画面タップした時点でコネクト動作を開始するはず。

    返信削除
  2. おお、そうですか。
    情報もらってたので、ようやくたどりつけたようです。
    ありがとうございます。

    願わくは、同じ問題で悩む人が出ませんように。。。

    返信削除

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。