2016-09-12 6 views
0

初心者質問:誰が正確にACK、トランスポート層またはアプリを送信しますか?パーティクルカウンターを持つCOMサーバーを使用して、アプリケーションにデータを送信します。時々私は失われたデータを持っています。 Wiresharkプロトコルをチェックすると、パケットはCOMサーバーから送信されたが、受信者からのACKは失敗したことがわかります。私のプログラムにはエラーがあり、データを適切に編集できないため、ACKが欠落していると思います。私の同僚は、インターフェイス(ソケット)は単にデータを取得せず、ACKを返すことができないと言います。誰が正しい?TCP/IP ACK送信者:トランスポート層またはアプリですか?

答えて

2

TCPはトランスポート層プロトコルです。 ACKはTCPの一部です。したがって、ACKはトランスポート層の一部であり、そこに送信されます。

トランスポート層(つまり、ユーザー空間のTCP実装)を含むアプリがあるかもしれません。その場合、ACKはアプリケーションによって送信されますが、アプリケーション層ではなくトランスポート層に送信されます。しかし、ほとんどの場合、TCPはカーネルに実装されているため、アプリの外にあります。これらのレイヤーの詳細については、OSI or TCP/IP modelを参照してください。

私の同僚は、インターフェイス(ソケット)は単にデータを取得せず、ACKを返すことができないと言います。誰が正しい?

ユーザー空間TCP実装を使用していないと仮定すると、OSカーネルは、これらのデータがアプリケーションのソケットバッファに入れられるとすぐにデータをACKします。ソケットバッファにパケットを書き込めなかった場合、つまりアプリケーションがデータを読み取れなかったためにソケットバッファがいっぱいになった場合、パケットをACKしません。この場合、ピアはもはやデータを送信しないようにウィンドウを縮小します。

+0

TCPリファレンスモデルを参照してください。 OSIモデルは存在しません。現実の世界の何かを参照するのではなく、参照モデルが時間的に先行するTCPはもちろんのことです。 – EJP

関連する問題