コメントに返信

RSTパケットが送信される件について報告致します。

先生のご指摘通りでした。。。
プログラムにsleep(20)を入れながらどこでRSTパケットを出力しているか探しました。
2つの条件が重なった時に発生しました。条件は、最初のコネクションの通信が終わりPCから FINパケットを出力するした後、PCから次のコネクションが始まった状態の時にソケットをクローズするとRTSパケットがLinux組込機から出力されました。

    PC         Linux組込(port 9000)
 (port 1132)----- SYN  ---> 
     <-3ステートハンドシェーク ->
     <---  データ通信 ---> 
  
     --- FIN/ACK ------> 
 
(port 1133)--- SYN       --->(9000)    
      <- 3ステートハンドシェーク ->
      <---  データ通信 --->
通信途中に ひとつ前のパケットが交る 
(port 1132) < --- FIN ACK ---  (9000)
         ---- ACK   --->
                           ソケットクローズ   
  port 1133 <--- RST・ACK ---       <---+

現状の処理は以下の繰り返しでした。
socket()-->bind()-->Listen()-->accept()-->read()/send()-->close(accept)-->close(sokect) 
組込機側の処理として 
  syn--> read()-->send() -->Fin の時は問題はありませんでした。しかし、2つのコマンド(別のポート)がPCから連続して送られてくると最初のパケットの処理が終了する前にTCPソケットは2つ目のパケットの処理を初めていました。その状態でアプリケーションが最初のパケット通信のソケットをクローズするとTCPソケットがRSTパケットを送信していました。

以上 先生の的確なアドバイス大変助かりました。ありがとうございます。

 今日も「基礎からわかるネットワーク入門」のFTPの仕組みに助けられました。

返信

このフィールドの内容は非公開にされ、公表されることはありません。
  • 行と段落は自動的に折り返されます。

書式オプションに関するより詳しい情報...

画像認証
機械的なスパムメッセージ送信を防止するために画像認証を設けています。ご協力ください。
Image CAPTCHA
Enter the characters shown in the image.