JavaScriptをがんばるブログ

React,OSS,ソフトウェア開発が中心のブログです👨‍💻

マスタリングTCP/IP: その他のトランスポートプロトコル

自分用の読書メモです。

6.5.1 UDP-Lite(Lightwight User Datagram Protocol)

  • UDPの機能を拡張したトランスポートプロトコル
  • UDPによる通信では、チェックサムエラーが発生すると、パケット全体が破棄される
  • アプリによっては破棄せずに利用したいケースもある
  • UDPチェックサムを無効にすれば、データの一部にエラーが発生していてもパケットが破棄されずに済むが...
  • UDPヘッダ中のポート番号や、IPヘッダ中のIPアドレスが壊れたパケットを受信してしまう可能性があるので、UDPパケットのチェックサムを無効にする事は推奨されていない
  • これらの問題を解決するためにUDP-Liteが生まれた
  • UDP-LiteはUDPとほぼ同等の機能を提供するが、チェックサムを計算する範囲をアプリケーションが決める事がで出来る
  • エラーが発生していてはいけない部分のみチェックする事が可能になり、そうでない部分にエラーが発生したデータは利用する事が出来る

6.5.2 SCTP(Stream Control Transmission Protocol)

メッセージ単位の送受信

  • TCPは送信側のアプリケーションが決めたメッセージサイズが受信側のアプリケーションには伝わらないが、SCTPでは送信側のアプリケーションが決めたメッセージサイズが受信側のアプリケーションで分かる

マルチホーミングに対応

  • 複数NICが付いているホストで、使用出来るNICが変化しても通信を継続できる

複数のストリームの通信

  • TCPで、複数のコネクションを確立して通信を行うような効果

メッセージの生存時間を定義できる

DCCP (Datagram Congestion Control Protocol)

  • DCCPはUDPを補うプロトコルとして登場した
  • UDPにはふくそう制御がなく、必要になった時アプリケーション開発者がそれを実装すうるのは困難である事からDCCPが登場した

特徴

  • UDPと同様にデータの到達制に関する信頼性はない
  • コネクション志向で、コネクションの確立と切断処理がある。コネクションの確立と切断の処理には信頼性がある
  • ネットワークの混雑に合わせたふくそう制御を行うことができる
  • TCPライクなふくそう制御」と「TCPフレンドリーなふくそう制御」のどちらかの方法を選択できる
  • ふくそう制御を行うため、パケットを受信した側は確認応答(ACK)を返す。この確認応答を使って再送をする事も可能

6.6 UDPヘッダのフォーマット

送信元ポート番号

  • 16ビット長のフィールドで、送信元のポート番号を示す
  • 送信元ポート番号はオプションで、指定しない事も可能
  • これは返事を必要としない通信で利用する事ができる

宛先ポート番号

  • 16ビット長のフィールドで、宛先のポート番号を示す

パケット長

  • UDPヘッダの長さとデータの長さと和が格納される。単位はオクテット長。

チェックサム

TCPヘッダのフォーマット

  • TCPにはパケット長やデータ長を表すフィールドは存在しない。
  • IP層からTCPのパケット長を教えてもらえるから。

送信元ポート番号

  • 16ビット長フィールド

宛先ポート番号

  • 16ビット長のフィールド

シーケンス番号

  • 32ビット長のフィールド
  • データを送信するたびに、送信したデータのオクテット数だけ値が加算される
  • シーケンス番号は0や1からは始まらない
  • コネクションを確立する時に乱数で初期値が決定される
  • コネクション確立時のデータも1バイト分と数えて処理が行われる

確認応答番号

  • 32ビット長のフィールド
  • 次に受信すべきデータのシーケンス番号
  • 確認応答番号から1を引いたシーケンス番号

データオフセット

  • TCPヘアのサイズ

予約

  • 将来の拡張のために用意されているフィールド

コントロールフラグ

  • 8ビット長で、各ビットは左から CWR、ECE、URG、ACK、 PSH、RST、SYN、FIN と名付けられている

CWR (Congestion Window Reduced)

  • CWRとECEはIPヘッダのENCフィールドとともに使われる。ふくそう制御に。

ECE(ECN-Echo)

  • ECEフラグはECN-Echoを意味するフラグで、通信相手に、相手側からこちらに向かうネットワークがふくそうしていることを伝える
  • 受けとったパケットのIPヘッダの中のECNビットが1のときにTCPヘッダのECEフラグを1にする

URG(Urgent Flag)

  • このビットが「1」の場合は、緊急に処理すべきデータが含まれていることを意味する

ACK(Acknowledgement Flag)

  • このビットが「1」の場合には、確認応答番号のフィールドが有効であることを意味する
  • コネクション確立時のSYNセグメント以外は、必ず「1」になっていなければならない

PSH(Push Flag)

  • このビットが「1」の場合は、受信したデータをすぐに上位のアプリケーションに渡さなければならない
  • 「0」の場合には受信したデータをすぐにアプリケーションに渡さずに、バッファリングすることが許される

RST(Reset Flag)

  • このビットが「1」の場合には、コネクションが強制的に切断される

SYN(Synchronize Flag)

  • コネクションの確立に使われる
  • ここに「1」が指定されている場合には、コネクションを確立したいという意思を表すとともに、シーケンス番号のフィールドに格納されている番号でシーケンス番号の初期化が行われる

FIN(Fin Flag)

  • ここに「1」が指定された場合には、今後送信するデータが無い事を意味し、コネクションを切断したいという意思を示す事になる

ウィンドウサイズ

  • 16ビット長
  • TCPヘッダに含まれる確認応答番号で示した位置から、一度に受信可能なデータサイズ(オクテット)を通知するのに使う
  • ここに示されているデータ量を超えて送信する事は許されない
  • ウィンドウが0と通知された場合には、ウィンドウの最新情報を知るために「ウィンドウプローブ」を送信することが許されている。この場合には、 データは 1 オクテットでなければならない。

チェックサム

1の補数の和を求め、求まった和の1の補数を~の意味が理解出来なかった。
この疑問にストレートに答えてくれているブログ記事を見つけて喜びの舞ヾ(@^▽^@)ノ
だが全部理解するまでに挫折しそう...

www.morishima.net