TCPは、通信を行う前に3Wayハンドシェークという手順を実施します。
3Wayハンドシェイク
http://ja.wikipedia.org/wiki/3%E3%82%A6%E3%82%A7%E3%82%A4%E3%83%BB%E3%83%8F%E3%83%B3%E3%83%89%E3%82%B7%E3%82%A7%E3%82%A4%E3%82%AF
ハンドシェークの過程で、お互いのネットワーク性能(MSS)を通知しあいます。
MSS(Maximum Segment Size)は、一回の転送で受信可能なパケットサイズを示しています。
また、
MTU(byte) = MSS(byte) + TCPヘッダサイズ(20byte) + IPヘッダサイズ(20byte)
という関係を持っています。
※MTU:一回のデータ転送で送信可能なパケットサイズ
Linuxであれば、ifconfigコマンドで、MTUのサイズを参照、変更することが可能で、
こんな感じで、MTUを表示することが出来ます。
ifconfigの出力
eth0のMTU:1500が、ethernetのMTUサイズを示しています。
loは、ローカルループバックアドレスなので、ここでは無視します。
ethernetの場合、MTUは1500が一般的なサイズなので、想定通りの結果でしょうか。
今回は、Linuxサーバと、Macクライアントの間でTCPコネクションを張って、
3wayハンドシェークのタイミングでお互いのMSSを通知し合っているところを
パケットキャプチャソフト WireSharkと、ポートスキャンツールnmapを使って確認してみます。
nmapは、セキュリティー管理者、クラッカーが好んで使うツールで
ターゲットホストのポート開閉状態を3wayハンドシェイクを利用して検知するツールです。
Macクライアント(192.168.11.11)のターミナルで、
nmap -p 80 ターゲットホスト名または、ipアドレス
をコマンドし、
この試行では、
(nmap -p 80 192.168.11.6)
として、ターゲット192.168.11.6のポート番号80に対して3wayハンドシェークを試みます。
同時に、wiresharkで、パケットをキャプチャすると、
キャプチャ結果
キャプチャ結果抜粋
キャプチャ番号7[SYN] MSS=1460
キャプチャ番号8[SYN、ACK] MSS=1460
キャプチャ番号9[ACK] MSS=1460
を得ました。