TCPDUMPの出力を見てみようTCPDUMPの出力を見てみよういかがですか。理論だけでは頭がいたくなってきます(私もそうです)。実は、私もTCPについてはほとんど覚えておらず、必要となったときに書籍を参考にしながらパケットを追いかけるということをしています。実例としてtcpdumpの出力を追いかけてみましょう。起動したときのパケットの流れを見てみます。4.0)でどんなコネクションが張られているかを、netstatコマンドで見てみましょう。左の項目から、プロトコル/自分のアドレス/相手側のアドレス/接続状態です。アドレス「hotta」とか「www.hoge.co.jp」とかいうのはホスト名(すなわちIPアドレス)です。自分自身がサーバとして動作していることを示します。(自分自身)となっているところもありますね。この場合、サーバとクライアントが同一のマシン内で動作していることを示しています。ところで、プロトコルがUDPの場合は、相手側のアドレスは'*'(全部OK)だし、接続状態のフィールドもありませんね。これは、UDPではコネクションという概念がないからです。UDPの該当ポート番号のパケットが送られてきたら、それを受信するためのアプリケーションが現在生きているよということを示すだけです。ポート番号アドレスのうち、コロン(:)の右側がTCP/UDPのポート番号です。%SYSTEMROOT%system32\drivers\etc\servicesに記載があるものについては「ポート名(サービス名)」に変換されています。Networkが使っている、TCP/UDPのさらに上位のプロトコル)関連です。Webで使われる上位プロトコル)ですが、これはservicesファイルには記載されていないようです。以下のものがあります。本当はもっとたくさんの状態があるのですが、ここらあたりの理論は複雑で私もよく理解できません。日本語化文書集積/提供のページでTCP関連のRFCを探したり、linuxを入手して、そのカーネルソースのTCP部分(tcp.c)を読んだりしてみなければならないでしょう。TCPDUMPの出力です。これはLinux上で実行したので、ポート番号80は'www'として表示されています。(DF)TCPDUMPは多くのプロトコルをサポートしており、プロトコルごとに出力フォーマットが違います。ここではTCPパケットのみを表示しています。フォーマットを以下に示します。Size):最大パケット長をこのサイズに制限させる(*1)ACKだけを単独で送信する場合は、このフィールドはありません。(*2)ACKビットが立っていない場合は、このフィールドはありません。(*3)通常、通信の開始時にのみ設定されます。順番に追いかけてみましょう。(DF)[1行目]まず、hotta(クライアント)側からserver2(サーバ)側にS(SYN)を送信し、コネクションの確立を要求しています。1行目(と2行目)では、シーケンス番号に何か大きな数字が入っていることに注意してください。ここではまだ実データが発生していませんので、シーケンス番号中の送信バイト数は0です。4.0の標準状態)では、受信バッファサイズが8KBであることがわかります。番号(およびそれにつけられた別名)のことをいいます。クライアント側は、自分のプログラムがそのマシン内で識別できさえすればいいので、一般的には「OSが、その時点で空いているポート番号のうちの1つを適当に割り振る」ようにプログラマが指示します。いうのは特に意味のない数字です。ポートという2つのコネクションができていました。瞬間的には、1つのクライアント・マシンから2つのクライアントが同じサーバの同じポートにコネクションを張っていたわけです。1460&gt;[2行目]サーバは、1行目のシーケンス番号+1をACK番号としてACKを送信すると同時に、そのパケットのSYNビットを立てて、クライアント側に対する下りのコネクション確立を要求します。バイトに制限したい旨をクライアント側に伝えています。(DF)[3行目]クライアントはACKを返し、下りのコネクション確立を知らせます。ここでACK番号が1にリセットされているように見えます。最初のSYNセグメントだけは完全なシーケンス番号を表示して、それ以降は最初の番号からのオフセット値で示すようにしているからです。オプションをつけると、全てのセグメントについて完全なシーケンス番号を出力します。バイトのデータを送っていますが、この中身はこの出力からはわかりません。www(http)プロトコルにしたがって、あるWebページに関する何かの要求を行っているんでしょう。tcpdumpにオプションをつければデータ部も拾えますが、データ部の中身を解析するには、さらに上位のプロトコル(ここではhttp)の知識が必要となります。いっても、ほとんどはテキストベースでしょうから、意外と理解しやすいかもしれませんが。バイトのシーケンスを発生させました。P(PUSH)フラグが立っていますが、これは送信側でバッファリングを禁止したり、受信側でなるべく速やかに受信データをアプリケーションに渡してね、という指定です。(この部分もご指摘により修正しました。データ(つまり全部)を受信できたことを示します。バイトのデータを送信しています。クライアント側からの問い合わせに対する返答でしょう。6行目〜9行目も関しても同様です。がんばって追いかけてみてください(もしそれだけの根気があれば、ですが(^^;)。ビットを立てて下りコネクションの開放要求をクライアント(ブラウザ)側に送ります。Server)自体の設定で、ページの送信が完了しても、15秒間はそのコネクションを保持するようになっているからです。新たにサーバに対して要求を行った場合、サーバは即時に情報を返すことができるようになっています。