目次
TCPとは
TCPとは、信頼性のあるアプリケーション間のデータ転送を行うためのプロトコルです。TCP/IPというネットワークアーキテクチャの名前に含まれているようにとても重要なプロトコルです。
TCPを利用したアプリケーション間のデータの送受信は次のような手順で行われます。
- TCPコネクションの確立
まず、データを送受信するアプリケーション間の通信が正常に行うことが可能かどうかを確認します。この確認のプロセスは3ウェイハンドシェイクと呼ばれます。TCPコネクションの確立は、アプリケーション間で仮想的な直通の通信回線を確保しているようなイメージです。 - アプリケーション間のデータの送受信
アプリケーションが扱うデータをTCPで送信するためには、アプリケーションのデータにアプリケーションプロトコルのヘッダとTCPヘッダを付加します。これをTCPセグメントと表現することがあります。
このときアプリケーションのデータサイズが大きければ分割して、複数のTCPセグメントとして転送します。どのように分割したかはTCPヘッダに記述されて、宛先で元のデータに組み立てられるようにしています。また、データを受け取ったらその確認を行います。データの受信確認のことをACKと呼んでいます。
もし、一部のデータがきちんと届いていなければデータを再送します。また、ネットワークの混雑を検出すると、データの送信速度を抑えます。このようなデータの転送の仕組みをフロー制御と呼びます。 - TCPコネクションの切断
アプリケーションのデータの転送がすべて終了すれば、TCPコネクションを切断します。これにより、サーバおよびクライアントホストのCPUやメモリの利用を解放します。
このように、TCPコネクションの確立を行ってから、実際のアプリケーションデータの転送を開始します。そして、データを正しく転送できていることを確認しています。これにより、TCPでは信頼性の高いアプリケーション間のデータ転送を行うことが可能です。
TCPヘッダフォーマット
TCPでのさまざまな機能を実現するためのTCPヘッダのフォーマットは以下のとおりです。
TCPヘッダ内で重要な部分のみを簡単に解説します。もっとも重要なのはポート番号です。ポート番号によって適切なプリケーションプロトコルへデータを振り分けることができるからです。
そして、信頼性のあるデータの転送をするためにシーケンス番号やACK番号があります。シーケンス番号は、「シーケンス(順序)」という名前の通りTCPで転送するデータの順序を表しています。データを分割しているときには、シーケンス番号でどのようにデータを分割しているかがわかります。ACK番号はデータを正しく受信したことを確認するために利用します。
また、フラグはTCPのコネクションやデータの転送を制御するためのもので、主なフラグとして、以下があります。
- SYN
TCPコネクションを確立するときにSYNフラグを立てる - ACK
TCPコネクションの最初のセグメント以外、ACKフラグを立てる - FIN
TCPコネクションを切断するときにFINフラグを立てる - RST
TCPコネクションを強制的に切断するときにRSTフラグを立てる
TCP/IP
- TCP/IPの階層
- IP(Internet Protocol) ~データを送り届ける~
- ICMP ~きちんとIPで転送できますか?~
- Ping ~きちんとデータは届きますか?~
- Windows OSのPingコマンド
- トレースルート ~データはどのルータを通っていますか?~
- tracertコマンド(Windows OS)
- ICMPリダイレクト
- トラブルはどこ? ~Pingとトレースルート~
- ARP ~IPアドレスとMACアドレスを対応付け~
- ARPフォーマット
- Gratuitous ARP(GARP)
- ポート番号 ~どのアプリケーションのデータなの?
- TCPの概要
- TCPの動作
- UDPの概要
- アプリケーションのデータが届くまでのまとめ
- DNS ~宛先IPアドレスを求める~
- nslookupコマンド ~DNSの名前解決の確認~
- DHCP ~IPアドレスを自動割り当て~
- Cisco IOS DHCPサーバの設定と確認コマンド
- Ciscoルータ DHCPサーバの設定例
- DHCPリレーエージェント
- DHCPリレーエージェントの設定例[Cisco]
- DHCPサーバ配置のまとめ
- TCP/IPの設定のまとめ
- ipconfigコマンド ~Windows OSのTCP/IP設定を確認~
- Linux(Ubuntu)でのTCP/IP設定の確認コマンド
- Webサイト
- HTMLとCSS ~Webページを作る~
- URL ~Webサイト(Webページ)のアドレス~
- HTTP ~HTMLファイルを転送する~
- Webアプリケーション ~Webブラウザだけあればいい~
- HTTP Cookie
- Webアプリケーションのセッション管理
- Webプロキシサーバ ~Webアクセスを代わりに~
- Webアクセスのまとめ
- 電子メール
- SMTP ~電子メール送信用プロトコル~
- POP3 ~メール受信用プロトコル~
- IMAP4 ~メールサーバ上でメールを管理~
- 電子メールのまとめ
- FTP ~代表的なファイル転送プロトコル~
- TFTP ~簡易的なファイル転送プロトコル~
- Windows10/11のTFTPクライアント
- ネットワークのトラブルの切り分け手順