Contents
TCP/IP
TCP/IPはプロトコルスタックの一種です。
OSI参照モデルよりも運用重視で、普及していきました。
![](https://ntorelabo.com/wp-content/uploads/2022/09/スクリーンショット-2022-09-06-16.28.36.png)
TCPとIPという2つのプロトコルを中心に4つのレイヤで構成されています。
- アプリケーション層…ネットワークアプリケーションに必要なサービスを定義
- トランスポート層…アプリケーション層のプロトコルに信頼性のあるサービスを提供
- インターネット層…エンドツーエンドのデバイス間でパケットを転送するためのサービスを提供
- リンク層…同一の物理ネットワークの隣接ノードと通信を行うために必要なプロトコルを定義
![](https://ntorelabo.com/wp-content/uploads/2022/09/スクリーンショット-2022-09-07-20.07.47.png)
PDU
データ+ヘッダ(+トレーラ)のおデータ単位をPDU(Protocol Data Unit)といい各層の呼び名がOSI参照モデルと少し異なります。
<OSI参照モデルのPDU>
![](https://ntorelabo.com/wp-content/uploads/2022/09/スクリーンショット-2022-09-07-20.14.37.png)
<TCP/IPのPDU>
![](https://ntorelabo.com/wp-content/uploads/2022/09/スクリーンショット-2022-09-07-20.23.37.png)
![](https://ntorelabo.com/wp-content/uploads/2022/09/スクリーンショット-2022-09-07-20.24.51.png)
【TCPヘッダとUDPヘッダ】
- トランスポート層ではTCPヘッダまだはUDPヘッダを付加してカプセル化します。
- UDPにはないけど、TCPにはシーケンス番号、確認応答番号があります。
![](https://ntorelabo.com/wp-content/uploads/2022/09/k37707.jpg)
Eahernetフレーム
- ブリアンブル(7バイト)
- SFD(1バイト)
- 宛先MACアドレス(6バイト)
- 送信元MACアドレス(6バイト)
- タイプ(6バイト)
- IPヘッダ、データ等(46〜1500バイト)
- トレーラ(FCS)(4バイト)
…Frame Check Sequenceと呼ばれるエラー検出用のフィールド。FCSはCRC値を格納しています。
IP
- IP(Internet Protocol)はインターネット層で中心的な役割を担うプロトコルです。
- IPアドレス(論理アドレス)を使用してエンドツーエンドの通信を可能にします。
- コネクションレス型‥送りっぱなし、届いたかどうかは関知しない
- ベストエフォート型‥保証はしないが最善は尽くすという通信タイプ
- データ回復機能なし‥データ破棄したら、再要求しない
- 階層型アドレス方式…IPアドレスは、ネットワーク部とホスト部の2階層で構成する、階層型のアドレス方式になっています。
IPヘッダ(IPv4)
![](https://ntorelabo.com/wp-content/uploads/2022/09/スクリーンショット-2022-09-07-20.42.38.png)
- サービスタイプ‥パケットの送信優先度に応じた最適な通信を行うて目の仕組み
- TTL(生存時間)‥ルータを中継できる回数
- プロトコル‥上位のプロトコルを表す番号
- ヘッダチェックサム‥送信時の情報が、受診時に壊れていないかチェックする
フラグメンテーションフラグメント処理
一度に伝送したいデータがMTU(エムティーユー / Maximum Transmission Unit)を超えた場合に、分割して送信することをフラグメント処理、フラグメンテーションといいます。
識別子、フラグ、フラグメントオフセットはフラグメント処理に関与しています。
![](https://ntorelabo.com/wp-content/uploads/2022/09/スクリーンショット-2022-09-07-20.56.39.png)
IPアドレス
![](https://ntorelabo.com/wp-content/uploads/2022/09/スクリーンショット-2022-09-08-21.37.00.png)
IPv4においてIPアドレスアドレスは32ビット持ち、ネットワークを表すネットワーク部と個々のノードを表すホスト部で構成される。
IPアドレスのクラス
![](https://ntorelabo.com/wp-content/uploads/2022/09/スクリーンショット-2022-09-08-21.45.51.png)
TCP
- TCP(Transmission Control Protocol)はインターネットにおいて標準的に利用されているプロトコルです。
- 3ハンドシェイクによるコネクション型(信頼性を高めるために送信元、宛先双方で状況を確認し合う)という通信方式です。
- オーバーヘッドが大きい
- ウィンドウサイズを利用したフロー制御
- 同期通信(データが正しく受信されたかどうか確認しながらやりとりする通信)
![](https://ntorelabo.com/wp-content/uploads/2022/09/スクリーンショット-2022-09-07-23.56.29.png)
3ウェイハンドシェイク
- ACKによる到達確認
- TCPコネクションはデータを送信し始める前に確立する
![](https://ntorelabo.com/wp-content/uploads/2022/09/スクリーンショット-2022-09-08-0.01.16.png)
TCPヘッダ
送信データはセグメント(ヘッダーとデータ)という単位送信されます。
- 送信元、宛先ポート番号(16)
- シーケンス番号(32)
- 確認応答番号(32)
- データオフセット(4)、予約(6)、制御ビット(6)
- ウィンドウサイズ(16)
- チェックサム(16)
- 緊急ポインタ(16)
- オプション・パディング(可変)
![](https://ntorelabo.com/wp-content/uploads/2022/09/スクリーンショット-2022-09-07-23.52.44.png)
シーケンス番号
送信元→返信に送信する、分割データが元データと比較してどの位置にあるかを示す番号。送信時に分割されたデータはこれを手がかりに再構成される。
確認応答番号(ACK番号)
宛先→送信元に送信する、次に受信したいデータのシーケンス番号を送信元に示す番号。送信元はこれを受け取ると、「直前までのデータの送信の成功」を理解する。
![](https://ntorelabo.com/wp-content/uploads/2022/09/スクリーンショット-2022-09-08-11.20.07.png)
ウィンドウ制御
ウィンドウと呼ばれる送信可能なサイズ幅を管理しつつ、確認応答を待たずに次々とデータを送信する、送信側の機能。
フロー制御
高負荷で処理がもたつきバッファ(データを一時的に保存ができる領域)が溢れそうな時などにウィンドウサイズを調整することで受信料(送信側の送信量)をコントロールする受信側の機能。
輻輳制御
ウィンドウサイズ分一気に送ってしまうと受信側の状況によっては処理しきれえず輻輳(ネットワーク上の混雑)を起こしてしまう可能性があるため、輻輳が起きないよう慎重にデータを送信していく機能。
UDP
- コネクションレス
- ベストエフォート
- UDPで扱うデータの単位はUDPデータグラムといわれます。
<UDPヘッダ>
- 送信元、宛先ポート番号(16)
- データ長(16)
- チェックサム(16)
![](https://ntorelabo.com/wp-content/uploads/2022/09/スクリーンショット-2022-09-08-17.02.28.png)