今回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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- ガラケー・PHS SMSメールの受信遅延原因はガラケー自体の欠陥では 8 2022/08/06 11:46
- UNIX・Linux Ubuntuサーバーでメールを受信できない 7 2022/08/23 20:55
- 固定IP スマホやPCのIPアドレスについて教えてください。 5 2023/07/07 19:53
- その他(メールソフト・メールサービス) 複数のメールを送信した順と受信した順が違うのは何故? 4 2023/02/22 09:58
- Gmail gmailで独自ドメインアドレスのメールが届かない件 1 2023/08/25 23:24
- 運転免許・教習所 車の運転で右折。 普通の信号、矢印信号 右折で前に続いて進む時、普通の信号の場合 交差点内で止まって 6 2022/09/25 18:49
- 大学・短大 通信制大学の試験の不正行為について 私は通信制大学に通っており、先日オンラインテストを受けました。あ 2 2023/06/25 16:21
- 運輸業・郵便業 請求書の郵送方法について教えてください 5 2023/03/27 10:43
- 哲学 《信じる》とは何か?――人びとは 哲学する気がないらしい 2 2022/10/14 19:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Outlookの「受信日時」「件名」...
-
TCPのプログラミングで質問…と...
-
PC98で232c送信winndowで受信で...
-
DHCPOFFERの受信について
-
TCP/IP のパケットの分断と結合...
-
VBのMSCommコントロールを使っ...
-
recv関数の戻り値について
-
シリアル通信
-
UDP受信時の通信異常検知について
-
シリアル通信時のデータ受信方法
-
パソコンに詳しい方教えて下さ...
-
バッチファイルでディレクトリ...
-
ノーマルクローズとノーマルオ...
-
ipadで社内ネットワークに接続
-
sendmail .ユーザ名.popとユー...
-
excel vba で 実行時エラー13...
-
postfixの.forwardでメールの転...
-
Windows上のファイル操作の履歴...
-
java.lang.NumberFormatExcepti...
-
CSVファイルのマッピング処理の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Outlookの「受信日時」「件名」...
-
Outlookの「受信日時」「送信者...
-
TCP/IP のパケットの分断と結合...
-
シリアル通信時のデータ受信方法
-
UDP受信時の通信異常検知について
-
RS232cを用いた送信プログラム
-
C#にてCTI。RS232Cの受信と送信...
-
VC++メッセージの送受信につい...
-
DHCPOFFERの受信について
-
TCPのプログラミングで質問…と...
-
ネットワークでの受信バイト数
-
パケット受信 recvfrom( )につ...
-
ASP.NET C#でPOST受信
-
recv関数の戻り値について
-
TCPでパケットロス?
-
PC98で232c送信winndowで受信で...
-
VB2005でTCP/IPソケット通信で...
-
「TCPは全二重可能」の意味
-
vb2005でUDP受信時にフォームが...
-
VBのMSCommコントロールを使っ...
おすすめ情報