L2TP
もともとはPPPをIPネットワーク上でトンネリングするための仕組みとして作れた。rfc2661 ただし最終的にversion3で様々なプロトコルのトンネリングをするプロトコルになった。 rfc3931 IPsecのトンネルモードを使わずにL2TPのトンネルでIPSecのトンネル機能を実現するL2TP/IPSecというものもある。 これは逆に言うと暗号機能のないL2TPにIPSecを利用してL2TPに暗号化機能を付与しているともいえる。
一度確立したL2TPトンネルは双方向通信に使える。
L2TPで交換されるパケットには実際のデータを運ぶデータパケットと、L2TPトンネルの制御をするためのコントロールパケットに分かれる。コントロールパケットは独自の仕組みで信頼性ががあるが、データパケットについてはその機能はない。
terms
Attribute Value Pair (AVP)
key value pair。
LAC(L2TP Access Concentrator
LNSに対応するピア、トンネルの片側。LACはトンネルの始点ともいえる。
L2TPv1ならユーザーからのPPPをL2TPでカプセル化(トンネル)してLNSに転送する。
LNS(L2TP Network Server)
LACに対尾するピア、トンネルの片側。LNSはトンネルの終点。
L2TPv1ならLNSはL2TPパケットからPPPフレームを受け取る。
LCCE(L2TP Contorl Connection Endpoints)
要はLNSとLACの両方をさす言葉
概要
L2TPトンネルではペイロードとL2TPヘッダ含んだL2TPパケットはUDP 1701のUDPデータグラムとして送られる。
src portについてはephemeral portを使う。なのでこの場合はレスポンスパケットのdstがephemeral portで、srcが1701でL2TP connectionが確立される。実装によってはsrc portを1701に固定しているものもある(cisco)。
L2TP Connection確立
雑にいうとTCPの3 way handshake のコネクション確立と一緒。
コネクション要求メッセージを送信
Peerからコネクション要求に対しての応答メッセージを送信
コネクション確立メッセージを送信
code:=
LCCE A LCCE B
------ ------
SCCRQ ->
<- SCCRP
SCCCN ->
L2TP Header
Contorl Connection IDはコネクション
Ns: Contorlメッセージ番号
Nr: Contorlメッセージ番号
code:=
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|T|L|x|x|S|x|x|x|x|x|x|x| Ver | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Control Connection ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Ns | Nr |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+