
はじめまして。5月よりTCPソケット通信を勉強しているものです。
クライアントとサーバーのプログラムを作り試行錯誤しながら動かしているのですが一つ不思議な現象が起きたので質問させて頂きます。
処理が終わり、通信を切断する時なのですが、ソケット通信に関連する書籍やWebページを見ていると接続を切断するときにFIN,ACKを送信して相手側がACKを送信し、FIN,ACKを送信して最後にACKを送信するとなっています。図にすると以下のような感じでしょうか。
PCA PCB
FIN,ACK送信 → FIN,ACK受信
ACK受信 → ACK送信
FIN,ACK受信 → FIN,ACK送信
ACK送信 → ACK受信
この手順でPCA,PCBともに切断されるとあるのですが、自分が作ったプログラムを実行させて、etherealでパケットをモニタリングすると以下のような状態で終わってしまいます。
PCA PCB
FIN,ACK送信 → FIN,ACK受信
FIN,ACK受信 → FIN,ACK送信
ACK送信 → ACK受信
PCAからのFIN,ACK受信に対してのACKの送信が省略されて、いきなりFIN,ACKを送信してしまいます。その後PCAからはACKが返されて終了となります。
プログラム的には希望通り動作しているので問題は無いのですが、なぜ途中のACKが省略されてしまうのか原因が知りたいです。また、自分の認識が間違っている場合のご指摘等頂ければと思います。
つたない文章で申し訳ありませんがご存知の方がいらっしゃいましたら教えて下さい。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
矢印が全部一緒の方向なので意図がつかみにくいのですが、質問内容はこういう事ですかね?
(以下、矢印はパケットの流れる方向を示す)
通常のTCPの停止は以下の手順のはずなのに対して、
PCA PCB
- FIN → (1)
← ACK → (2)
← FIN(,ACK) - (3)
- ACK → (4)
実際には以下のようになっている
PCA PCB
- FIN → (1')
← FIN,ACK - (2')
- ACK → (3')
その理由は?ということですね?
一言で言えば実装上そうなっているから、ということですが、もう少しかみ砕いて言えば、(2)のACKと(3)のACKは、両方とも(1)のFINに対するACKになります。
であれば、(2')の様に1つにまとめても不具合はない、ということになります。
納得いただけたでしょうか?
TCPの確立時も以下のような形ですよね?
PCA PCB
- SYN →
← SYN, ACK -
- ACK →
ちなみに、手元のPC UNIX機で確認したところ、セッション切断時は(1)~(4)の4WAYをとってました。
回答ありがとうございました。(2')のように1つにまとめても不具合はないのですね。
ただ、etherealでパケットをキャプチャした際、自作のプログラム以外のプログラムの通信は全て(1)~(4)の切断方法だったので、なぜ自分のプログラムだけ中途半端なのか?と思っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- サーバー 接続・ログインはできているのにメールが送信できない 2 2022/06/27 15:03
- その他(メールソフト・メールサービス) メールサーバーは「PC側がメールをDL済みか否か?」を何を以て感知するのか? 2 2022/12/20 14:56
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- その他(メールソフト・メールサービス) サンダーバードでメールが受信されない 10 2022/03/24 17:00
- その他(メールソフト・メールサービス) 複数のメールを送信した順と受信した順が違うのは何故? 4 2023/02/22 09:58
- ガラケー・PHS SMSメールの受信遅延原因はガラケー自体の欠陥では 8 2022/08/06 11:46
- Outlook(アウトルック) メール送信できない 3 2022/07/20 09:07
- Gmail gmailで独自ドメインアドレスのメールが届かない件 1 2023/08/25 23:24
- Outlook(アウトルック) 未読ならば受信トレイから削除する 2 2023/02/12 19:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Bcc 重複で送信しても大丈夫?
-
メールのヘッダーに書かれてい...
-
Thunderbirdで返信するとき左側...
-
beckyでのメール自動送信は可能...
-
Mail Distributorで送信エラー
-
海外へEメールが到着する時間に...
-
アウトルックエクスプレスのエ...
-
DICOMビューアー OsiriXの設定方法
-
Radishの使い方
-
添付ファイルの破損
-
becky リマインダ停止
-
Eメールの送信のみがエラーにな...
-
メールアドレスを間違って送信...
-
Outlookの会議出席依頼メール
-
メールの時刻表示は何処の時刻?
-
Androidのスマホで4Gの横にある...
-
大量のメールが送信されてしまう
-
メールの受信時刻について・・・
-
メールの送信、受信時間について
-
同じ内容のメールが同時刻に複...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Thunderbirdで返信するとき左側...
-
Outlookの会議出席依頼メール
-
Bcc 重複で送信しても大丈夫?
-
beckyでのメール自動送信は可能...
-
Gmailで送信したメールを受信ト...
-
メールの受信時刻について・・・
-
会社でメール送受信できるPC...
-
メールの送信、受信時間について
-
Androidのスマホで4Gの横にある...
-
メールの時刻表示は何処の時刻?
-
システム管理者 配信不能
-
becky リマインダ停止
-
メールアドレスを間違って送信...
-
受信日時があり得ない日時(未...
-
メールのヘッダーに書かれてい...
-
添付ファイルのファイル名の文...
-
海外へEメールが到着する時間に...
-
Mail Distributorで送信エラー
-
同じ内容のメールが同時刻に複...
-
Thunderbirdの送信日時表示がお...
おすすめ情報