Socket通信:パケットの分断と結合
Socket通信中、送信されるバイトデータにおいて、パケットの分断と結合処理が行われ、Socketの内部の最適化メカニズムになります。パケットの結合:比較的に小さいバイトデータを頻繁に送信する場合、これらのデータを結合して、メモリ消費を削減します。パケットの分断:送信するバイトデータが大きな場合、Socketは、このバイトデータにおいて分断処理することで、メモリの消費を削減します。現在、2つのパケットを送信します。具体内容は次のとおり:受信側が123456789とABCDEFGHといった2つのパケットを受信するのは一番理想的な状況ですが、パケットの分断と結合処理を行うと、その状況が実現されません。パケット結合の場合#
2つのパケットは、非常に短い間隔(例えば0.1秒以内)で送信される場合、パケットの長さが十分であると、受信側は、次の1つパケットのみを受け取ります。パケット分断の場合#
もし、パケットの最大の長さを5バイトに設定する場合(極端の場合、一般の長さは1000−1500の間にある)、受信側は、次のような4つのパケットを受信します。12345
6789
ABCDE
FGH
1234
処理の方式#
パケットの分断か結合処理が存在しているので、受信者が受信したデータを再処理する必要があります。主に次のような問題を解決します。1.
パケットが結合された場合、同じパケットから複数のパケットの内容を取得できます。
2.
パケットが分断された場合、前のパケットの内容を一部保留して、次のパケットの内容に結合します。
1. パケットにマークをつける#
例えば、パケット内容の先頭に“START”、末尾に"END"という文字列を追加することで、受信側は、“START”と"END"の間の内容は、受信する必要のある内容だと特定することができます。START123456789END
STARTABCDEFGHEND
12
2. パケットの先頭に内容の長さを説明#
発信側は、パケットの先頭に内容の長さを説明すると、受信側は、パケットを受信した後、その長さの説明によって受信する必要のある内容を特定できます。PACKAGELENGTH:0009123456789
PACKAGELENGTH:0008ABCDEFGH
12
Modified at 2025-01-20 08:34:59