TCPクライアントがシーケンス番号10000から20000のパケットをTCPサーバーに送信する場合。tcpはseq_ack 20001でACKで応答します。
クライアントからTCPパケットをインターセプトし、パケットを2つのTCPセグメントに分割すると、1つは10000から15000までのseq、もう1つは15001から20000のseqを持ちます。そして、これら2つのTCPセグメントはTCPサーバーに送信されます。2番目のセグメントがパスで失われたと仮定します。TCPサーバーはseq_ack 15001でACKに応答します。
TCPクライアントはseq 10000から20000でインテグラルパケットを送信しますが、クライアントの観点からは15001でACKを取得するため、これは奇妙です。どのように反応しますか?理論的には、クライアントはバイトをseq 15001から20000に再送信する必要があります。つまり、クライアントはseq 15001から新しいパケットを送信します。
TCP送信バッファでは、tcpセグメントが送信されたときに、ACKまでセグメントがそこにとどまると思います。ACKが来ると、セグメントのこれらのバイトはバッファからクリアされます。送信バッファーにポインターがあり、ACKが来ると、ポインターはack_seqが対応する場所を指します。ack_seqの下にあるバイトはクリアされます。このようにして、セグメント全体を再送信する必要はありませんか?