• ベストアンサー
  • 困ってます

TCPのsynとかっていつ・何回位するのでしょうか

ネットワークの勉強中の中年です。 入門編のTCP/IPですが、コネクション確立(syn→ack/syn→syn)などは 普通に手動で作業をする場合、いつ、何回位されるのでしょうか。 たとえばftpなどですが、 もちろん最初にクライアントからサーバーに接続する際にはとは思うのですか、 パスワードを送るたび、ファイルを送受信するたびに行うものなのでしょうか。 また、finを送るのは、byeでftpを閉じる時でしょうか。 パスワードの送信後とか、ファイルのやり取り後といったタイミングで 発生するのでしょうか。 それともパケットトレースで見るように1秒間に何十回というように されるものなのでしょうか。 挙動についていろいろ資料等があるのですが、 実際に使っているイメージではいつ何をしているかわからず… よろしくお願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数312
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • notnot
  • ベストアンサー率47% (4601/9658)

TCPセッション確立時にsynを交換して、セッション解放時にfinします。 ftpはやや特殊で、 ・制御用セッション  openコマンドでホストにつなぎに行くときに確立して、byeやquitで解放  下記のデータ用セッション以外のやりとり(コマンドのやりとり等)はこのセッションを使う ・データ用セッション  1つのファイルのデータ送受信ごとに確立して、転送終了時に解放  ls/dir コマンドの結果もファイルとして転送されるので、ls/dir の結果表示毎に確立&解放 telnet/sshなどは、セッションはログアウトするまで1つで、最初に確立して、ログアウトで解放。 httpは、古く(HTTP/1.0)はGETやPOSTの1リクエスト毎にセッション確立&解放。 HTTP/1.1になってからは、1つのTCPセッションで複数のGET/POSTリクエストを連続して行えるようになりました。 TCP/IPの入門書には載ってると思うのですが。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

notnot様 ご回答ありがとうございます。 >openコマンドでホストにつなぎに行くときに確立して、byeやquitで解放 >1つのファイルのデータ送受信ごとに確立して、転送終了時に解放 >ls/dir の結果表示毎に確立&解放 >telnet/sshなどは、セッションはログアウトするまで1つ >1リクエスト毎にセッション確立&解放 かなりイメージがつかめました! TCP/IPの入門書は…見ているのですが、 上記の肝心な部分がつかめないでおりました。 (例えばgoogle等で検索しても「telnet fin ack」とかで検索しても、ぜんぜん見たい教えていただいたような内容にたどり着かないのです) 十分な回答をいただきました。 こちらは〆させていただきます。 ありがとうございました。

関連するQ&A

  • TCPの接続処理と終了処理について

    TCPでコネクションを確立するとき、制御フラグでSYN、SYN+ACK、ACKで3パケットをやりとしますが、終了手順のときは、FIN、ACK、FIN、ACKと4パケットをやりとりします。 これは何故でしょうか? コネクション確立時と同じく、FIN、FIN+ACK、ACKにしないのは何故でしょうか?教えてください。

  • TIME_WAIT 時の振る舞い

    現在、詳解 TCP/IP Vol.1 の第 18 章を読んでいます. P.275 の 2MSL 待ち状態の説明なのですが, 「MSL 値を実装する場合のルールは,TCP がアクティブクローズを実行し,最後の ACK を送ったとき,コネクションは MSL が2回繰り替えされる時間だけ TIME_WAIT に止まっていなければいけないというものだ.これにより,最後の ACK が消失した場合(この場合,他方のエンドはタイムアウトし,最後の FIN を再転送する)でも,TCP は再度 ACK を送ることが可能になる」 「コネクションが 2MSL 待ちにあるときに遅れて到着したセグメントは、いかなるものでも破棄される」 と書いてあります. 前者にある,再転送された FIN も破棄されるのですか? 破棄されるのに,それに対する ACK を送ることは可能なのですか?可能と書いてあるだけで,実際には,再転送された FIN に対する ACK は送られないということでしょうか? そこがいまいち理解できません.いくつか調べたのですが,そこのところを詳しく書いてあるものは見当たりませんでした‥.

  • HTTP GET直後のFIN,ACKについて

    ある特定のサイトをWebアクセスした際のWiresharkトレースを解析しています。 そのWebサイトにはTwitterのAPIが埋め込まれていて、Twitterのアイコンを取得するためにJPGファイルを取得しているTCPセッションがあります。 3WAYハンドシェイクの後、クライアントはHTTP GETでJPGファイルを要求しているのですが、直後にFIN,ACKフラグを伴うパケットを送出しています。 クライアントは自らHTTP GETしておきながら、JPGファイルを受け取る前にTCPセッションを終了しようとするのは理解しがたいと思っています。 このようにHTTP GET直後にFIN,ACKフラグをつけるような挙動をみせるのはどのような状況が予想されるでしょうか?

  • 3wayハンドシェイクによるSYN+ACKがNG

     ■接続状況  <クライアント(1)>──<L3SW(2)>──<LB(3)>──<VPN装置(4)>──~~──>   ─>──~~──<FTPサーバ(Solaris)(5)>  ■環境   (1):Linux(red hat v5.6)   (2):Catalyst L3SW   (3):LB(ロードバランサー:NAT変換含む)   (4):VPN装置   (5):対向先のFTPサーバ(Solaris)  ■業務接続状況   5分周期のバッチで動いている。   クライアント(1)⇒対向先(5)のFTPサーバに対して、FTP接続をしており   ファイルのrename等を実施している。(TCP接続)  ■障害状況   1ヶ月に2,3回の割合で、クライアントSVから対向先へのFTP接続において   FTPエラーが発生している。     ■調査状況   <各キャプチャ設定状況>   (1)クライアントSVにて、tcpdump取得、I/F調査の観点でNIC周り調査   (2)L3SWに対しては、ミラーポートキャプチャーをしかけ、キャプチャを採取   (3)LBに対しても、対象IPアドレス、ポートを絞ってネットワークキャプチャを採取    (4)VPNに対しても、対象IPアドレス、ポートを絞ってネットワークキャプチャを採取   FTPエラー時のパケットキャプチャを見ると、3Wayハンドシェイクにおける   対向先(5)からのSYN+ACKがクライアントSV(1)に届いていない状況が判明。   クライアントSVからのSYNに対して、対抗先のFTPサーバからの応答で   SYN+ACKがL3SW(2)から出力している(届いている)ところまでは確認済み。   途中経路のLB、VPN含め、パケットドロップ等のエラーカウントアップは   されていないのも確認。   肝心のクライアントSVのNICドライバー層を確認するもパケットドロップも   カウントしていない為、OSとしては、受け取っていない状況。      FTPエラー時のパケットを見ると、必ずクライアントSV側で5万台の   特定ソースポートで接続するときに限って、SYN+ACKが届いていないことが分かった。   他のPort取得時は正常にFTP処理されている。   ただし、OSやNW専門部署に確認するも特定Portのみ、3Wayハンドシェイクが   確立しないような設定や事例もないの見解を聞いており、手詰まり状態となっている。   特定のPortに関しては、クライアントSVのLinux(OS)が自動で採番できる   Port範囲からrandomで取得しているPort番号なのは分かっている。   また、その特定Port番号に関して、アプリ観点等で固定のPort指定や、   エラー発生前に違うプロセスが掴んでしまっているような   競合もとくに見受けられなかった。(定期的に取っているnetstatコマンドより)   似たような事象に陥った方で、何か手がかりになりそうなヒントがあれば   ご教授いただけると助かります。

  • パケットキャプチャについて

    パケットキャプチャについて wiresharkでパケットキャプチャをやっております。tcpでsynのパケットのみを収集したいのですが、現在では、 (1)ファイルの読み込み (2)フィルタの条件でtcp.flag.fin == 0 and tcp.fla.syn ==1 and tcp.flg.ack == 0 と入れフィルタリング。 (3)結果のファイルを保存 となって大変時間がかかります。cuiでコマンドライン上で一発ですませられる方法はありませんか?

  • openssh に ログインできない

    windows2008 server で ssh を使いたいために、 cygwin をインストールしました。 私のパソコンからは、何の問題もなく接続できるのですが、 一部のパソコンではパスワード要求の画面が表示されません。 いろいろ調べていくうち、 > telnet server 22 としたところ、 私のパソコンでは、  SSH-2.0-OpenSSH と、表示を返しますが、 接続できないパソコンでは、 何も返しません。 wireshark でパケットを調べましたら、 接続できないパソコンは、 SYN+ACK で接続した後、 FIN パケットを返しています。 サーバー側の問題か、クライアント側の問題か、 切り分けができていません。 何か想定できる原因を教えていただけませんでしょうか。

  • perlでFTP

    ローカルPCからPerlで記述されたプログラムを実行し、 FTPサーバーへファイルをアップロードするPerlプログラムを教えてください。 DOS上では、 ftp open ftpサーバー名 ユーザー名 パスワード put 送信するファイル bye となるのですが、それをPerlで記述すると、どのようになるのでしょうか?

    • ベストアンサー
    • Perl
  • ftpバイナリーモード転送バッチ

    zipファイルを転送するバッチを作りたいです。 ###################### 1.ftp 192.***.**.* 2.ID 3.パス 4.binary 5.put 6.bye 7.exit ###################### 上記のようにしようと思います。 条件としては *2.3のIDとパスワードは手入力 *その他は自動 そんなバッチ可能でしょうか?

  • shでftp⇒接続切らずに成否確認して削除可?

    ftpで多数のファイルを転送(put)したいです。 転送した後に転送エラーがないか確認し、 転送エラーがなければローカルのファイルを削除する、 ということを1ファイルずつ行いたいです。 ftpコマンドをヒアドキュメントやコマンドファイルを使用して実行する場合、 転送エラーがあったかどうかは、ftpの出力結果を見ないと分からないので、 いったんftpコマンドを終了する必要があると思います。 そうすると、1ファイルずつftpのコネクションを張りなおさないとならないので、 WAN経由での接続を考慮すると相当効率が悪いと思うのですが、 接続を切らずに実現することは可能でしょうか。 理想案: 転送先にftp接続 すべての対象ファイルに対し、  ┣ファイルをput  ┗putが成功したら   ┗ファイルを削除 ftp接続を切断 現実案: すべての対照ファイルに対し、  ┣転送先にftp接続  ┣ファイルをput  ┣ftp接続を切断  ┗putが成功したら   ┗ファイルを削除 現実案の実装だと、こんな感じかと思います。 実際に動かしてないので、間違いあるかもですが。 for file in `ls` do  ftp -n ${hostname} > ftp.log << _EOF   user ${user} ${pass}   put ${file}   bye  _EOF  if [ `grep "err" ftp.log` ]; then   exit 1;  else   rm -f ${file}  fi done  

  • ftp処理でmove(移動)を行いたい

    バッチ処理でデータをftp受信しています。 --------------------------- ユーザ名 パスワード prompt mget abc*.log mdelete abc*.log bye --------------------------- このようなコマンドを行っています。 ftpサーバにはさまざまなファイルが随時生成されます。 この処理では定期的に abcで始まる全てのログファイルをgetし、 abcで始まる全てのログファイルをdeleteしています。 ところが、abcで始まるファイルの生成がランダムのため、 偶然mgetが終わった後でファイルが生成され、 mdeleteを行うと、getしていないファイルまで削除される恐れがあるのです。 そのため、一件ずつ移動を行いたいのですが、 調べてもmoveのようなコマンドがftpで見当たらないのですが なにか、moveに置き換わるような処理はないでしょうか? *windows同士の通信です。