
今回winsockを使った通信プログラムを組む事になったのですが、わからない点が多々ありましたので、どなたかご教授頂けると大変ありがたいです。
1. TCP通信において、送信側が"Hoge" "Fuga"と2回sendした際、受信側でrecvすると"Ho" "geFu" "ga"と3回受信する可能性があると認識しているのですが、これは正しいでしょうか?
(到着する順序は保証されるが、recvする際に送信側がどのようにsendしたかは考慮されない)
2. UDP通信においては、上記のような現象は起きないと認識しているのですが、これは正しいでしょうか?
(UDP通信では、2回sendすれば2回以上はrecvしない。パケットの破棄はあっても、分割はない)
3. もしUDP通信でも上記のような現象が起きる場合、到着順序の保証がされないという観点から、recvした際に"Ho" "ga" "geFu"と受信する事はあり得るのでしょうか?
4. 2が正しい前提での話です。UDP通信では、MTUを超えた場合、自動でパケットが分割されると聞きました。プログラムを組む際、これは意識しないといけないのでしょうか?
(MTUが1500Byteの場合、UDPで2000Byteをsendすると、recvで1500,500と2回受信する?)
以上の4点です。
どなたかご存知の方いらっしゃいましたら、是非ご教授ください。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
1.正しい
TCPはバイトストリームを送ります。バイト順は保障しますがパケットの単位は考慮されません。
2.概ね正しい
UDPはパケットを送ります。パケットを勝手に分割したり結合したりはしません。ただし同じパケットが複数回受信されることはあるので送信回数より多く受信する可能性は排除できません。
3.ない
ただしパケット単位での到着順は保障されません。
4.動作としては意識する必要はない
途中のIPパケットは分割されても、UDPで再構成した上で受信します。再構成できない場合はパケットの一部が受信されるのではなくパケット全体が破棄され受信されません。
ただし、上記により大きなパケットは届きにくいのでほとんどの場合にUDPは小さいサイズで送ります。そういう意味では意識する必要があります。
No.1
- 回答日時:
>受信側でrecvすると"Ho" "geFu" "ga"と3回受信する可能性があると認識しているのですが、これは正しいでしょうか?
1回で受信する場合もあります。
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/articles/ …
>(到着する順序は保証されるが、recvする際に送信側がどのようにsendしたかは考慮されない)
概ね合っている…かと。
# 順序だけでなく、通信エラーがあった場合の再送処理なども保証されます。
# ドライバが処理しているのでプログラム側では判りませんが。
>(UDP通信では、2回sendすれば2回以上はrecvしない。パケットの破棄はあっても、分割はない)
分割に関しては不明(UDP使ったことないので)ですが…
同じパケットを複数回受信することもある…らしいです。
>3. もしUDP通信でも上記のような現象が起きる場合、到着順序の保証がされないという観点から、recvした際に"Ho" "ga" "geFu"と受信する事はあり得るのでしょうか?
ありえる。
と考えておいたほうがよい…かと。
>UDP通信では、MTUを超えた場合、自動でパケットが分割されると聞きました。プログラムを組む際、これは意識しないといけないのでしょうか?
意識すべし…なのかも知れませんが…。
下層でのデータフレームのサイズに関して、どこまで考慮すべきなのか…は不明です。
PPPの場合もあったりするでしょうし。
http://www.kt.rim.or.jp/~ksk/wskfaq-ja/intermedi …
とりあえず、よろしく処理してくれる…らしいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Replace関数について教えて...
-
DLLファイルの逆コンパイラにつ...
-
逆コンパイルと逆アセンブルの...
-
CSSが全く分かりません、お助け...
-
バッチファイルで以下のような...
-
gccを行ってもexeファイルが生...
-
プログラマー達は何故、プログ...
-
VisualStudio2022でC言語プログ...
-
Windows Formアプリからコンソ...
-
C# で 数式文字列処理を処理す...
-
C言語のことです。写真(見にく...
-
Cのプログラムからアクセスでき...
-
C#でTreeViewのCheckBoxのサイ...
-
次の日本語の意味を教えて下さい
-
c#のTLS1.2での通信について
-
visual studio 2022でのC#プロ...
-
C言語の関数のextern宣言
-
PIC12F1822でLED調光器を作りたい
-
最初に聞かれたこと
-
C言語 関数、変数の宣言について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP のパケットの分断と結合...
-
Outlookの「受信日時」「件名」...
-
Outlookの「受信日時」「送信者...
-
UDP受信時の通信異常検知について
-
recv関数の戻り値について
-
ネットワークでの受信バイト数
-
CRC-CCITTに関しての仕様とサン...
-
Excxel vba でYahoo API で住所...
-
TCPのプログラミングで質問…と...
-
VBのMSCommコントロールを使っ...
-
スレッドの一時停止と再開について
-
パケット受信 recvfrom( )につ...
-
RS232cを用いた送信プログラム
-
PC98で232c送信winndowで受信で...
-
Perl / IO::Socketによる送受信...
-
DHCPOFFERの受信について
-
VB2010で、シリアル通信の方法...
-
Readメソッドが次の行に処理を...
-
シリアル通信時のデータ受信方法
-
VC++ 2010 メッセージが文字化...
おすすめ情報