
TCPの通信において、受信バッファから上位アプリケーションへデータを渡すタイミングについて教えてください。
PSHフラグが立っているデータを受信すると上位アプリケーションへ渡すというのは学びましたが、その他どのようなタイミングで上位アプリケーションへデータを渡すのかわからなかったため質問させていただきました。
例えば、PSHフラグのデータが来る前に受信バッファがいっぱいになってしまったら、受信側で勝手にデータを渡してしまうのでしょうか。(それともバッファがいっぱいになると送信側がPSHフラグを送ってくれるのでしょうか。でもゼロウィンドウプローブを考えるとそれもない気がします。)
また、TCPでの通信部分なため、このあたりの動作に関してはアプリケーションごとではなくOSに依存するのかなと思っており、アプリケーションとしてはどのような塊(タイミング)でデータを受信してもちゃんと処理できるのかなというのも気になります。
「現在はPSHフラグを無視している」というのもネット上で見かけましたが、そうするとますますOSの独断でデータをアプリケーションに渡しているのかなと思いました。
このあたりがよくわからなかったので、ご教授願えればと思います。
※スライディングウィンドウ、ゼロウィンドウについてはネットですぐ見つかる程度の範囲では理解しているつもりです。
No.1ベストアンサー
- 回答日時:
pushフラグは送信側が受信側に対して上位へのデータの即時引渡しを要求するフラグ。
あくまで要求なのでこのフラグが立っているかどうかで受信側がどう対処するかは実装依存。
性能が高くなっている今ならpushフラグをセットしていなくても上位への引渡しをすぐに行う実装も多いと思われる。
> 現在はPSHフラグを無視している
というのはフラグの状態に無関係に適切なタイミングで受信側が処理している実装が多いという意味だろうと思われる。
そして、
> 例えば、PSHフラグのデータが来る前に受信バッファがいっぱいになってしまったら、受信側で勝手にデータを渡してしまうのでしょうか
というのは当然勝手に渡すことになる。
pushフラグはセットしないことによって送信側が受信側にデータを上位へ渡すことを抑制させるためのフラグではないので。
PSHフラグはデータを上位に渡すことを抑制するわけではないのですね。
もうひと方詳しい回答をいただきましたが、私が聞きたかったことに対する回答はこちらの方が近かったため、ベストアンサーに選ばせていただきました。
回答ありがとうございました。
No.2
- 回答日時:
TCP/IPの受信バッファは、アプリケーションレベルとTCPレベルのバッファがあり、アプリケーションレベルのバッファは、受信できるだけのバッファが必要になる思います。
つぎに、受信するための命令の関数の説明がります。
http://members.jcom.home.ne.jp/toya.hiroshi/wins …
bufが受信するためのデータ領域のアドレス
lenが受信できる長さ
で受信できる長さ以上のデータが来た場合には、エラーとなり、WSAEMSGSIZEになります。
対策としては、上記に次の対策がかかれています。
「残りの部分を読みとるにはじゅうぶん大きなメモリをこの関数に渡してください。」
TCPレベルでは、TCP間で送受信の大きさが制御されます。
次の第37回から第43回を参照してください。
http://www5e.biglobe.ne.jp/~aji/3min/
後は、受信側のTCPでは、受信した大きさごとにbufで示されるアドレスに順番に格納し、
受信し終わったら、受信命令が終了したことを通知する。
回答ありがとうございました。
アプリケーションレベルでもバッファが存在するのですね。
2個目のリンクのあたりの情報は知っているつもりですが、アプリケーションレベルのことはよくわかりませんでした。
時間があるときにもう少し詳しく読んでみようと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Thunderbirdの「メッセージ作成...
-
Thunderbirdで最近頻繁にサーバ...
-
サンダーバードの容量がいっぱい?
-
パソコンの電源を切っている時...
-
Thunderbirdで受信日時を表示す...
-
受信機のアイコムIC-R6とIC-R5...
-
受信改造済みのIC-R6を持ってい...
-
光ビーコンの故障??
-
MS Outlookで同じメールを何回...
-
アウトルックの【受信日時】バ...
-
EdMaxが巡回してくれません
-
アウトルック2003の受信エラー...
-
Thunderbirdで同じメールが2通...
-
同じメール。 メールサイズが...
-
Gmailの受信につきまして。
-
メールの送信がエラーになる
-
受信メールに直に書き込む方法
-
件名無しの本文無しの空メール...
-
outlookの返信済みマークが出ない
-
Thunderbirdの既にあるメールの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Thunderbirdの「メッセージ作成...
-
Thunderbirdで最近頻繁にサーバ...
-
NHK受信料 受信機設置してる SN...
-
受信改造済みのIC-R6を持ってい...
-
サンダーバードの容量がいっぱい?
-
受信機のアイコムIC-R6とIC-R5...
-
Thunderbirdで接続のタイムアウト
-
Thunderbirdで受信日時を表示す...
-
パソコンの電源を切っている時...
-
一度受信したメールってまだサ...
-
サンダーバードで受信トレイで...
-
突然、Becky!でGmailが受信でき...
-
MozillaのThunderbird 3を使い...
-
電子申請などの受付期限につい...
-
Thunderbirdで同じメールが2通...
-
メールの受信日時を変更する方法
-
メール送信時刻がマイナス9時間
-
sylpheedについて
-
アウトルックの【受信日時】バ...
-
NEC VALUESTAR のテレビ リモ...
おすすめ情報