2

さて、宿題についてこの質問があります。「ホストX」が「ホストZ」にパケットを送信し、Seq=46およびAck=87で、ペイロード/データ=「こんにちは?」

そこから、ペイロード='Go away'でホストZからホストXに送信されたパケットと、data ='No!'でホストXからホストZに送信された最後のパケットが与えられます。

宿題は、最後の2つのパケットのSeqとAckの値がどうなるかを調べることです。ハンドシェイクが終了したことを知っているので、Seqに1を追加して、次のパケットのAckに入れるほど簡単ではありません。ペイロードを受信すると、受信者は1 +ペイロードの長さ(バイト単位)に等しいAckを発行することをどこかで読みました。それが正しければ、これらの文字列をバイトに変換するにはどうすればよいですか?そして、Seqはどうなりますか?それはまだ前のパケットAckからまっすぐにつかまれていますか?

どうもありがとうございました。

各文字が1バイトに等しいと仮定して、先に進んで質問に答えます。間違っている場合は、誰かが私を訂正してくれることを願っています。

私が与えられたSeqとAckは、ハンドシェイクからの最初の送信であると想定しています。

X->Z Seq=45 Ack=NULL
X<-Z Seq=86 Ack=46
X->Z Seq=46 Ack=87

X->Z Seq=46 Ack=87 data='Hello?'  (6 bytes)
X<-Z Seq=87 Ack=52 data='Go away' (7 bytes)
X->Z Seq=52 Ack=94 data='No!'     (3 bytes)

それがすべてであり、上記の内容は正しいと思いますが、何か間違ったことをした場合はお知らせください。どうもありがとうございました。

4

1 に答える 1

1

Wiresharkをインストールしてプレイすることをお勧めします。個々のTCPセグメント、フラグ、およびデータを確認できます。しばらくすると、それがどのように機能するかを感じることができます。

あなたの答えは正しいと思います。理解を助けるために、このようにフラグとlenを追加することもできます。

X->Z [SYN]      Seq=45
X<-Z [SYN, ACK] Seq=86 Ack=46
X->Z [ACK]      Seq=46 Ack=87

X->Z [ACK]      Seq=46 Ack=87 Len=6 data='Hello?'  
X<-Z [ACK]      Seq=87 Ack=52 Len=7 data='Go away'
X->Z [ACK]      Seq=52 Ack=94 Len=3 data='No!'

アプリケーション層が他に何も投与しない場合でも、少なくとももう1つのシーケンスがあることに注意してください。

于 2012-07-03T22:24:51.533 に答える