広告
広告
https://www.7key.jp/nw/tcpip/tcp/tcp.html#tcp
OSI参照モデルのトランスポート層に属し、インターネットで利用される標準プロトコルで【Transmission Control Protocol】の略です。ネットワーク層のIPと、セッション層以上のプロトコルの橋渡しをする役割を担います。具体的に見て行きましょう。まず、TCPはアプリケーションからデータを受け取ると、IP に渡すためにデータをセグメントと呼ばれる単位に分割します。そしてTCP ヘッダ(図1)を付加し、IP にデータを渡します。後はIP が宛先までデータを送信してくれますので、送信側のTCP がする仕事はこれで終わりです。一方受信側のTCP はIP からIPヘッダを取り除いたセグメントを渡されます。これをポート番号に応じたアプリケーションに渡すことが仕事となっています。たったこれだけなのですが、たったこれだけのことをするために実は様々な付帯業務をTCP は行っているのです。思い出してください。トランスポート層の主な機能として、「通信の信頼性の確保」がありました。IP が主にする仕事はデータを宛先まで効率よく届けることです。TCP から渡されたデータを順番に届ける機能も、分割されたデータに抜けが無いかチェックする機能もありません。ましてやIP は、宛先の端末の処理能力や途中のネットワークの混雑状況などまったく感知しません。そこでトランスポート層の TCP にこれらの機能を持たせ、信頼性と効率性のある通信環境を築いているのです。以下にTCP ヘッダのフォーマットを紹介しておきます。
発信元ポート番号 (16ビット) |
宛先ポート番号 (16ビット) |
|||||||
シーケンス番号 (32ビット) |
||||||||
確認応答番号 (32ビット) |
||||||||
ヘッダ長 (4ビット) |
予約ビット (6ビット) |
フラグ (6ビット) |
ウィンドウサイズ (16ビット) |
|||||
U R G |
A C K |
P S H |
P S T |
S Y N |
F I N |
|||
チェックサム (16ビット) |
緊急ポインタ (16ビット) |
|||||||
(オプション) | ||||||||
データ |
送信するセグメントの順序を宛先ホストに通知するために使う番号。宛先となるホストでは、この番号によってセグメントの順番を正しく並べ替えたり、届かなかったセグメントの再送要求を出したりすることができる。
データを受信したホストが送信元ホストに受信の確認を行うための番号。「ここまでのデータは受信したので次のデータを送って下さい」って意味です。
TCP ヘッダの長さを4オクテット(32ビット)単位で示します。オプションが使われていない場合は「5」が使用されます。
拡張のための予約領域。
ビット毎に意味を持つ次の6つのフラグフィールドから構成されています。
宛先ホストは到着したセグメントを「ウィンドウ」と呼ばれる受信バッファに一度貯め、上位層に渡す。そのため、受信バッファ以上のデータが一つのセグメントとして到着してしまうと処理しきれなくなる。そこで、宛先ホストは送信元ホストに自分のウィンドウサイズをあらかじめ通知しておく。詳細は「ウィンドウとは」を参照。
誤り制御用フィールド。対象はTCP ヘッダにデータを含むセグメント全体。
URGフラグが1の場合のみ有効。そのデータの位置であるデータフィールドの最後のバイト順序番号を示す。
必要時にデータ長の調整といった詳細なデータを入れるフィールド。MSS【Maximum Segment Size】などの情報のやり取りを行う。
広告