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で質問しましょう!
似たような質問が見つかりました
- ネットワーク OSI参照モデルの各層の役割がわかりません。 3 2023/04/21 21:12
- その他(コンピューター・テクノロジー) 「プロトコル」の定義について 5 2023/04/16 13:13
- ガラケー・PHS 携帯電話の居場所信号の発信タイミング 3 2022/07/27 14:39
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- Windows 10 windows10 Onedrive保存容量を超えたデータ 5 2022/07/26 00:12
- ガラケー・PHS 22年前のガラケーの譲渡について 1 2022/07/03 22:27
- docomo(ドコモ) +メッセージの送受信。 au(uq mobile)のデータ回線でdocomoの電話番号の+メッセージ 2 2022/09/14 16:09
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Android(アンドロイド) 地上デジタル放送のワンセグ&フルセグに加えてBSやCSなどの衛星放送受信に対応したAndroid機種 3 2022/09/15 18:11
- Android(アンドロイド) Androidスマホのデータ移行が終わらない 1 2023/08/04 17:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
サンダーバードで受信トレイで...
-
Gmailのアカウントが消える : ...
-
Thunderbirdの「メッセージ作成...
-
MS Outlookで同じメールを何回...
-
ICOM IC-207のAM受信の方法
-
メーリングリストが届かない
-
Thunderbirdで同じメールが2通...
-
一度受信したメールってまだサ...
-
Thunderbirdで受信日時を表示す...
-
GetNamespaceで、コンパイルエラー
-
sylpheedについて
-
Thunderbirdで最近頻繁にサーバ...
-
受信メールに直に書き込む方法
-
Gmailで届いたメールが勝手に既...
-
gmail から docomo メールに送...
-
メールはthunderbirdを使用。差...
-
Outlook 転送をそのままの状態...
-
メールがエラーで帰ってきてし...
-
職場用のoutlookメールを自宅P...
-
サンダーバード(メーラー)で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Thunderbirdの「メッセージ作成...
-
Thunderbirdで受信日時を表示す...
-
パソコンの電源を切っている時...
-
Thunderbirdで同じメールが2通...
-
Becky:受信したメールを再度受...
-
Thunderbirdで最近頻繁にサーバ...
-
Gmailのアカウントが消える : ...
-
アウトルックの【受信日時】バ...
-
メール送信時刻がマイナス9時間
-
Thunderbirdで接続のタイムアウト
-
サンダーバードで受信トレイで...
-
GmailにてGmail以外のアドレス...
-
電子申請などの受付期限につい...
-
電話かかってくるだけ用の格安S...
-
ジャニーズWebに登録は出来たも...
-
FT-450でSWL(ゼネカバ受信)
-
メールのOutlookでパソコンでは...
-
助けて~~~VICSを受信しなく...
-
GetNamespaceで、コンパイルエラー
-
sylpheedについて
おすすめ情報